From aeda0aad781fd344f27d594114f5c4aa59435b21 Mon Sep 17 00:00:00 2001 From: Jordi Baylina Date: Wed, 24 May 2023 12:23:35 +0200 Subject: [PATCH] Fix circular reference and build --- build/cli.cjs | 3912 +++-- build/main.cjs | 3968 +++-- build/snarkjs.js | 36930 ++++++++++++++++++++++++++++----------- build/snarkjs.min.js | 4 +- src/plonk.js | 16 - src/plonk_constants.js | 16 + src/plonk_prove.js | 2 +- 7 files changed, 31009 insertions(+), 13839 deletions(-) create mode 100644 src/plonk_constants.js diff --git a/build/cli.cjs b/build/cli.cjs index 0a60da0..d37f141 100755 --- a/build/cli.cjs +++ b/build/cli.cjs @@ -3888,7 +3888,7 @@ async function readHeaderPlonk(fd, sections, toObject) { zkey.domainSize = await fd.readULE32(); zkey.power = log2(zkey.domainSize); zkey.nAdditions = await fd.readULE32(); - zkey.nConstrains = await fd.readULE32(); + zkey.nConstraints = await fd.readULE32(); zkey.k1 = await fd.read(n8r); zkey.k2 = await fd.read(n8r); @@ -6157,6 +6157,11 @@ async function groth16Verify$1(_vk_verifier, _publicSignals, _proof, logger) { const IC = new Uint8Array(curve.G1.F.n8*2 * publicSignals.length); const w = new Uint8Array(curve.Fr.n8 * publicSignals.length); + if (!publicInputsAreValid$1(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } + for (let i=0; i. */ -const {stringifyBigInts: stringifyBigInts$2} = ffjavascript.utils; -const { keccak256: keccak256$2 } = jsSha3__default["default"]; -async function plonk16Prove(zkeyFileName, witnessFileName, logger) { - const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils__namespace.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23); +class Proof { + constructor(curve, logger) { + this.curve = curve; + this.logger = logger; - const wtns = await readHeader(fdWtns, sectionsWtns); - - const {fd: fdZKey, sections: sectionsZKey} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23); - - const zkey = await readHeader$1(fdZKey, sectionsZKey); - if (zkey.protocol != "plonk") { - throw new Error("zkey file is not plonk"); + this.resetProof(); } - if (!ffjavascript.Scalar.eq(zkey.r, wtns.q)) { - throw new Error("Curve of the witness does not match the curve of the proving key"); + resetProof() { + this.polynomials = {}; + this.evaluations = {}; } - if (wtns.nWitness != zkey.nVars -zkey.nAdditions) { - throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}, ${zkey.nAdditions}`); - } - - const curve = zkey.curve; - const Fr = curve.Fr; - const G1 = curve.G1; - const n8r = curve.Fr.n8; - - if (logger) logger.debug("Reading Wtns"); - const buffWitness = await binFileUtils__namespace.readSection(fdWtns, sectionsWtns, 2); - // First element in plonk is not used and can be any value. (But always the same). - // We set it to zero to go faster in the exponentiations. - buffWitness.set(Fr.zero, 0); - const buffInternalWitness = new ffjavascript.BigBuffer(n8r*zkey.nAdditions); - - await calculateAdditions(); - - let A,B,C,Z; - let A4, B4, C4, Z4; - let pol_a,pol_b,pol_c, pol_z, pol_t, pol_r; - let proof = {}; - - const sigmaBuff = new ffjavascript.BigBuffer(zkey.domainSize*n8r*4*3); - let o = sectionsZKey[12][0].p + zkey.domainSize*n8r; - await fdZKey.readToBuffer(sigmaBuff, 0 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*4 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*8 , zkey.domainSize*n8r*4, o); - - const pol_s1 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s1, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p); - - const pol_s2 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s2, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 5*zkey.domainSize*n8r); - - const PTau = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 14); - - - const ch = {}; - - await round1(); - await round2(); - await round3(); - await round4(); - await round5(); - - - /////////////////////// - // Final adjustments // - /////////////////////// - - proof.protocol = "plonk"; - proof.curve = curve.name; - - await fdZKey.close(); - await fdWtns.close(); - - let publicSignals = []; - - for (let i=1; i<= zkey.nPublic; i++) { - const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); - publicSignals.push(ffjavascript.Scalar.fromRprLE(pub)); - } - - proof.A = G1.toObject(proof.A); - proof.B = G1.toObject(proof.B); - proof.C = G1.toObject(proof.C); - proof.Z = G1.toObject(proof.Z); - - proof.T1 = G1.toObject(proof.T1); - proof.T2 = G1.toObject(proof.T2); - proof.T3 = G1.toObject(proof.T3); - - proof.eval_a = Fr.toObject(proof.eval_a); - proof.eval_b = Fr.toObject(proof.eval_b); - proof.eval_c = Fr.toObject(proof.eval_c); - proof.eval_s1 = Fr.toObject(proof.eval_s1); - proof.eval_s2 = Fr.toObject(proof.eval_s2); - proof.eval_zw = Fr.toObject(proof.eval_zw); - proof.eval_t = Fr.toObject(proof.eval_t); - proof.eval_r = Fr.toObject(proof.eval_r); - - proof.Wxi = G1.toObject(proof.Wxi); - proof.Wxiw = G1.toObject(proof.Wxiw); - - delete proof.eval_t; - - proof = stringifyBigInts$2(proof); - publicSignals = stringifyBigInts$2(publicSignals); - - return {proof, publicSignals}; - - async function calculateAdditions() { - const additionsBuff = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 3); - - const sSum = 8+curve.Fr.n8*2; - - for (let i=0; i0)&&(Fr.isZero(p.slice(deg*n8r, deg*n8r+n8r)))) deg--; - return deg; - } - - function printPol(P) { - const n=(P.byteLength/n8r); - console.log("["); - for (let i=0; i { + const value = this.curve.G1.toObject(this.polynomials[key]); + if(splitFields) { + res.polynomials[key] = value; + } else { + res[key] = value; } - console.log("]"); + }); + + Object.keys(this.evaluations).forEach(key => { + const value = this.curve.Fr.toObject(this.evaluations[key]); + if(splitFields) { + res.evaluations[key] = value; + } else { + res[key] = value; + } + }); + + return res; + } + + fromObjectProof(objectProof) { + this.resetProof(); + + Object.keys(objectProof.polynomials).forEach(key => { + this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); + }); + + Object.keys(objectProof.evaluations).forEach(key => { + this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); + }); + } +} + +/* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const { keccak256 } = jsSha3__default["default"]; + +const POLYNOMIAL = 0; +const SCALAR = 1; + +class Keccak256Transcript { + constructor(curve) { + this.G1 = curve.G1; + this.Fr = curve.Fr; + + this.reset(); + } + + reset() { + this.data = []; + } + + addPolCommitment(polynomialCommitment) { + this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); + } + + addScalar(scalar) { + this.data.push({type: SCALAR, data: scalar}); + } + + getChallenge() { + if(0 === this.data.length) { + throw new Error("Keccak256Transcript: No data to generate a transcript"); } - */ - if (logger) logger.debug("phse3: Reading QM4"); - const QM4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QM4, 0 , zkey.domainSize*n8r*4, sectionsZKey[7][0].p + zkey.domainSize*n8r); + let nPolynomials = 0; + let nScalars = 0; - if (logger) logger.debug("phse3: Reading QL4"); - const QL4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QL4, 0 , zkey.domainSize*n8r*4, sectionsZKey[8][0].p + zkey.domainSize*n8r); + this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); - if (logger) logger.debug("phse3: Reading QR4"); - const QR4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QR4, 0 , zkey.domainSize*n8r*4, sectionsZKey[9][0].p + zkey.domainSize*n8r); + let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); + let offset = 0; - if (logger) logger.debug("phse3: Reading QO4"); - const QO4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QO4, 0 , zkey.domainSize*n8r*4, sectionsZKey[10][0].p + zkey.domainSize*n8r); + for (let i = 0; i < this.data.length; i++) { + if (POLYNOMIAL === this.data[i].type) { + this.G1.toRprUncompressed(buffer, offset, this.data[i].data); + offset += this.G1.F.n8 * 2; + } else { + this.Fr.toRprBE(buffer, offset, this.data[i].data); + offset += this.Fr.n8; + } + } - if (logger) logger.debug("phse3: Reading QC4"); - const QC4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QC4, 0 , zkey.domainSize*n8r*4, sectionsZKey[11][0].p + zkey.domainSize*n8r); + const value = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); + return this.Fr.e(value); + } +} - const lPols = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 13); +/* + Copyright 2022 iden3 association. - const transcript3 = new Uint8Array(G1.F.n8*2); - G1.toRprUncompressed(transcript3, 0, proof.Z); + This file is part of snarkjs. - ch.alpha = hashToFr(transcript3); + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. - if (logger) logger.debug("alpha: " + Fr.toString(ch.alpha)); + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ - const Z1 = [ +class MulZ { + static getZ1(Fr) { + return [ Fr.zero, Fr.add(Fr.e(-1), Fr.w[2]), Fr.e(-2), Fr.sub(Fr.e(-1), Fr.w[2]), ]; + } - const Z2 = [ + static getZ2(Fr) { + return [ Fr.zero, Fr.add(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), Fr.e(4), Fr.sub(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), ]; + } - const Z3 = [ + static getZ3(Fr) { + return [ Fr.zero, Fr.add(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), Fr.e(-8), Fr.sub(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), ]; - const T = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - const Tz = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - - let w = Fr.one; - for (let i=0; i (zkey.domainSize*3 -4) ) { - if (!Fr.isZero(a)) { - throw new Error("T Polynomial is not divisible"); - } - } - } - - if (logger) logger.debug("ifft Tz"); - const tz = await Fr.ifft(Tz); - for (let i=0; i (zkey.domainSize*3 +5) ) { - if (!Fr.isZero(a)) { - throw new Error("Tz Polynomial is not well calculated"); - } - } else { - t.set( - Fr.add( - t.slice(i*n8r, (i+1)*n8r), - a - ), - i*n8r - ); - } - } - - pol_t = t.slice(0, (zkey.domainSize * 3 + 6) * n8r); - - // t(x) has degree 3n + 5, we are going to split t(x) into three smaller polynomials: - // t'_low and t'_mid with a degree < n and t'_high with a degree n+5 - // such that t(x) = t'_low(X) + X^n t'_mid(X) + X^{2n} t'_hi(X) - // To randomize the parts we use blinding scalars b_10 and b_11 in a way that doesn't change t(X): - // t_low(X) = t'_low(X) + b_10 X^n - // t_mid(X) = t'_mid(X) - b_10 + b_11 X^n - // t_high(X) = t'_high(X) - b_11 - // such that - // t(X) = t_low(X) + X^n t_mid(X) + X^2n t_high(X) - - // compute t_low(X) - let polTLow = new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r); - polTLow.set(t.slice(0, zkey.domainSize * n8r), 0); - // Add blinding scalar b_10 as a new coefficient n - polTLow.set(ch.b[10], zkey.domainSize * n8r); - - // compute t_mid(X) - let polTMid = new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r); - polTMid.set(t.slice(zkey.domainSize * n8r, zkey.domainSize * 2 * n8r), 0); - // Subtract blinding scalar b_10 to the lowest coefficient of t_mid - const lowestMid = Fr.sub(polTMid.slice(0, n8r), ch.b[10]); - polTMid.set(lowestMid, 0); - // Add blinding scalar b_11 as a new coefficient n - polTMid.set(ch.b[11], zkey.domainSize * n8r); - - // compute t_high(X) - let polTHigh = new ffjavascript.BigBuffer((zkey.domainSize + 6) * n8r); - polTHigh.set(t.slice(zkey.domainSize * 2 * n8r, (zkey.domainSize * 3 + 6) * n8r), 0); - //Subtract blinding scalar b_11 to the lowest coefficient of t_high - const lowestHigh = Fr.sub(polTHigh.slice(0, n8r), ch.b[11]); - polTHigh.set(lowestHigh, 0); - - proof.T1 = await expTau(polTLow, "multiexp T1"); - proof.T2 = await expTau(polTMid, "multiexp T2"); - proof.T3 = await expTau(polTHigh, "multiexp T3"); - - function mul2(a,b, ap, bp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - r = a_b; - - let a0 = Fr.add(a_bp, ap_b); - - let a1 = ap_bp; - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - } - - return [r, rz]; - } - - function mul4(a,b,c,d, ap, bp, cp, dp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - const c_d = Fr.mul(c,d); - const c_dp = Fr.mul(c,dp); - const cp_d = Fr.mul(cp,d); - const cp_dp = Fr.mul(cp,dp); - - r = Fr.mul(a_b, c_d); - - let a0 = Fr.mul(ap_b, c_d); - a0 = Fr.add(a0, Fr.mul(a_bp, c_d)); - a0 = Fr.add(a0, Fr.mul(a_b, cp_d)); - a0 = Fr.add(a0, Fr.mul(a_b, c_dp)); - - let a1 = Fr.mul(ap_bp, c_d); - a1 = Fr.add(a1, Fr.mul(ap_b, cp_d)); - a1 = Fr.add(a1, Fr.mul(ap_b, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_bp, cp_d)); - a1 = Fr.add(a1, Fr.mul(a_bp, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_b, cp_dp)); - - let a2 = Fr.mul(a_bp, cp_dp); - a2 = Fr.add(a2, Fr.mul(ap_b, cp_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, c_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, cp_d)); - - let a3 = Fr.mul(ap_bp, cp_dp); - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - rz = Fr.add(rz, Fr.mul(Z2[p], a2)); - rz = Fr.add(rz, Fr.mul(Z3[p], a3)); - } - - return [r, rz]; - } } - async function round4() { - const pol_qm = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qm, 0 , zkey.domainSize*n8r, sectionsZKey[7][0].p); + static mul2(a, b, ap, bp, p, Fr) { + const Z1 = this.getZ1(Fr); + let r, rz; - const pol_ql = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_ql, 0 , zkey.domainSize*n8r, sectionsZKey[8][0].p); + const a_b = Fr.mul(a, b); + const a_bp = Fr.mul(a, bp); + const ap_b = Fr.mul(ap, b); + const ap_bp = Fr.mul(ap, bp); - const pol_qr = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qr, 0 , zkey.domainSize*n8r, sectionsZKey[9][0].p); + r = a_b; - const pol_qo = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qo, 0 , zkey.domainSize*n8r, sectionsZKey[10][0].p); + let a0 = Fr.add(a_bp, ap_b); - const pol_qc = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qc, 0 , zkey.domainSize*n8r, sectionsZKey[11][0].p); + let a1 = ap_bp; - const pol_s3 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s3, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 10*zkey.domainSize*n8r); - - const transcript4 = new Uint8Array(G1.F.n8*2*3); - G1.toRprUncompressed(transcript4, 0, proof.T1); - G1.toRprUncompressed(transcript4, G1.F.n8*2, proof.T2); - G1.toRprUncompressed(transcript4, G1.F.n8*4, proof.T3); - ch.xi = hashToFr(transcript4); - - if (logger) logger.debug("xi: " + Fr.toString(ch.xi)); - - proof.eval_a = evalPol(pol_a, ch.xi); - proof.eval_b = evalPol(pol_b, ch.xi); - proof.eval_c = evalPol(pol_c, ch.xi); - proof.eval_s1 = evalPol(pol_s1, ch.xi); - proof.eval_s2 = evalPol(pol_s2, ch.xi); - proof.eval_t = evalPol(pol_t, ch.xi); - proof.eval_zw = evalPol(pol_z, Fr.mul(ch.xi, Fr.w[zkey.power])); - - const coef_ab = Fr.mul(proof.eval_a, proof.eval_b); - - let e2a = proof.eval_a; - const betaxi = Fr.mul(ch.beta, ch.xi); - e2a = Fr.add( e2a, betaxi); - e2a = Fr.add( e2a, ch.gamma); - - let e2b = proof.eval_b; - e2b = Fr.add( e2b, Fr.mul(betaxi, zkey.k1)); - e2b = Fr.add( e2b, ch.gamma); - - let e2c = proof.eval_c; - e2c = Fr.add( e2c, Fr.mul(betaxi, zkey.k2)); - e2c = Fr.add( e2c, ch.gamma); - - const e2 = Fr.mul(Fr.mul(Fr.mul(e2a, e2b), e2c), ch.alpha); - - let e3a = proof.eval_a; - e3a = Fr.add( e3a, Fr.mul(ch.beta, proof.eval_s1)); - e3a = Fr.add( e3a, ch.gamma); - - let e3b = proof.eval_b; - e3b = Fr.add( e3b, Fr.mul(ch.beta, proof.eval_s2)); - e3b = Fr.add( e3b, ch.gamma); - - let e3 = Fr.mul(e3a, e3b); - e3 = Fr.mul(e3, ch.beta); - e3 = Fr.mul(e3, proof.eval_zw); - e3 = Fr.mul(e3, ch.alpha); - - ch.xim= ch.xi; - for (let i=0; i=0; i--) { - res = Fr.add(Fr.mul(res, x), P.slice(i*n8r, (i+1)*n8r)); - } - return res; - } - - function divPol1(P, d) { - const n = P.byteLength/n8r; - const res = new ffjavascript.BigBuffer(n*n8r); - res.set(Fr.zero, (n-1) *n8r); - res.set(P.slice((n-1)*n8r, n*n8r), (n-2)*n8r); - for (let i=n-3; i>=0; i--) { - res.set( - Fr.add( - P.slice((i+1)*n8r, (i+2)*n8r), - Fr.mul( - d, - res.slice((i+1)*n8r, (i+2)*n8r) - ) - ), - i*n8r - ); - } - if (!Fr.eq( - P.slice(0, n8r), - Fr.mul( - Fr.neg(d), - res.slice(0, n8r) - ) - )) { - throw new Error("Polinomial does not divide"); - } - return res; - } - - async function expTau(b, name) { - const n = b.byteLength/n8r; - const PTauN = PTau.slice(0, n*curve.G1.F.n8*2); - const bm = await curve.Fr.batchFromMontgomery(b); - let res = await curve.G1.multiExpAffine(PTauN, bm, logger, name); - res = curve.G1.toAffine(res); - return res; - } - - - async function to4T(A, pz) { - pz = pz || []; - let a = await Fr.ifft(A); - const a4 = new ffjavascript.BigBuffer(n8r*zkey.domainSize*4); - a4.set(a, 0); - - const a1 = new ffjavascript.BigBuffer(n8r*(zkey.domainSize + pz.length)); - a1.set(a, 0); - for (let i= 0; i. -*/ -const {unstringifyBigInts: unstringifyBigInts$6} = ffjavascript.utils; - -async function plonkFullProve$1(_input, wasmFile, zkeyFileName, logger) { - const input = unstringifyBigInts$6(_input); - - const wtns= { - type: "mem" - }; - await wtnsCalculate$1(input, wasmFile, wtns); - return await plonk16Prove(zkeyFileName, wtns, logger); -} - -/* - Copyright 2021 0kims association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ -const {unstringifyBigInts: unstringifyBigInts$5} = ffjavascript.utils; -const { keccak256: keccak256$1 } = jsSha3__default["default"]; - - -async function plonkVerify$1(_vk_verifier, _publicSignals, _proof, logger) { - let vk_verifier = unstringifyBigInts$5(_vk_verifier); - let proof = unstringifyBigInts$5(_proof); - let publicSignals = unstringifyBigInts$5(_publicSignals); - - const curve = await getCurveFromName(vk_verifier.curve); - - const Fr = curve.Fr; - const G1 = curve.G1; - - proof = fromObjectProof(curve,proof); - vk_verifier = fromObjectVk$1(curve, vk_verifier); - if (!isWellConstructed(curve, proof)) { - logger.error("Proof is not well constructed"); - return false; - } - if (publicSignals.length != vk_verifier.nPublic) { - logger.error("Invalid number of public inputs"); - return false; - } - const challanges = calculateChallanges(curve, proof, publicSignals); - if (logger) { - logger.debug("beta: " + Fr.toString(challanges.beta, 16)); - logger.debug("gamma: " + Fr.toString(challanges.gamma, 16)); - logger.debug("alpha: " + Fr.toString(challanges.alpha, 16)); - logger.debug("xi: " + Fr.toString(challanges.xi, 16)); - logger.debug("v1: " + Fr.toString(challanges.v[1], 16)); - logger.debug("v6: " + Fr.toString(challanges.v[6], 16)); - logger.debug("u: " + Fr.toString(challanges.u, 16)); - } - const L = calculateLagrangeEvaluations(curve, challanges, vk_verifier); - if (logger) { - logger.debug("Lagrange Evaluations: "); - for (let i=1; i. -*/ -const { unstringifyBigInts: unstringifyBigInts$4} = ffjavascript.utils; - -function i2hex$1(i) { - return ("0" + i.toString(16)).slice(-2); -} - -function p256$1(n) { - let nstr = n.toString(16); - while (nstr.length < 64) nstr = "0"+nstr; - nstr = `"0x${nstr}"`; - return nstr; -} - -async function plonkExportSolidityCallData(_proof, _pub) { - const proof = unstringifyBigInts$4(_proof); - const pub = unstringifyBigInts$4(_pub); - - const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; - - let inputs = ""; - for (let i=0; i. -*/ - -// We export to zkey the signals and values of the a, b, c, ql, qr, qm, qo and qc - -// a, b and c are signals id (32-bit integers) -// ql, qr, qm, qo and qc are field values - -function getFFlonkConstantConstraint(signal1, Fr) { - return [signal1, 0, 0, Fr.one, Fr.zero, Fr.zero, Fr.zero, Fr.zero]; -} - -function getFFlonkAdditionConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc) { - return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; -} - -function getFFlonkMultiplicationConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc, Fr) { - return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; -} - -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ - -const LINEAR_COMBINATION_NULLABLE = 0; -const LINEAR_COMBINATION_CONSTANT = 1; -const LINEAR_COMBINATION_VARIABLE = 2; - -class r1csConstraintProcessor { - constructor(Fr, fnGetConstantConstraint, fnGetAdditionConstraint, fnGetMultiplicationConstraint, logger) { - this.Fr = Fr; - this.logger = logger; - this.fnGetAdditionConstraint = fnGetAdditionConstraint; - this.fnGetMultiplicationConstraint = fnGetMultiplicationConstraint; - } - - processR1csConstraint(settings, lcA, lcB, lcC) { - this.normalizeLinearCombination(lcA); - this.normalizeLinearCombination(lcB); - this.normalizeLinearCombination(lcC); - - const lctA = this.getLinearCombinationType(lcA); - const lctB = this.getLinearCombinationType(lcB); - - if ((lctA === LINEAR_COMBINATION_NULLABLE) || (lctB === LINEAR_COMBINATION_NULLABLE)) { - return this.processR1csAdditionConstraint(settings, lcC); - } else if (lctA === LINEAR_COMBINATION_CONSTANT) { - const lcCC = this.joinLinearCombinations(lcB, lcC, lcA[0]); - return this.processR1csAdditionConstraint(settings, lcCC); - } else if (lctB === LINEAR_COMBINATION_CONSTANT) { - const lcCC = this.joinLinearCombinations(lcA, lcC, lcB[0]); - return this.processR1csAdditionConstraint(settings, lcCC); - } else { - return this.processR1csMultiplicationConstraint(settings, lcA, lcB, lcC); - } - } - - getLinearCombinationType(linCom) { - // let k = this.Fr.zero; - // - // const signalIds = Object.keys(linCom); - // for (let i = 0; i < signalIds.length; i++) { - // if (signalIds[i] === "0") { - // k = this.Fr.add(k, linCom[signalIds[i]]); - // } else { - // return LINEAR_COMBINATION_VARIABLE; - // } - // } - // - // if (!this.Fr.eq(k, this.Fr.zero)) return LINEAR_COMBINATION_CONSTANT; - // - // return LINEAR_COMBINATION_NULLABLE; - - let k = this.Fr.zero; - let n = 0; - const ss = Object.keys(linCom); - for (let i = 0; i < ss.length; i++) { - if (linCom[ss[i]] == 0n) { - delete linCom[ss[i]]; - } else if (ss[i] == 0) { - k = this.Fr.add(k, linCom[ss[i]]); - } else { - n++; - } - } - if (n > 0) return LINEAR_COMBINATION_VARIABLE; - if (!this.Fr.isZero(k)) return LINEAR_COMBINATION_CONSTANT; - return LINEAR_COMBINATION_NULLABLE; - } - - normalizeLinearCombination(linCom) { - const signalIds = Object.keys(linCom); - for (let i = 0; i < signalIds.length; i++) { - if (this.Fr.isZero(linCom[signalIds[i]])) delete linCom[signalIds[i]]; - } - - return linCom; - } - - joinLinearCombinations(linCom1, linCom2, k) { - const res = {}; - - // for (let s in linCom1) { - // const val = this.Fr.mul(k, linCom1[s]); - // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); - // } - // - // for (let s in linCom2) { - // const val = this.Fr.mul(k, linCom2[s]); - // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); - // } - - for (let s in linCom1) { - if (typeof res[s] == "undefined") { - res[s] = this.Fr.mul(k, linCom1[s]); - } else { - res[s] = this.Fr.add(res[s], this.Fr.mul(k, linCom1[s])); - } - } - - for (let s in linCom2) { - if (typeof res[s] == "undefined") { - res[s] = linCom2[s]; - } else { - res[s] = this.Fr.add(res[s], linCom2[s]); - } - } - - return this.normalizeLinearCombination(res); - } - - reduceCoefs(settings, constraintsArr, additionsArr, linCom, maxC) { - const res = { - k: this.Fr.zero, - signals: [], - coefs: [] - }; - const cs = []; - - for (let signalId in linCom) { - if (signalId == 0) { - res.k = this.Fr.add(res.k, linCom[signalId]); - } else if (linCom[signalId] != 0n) { - cs.push([Number(signalId), linCom[signalId]]); - } - } - - while (cs.length > maxC) { - const c1 = cs.shift(); - const c2 = cs.shift(); - const so = settings.nVars++; - - const constraints = this.fnGetAdditionConstraint( - c1[0], c2[0], so, - this.Fr.neg(c1[1]), this.Fr.neg(c2[1]), this.Fr.zero, this.Fr.one, this.Fr.zero); - - constraintsArr.push(constraints); - additionsArr.push([c1[0], c2[0], c1[1], c2[1]]); - - cs.push([so, this.Fr.one]); - } - - for (let i = 0; i < cs.length; i++) { - res.signals[i] = cs[i][0]; - res.coefs[i] = cs[i][1]; - } - - while (res.coefs.length < maxC) { - res.signals.push(0); - res.coefs.push(this.Fr.zero); - } - - return res; - } - - processR1csAdditionConstraint(settings, linCom) { - const constraintsArr = []; - const additionsArr = []; - - const C = this.reduceCoefs(settings, constraintsArr, additionsArr, linCom, 3); - - const constraints = this.fnGetAdditionConstraint( - C.signals[0], C.signals[1], C.signals[2], - C.coefs[0], C.coefs[1], this.Fr.zero, C.coefs[2], C.k); - - constraintsArr.push(constraints); - - return [constraintsArr, additionsArr]; - } - - processR1csMultiplicationConstraint(settings, lcA, lcB, lcC) { - const constraintsArr = []; - const additionsArr = []; - - const A = this.reduceCoefs(settings, constraintsArr, additionsArr, lcA, 1); - const B = this.reduceCoefs(settings, constraintsArr, additionsArr, lcB, 1); - const C = this.reduceCoefs(settings, constraintsArr, additionsArr, lcC, 1); - - const constraints = this.fnGetMultiplicationConstraint( - A.signals[0], B.signals[0], C.signals[0], - this.Fr.mul(A.coefs[0], B.k), - this.Fr.mul(A.k, B.coefs[0]), - this.Fr.mul(A.coefs[0], B.coefs[0]), - this.Fr.neg(C.coefs[0]), - this.Fr.sub(this.Fr.mul(A.k, B.k), C.k)); - - constraintsArr.push(constraints); - - return [constraintsArr, additionsArr]; - } -} +const ZKEY_PL_ADDITIONS_SECTION = 3; +const ZKEY_PL_A_MAP_SECTION = 4; +const ZKEY_PL_B_MAP_SECTION = 5; +const ZKEY_PL_C_MAP_SECTION = 6; +const ZKEY_PL_QM_SECTION = 7; +const ZKEY_PL_QL_SECTION = 8; +const ZKEY_PL_QR_SECTION = 9; +const ZKEY_PL_QO_SECTION = 10; +const ZKEY_PL_QC_SECTION = 11; +const ZKEY_PL_SIGMA_SECTION = 12; +const ZKEY_PL_LAGRANGE_SECTION = 13; +const ZKEY_PL_PTAU_SECTION = 14; /* Copyright 2022 iden3 association. @@ -8962,7 +7680,8 @@ class Polynomial { this.coef.set(this.Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)), i_n8); } - for (let i = domainSize; i < domainSize * extensions; i++) { + const upperBound = this.coef.byteLength / this.Fr.n8; + for (let i = domainSize; i < upperBound; i++) { const i_n8 = i * this.Fr.n8; const a = this.Fr.sub( @@ -9401,6 +8120,1582 @@ class Evaluations { } } +/* + Copyright 2021 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const {stringifyBigInts: stringifyBigInts$2} = ffjavascript.utils; + +async function plonk16Prove(zkeyFileName, witnessFileName, logger) { + const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils__namespace.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23); + + // Read witness file + if (logger) logger.debug("> Reading witness file"); + const wtns = await readHeader(fdWtns, sectionsWtns); + + // Read zkey file + if (logger) logger.debug("> Reading zkey file"); + const {fd: fdZKey, sections: zkeySections} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23); + + const zkey = await readHeader$1(fdZKey, zkeySections); + if (zkey.protocol != "plonk") { + throw new Error("zkey file is not plonk"); + } + + if (!ffjavascript.Scalar.eq(zkey.r, wtns.q)) { + throw new Error("Curve of the witness does not match the curve of the proving key"); + } + + if (wtns.nWitness != zkey.nVars -zkey.nAdditions) { + throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}, ${zkey.nAdditions}`); + } + + const curve = zkey.curve; + + const Fr = curve.Fr; + const n8r = curve.Fr.n8; + const sDomain = zkey.domainSize * n8r; + + if (logger) { + logger.debug("----------------------------"); + logger.debug(" PLONK PROVE SETTINGS"); + logger.debug(` Curve: ${curve.name}`); + logger.debug(` Circuit power: ${zkey.power}`); + logger.debug(` Domain size: ${zkey.domainSize}`); + logger.debug(` Vars: ${zkey.nVars}`); + logger.debug(` Public vars: ${zkey.nPublic}`); + logger.debug(` Constraints: ${zkey.nConstraints}`); + logger.debug(` Additions: ${zkey.nAdditions}`); + logger.debug("----------------------------"); + } + + //Read witness data + if (logger) logger.debug("> Reading witness file data"); + const buffWitness = await binFileUtils__namespace.readSection(fdWtns, sectionsWtns, 2); + + // First element in plonk is not used and can be any value. (But always the same). + // We set it to zero to go faster in the exponentiations. + buffWitness.set(Fr.zero, 0); + const buffInternalWitness = new ffjavascript.BigBuffer(n8r*zkey.nAdditions); + + let buffers = {}; + let polynomials = {}; + let evaluations = {}; + + let challenges = {}; + let proof = new Proof(curve, logger); + const transcript = new Keccak256Transcript(curve); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_ADDITIONS_SECTION}. Additions`); + await calculateAdditions(); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_SIGMA_SECTION}. Sigma1, Sigma2 & Sigma 3`); + if (logger) logger.debug("··· Reading Sigma polynomials "); + polynomials.Sigma1 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.Sigma2 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.Sigma3 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + + await fdZKey.readToBuffer(polynomials.Sigma1.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.Sigma2.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 5 * sDomain); + await fdZKey.readToBuffer(polynomials.Sigma3.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 10 * sDomain); + + if (logger) logger.debug("··· Reading Sigma evaluations"); + evaluations.Sigma1 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.Sigma2 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.Sigma3 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + + await fdZKey.readToBuffer(evaluations.Sigma1.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.Sigma2.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 6 * sDomain); + await fdZKey.readToBuffer(evaluations.Sigma3.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 11 * sDomain); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_PTAU_SECTION}. Powers of Tau`); + const PTau = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_PTAU_SECTION); + + let publicSignals = []; + + for (let i=1; i<= zkey.nPublic; i++) { + const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); + publicSignals.push(ffjavascript.Scalar.fromRprLE(pub)); + } + + if (logger) logger.debug(""); + if (logger) logger.debug("> ROUND 1"); + await round1(); + + if (logger) logger.debug("> ROUND 2"); + await round2(); + + if (logger) logger.debug("> ROUND 3"); + await round3(); + + if (logger) logger.debug("> ROUND 4"); + await round4(); + + if (logger) logger.debug("> ROUND 5"); + await round5(); + + /////////////////////// + // Final adjustments // + /////////////////////// + + await fdZKey.close(); + await fdWtns.close(); + + // Prepare proof + let _proof = proof.toObjectProof(false); + _proof.protocol = "plonk"; + _proof.curve = curve.name; + + if (logger) logger.debug("PLONK PROVER FINISHED"); + + return { + proof: stringifyBigInts$2(_proof), + publicSignals: stringifyBigInts$2(publicSignals) + }; + + async function calculateAdditions() { + if (logger) logger.debug("··· Computing additions"); + const additionsBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_ADDITIONS_SECTION); + + // sizes: wireId_x = 4 bytes (32 bits), factor_x = field size bits + // Addition form: wireId_a wireId_b factor_a factor_b (size is 4 + 4 + sFr + sFr) + const sSum = 8 + n8r * 2; + + for (let i = 0; i < zkey.nAdditions; i++) { + if (logger && (0 !== i) && (i % 100000 === 0)) logger.debug(` addition ${i}/${zkey.nAdditions}`); + + // Read addition values + let offset = i * sSum; + const signalId1 = readUInt32(additionsBuff, offset); + offset += 4; + const signalId2 = readUInt32(additionsBuff, offset); + offset += 4; + const factor1 = additionsBuff.slice(offset, offset + n8r); + offset += n8r; + const factor2 = additionsBuff.slice(offset, offset + n8r); + + // Get witness value + const witness1 = getWitness(signalId1); + const witness2 = getWitness(signalId2); + + //Calculate final result + const result = Fr.add(Fr.mul(factor1, witness1), Fr.mul(factor2, witness2)); + + buffInternalWitness.set(result, n8r * i); + } + } + + function readUInt32(b, o) { + const buff = b.slice(o, o+4); + const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); + return buffV.getUint32(0, true); + } + + function getWitness(idx) { + if (idx < zkey.nVars-zkey.nAdditions) { + return buffWitness.slice(idx*n8r, idx*n8r+n8r); + } else if (idx < zkey.nVars) { + return buffInternalWitness.slice((idx - (zkey.nVars-zkey.nAdditions))*n8r, (idx-(zkey.nVars-zkey.nAdditions))*n8r + n8r); + } else { + return curve.Fr.zero; + } + } + + async function round1() { + // STEP 1.1 - Generate random blinding scalars (b1, ..., b11) ∈ F + challenges.b = []; + for (let i=1; i<=11; i++) { + challenges.b[i] = curve.Fr.random(); + } + + // STEP 1.2 - Compute wire polynomials a(X), b(X) and c(X) + if (logger) logger.debug("> Computing A, B, C wire polynomials"); + await computeWirePolynomials(); + + // STEP 1.3 - Compute [a]_1, [b]_1, [c]_1 + if (logger) logger.debug("> Computing A, B, C MSM"); + let commitA = await polynomials.A.multiExponentiation(PTau, "A"); + let commitB = await polynomials.B.multiExponentiation(PTau, "B"); + let commitC = await polynomials.C.multiExponentiation(PTau, "C"); + + // First output of the prover is ([A]_1, [B]_1, [C]_1) + proof.addPolynomial("A", commitA); + proof.addPolynomial("B", commitB); + proof.addPolynomial("C", commitC); + + return 0; + } + + async function computeWirePolynomials() { + if (logger) logger.debug("··· Reading data from zkey file"); + + // Build A, B and C evaluations buffer from zkey and witness files + buffers.A = new ffjavascript.BigBuffer(sDomain); + buffers.B = new ffjavascript.BigBuffer(sDomain); + buffers.C = new ffjavascript.BigBuffer(sDomain); + + // Read zkey file to the buffers + const aMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_A_MAP_SECTION); + const bMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_B_MAP_SECTION); + const cMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_C_MAP_SECTION); + + // Compute all witness from signal ids and set them to A,B & C buffers + for (let i = 0; i < zkey.nConstraints; i++) { + const i_sFr = i * n8r; + const offset = i * 4; + + // Compute A value from a signal id + const signalIdA = readUInt32(aMapBuff, offset); + buffers.A.set(getWitness(signalIdA), i_sFr); + + // Compute B value from a signal id + const signalIdB = readUInt32(bMapBuff, offset); + buffers.B.set(getWitness(signalIdB), i_sFr); + + // Compute C value from a signal id + const signalIdC = readUInt32(cMapBuff, offset); + buffers.C.set(getWitness(signalIdC), i_sFr); + } + + buffers.A = await Fr.batchToMontgomery(buffers.A); + buffers.B = await Fr.batchToMontgomery(buffers.B); + buffers.C = await Fr.batchToMontgomery(buffers.C); + + // Compute the coefficients of the wire polynomials a(X), b(X) and c(X) from A,B & C buffers + if (logger) logger.debug("··· Computing A ifft"); + polynomials.A = await Polynomial.fromEvaluations(buffers.A, curve, logger); + if (logger) logger.debug("··· Computing B ifft"); + polynomials.B = await Polynomial.fromEvaluations(buffers.B, curve, logger); + if (logger) logger.debug("··· Computing C ifft"); + polynomials.C = await Polynomial.fromEvaluations(buffers.C, curve, logger); + + // Compute extended evaluations of a(X), b(X) and c(X) polynomials + if (logger) logger.debug("··· Computing A fft"); + evaluations.A = await Evaluations.fromPolynomial(polynomials.A, 4, curve, logger); + if (logger) logger.debug("··· Computing B fft"); + evaluations.B = await Evaluations.fromPolynomial(polynomials.B, 4, curve, logger); + if (logger) logger.debug("··· Computing C fft"); + evaluations.C = await Evaluations.fromPolynomial(polynomials.C, 4, curve, logger); + + // Blind a(X), b(X) and c(X) polynomials coefficients with blinding scalars b + polynomials.A.blindCoefficients([challenges.b[2], challenges.b[1]]); + polynomials.B.blindCoefficients([challenges.b[4], challenges.b[3]]); + polynomials.C.blindCoefficients([challenges.b[6], challenges.b[5]]); + + // Check degrees + if (polynomials.A.degree() >= zkey.domainSize + 2) { + throw new Error("A Polynomial is not well calculated"); + } + if (polynomials.B.degree() >= zkey.domainSize + 2) { + throw new Error("B Polynomial is not well calculated"); + } + if (polynomials.C.degree() >= zkey.domainSize + 2) { + throw new Error("C Polynomial is not well calculated"); + } + } + + async function round2() { + // STEP 2.1 - Compute permutation challenge beta and gamma ∈ F + // Compute permutation challenge beta + if (logger) logger.debug("> Computing challenges beta and gamma"); + transcript.reset(); + + transcript.addPolCommitment(zkey.Qm); + transcript.addPolCommitment(zkey.Ql); + transcript.addPolCommitment(zkey.Qr); + transcript.addPolCommitment(zkey.Qo); + transcript.addPolCommitment(zkey.Qc); + transcript.addPolCommitment(zkey.S1); + transcript.addPolCommitment(zkey.S2); + transcript.addPolCommitment(zkey.S3); + + // Add A to the transcript + for (let i = 0; i < zkey.nPublic; i++) { + transcript.addScalar(buffers.A.slice(i * n8r, i * n8r + n8r)); + } + + // Add A, B, C to the transcript + transcript.addPolCommitment(proof.getPolynomial("A")); + transcript.addPolCommitment(proof.getPolynomial("B")); + transcript.addPolCommitment(proof.getPolynomial("C")); + + challenges.beta = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.beta: " + Fr.toString(challenges.beta, 16)); + + // Compute permutation challenge gamma + transcript.reset(); + transcript.addScalar(challenges.beta); + challenges.gamma = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.gamma: " + Fr.toString(challenges.gamma, 16)); + + // STEP 2.2 - Compute permutation polynomial z(X) + if (logger) logger.debug("> Computing Z polynomial"); + await computeZ(); + + // STEP 2.3 - Compute permutation [z]_1 + if (logger) logger.debug("> Computing Z MSM"); + let commitZ = await polynomials.Z.multiExponentiation(PTau, "Z"); + + // Second output of the prover is ([Z]_1) + proof.addPolynomial("Z", commitZ); + } + + async function computeZ() { + if (logger) logger.debug("··· Computing Z evaluations"); + + let numArr = new ffjavascript.BigBuffer(sDomain); + let denArr = new ffjavascript.BigBuffer(sDomain); + + // Set the first values to 1 + numArr.set(Fr.one, 0); + denArr.set(Fr.one, 0); + + // Set initial omega + let w = Fr.one; + for (let i = 0; i < zkey.domainSize; i++) { + const i_n8r = i * n8r; + + const a = buffers.A.slice(i_n8r, i_n8r + n8r); + const b = buffers.B.slice(i_n8r, i_n8r + n8r); + const c = buffers.C.slice(i_n8r, i_n8r + n8r); + + // Z(X) := numArr / denArr + // numArr := (a + beta·ω + gamma)(b + beta·ω·k1 + gamma)(c + beta·ω·k2 + gamma) + const betaw = Fr.mul(challenges.beta, w); + + let n1 = Fr.add(a, betaw); + n1 = Fr.add(n1, challenges.gamma); + + let n2 = Fr.add(b, Fr.mul(zkey.k1, betaw)); + n2 = Fr.add(n2, challenges.gamma); + + let n3 = Fr.add(c, Fr.mul(zkey.k2, betaw)); + n3 = Fr.add(n3, challenges.gamma); + + let num = Fr.mul(n1, Fr.mul(n2, n3)); + + // denArr := (a + beta·sigma1 + gamma)(b + beta·sigma2 + gamma)(c + beta·sigma3 + gamma) + let d1 = Fr.add(a, Fr.mul(evaluations.Sigma1.getEvaluation(i * 4), challenges.beta)); + d1 = Fr.add(d1, challenges.gamma); + + let d2 = Fr.add(b, Fr.mul(evaluations.Sigma2.getEvaluation(i * 4), challenges.beta)); + d2 = Fr.add(d2, challenges.gamma); + + let d3 = Fr.add(c, Fr.mul(evaluations.Sigma3.getEvaluation(i * 4), challenges.beta)); + d3 = Fr.add(d3, challenges.gamma); + + let den = Fr.mul(d1, Fr.mul(d2, d3)); + + // Multiply current num value with the previous one saved in numArr + num = Fr.mul(numArr.slice(i_n8r, i_n8r + n8r), num); + numArr.set(num, ((i + 1) % zkey.domainSize) * n8r); + + // Multiply current den value with the previous one saved in denArr + den = Fr.mul(denArr.slice(i_n8r, i_n8r + n8r), den); + denArr.set(den, ((i + 1) % zkey.domainSize) * n8r); + + w = Fr.mul(w, Fr.w[zkey.power]); + } + + // Compute the inverse of denArr to compute in the next command the + // division numArr/denArr by multiplying num · 1/denArr + denArr = await Fr.batchInverse(denArr); + + // TODO: Do it in assembly and in parallel + // Multiply numArr · denArr where denArr was inverted in the previous command + for (let i = 0; i < zkey.domainSize; i++) { + const i_sFr = i * n8r; + + const z = Fr.mul(numArr.slice(i_sFr, i_sFr + n8r), denArr.slice(i_sFr, i_sFr + n8r)); + numArr.set(z, i_sFr); + } + + // From now on the values saved on numArr will be Z(X) buffer + buffers.Z = numArr; + + if (!Fr.eq(numArr.slice(0, n8r), Fr.one)) { + throw new Error("Copy constraints does not match"); + } + + // Compute polynomial coefficients z(X) from buffers.Z + if (logger) logger.debug("··· Computing Z ifft"); + polynomials.Z = await Polynomial.fromEvaluations(buffers.Z, curve, logger); + + // Compute extended evaluations of z(X) polynomial + if (logger) logger.debug("··· Computing Z fft"); + evaluations.Z = await Evaluations.fromPolynomial(polynomials.Z, 4, curve, logger); + + // Blind z(X) polynomial coefficients with blinding scalars b + polynomials.Z.blindCoefficients([challenges.b[9], challenges.b[8], challenges.b[7]]); + + // Check degree + if (polynomials.Z.degree() >= zkey.domainSize + 3) { + throw new Error("Z Polynomial is not well calculated"); + } + + delete buffers.Z; + } + + async function round3() { + if (logger) logger.debug("> Computing challenge alpha"); + + // STEP 3.1 - Compute evaluation challenge alpha ∈ F + transcript.reset(); + transcript.addScalar(challenges.beta); + transcript.addScalar(challenges.gamma); + transcript.addPolCommitment(proof.getPolynomial("Z")); + + challenges.alpha = transcript.getChallenge(); + challenges.alpha2 = Fr.square(challenges.alpha); + if (logger) logger.debug("··· challenges.alpha: " + Fr.toString(challenges.alpha, 16)); + + // Compute quotient polynomial T(X) + if (logger) logger.debug("> Computing T polynomial"); + await computeT(); + + // Compute [T1]_1, [T2]_1, [T3]_1 + if (logger) logger.debug("> Computing T MSM"); + let commitT1 = await polynomials.T1.multiExponentiation(PTau, "T1"); + let commitT2 = await polynomials.T2.multiExponentiation(PTau, "T2"); + let commitT3 = await polynomials.T3.multiExponentiation(PTau, "T3"); + + // Third output of the prover is ([T1]_1, [T2]_1, [T3]_1) + proof.addPolynomial("T1", commitT1); + proof.addPolynomial("T2", commitT2); + proof.addPolynomial("T3", commitT3); + } + + async function computeT() { + if (logger) + logger.debug(`··· Reading sections ${ZKEY_PL_QL_SECTION}, ${ZKEY_PL_QR_SECTION}` + + `, ${ZKEY_PL_QM_SECTION}, ${ZKEY_PL_QO_SECTION}, ${ZKEY_PL_QC_SECTION}. Q selectors`); + // Reserve memory for Q's evaluations + evaluations.QL = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QR = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QM = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QO = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QC = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(evaluations.QL.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QL_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QR.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QR_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QM.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QM_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QO.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QO_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QC.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QC_SECTION][0].p + sDomain); + + // Read Lagrange polynomials & evaluations from zkey file + evaluations.Lagrange = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4 * zkey.nPublic), curve, logger); + + for (let i = 0; i < zkey.nPublic; i++) { + await fdZKey.readToBuffer(evaluations.Lagrange.eval, i * sDomain * 4, sDomain * 4, zkeySections[ZKEY_PL_LAGRANGE_SECTION][0].p + i * 5 * sDomain + sDomain); + } + + buffers.T = new ffjavascript.BigBuffer(sDomain * 4); + buffers.Tz = new ffjavascript.BigBuffer(sDomain * 4); + + if (logger) logger.debug("··· Computing T evaluations"); + + let w = Fr.one; + for (let i = 0; i < zkey.domainSize * 4; i++) { + if (logger && (0 !== i) && (i % 100000 === 0)) + logger.debug(` T evaluation ${i}/${zkey.domainSize * 4}`); + + const a = evaluations.A.getEvaluation(i); + const b = evaluations.B.getEvaluation(i); + const c = evaluations.C.getEvaluation(i); + const z = evaluations.Z.getEvaluation(i); + const zw = evaluations.Z.getEvaluation((zkey.domainSize * 4 + 4 + i) % (zkey.domainSize * 4)); + + const qm = evaluations.QM.getEvaluation(i); + const ql = evaluations.QL.getEvaluation(i); + const qr = evaluations.QR.getEvaluation(i); + const qo = evaluations.QO.getEvaluation(i); + const qc = evaluations.QC.getEvaluation(i); + const s1 = evaluations.Sigma1.getEvaluation(i); + const s2 = evaluations.Sigma2.getEvaluation(i); + const s3 = evaluations.Sigma3.getEvaluation(i); + + const ap = Fr.add(challenges.b[2], Fr.mul(challenges.b[1], w)); + const bp = Fr.add(challenges.b[4], Fr.mul(challenges.b[3], w)); + const cp = Fr.add(challenges.b[6], Fr.mul(challenges.b[5], w)); + + const w2 = Fr.square(w); + const zp = Fr.add(Fr.add(Fr.mul(challenges.b[7], w2), Fr.mul(challenges.b[8], w)), challenges.b[9]); + const wW = Fr.mul(w, Fr.w[zkey.power]); + const wW2 = Fr.square(wW); + const zWp = Fr.add(Fr.add(Fr.mul(challenges.b[7], wW2), Fr.mul(challenges.b[8], wW)), challenges.b[9]); + + let pi = Fr.zero; + for (let j = 0; j < zkey.nPublic; j++) { + const offset = (j * 4 * zkey.domainSize) + i; + + const lPol = evaluations.Lagrange.getEvaluation(offset); + const aVal = buffers.A.slice(j * n8r, (j + 1) * n8r); + + pi = Fr.sub(pi, Fr.mul(lPol, aVal)); + } + + // e1 := a(X)b(X)qM(X) + a(X)qL(X) + b(X)qR(X) + c(X)qO(X) + PI(X) + qC(X) + let [e1, e1z] = MulZ.mul2(a, b, ap, bp, i % 4, Fr); + e1 = Fr.mul(e1, qm); + e1z = Fr.mul(e1z, qm); + + e1 = Fr.add(e1, Fr.mul(a, ql)); + e1z = Fr.add(e1z, Fr.mul(ap, ql)); + + e1 = Fr.add(e1, Fr.mul(b, qr)); + e1z = Fr.add(e1z, Fr.mul(bp, qr)); + + e1 = Fr.add(e1, Fr.mul(c, qo)); + e1z = Fr.add(e1z, Fr.mul(cp, qo)); + + e1 = Fr.add(e1, pi); + e1 = Fr.add(e1, qc); + + // e2 := α[(a(X) + βX + γ)(b(X) + βk1X + γ)(c(X) + βk2X + γ)z(X)] + const betaw = Fr.mul(challenges.beta, w); + let e2a = a; + e2a = Fr.add(e2a, betaw); + e2a = Fr.add(e2a, challenges.gamma); + + let e2b = b; + e2b = Fr.add(e2b, Fr.mul(betaw, zkey.k1)); + e2b = Fr.add(e2b, challenges.gamma); + + let e2c = c; + e2c = Fr.add(e2c, Fr.mul(betaw, zkey.k2)); + e2c = Fr.add(e2c, challenges.gamma); + + let e2d = z; + + let [e2, e2z] = MulZ.mul4(e2a, e2b, e2c, e2d, ap, bp, cp, zp, i % 4, Fr); + e2 = Fr.mul(e2, challenges.alpha); + e2z = Fr.mul(e2z, challenges.alpha); + + // e3 := α[(a(X) + βSσ1(X) + γ)(b(X) + βSσ2(X) + γ)(c(X) + βSσ3(X) + γ)z(Xω)] + let e3a = a; + e3a = Fr.add(e3a, Fr.mul(challenges.beta, s1)); + e3a = Fr.add(e3a, challenges.gamma); + + let e3b = b; + e3b = Fr.add(e3b, Fr.mul(challenges.beta, s2)); + e3b = Fr.add(e3b, challenges.gamma); + + let e3c = c; + e3c = Fr.add(e3c, Fr.mul(challenges.beta, s3)); + e3c = Fr.add(e3c, challenges.gamma); + + let e3d = zw; + let [e3, e3z] = MulZ.mul4(e3a, e3b, e3c, e3d, ap, bp, cp, zWp, i % 4, Fr); + + e3 = Fr.mul(e3, challenges.alpha); + e3z = Fr.mul(e3z, challenges.alpha); + + // e4 := α^2(z(X)−1)L1(X) + let e4 = Fr.sub(z, Fr.one); + e4 = Fr.mul(e4, evaluations.Lagrange.getEvaluation(i)); + e4 = Fr.mul(e4, challenges.alpha2); + + let e4z = Fr.mul(zp, evaluations.Lagrange.getEvaluation(i)); + e4z = Fr.mul(e4z, challenges.alpha2); + + + let t = Fr.add(Fr.sub(Fr.add(e1, e2), e3), e4); + let tz = Fr.add(Fr.sub(Fr.add(e1z, e2z), e3z), e4z); + + buffers.T.set(t, i * n8r); + buffers.Tz.set(tz, i * n8r); + + w = Fr.mul(w, Fr.w[zkey.power + 2]); + } + + // Compute the coefficients of the polynomial T0(X) from buffers.T0 + if (logger) + logger.debug("··· Computing T ifft"); + polynomials.T = await Polynomial.fromEvaluations(buffers.T, curve, logger); + + // Divide the polynomial T0 by Z_H(X) + if (logger) + logger.debug("··· Computing T / ZH"); + polynomials.T.divZh(zkey.domainSize, 4); + + // Compute the coefficients of the polynomial Tz(X) from buffers.Tz + if (logger) + logger.debug("··· Computing Tz ifft"); + polynomials.Tz = await Polynomial.fromEvaluations(buffers.Tz, curve, logger); + + // Add the polynomial T1z to T1 to get the final polynomial T1 + polynomials.T.add(polynomials.Tz); + + // Check degree + if (polynomials.T.degree() >= zkey.domainSize * 3 + 6) { + throw new Error("T Polynomial is not well calculated"); + } + + // t(x) has degree 3n + 5, we are going to split t(x) into three smaller polynomials: + // T1' and T2' with a degree < n and T3' with a degree n+5 + // such that t(x) = T1'(X) + X^n T2'(X) + X^{2n} T3'(X) + // To randomize the parts we use blinding scalars b_10 and b_11 in a way that doesn't change t(X): + // T1(X) = T1'(X) + b_10 X^n + // T2(X) = T2'(X) - b_10 + b_11 X^n + // T3(X) = T3'(X) - b_11 + // such that + // t(X) = T1(X) + X^n T2(X) + X^2n T3(X) + if (logger) logger.debug("··· Computing T1, T2, T3 polynomials"); + polynomials.T1 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T2 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T3 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 6) * n8r), curve, logger); + + polynomials.T1.coef.set(polynomials.T.coef.slice(0, sDomain), 0); + polynomials.T2.coef.set(polynomials.T.coef.slice(sDomain, sDomain * 2), 0); + polynomials.T3.coef.set(polynomials.T.coef.slice(sDomain * 2, sDomain * 3 + 6 * n8r), 0); + + // Add blinding scalar b_10 as a new coefficient n + polynomials.T1.setCoef(zkey.domainSize, challenges.b[10]); + + // compute t_mid(X) + // Subtract blinding scalar b_10 to the lowest coefficient of t_mid + const lowestMid = Fr.sub(polynomials.T2.getCoef(0), challenges.b[10]); + polynomials.T2.setCoef(0, lowestMid); + polynomials.T2.setCoef(zkey.domainSize, challenges.b[11]); + + // compute t_high(X) + //Subtract blinding scalar b_11 to the lowest coefficient of t_high + const lowestHigh = Fr.sub(polynomials.T3.getCoef(0), challenges.b[11]); + polynomials.T3.setCoef(0, lowestHigh); + } + + async function round4() { + if (logger) logger.debug("> Computing challenge xi"); + + // STEP 4.1 - Compute evaluation challenge xi ∈ F + transcript.reset(); + transcript.addScalar(challenges.alpha); + transcript.addPolCommitment(proof.getPolynomial("T1")); + transcript.addPolCommitment(proof.getPolynomial("T2")); + transcript.addPolCommitment(proof.getPolynomial("T3")); + + challenges.xi = transcript.getChallenge(); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[zkey.power]); + + if (logger) logger.debug("··· challenges.xi: " + Fr.toString(challenges.xi, 16)); + + // Fourth output of the prover is ( a(xi), b(xi), c(xi), s1(xi), s2(xi), z(xiw) ) + proof.addEvaluation("eval_a", polynomials.A.evaluate(challenges.xi)); + proof.addEvaluation("eval_b", polynomials.B.evaluate(challenges.xi)); + proof.addEvaluation("eval_c", polynomials.C.evaluate(challenges.xi)); + proof.addEvaluation("eval_s1", polynomials.Sigma1.evaluate(challenges.xi)); + proof.addEvaluation("eval_s2", polynomials.Sigma2.evaluate(challenges.xi)); + proof.addEvaluation("eval_zw", polynomials.Z.evaluate(challenges.xiw)); + } + + async function round5() { + if (logger) logger.debug("> Computing challenge v"); + + // STEP 5.1 - Compute evaluation challenge v ∈ F + transcript.reset(); + transcript.addScalar(challenges.xi); + transcript.addScalar(proof.getEvaluation("eval_a")); + transcript.addScalar(proof.getEvaluation("eval_b")); + transcript.addScalar(proof.getEvaluation("eval_c")); + transcript.addScalar(proof.getEvaluation("eval_s1")); + transcript.addScalar(proof.getEvaluation("eval_s2")); + transcript.addScalar(proof.getEvaluation("eval_zw")); + + challenges.v = []; + challenges.v[1] = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.v: " + Fr.toString(challenges.v[1], 16)); + + for (let i = 2; i < 6; i++) { + challenges.v[i] = Fr.mul(challenges.v[i - 1], challenges.v[1]); + } + + // STEP 5.2 Compute linearisation polynomial r(X) + if (logger) logger.debug("> Computing linearisation polynomial R(X)"); + await computeR(); + + //STEP 5.3 Compute opening proof polynomial Wxi(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxi(X) polynomial"); + computeWxi(); + + //STEP 5.4 Compute opening proof polynomial Wxiw(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxiw(X) polynomial"); + computeWxiw(); + + if (logger) logger.debug("> Computing Wxi, Wxiw MSM"); + let commitWxi = await polynomials.Wxi.multiExponentiation(PTau, "Wxi"); + let commitWxiw = await polynomials.Wxiw.multiExponentiation(PTau, "Wxiw"); + + // Fifth output of the prover is ([Wxi]_1, [Wxiw]_1) + proof.addPolynomial("Wxi", commitWxi); + proof.addPolynomial("Wxiw", commitWxiw); + } + + async function computeR() { + const Fr = curve.Fr; + + // Reserve memory for Q's polynomials + polynomials.QL = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QR = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QM = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QO = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QC = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(polynomials.QL.coef, 0, sDomain, zkeySections[ZKEY_PL_QL_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QR.coef, 0, sDomain, zkeySections[ZKEY_PL_QR_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QM.coef, 0, sDomain, zkeySections[ZKEY_PL_QM_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QO.coef, 0, sDomain, zkeySections[ZKEY_PL_QO_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QC.coef, 0, sDomain, zkeySections[ZKEY_PL_QC_SECTION][0].p); + + challenges.xin = challenges.xi; + for (let i = 0; i < zkey.power; i++) { + challenges.xin = Fr.square(challenges.xin); + } + + challenges.zh = Fr.sub(challenges.xin, Fr.one); + + const L = []; + + const n = Fr.e(zkey.domainSize); + let w = Fr.one; + for (let i = 1; i <= Math.max(1, zkey.nPublic); i++) { + L[i] = Fr.div(Fr.mul(w, challenges.zh), Fr.mul(n, Fr.sub(challenges.xi, w))); + w = Fr.mul(w, Fr.w[zkey.power]); + } + + const eval_l1 = Fr.div( + Fr.sub(challenges.xin, Fr.one), + Fr.mul(n, Fr.sub(challenges.xi, Fr.one)) + ); + + if (logger) { + logger.debug("Lagrange Evaluations: "); + for (let i=1; i. +*/ +const {unstringifyBigInts: unstringifyBigInts$6} = ffjavascript.utils; + +async function plonkFullProve$1(_input, wasmFile, zkeyFileName, logger) { + const input = unstringifyBigInts$6(_input); + + const wtns= { + type: "mem" + }; + await wtnsCalculate$1(input, wasmFile, wtns); + return await plonk16Prove(zkeyFileName, wtns, logger); +} + +/* + Copyright 2021 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const {unstringifyBigInts: unstringifyBigInts$5} = ffjavascript.utils; + + + +async function plonkVerify$1(_vk_verifier, _publicSignals, _proof, logger) { + let vk_verifier = unstringifyBigInts$5(_vk_verifier); + _proof = unstringifyBigInts$5(_proof); + let publicSignals = unstringifyBigInts$5(_publicSignals); + + const curve = await getCurveFromName(vk_verifier.curve); + + const Fr = curve.Fr; + const G1 = curve.G1; + + if (logger) logger.info("PLONK VERIFIER STARTED"); + + let proof = fromObjectProof(curve,_proof); + vk_verifier = fromObjectVk$1(curve, vk_verifier); + + if (!isWellConstructed(curve, proof)) { + logger.error("Proof is not well constructed"); + return false; + } + + if (publicSignals.length != vk_verifier.nPublic) { + logger.error("Invalid number of public inputs"); + return false; + } + const challenges = calculatechallenges(curve, proof, publicSignals, vk_verifier); + + if (logger) { + logger.debug("beta: " + Fr.toString(challenges.beta, 16)); + logger.debug("gamma: " + Fr.toString(challenges.gamma, 16)); + logger.debug("alpha: " + Fr.toString(challenges.alpha, 16)); + logger.debug("xi: " + Fr.toString(challenges.xi, 16)); + for(let i=1;i<6;i++) { + if (logger) logger.debug("v: " + Fr.toString(challenges.v[i], 16)); + } + logger.debug("u: " + Fr.toString(challenges.u, 16)); + } + const L = calculateLagrangeEvaluations(curve, challenges, vk_verifier); + if (logger) { + for (let i=1; i. +*/ +const { unstringifyBigInts: unstringifyBigInts$4} = ffjavascript.utils; + +function p256$1(n) { + let nstr = n.toString(16); + while (nstr.length < 64) nstr = "0"+nstr; + nstr = `"0x${nstr}"`; + return nstr; +} + +async function plonkExportSolidityCallData(_proof, _pub) { + const proof = unstringifyBigInts$4(_proof); + const pub = unstringifyBigInts$4(_pub); + + const curve = await getCurveFromName(proof.curve); + curve.G1; + curve.Fr; + + let inputs = ""; + for (let i=0; i. +*/ + +// We export to zkey the signals and values of the a, b, c, ql, qr, qm, qo and qc + +// a, b and c are signals id (32-bit integers) +// ql, qr, qm, qo and qc are field values + +function getFFlonkConstantConstraint(signal1, Fr) { + return [signal1, 0, 0, Fr.one, Fr.zero, Fr.zero, Fr.zero, Fr.zero]; +} + +function getFFlonkAdditionConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc) { + return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; +} + +function getFFlonkMultiplicationConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc, Fr) { + return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; +} + +/* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ + +const LINEAR_COMBINATION_NULLABLE = 0; +const LINEAR_COMBINATION_CONSTANT = 1; +const LINEAR_COMBINATION_VARIABLE = 2; + +class r1csConstraintProcessor { + constructor(Fr, fnGetConstantConstraint, fnGetAdditionConstraint, fnGetMultiplicationConstraint, logger) { + this.Fr = Fr; + this.logger = logger; + this.fnGetAdditionConstraint = fnGetAdditionConstraint; + this.fnGetMultiplicationConstraint = fnGetMultiplicationConstraint; + } + + processR1csConstraint(settings, lcA, lcB, lcC) { + this.normalizeLinearCombination(lcA); + this.normalizeLinearCombination(lcB); + this.normalizeLinearCombination(lcC); + + const lctA = this.getLinearCombinationType(lcA); + const lctB = this.getLinearCombinationType(lcB); + + if ((lctA === LINEAR_COMBINATION_NULLABLE) || (lctB === LINEAR_COMBINATION_NULLABLE)) { + return this.processR1csAdditionConstraint(settings, lcC); + } else if (lctA === LINEAR_COMBINATION_CONSTANT) { + const lcCC = this.joinLinearCombinations(lcB, lcC, lcA[0]); + return this.processR1csAdditionConstraint(settings, lcCC); + } else if (lctB === LINEAR_COMBINATION_CONSTANT) { + const lcCC = this.joinLinearCombinations(lcA, lcC, lcB[0]); + return this.processR1csAdditionConstraint(settings, lcCC); + } else { + return this.processR1csMultiplicationConstraint(settings, lcA, lcB, lcC); + } + } + + getLinearCombinationType(linCom) { + // let k = this.Fr.zero; + // + // const signalIds = Object.keys(linCom); + // for (let i = 0; i < signalIds.length; i++) { + // if (signalIds[i] === "0") { + // k = this.Fr.add(k, linCom[signalIds[i]]); + // } else { + // return LINEAR_COMBINATION_VARIABLE; + // } + // } + // + // if (!this.Fr.eq(k, this.Fr.zero)) return LINEAR_COMBINATION_CONSTANT; + // + // return LINEAR_COMBINATION_NULLABLE; + + let k = this.Fr.zero; + let n = 0; + const ss = Object.keys(linCom); + for (let i = 0; i < ss.length; i++) { + if (linCom[ss[i]] == 0n) { + delete linCom[ss[i]]; + } else if (ss[i] == 0) { + k = this.Fr.add(k, linCom[ss[i]]); + } else { + n++; + } + } + if (n > 0) return LINEAR_COMBINATION_VARIABLE; + if (!this.Fr.isZero(k)) return LINEAR_COMBINATION_CONSTANT; + return LINEAR_COMBINATION_NULLABLE; + } + + normalizeLinearCombination(linCom) { + const signalIds = Object.keys(linCom); + for (let i = 0; i < signalIds.length; i++) { + if (this.Fr.isZero(linCom[signalIds[i]])) delete linCom[signalIds[i]]; + } + + return linCom; + } + + joinLinearCombinations(linCom1, linCom2, k) { + const res = {}; + + // for (let s in linCom1) { + // const val = this.Fr.mul(k, linCom1[s]); + // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); + // } + // + // for (let s in linCom2) { + // const val = this.Fr.mul(k, linCom2[s]); + // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); + // } + + for (let s in linCom1) { + if (typeof res[s] == "undefined") { + res[s] = this.Fr.mul(k, linCom1[s]); + } else { + res[s] = this.Fr.add(res[s], this.Fr.mul(k, linCom1[s])); + } + } + + for (let s in linCom2) { + if (typeof res[s] == "undefined") { + res[s] = linCom2[s]; + } else { + res[s] = this.Fr.add(res[s], linCom2[s]); + } + } + + return this.normalizeLinearCombination(res); + } + + reduceCoefs(settings, constraintsArr, additionsArr, linCom, maxC) { + const res = { + k: this.Fr.zero, + signals: [], + coefs: [] + }; + const cs = []; + + for (let signalId in linCom) { + if (signalId == 0) { + res.k = this.Fr.add(res.k, linCom[signalId]); + } else if (linCom[signalId] != 0n) { + cs.push([Number(signalId), linCom[signalId]]); + } + } + + while (cs.length > maxC) { + const c1 = cs.shift(); + const c2 = cs.shift(); + const so = settings.nVars++; + + const constraints = this.fnGetAdditionConstraint( + c1[0], c2[0], so, + this.Fr.neg(c1[1]), this.Fr.neg(c2[1]), this.Fr.zero, this.Fr.one, this.Fr.zero); + + constraintsArr.push(constraints); + additionsArr.push([c1[0], c2[0], c1[1], c2[1]]); + + cs.push([so, this.Fr.one]); + } + + for (let i = 0; i < cs.length; i++) { + res.signals[i] = cs[i][0]; + res.coefs[i] = cs[i][1]; + } + + while (res.coefs.length < maxC) { + res.signals.push(0); + res.coefs.push(this.Fr.zero); + } + + return res; + } + + processR1csAdditionConstraint(settings, linCom) { + const constraintsArr = []; + const additionsArr = []; + + const C = this.reduceCoefs(settings, constraintsArr, additionsArr, linCom, 3); + + const constraints = this.fnGetAdditionConstraint( + C.signals[0], C.signals[1], C.signals[2], + C.coefs[0], C.coefs[1], this.Fr.zero, C.coefs[2], C.k); + + constraintsArr.push(constraints); + + return [constraintsArr, additionsArr]; + } + + processR1csMultiplicationConstraint(settings, lcA, lcB, lcC) { + const constraintsArr = []; + const additionsArr = []; + + const A = this.reduceCoefs(settings, constraintsArr, additionsArr, lcA, 1); + const B = this.reduceCoefs(settings, constraintsArr, additionsArr, lcB, 1); + const C = this.reduceCoefs(settings, constraintsArr, additionsArr, lcC, 1); + + const constraints = this.fnGetMultiplicationConstraint( + A.signals[0], B.signals[0], C.signals[0], + this.Fr.mul(A.coefs[0], B.k), + this.Fr.mul(A.k, B.coefs[0]), + this.Fr.mul(A.coefs[0], B.coefs[0]), + this.Fr.neg(C.coefs[0]), + this.Fr.sub(this.Fr.mul(A.k, B.k), C.k)); + + constraintsArr.push(constraints); + + return [constraintsArr, additionsArr]; + } +} + /* Copyright 2022 iden3 association. @@ -9998,164 +10293,6 @@ async function fflonkSetup$1(r1csFilename, ptauFilename, zkeyFilename, logger) { } } -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ -const { keccak256 } = jsSha3__default["default"]; - -const POLYNOMIAL = 0; -const SCALAR = 1; - -class Keccak256Transcript { - constructor(curve) { - this.G1 = curve.G1; - this.Fr = curve.Fr; - - this.reset(); - } - - reset() { - this.data = []; - } - - addPolCommitment(polynomialCommitment) { - this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); - } - - addScalar(scalar) { - this.data.push({type: SCALAR, data: scalar}); - } - - getChallenge() { - if(0 === this.data.length) { - throw new Error("Keccak256Transcript: No data to generate a transcript"); - } - - let nPolynomials = 0; - let nScalars = 0; - - this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); - - let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); - let offset = 0; - - for (let i = 0; i < this.data.length; i++) { - if (POLYNOMIAL === this.data[i].type) { - this.G1.toRprUncompressed(buffer, offset, this.data[i].data); - offset += this.G1.F.n8 * 2; - } else { - this.Fr.toRprBE(buffer, offset, this.data[i].data); - offset += this.Fr.n8; - } - } - - const value = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); - return this.Fr.e(value); - } -} - -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ - -class Proof { - constructor(curve, logger) { - this.curve = curve; - this.logger = logger; - - this.resetProof(); - } - - resetProof() { - this.polynomials = {}; - this.evaluations = {}; - } - - addPolynomial(key, polynomial) { - if (key in this.polynomials) { - this.logger.warn(`proof: polynomial.${key} already exist in proof`); - } - this.polynomials[key] = polynomial; - } - - getPolynomial(key) { - if (!(key in this.polynomials)) { - this.logger.warn(`proof: polynomial ${key} does not exist in proof`); - } - return this.polynomials[key]; - } - - addEvaluation(key, evaluation) { - if (key in this.evaluations) { - this.logger.warn(`proof: evaluations.${key} already exist in proof`); - } - this.evaluations[key] = evaluation; - } - - getEvaluation(key) { - if (!(key in this.evaluations)) { - this.logger.warn(`proof: evaluation ${key} does not exist in proof`); - } - return this.evaluations[key]; - } - - toObjectProof() { - let res = {polynomials: {}, evaluations: {}}; - - Object.keys(this.polynomials).forEach(key => { - res.polynomials[key] = this.curve.G1.toObject(this.polynomials[key]); - }); - - Object.keys(this.evaluations).forEach(key => { - res.evaluations[key] = this.curve.Fr.toObject(this.evaluations[key]); - }); - - return res; - } - - fromObjectProof(objectProof) { - this.resetProof(); - - Object.keys(objectProof.polynomials).forEach(key => { - this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); - }); - - Object.keys(objectProof.evaluations).forEach(key => { - this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); - }); - } -} - /* Copyright 2022 iden3 association. @@ -11320,17 +11457,11 @@ async function fflonkProve$1(zkeyFileName, witnessFileName, logger) { // toInverse.denH1 & toInverse.denH2 -> Computed in round5, computeL() // · denominator needed in the verifier when computing L_i^{S0}(X), L_i^{S1}(X) and L_i^{S2}(X) - for (let i = 0; i < 8; i++) { - toInverse["LiS0_" + (i + 1)] = computeLiS0(i); - } + computeLiS0(toInverse, roots.S0.h0w8, challenges.y, curve); - for (let i = 0; i < 4; i++) { - toInverse["LiS1_" + (i + 1)] = computeLiS1(i); - } + computeLiS1(toInverse, roots.S1.h1w4, challenges.y, curve); - for (let i = 0; i < 6; i++) { - toInverse["LiS2_" + (i + 1)] = computeLiS2(i); - } + computeLiS2(toInverse, roots.S2.h2w3, roots.S2.h3w3, challenges.y, challenges.xi, challenges.xiw, curve); // · L_i i=1 to num public inputs, needed in step 6 and 7 of the verifier to compute L_1(xi) and PI(xi) const size = Math.max(1, zkey.nPublic); @@ -11338,52 +11469,84 @@ async function fflonkProve$1(zkeyFileName, witnessFileName, logger) { let w = Fr.one; for (let i = 0; i < size; i++) { toInverse["Li_" + (i + 1)] = Fr.mul(Fr.e(zkey.domainSize), Fr.sub(challenges.xi, w)); - - w = Fr.mul(w, zkey.w); + w = Fr.mul(w, Fr.w[zkey.power]); } let mulAccumulator = Fr.one; for (const element of Object.values(toInverse)) { - mulAccumulator = Fr.mul(mulAccumulator, element); + if(Array.isArray(element)) { + for (const subElement of element) { + mulAccumulator = Fr.mul(mulAccumulator, subElement); + } + } else { + mulAccumulator = Fr.mul(mulAccumulator, element); + } } return Fr.inv(mulAccumulator); - function computeLiS0(i) { - // Compute L_i^{(S0)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 7; j++) { - idx = (idx + 1) % 8; - - den = Fr.mul(den, Fr.sub(roots.S0.h0w8[i], roots.S0.h0w8[idx])); + + function computeLiS0(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS0_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); } - return den; + + return Li; } - function computeLiS1(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 3; j++) { - idx = (idx + 1) % 4; + function computeLiS1(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS1_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); - den = Fr.mul(den, Fr.sub(roots.S1.h1w4[i], roots.S1.h1w4[idx])); } - return den; + + return Li; } - function computeLiS2(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 5; j++) { - idx = (idx + 1) % 6; - - const root1 = i < 3 ? roots.S2.h2w3[i] : roots.S2.h3w3[i - 3]; - const root2 = idx < 3 ? roots.S2.h2w3[idx] : roots.S2.h3w3[idx - 3]; - den = Fr.mul(den, Fr.sub(root1, root2)); + function computeLiS2(toInverse, S2, S2p, value, xi, xiw, curve) { + const Fr = curve.Fr; + + const Li = []; + + const _3h2 = Fr.mul(Fr.e(3), S2[0]); + const xisubxiw = Fr.sub(xi, xiw); + let den1 = Fr.mul(_3h2, xisubxiw); + for (let i = 0; i < 3; i++) { + const den2 = S2[2 * i % 3]; + const den3 = Fr.sub(value, S2[i]); + + toInverse[["LiS2_" + (i + 1)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } - return den; + + const _3h3 = Fr.mul(Fr.e(3), S2p[0]); + const xiwsubxi = Fr.sub(xiw, xi); + den1 = Fr.mul(_3h3, xiwsubxi); + for (let i = 0; i < 3; i++) { + const den2 = S2p[2 * i % 3]; + const den3 = Fr.sub(value, S2p[i]); + + toInverse[["LiS2_" + (i + 1 + 3)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } + + return Li; } } } @@ -11476,15 +11639,23 @@ async function fflonkVerify$1(_vk_verifier, _publicSignals, _proof, logger) { // STEP 1 - Validate that all polynomial commitments ∈ G_1 if (logger) logger.info("> Checking commitments belong to G1"); if (!commitmentsBelongToG1(curve, proof, vk)) { - logger.error("Proof is not well constructed"); + if (logger) logger.error("Proof commitments are not valid"); return false; } - // TODO // STEP 2 - Validate that all evaluations ∈ F + if (logger) logger.info("> Checking evaluations belong to F"); + if (!evaluationsAreValid(curve, proof)) { + if (logger) logger.error("Proof evaluations are not valid."); + return false; + } - // TODO // STEP 3 - Validate that w_i ∈ F for i ∈ [l] + if (logger) logger.info("> Checking public inputs belong to F"); + if (!publicInputsAreValid(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } // STEP 4 - Compute the challenges: beta, gamma, xi, alpha and y ∈ F // as in prover description, from the common preprocessed inputs, public inputs and elements of π_SNARK @@ -11506,7 +11677,7 @@ async function fflonkVerify$1(_vk_verifier, _publicSignals, _proof, logger) { // STEP 8 - Compute polynomial r0 ∈ F_{<4}[X] if (logger) logger.info("> Computing r0(y)"); - const r0 = computeR0(proof, challenges, roots, pi, curve, logger); + const r0 = computeR0(proof, challenges, roots, curve, logger); // STEP 9 - Compute polynomial r1 ∈ F_{<4}[X] if (logger) logger.info("> Computing r1(y)"); @@ -11566,6 +11737,41 @@ function commitmentsBelongToG1(curve, proof, vk) { && G1.isValid(vk.C0); } +function checkValueBelongToField(curve, value) { + return ffjavascript.Scalar.lt(value, curve.r); +} + +function checkEvaluationIsValid(curve, evaluation) { + return checkValueBelongToField(curve, ffjavascript.Scalar.fromRprLE(evaluation)); +} + +function evaluationsAreValid(curve, proof) { + return checkEvaluationIsValid(curve, proof.evaluations.ql) + && checkEvaluationIsValid(curve, proof.evaluations.qr) + && checkEvaluationIsValid(curve, proof.evaluations.qm) + && checkEvaluationIsValid(curve, proof.evaluations.qo) + && checkEvaluationIsValid(curve, proof.evaluations.qc) + && checkEvaluationIsValid(curve, proof.evaluations.s1) + && checkEvaluationIsValid(curve, proof.evaluations.s2) + && checkEvaluationIsValid(curve, proof.evaluations.s3) + && checkEvaluationIsValid(curve, proof.evaluations.a) + && checkEvaluationIsValid(curve, proof.evaluations.b) + && checkEvaluationIsValid(curve, proof.evaluations.c) + && checkEvaluationIsValid(curve, proof.evaluations.z) + && checkEvaluationIsValid(curve, proof.evaluations.zw) + && checkEvaluationIsValid(curve, proof.evaluations.t1w) + && checkEvaluationIsValid(curve, proof.evaluations.t2w); +} + +function publicInputsAreValid(curve, publicInputs) { + for(let i = 0; i < publicInputs.length; i++) { + if(!checkValueBelongToField(curve, publicInputs[i])) { + return false; + } + } + return true; +} + function computeChallenges(curve, proof, vk, publicSignals, logger) { const Fr = curve.Fr; @@ -11645,6 +11851,7 @@ function computeChallenges(curve, proof, vk, publicSignals, logger) { // Compute xi = xi_seeder^12 challenges.xi = Fr.mul(Fr.square(roots.S2.h2w3[0]), roots.S2.h2w3[0]); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[vk.power]); challenges.xiN = challenges.xi; vk.domainSize = 1; @@ -11724,15 +11931,17 @@ function calculatePI(curve, publicSignals, lagrangeEvals) { return pi; } -function computeR0(proof, challenges, roots, pi, curve, logger) { +function computeR0(proof, challenges, roots, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S0.h0w8, challenges.y, challenges.xi, curve); + // r0(y) = ∑_1^8 C_0(h_0 ω_8^{i-1}) L_i(y). To this end we need to compute // Compute the 8 C0 values - if (logger) logger.info("··· Computing C0(h_0ω_8^i) values"); + if (logger) logger.info("··· Computing r0(y)"); - let c0Values = []; + let res = Fr.zero; for (let i = 0; i < 8; i++) { let coefValues = []; coefValues[1] = roots.S0.h0w8[i]; @@ -11740,34 +11949,25 @@ function computeR0(proof, challenges, roots, pi, curve, logger) { coefValues[j] = Fr.mul(coefValues[j - 1], roots.S0.h0w8[i]); } - c0Values[i] = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qo, coefValues[2])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qm, coefValues[3])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qc, coefValues[4])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s1, coefValues[5])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s2, coefValues[6])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s3, coefValues[7])); + let c0 = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qo, coefValues[2])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qm, coefValues[3])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qc, coefValues[4])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s1, coefValues[5])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s2, coefValues[6])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s3, coefValues[7])); + + res = Fr.add(res, Fr.mul(c0, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R0 = Polynomial.lagrangePolynomialInterpolation( - [roots.S0.h0w8[0], roots.S0.h0w8[1], roots.S0.h0w8[2], roots.S0.h0w8[3], - roots.S0.h0w8[4], roots.S0.h0w8[5], roots.S0.h0w8[6], roots.S0.h0w8[7]], - c0Values, curve); - - // Check the degree of r1(X) < 4 - if (R0.degree() > 7) { - throw new Error("R0 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r0(y)"); - return R0.evaluate(challenges.y); + return res; } function computeR1(proof, challenges, roots, pi, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S1.h1w4, challenges.y, challenges.xi, curve); + // r1(y) = ∑_1^4 C_1(h_1 ω_4^{i-1}) L_i(y). To this end we need to compute // Z1 = {C1(h_1}, C1(h_1 ω_4), C1(h_1 ω_4^2), C1(h_1 ω_4^3)} // where C_1(h_1 ω_4^{i-1}) = eval.a + h_1 ω_4^i eval.b + (h_1 ω_4^i)^2 eval.c + (h_1 ω_4^i)^3 T0(xi), @@ -11786,33 +11986,25 @@ function computeR1(proof, challenges, roots, pi, curve, logger) { // Compute the 4 C1 values if (logger) logger.info("··· Computing C1(h_1ω_4^i) values"); - let c1Values = []; + let res = Fr.zero; for (let i = 0; i < 4; i++) { - c1Values[i] = proof.evaluations.a; - c1Values[i] = Fr.add(c1Values[i], Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); + let c1 = proof.evaluations.a; + c1 = Fr.add(c1, Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); const h1w4Squared = Fr.square(roots.S1.h1w4[i]); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(h1w4Squared, proof.evaluations.c)); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + c1 = Fr.add(c1, Fr.mul(h1w4Squared, proof.evaluations.c)); + c1 = Fr.add(c1, Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + + res = Fr.add(res, Fr.mul(c1, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R1 = Polynomial.lagrangePolynomialInterpolation( - [roots.S1.h1w4[0], roots.S1.h1w4[1], roots.S1.h1w4[2], roots.S1.h1w4[3]], - c1Values, curve); - - // Check the degree of r1(X) < 4 - if (R1.degree() > 3) { - throw new Error("R1 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r1(y)"); - return R1.evaluate(challenges.y); + return res; } function computeR2(proof, challenges, roots, lagrange1, vk, curve, logger) { const Fr = curve.Fr; + const LiS2 = computeLagrangeLiS2([roots.S2.h2w3, roots.S2.h3w3], challenges.y, challenges.xi, challenges.xiw, curve); + // r2(y) = ∑_1^3 C_2(h_2 ω_3^{i-1}) L_i(y) + ∑_1^3 C_2(h_3 ω_3^{i-1}) L_{i+3}(y). To this end we need to compute // Z2 = {[C2(h_2}, C2(h_2 ω_3), C2(h_2 ω_3^2)], [C2(h_3}, C2(h_3 ω_3), C2(h_3 ω_3^2)]} // where C_2(h_2 ω_3^{i-1}) = eval.z + h_2 ω_2^i T1(xi) + (h_2 ω_3^i)^2 T2(xi), @@ -11845,33 +12037,23 @@ function computeR2(proof, challenges, roots, lagrange1, vk, curve, logger) { // Compute the 6 C2 values if (logger) logger.info("··· Computing C2(h_2ω_3^i) values"); - let c2Values = []; + let res = Fr.zero; for (let i = 0; i < 3; i++) { - c2Values[i] = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); - c2Values[i] = Fr.add(c2Values[i], Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + let c2 = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i])); } if (logger) logger.info("··· Computing C2(h_3ω_3^i) values"); for (let i = 0; i < 3; i++) { - c2Values[i + 3] = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); - c2Values[i + 3] = Fr.add(c2Values[i + 3], Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + let c2 = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i + 3])); } - // Interpolate a polynomial with the points computed previously - if (logger) logger.info("··· Computing r2(xi)"); - const R2 = Polynomial.lagrangePolynomialInterpolation( - [roots.S2.h2w3[0], roots.S2.h2w3[1], roots.S2.h2w3[2], - roots.S2.h3w3[0], roots.S2.h3w3[1], roots.S2.h3w3[2]], - c2Values, curve); - - // Check the degree of r2(X) < 6 - if (R2.degree() > 5) { - throw new Error("R2 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r2(y)"); - return R2.evaluate(challenges.y); + return res; } function computeF(curve, proof, vk, challenges, roots) { @@ -11936,6 +12118,61 @@ async function isValidPairing(curve, proof, challenges, vk, F, E, J) { return await curve.pairingEq(G1.neg(A1), A2, B1, B2); } + +function computeLagrangeLiSi(roots, x, xi, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const num = Fr.sub(Fr.exp(x, len), xi); + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + Li[i] = Fr.div(num, Fr.mul(Fr.mul(den1, den2), den3)); + } + + return Li; +} + +function computeLagrangeLiS2(roots, value, xi0, xi1, curve) { + const Fr = curve.Fr; + + const Li = []; + + const len = roots[0].length; + const n = len * roots.length; + + const num1 = Fr.exp(value, n); + const num2 = Fr.mul(Fr.add(xi0, xi1), Fr.exp(value, len)); + const num3 = Fr.mul(xi0, xi1); + const num = Fr.add(Fr.sub(num1, num2), num3); + + let den1 = Fr.mul(Fr.mul(Fr.e(len), roots[0][0]), Fr.sub(xi0, xi1)); + for (let i = 0; i < len; i++) { + const den2 = roots[0][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[0][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i] = Fr.div(num, den); + } + + den1 = Fr.mul(Fr.mul(Fr.e(len), roots[1][0]), Fr.sub(xi1, xi0)); + for (let i = 0; i < len; i++) { + const den2 = roots[1][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[1][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i + len] = Fr.div(num, den); + } + + return Li; +} + /* Copyright 2021 0KIMS association. @@ -11957,14 +12194,10 @@ async function isValidPairing(curve, proof, challenges, vk, F, E, J) { const {unstringifyBigInts: unstringifyBigInts$1} = ffjavascript.utils; -function i2hex(i) { - return ("0" + i.toString(16)).slice(-2); -} - function p256(n) { let nstr = n.toString(16); while (nstr.length < 64) nstr = "0" + nstr; - nstr = `"0x${nstr}"`; + nstr = `0x${nstr}`; return nstr; } @@ -11973,8 +12206,8 @@ async function fflonkExportCallData(_pub, _proof) { const pub = unstringifyBigInts$1(_pub); const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; + curve.G1; + curve.Fr; let inputs = ""; for (let i = 0; i < pub.length; i++) { @@ -11982,32 +12215,17 @@ async function fflonkExportCallData(_pub, _proof) { inputs = inputs + p256(pub[i]); } - const proofBuff = new Uint8Array(G1.F.n8 * 2 * 4 + Fr.n8 * 16); - - G1.toRprUncompressed(proofBuff, 0, G1.e(proof.polynomials.C1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 2, G1.e(proof.polynomials.C2)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 4, G1.e(proof.polynomials.W1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 6, G1.e(proof.polynomials.W2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8, Fr.e(proof.evaluations.ql)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8, Fr.e(proof.evaluations.qr)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 2, Fr.e(proof.evaluations.qm)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 3, Fr.e(proof.evaluations.qo)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 4, Fr.e(proof.evaluations.qc)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 5, Fr.e(proof.evaluations.s1)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 6, Fr.e(proof.evaluations.s2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 7, Fr.e(proof.evaluations.s3)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 8, Fr.e(proof.evaluations.a)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 9, Fr.e(proof.evaluations.b)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 10, Fr.e(proof.evaluations.c)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 11, Fr.e(proof.evaluations.z)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 12, Fr.e(proof.evaluations.zw)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 13, Fr.e(proof.evaluations.t1w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 14, Fr.e(proof.evaluations.t2w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 15, Fr.e(proof.evaluations.inv)); - - const proofHex = Array.from(proofBuff).map(i2hex).join(""); - - return `0x${proofHex},[${inputs}]`; + return `[${p256(proof.polynomials.C1[0])}, ${p256(proof.polynomials.C1[1])},` + + `${p256(proof.polynomials.C2[0])},${p256(proof.polynomials.C2[1])},` + + `${p256(proof.polynomials.W1[0])},${p256(proof.polynomials.W1[1])},` + + `${p256(proof.polynomials.W2[0])},${p256(proof.polynomials.W2[1])},` + + `${p256(proof.evaluations.ql)},${p256(proof.evaluations.qr)},${p256(proof.evaluations.qm)},` + + `${p256(proof.evaluations.qo)},${p256(proof.evaluations.qc)},${p256(proof.evaluations.s1)},` + + `${p256(proof.evaluations.s2)},${p256(proof.evaluations.s3)},${p256(proof.evaluations.a)},` + + `${p256(proof.evaluations.b)},${p256(proof.evaluations.c)},${p256(proof.evaluations.z)},` + + `${p256(proof.evaluations.zw)},${p256(proof.evaluations.t1w)},${p256(proof.evaluations.t2w)},` + + `${p256(proof.evaluations.inv)}],` + + `[${inputs}]`; } /* diff --git a/build/main.cjs b/build/main.cjs index 1505e02..6c9ede5 100644 --- a/build/main.cjs +++ b/build/main.cjs @@ -487,7 +487,7 @@ async function readHeaderPlonk(fd, sections, toObject) { zkey.domainSize = await fd.readULE32(); zkey.power = log2(zkey.domainSize); zkey.nAdditions = await fd.readULE32(); - zkey.nConstrains = await fd.readULE32(); + zkey.nConstraints = await fd.readULE32(); zkey.k1 = await fd.read(n8r); zkey.k2 = await fd.read(n8r); @@ -1340,6 +1340,11 @@ async function groth16Verify(_vk_verifier, _publicSignals, _proof, logger) { const IC = new Uint8Array(curve.G1.F.n8*2 * publicSignals.length); const w = new Uint8Array(curve.Fr.n8 * publicSignals.length); + if (!publicInputsAreValid$1(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } + for (let i=0; i. */ -const {stringifyBigInts: stringifyBigInts$1} = ffjavascript.utils; -const { keccak256: keccak256$2 } = jsSha3__default["default"]; -async function plonk16Prove(zkeyFileName, witnessFileName, logger) { - const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils__namespace.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23); +class Proof { + constructor(curve, logger) { + this.curve = curve; + this.logger = logger; - const wtns = await readHeader(fdWtns, sectionsWtns); - - const {fd: fdZKey, sections: sectionsZKey} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23); - - const zkey = await readHeader$1(fdZKey, sectionsZKey); - if (zkey.protocol != "plonk") { - throw new Error("zkey file is not plonk"); + this.resetProof(); } - if (!ffjavascript.Scalar.eq(zkey.r, wtns.q)) { - throw new Error("Curve of the witness does not match the curve of the proving key"); + resetProof() { + this.polynomials = {}; + this.evaluations = {}; } - if (wtns.nWitness != zkey.nVars -zkey.nAdditions) { - throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}, ${zkey.nAdditions}`); - } - - const curve = zkey.curve; - const Fr = curve.Fr; - const G1 = curve.G1; - const n8r = curve.Fr.n8; - - if (logger) logger.debug("Reading Wtns"); - const buffWitness = await binFileUtils__namespace.readSection(fdWtns, sectionsWtns, 2); - // First element in plonk is not used and can be any value. (But always the same). - // We set it to zero to go faster in the exponentiations. - buffWitness.set(Fr.zero, 0); - const buffInternalWitness = new ffjavascript.BigBuffer(n8r*zkey.nAdditions); - - await calculateAdditions(); - - let A,B,C,Z; - let A4, B4, C4, Z4; - let pol_a,pol_b,pol_c, pol_z, pol_t, pol_r; - let proof = {}; - - const sigmaBuff = new ffjavascript.BigBuffer(zkey.domainSize*n8r*4*3); - let o = sectionsZKey[12][0].p + zkey.domainSize*n8r; - await fdZKey.readToBuffer(sigmaBuff, 0 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*4 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*8 , zkey.domainSize*n8r*4, o); - - const pol_s1 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s1, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p); - - const pol_s2 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s2, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 5*zkey.domainSize*n8r); - - const PTau = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 14); - - - const ch = {}; - - await round1(); - await round2(); - await round3(); - await round4(); - await round5(); - - - /////////////////////// - // Final adjustments // - /////////////////////// - - proof.protocol = "plonk"; - proof.curve = curve.name; - - await fdZKey.close(); - await fdWtns.close(); - - let publicSignals = []; - - for (let i=1; i<= zkey.nPublic; i++) { - const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); - publicSignals.push(ffjavascript.Scalar.fromRprLE(pub)); - } - - proof.A = G1.toObject(proof.A); - proof.B = G1.toObject(proof.B); - proof.C = G1.toObject(proof.C); - proof.Z = G1.toObject(proof.Z); - - proof.T1 = G1.toObject(proof.T1); - proof.T2 = G1.toObject(proof.T2); - proof.T3 = G1.toObject(proof.T3); - - proof.eval_a = Fr.toObject(proof.eval_a); - proof.eval_b = Fr.toObject(proof.eval_b); - proof.eval_c = Fr.toObject(proof.eval_c); - proof.eval_s1 = Fr.toObject(proof.eval_s1); - proof.eval_s2 = Fr.toObject(proof.eval_s2); - proof.eval_zw = Fr.toObject(proof.eval_zw); - proof.eval_t = Fr.toObject(proof.eval_t); - proof.eval_r = Fr.toObject(proof.eval_r); - - proof.Wxi = G1.toObject(proof.Wxi); - proof.Wxiw = G1.toObject(proof.Wxiw); - - delete proof.eval_t; - - proof = stringifyBigInts$1(proof); - publicSignals = stringifyBigInts$1(publicSignals); - - return {proof, publicSignals}; - - async function calculateAdditions() { - const additionsBuff = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 3); - - const sSum = 8+curve.Fr.n8*2; - - for (let i=0; i0)&&(Fr.isZero(p.slice(deg*n8r, deg*n8r+n8r)))) deg--; - return deg; - } - - function printPol(P) { - const n=(P.byteLength/n8r); - console.log("["); - for (let i=0; i { + const value = this.curve.G1.toObject(this.polynomials[key]); + if(splitFields) { + res.polynomials[key] = value; + } else { + res[key] = value; } - console.log("]"); + }); + + Object.keys(this.evaluations).forEach(key => { + const value = this.curve.Fr.toObject(this.evaluations[key]); + if(splitFields) { + res.evaluations[key] = value; + } else { + res[key] = value; + } + }); + + return res; + } + + fromObjectProof(objectProof) { + this.resetProof(); + + Object.keys(objectProof.polynomials).forEach(key => { + this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); + }); + + Object.keys(objectProof.evaluations).forEach(key => { + this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); + }); + } +} + +/* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const { keccak256 } = jsSha3__default["default"]; + +const POLYNOMIAL = 0; +const SCALAR = 1; + +class Keccak256Transcript { + constructor(curve) { + this.G1 = curve.G1; + this.Fr = curve.Fr; + + this.reset(); + } + + reset() { + this.data = []; + } + + addPolCommitment(polynomialCommitment) { + this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); + } + + addScalar(scalar) { + this.data.push({type: SCALAR, data: scalar}); + } + + getChallenge() { + if(0 === this.data.length) { + throw new Error("Keccak256Transcript: No data to generate a transcript"); } - */ - if (logger) logger.debug("phse3: Reading QM4"); - const QM4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QM4, 0 , zkey.domainSize*n8r*4, sectionsZKey[7][0].p + zkey.domainSize*n8r); + let nPolynomials = 0; + let nScalars = 0; - if (logger) logger.debug("phse3: Reading QL4"); - const QL4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QL4, 0 , zkey.domainSize*n8r*4, sectionsZKey[8][0].p + zkey.domainSize*n8r); + this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); - if (logger) logger.debug("phse3: Reading QR4"); - const QR4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QR4, 0 , zkey.domainSize*n8r*4, sectionsZKey[9][0].p + zkey.domainSize*n8r); + let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); + let offset = 0; - if (logger) logger.debug("phse3: Reading QO4"); - const QO4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QO4, 0 , zkey.domainSize*n8r*4, sectionsZKey[10][0].p + zkey.domainSize*n8r); + for (let i = 0; i < this.data.length; i++) { + if (POLYNOMIAL === this.data[i].type) { + this.G1.toRprUncompressed(buffer, offset, this.data[i].data); + offset += this.G1.F.n8 * 2; + } else { + this.Fr.toRprBE(buffer, offset, this.data[i].data); + offset += this.Fr.n8; + } + } - if (logger) logger.debug("phse3: Reading QC4"); - const QC4 = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - await fdZKey.readToBuffer(QC4, 0 , zkey.domainSize*n8r*4, sectionsZKey[11][0].p + zkey.domainSize*n8r); + const value = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); + return this.Fr.e(value); + } +} - const lPols = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 13); +/* + Copyright 2022 iden3 association. - const transcript3 = new Uint8Array(G1.F.n8*2); - G1.toRprUncompressed(transcript3, 0, proof.Z); + This file is part of snarkjs. - ch.alpha = hashToFr(transcript3); + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. - if (logger) logger.debug("alpha: " + Fr.toString(ch.alpha)); + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ - const Z1 = [ +class MulZ { + static getZ1(Fr) { + return [ Fr.zero, Fr.add(Fr.e(-1), Fr.w[2]), Fr.e(-2), Fr.sub(Fr.e(-1), Fr.w[2]), ]; + } - const Z2 = [ + static getZ2(Fr) { + return [ Fr.zero, Fr.add(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), Fr.e(4), Fr.sub(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), ]; + } - const Z3 = [ + static getZ3(Fr) { + return [ Fr.zero, Fr.add(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), Fr.e(-8), Fr.sub(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), ]; - const T = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - const Tz = new ffjavascript.BigBuffer(zkey.domainSize*4*n8r); - - let w = Fr.one; - for (let i=0; i (zkey.domainSize*3 -4) ) { - if (!Fr.isZero(a)) { - throw new Error("T Polynomial is not divisible"); - } - } - } - - if (logger) logger.debug("ifft Tz"); - const tz = await Fr.ifft(Tz); - for (let i=0; i (zkey.domainSize*3 +5) ) { - if (!Fr.isZero(a)) { - throw new Error("Tz Polynomial is not well calculated"); - } - } else { - t.set( - Fr.add( - t.slice(i*n8r, (i+1)*n8r), - a - ), - i*n8r - ); - } - } - - pol_t = t.slice(0, (zkey.domainSize * 3 + 6) * n8r); - - // t(x) has degree 3n + 5, we are going to split t(x) into three smaller polynomials: - // t'_low and t'_mid with a degree < n and t'_high with a degree n+5 - // such that t(x) = t'_low(X) + X^n t'_mid(X) + X^{2n} t'_hi(X) - // To randomize the parts we use blinding scalars b_10 and b_11 in a way that doesn't change t(X): - // t_low(X) = t'_low(X) + b_10 X^n - // t_mid(X) = t'_mid(X) - b_10 + b_11 X^n - // t_high(X) = t'_high(X) - b_11 - // such that - // t(X) = t_low(X) + X^n t_mid(X) + X^2n t_high(X) - - // compute t_low(X) - let polTLow = new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r); - polTLow.set(t.slice(0, zkey.domainSize * n8r), 0); - // Add blinding scalar b_10 as a new coefficient n - polTLow.set(ch.b[10], zkey.domainSize * n8r); - - // compute t_mid(X) - let polTMid = new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r); - polTMid.set(t.slice(zkey.domainSize * n8r, zkey.domainSize * 2 * n8r), 0); - // Subtract blinding scalar b_10 to the lowest coefficient of t_mid - const lowestMid = Fr.sub(polTMid.slice(0, n8r), ch.b[10]); - polTMid.set(lowestMid, 0); - // Add blinding scalar b_11 as a new coefficient n - polTMid.set(ch.b[11], zkey.domainSize * n8r); - - // compute t_high(X) - let polTHigh = new ffjavascript.BigBuffer((zkey.domainSize + 6) * n8r); - polTHigh.set(t.slice(zkey.domainSize * 2 * n8r, (zkey.domainSize * 3 + 6) * n8r), 0); - //Subtract blinding scalar b_11 to the lowest coefficient of t_high - const lowestHigh = Fr.sub(polTHigh.slice(0, n8r), ch.b[11]); - polTHigh.set(lowestHigh, 0); - - proof.T1 = await expTau(polTLow, "multiexp T1"); - proof.T2 = await expTau(polTMid, "multiexp T2"); - proof.T3 = await expTau(polTHigh, "multiexp T3"); - - function mul2(a,b, ap, bp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - r = a_b; - - let a0 = Fr.add(a_bp, ap_b); - - let a1 = ap_bp; - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - } - - return [r, rz]; - } - - function mul4(a,b,c,d, ap, bp, cp, dp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - const c_d = Fr.mul(c,d); - const c_dp = Fr.mul(c,dp); - const cp_d = Fr.mul(cp,d); - const cp_dp = Fr.mul(cp,dp); - - r = Fr.mul(a_b, c_d); - - let a0 = Fr.mul(ap_b, c_d); - a0 = Fr.add(a0, Fr.mul(a_bp, c_d)); - a0 = Fr.add(a0, Fr.mul(a_b, cp_d)); - a0 = Fr.add(a0, Fr.mul(a_b, c_dp)); - - let a1 = Fr.mul(ap_bp, c_d); - a1 = Fr.add(a1, Fr.mul(ap_b, cp_d)); - a1 = Fr.add(a1, Fr.mul(ap_b, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_bp, cp_d)); - a1 = Fr.add(a1, Fr.mul(a_bp, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_b, cp_dp)); - - let a2 = Fr.mul(a_bp, cp_dp); - a2 = Fr.add(a2, Fr.mul(ap_b, cp_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, c_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, cp_d)); - - let a3 = Fr.mul(ap_bp, cp_dp); - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - rz = Fr.add(rz, Fr.mul(Z2[p], a2)); - rz = Fr.add(rz, Fr.mul(Z3[p], a3)); - } - - return [r, rz]; - } } - async function round4() { - const pol_qm = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qm, 0 , zkey.domainSize*n8r, sectionsZKey[7][0].p); + static mul2(a, b, ap, bp, p, Fr) { + const Z1 = this.getZ1(Fr); + let r, rz; - const pol_ql = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_ql, 0 , zkey.domainSize*n8r, sectionsZKey[8][0].p); + const a_b = Fr.mul(a, b); + const a_bp = Fr.mul(a, bp); + const ap_b = Fr.mul(ap, b); + const ap_bp = Fr.mul(ap, bp); - const pol_qr = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qr, 0 , zkey.domainSize*n8r, sectionsZKey[9][0].p); + r = a_b; - const pol_qo = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qo, 0 , zkey.domainSize*n8r, sectionsZKey[10][0].p); + let a0 = Fr.add(a_bp, ap_b); - const pol_qc = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qc, 0 , zkey.domainSize*n8r, sectionsZKey[11][0].p); + let a1 = ap_bp; - const pol_s3 = new ffjavascript.BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s3, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 10*zkey.domainSize*n8r); - - const transcript4 = new Uint8Array(G1.F.n8*2*3); - G1.toRprUncompressed(transcript4, 0, proof.T1); - G1.toRprUncompressed(transcript4, G1.F.n8*2, proof.T2); - G1.toRprUncompressed(transcript4, G1.F.n8*4, proof.T3); - ch.xi = hashToFr(transcript4); - - if (logger) logger.debug("xi: " + Fr.toString(ch.xi)); - - proof.eval_a = evalPol(pol_a, ch.xi); - proof.eval_b = evalPol(pol_b, ch.xi); - proof.eval_c = evalPol(pol_c, ch.xi); - proof.eval_s1 = evalPol(pol_s1, ch.xi); - proof.eval_s2 = evalPol(pol_s2, ch.xi); - proof.eval_t = evalPol(pol_t, ch.xi); - proof.eval_zw = evalPol(pol_z, Fr.mul(ch.xi, Fr.w[zkey.power])); - - const coef_ab = Fr.mul(proof.eval_a, proof.eval_b); - - let e2a = proof.eval_a; - const betaxi = Fr.mul(ch.beta, ch.xi); - e2a = Fr.add( e2a, betaxi); - e2a = Fr.add( e2a, ch.gamma); - - let e2b = proof.eval_b; - e2b = Fr.add( e2b, Fr.mul(betaxi, zkey.k1)); - e2b = Fr.add( e2b, ch.gamma); - - let e2c = proof.eval_c; - e2c = Fr.add( e2c, Fr.mul(betaxi, zkey.k2)); - e2c = Fr.add( e2c, ch.gamma); - - const e2 = Fr.mul(Fr.mul(Fr.mul(e2a, e2b), e2c), ch.alpha); - - let e3a = proof.eval_a; - e3a = Fr.add( e3a, Fr.mul(ch.beta, proof.eval_s1)); - e3a = Fr.add( e3a, ch.gamma); - - let e3b = proof.eval_b; - e3b = Fr.add( e3b, Fr.mul(ch.beta, proof.eval_s2)); - e3b = Fr.add( e3b, ch.gamma); - - let e3 = Fr.mul(e3a, e3b); - e3 = Fr.mul(e3, ch.beta); - e3 = Fr.mul(e3, proof.eval_zw); - e3 = Fr.mul(e3, ch.alpha); - - ch.xim= ch.xi; - for (let i=0; i=0; i--) { - res = Fr.add(Fr.mul(res, x), P.slice(i*n8r, (i+1)*n8r)); - } - return res; - } - - function divPol1(P, d) { - const n = P.byteLength/n8r; - const res = new ffjavascript.BigBuffer(n*n8r); - res.set(Fr.zero, (n-1) *n8r); - res.set(P.slice((n-1)*n8r, n*n8r), (n-2)*n8r); - for (let i=n-3; i>=0; i--) { - res.set( - Fr.add( - P.slice((i+1)*n8r, (i+2)*n8r), - Fr.mul( - d, - res.slice((i+1)*n8r, (i+2)*n8r) - ) - ), - i*n8r - ); - } - if (!Fr.eq( - P.slice(0, n8r), - Fr.mul( - Fr.neg(d), - res.slice(0, n8r) - ) - )) { - throw new Error("Polinomial does not divide"); - } - return res; - } - - async function expTau(b, name) { - const n = b.byteLength/n8r; - const PTauN = PTau.slice(0, n*curve.G1.F.n8*2); - const bm = await curve.Fr.batchFromMontgomery(b); - let res = await curve.G1.multiExpAffine(PTauN, bm, logger, name); - res = curve.G1.toAffine(res); - return res; - } - - - async function to4T(A, pz) { - pz = pz || []; - let a = await Fr.ifft(A); - const a4 = new ffjavascript.BigBuffer(n8r*zkey.domainSize*4); - a4.set(a, 0); - - const a1 = new ffjavascript.BigBuffer(n8r*(zkey.domainSize + pz.length)); - a1.set(a, 0); - for (let i= 0; i. -*/ -const {unstringifyBigInts: unstringifyBigInts$5} = ffjavascript.utils; - -async function plonkFullProve(_input, wasmFile, zkeyFileName, logger) { - const input = unstringifyBigInts$5(_input); - - const wtns= { - type: "mem" - }; - await wtnsCalculate(input, wasmFile, wtns); - return await plonk16Prove(zkeyFileName, wtns, logger); -} - -/* - Copyright 2021 0kims association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ -const {unstringifyBigInts: unstringifyBigInts$4} = ffjavascript.utils; -const { keccak256: keccak256$1 } = jsSha3__default["default"]; - - -async function plonkVerify(_vk_verifier, _publicSignals, _proof, logger) { - let vk_verifier = unstringifyBigInts$4(_vk_verifier); - let proof = unstringifyBigInts$4(_proof); - let publicSignals = unstringifyBigInts$4(_publicSignals); - - const curve = await getCurveFromName(vk_verifier.curve); - - const Fr = curve.Fr; - const G1 = curve.G1; - - proof = fromObjectProof(curve,proof); - vk_verifier = fromObjectVk$1(curve, vk_verifier); - if (!isWellConstructed(curve, proof)) { - logger.error("Proof is not well constructed"); - return false; - } - if (publicSignals.length != vk_verifier.nPublic) { - logger.error("Invalid number of public inputs"); - return false; - } - const challanges = calculateChallanges(curve, proof, publicSignals); - if (logger) { - logger.debug("beta: " + Fr.toString(challanges.beta, 16)); - logger.debug("gamma: " + Fr.toString(challanges.gamma, 16)); - logger.debug("alpha: " + Fr.toString(challanges.alpha, 16)); - logger.debug("xi: " + Fr.toString(challanges.xi, 16)); - logger.debug("v1: " + Fr.toString(challanges.v[1], 16)); - logger.debug("v6: " + Fr.toString(challanges.v[6], 16)); - logger.debug("u: " + Fr.toString(challanges.u, 16)); - } - const L = calculateLagrangeEvaluations(curve, challanges, vk_verifier); - if (logger) { - logger.debug("Lagrange Evaluations: "); - for (let i=1; i. -*/ -const { unstringifyBigInts: unstringifyBigInts$3} = ffjavascript.utils; - -function i2hex$1(i) { - return ("0" + i.toString(16)).slice(-2); -} - -function p256$1(n) { - let nstr = n.toString(16); - while (nstr.length < 64) nstr = "0"+nstr; - nstr = `"0x${nstr}"`; - return nstr; -} - -async function plonkExportSolidityCallData(_proof, _pub) { - const proof = unstringifyBigInts$3(_proof); - const pub = unstringifyBigInts$3(_pub); - - const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; - - let inputs = ""; - for (let i=0; i. -*/ - -var plonk = /*#__PURE__*/Object.freeze({ - __proto__: null, - setup: plonkSetup, - fullProve: plonkFullProve, - prove: plonk16Prove, - verify: plonkVerify, - exportSolidityCallData: plonkExportSolidityCallData -}); - -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ - -// We export to zkey the signals and values of the a, b, c, ql, qr, qm, qo and qc - -// a, b and c are signals id (32-bit integers) -// ql, qr, qm, qo and qc are field values - -function getFFlonkConstantConstraint(signal1, Fr) { - return [signal1, 0, 0, Fr.one, Fr.zero, Fr.zero, Fr.zero, Fr.zero]; -} - -function getFFlonkAdditionConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc) { - return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; -} - -function getFFlonkMultiplicationConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc, Fr) { - return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; -} - -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ - -const LINEAR_COMBINATION_NULLABLE = 0; -const LINEAR_COMBINATION_CONSTANT = 1; -const LINEAR_COMBINATION_VARIABLE = 2; - -class r1csConstraintProcessor { - constructor(Fr, fnGetConstantConstraint, fnGetAdditionConstraint, fnGetMultiplicationConstraint, logger) { - this.Fr = Fr; - this.logger = logger; - this.fnGetAdditionConstraint = fnGetAdditionConstraint; - this.fnGetMultiplicationConstraint = fnGetMultiplicationConstraint; - } - - processR1csConstraint(settings, lcA, lcB, lcC) { - this.normalizeLinearCombination(lcA); - this.normalizeLinearCombination(lcB); - this.normalizeLinearCombination(lcC); - - const lctA = this.getLinearCombinationType(lcA); - const lctB = this.getLinearCombinationType(lcB); - - if ((lctA === LINEAR_COMBINATION_NULLABLE) || (lctB === LINEAR_COMBINATION_NULLABLE)) { - return this.processR1csAdditionConstraint(settings, lcC); - } else if (lctA === LINEAR_COMBINATION_CONSTANT) { - const lcCC = this.joinLinearCombinations(lcB, lcC, lcA[0]); - return this.processR1csAdditionConstraint(settings, lcCC); - } else if (lctB === LINEAR_COMBINATION_CONSTANT) { - const lcCC = this.joinLinearCombinations(lcA, lcC, lcB[0]); - return this.processR1csAdditionConstraint(settings, lcCC); - } else { - return this.processR1csMultiplicationConstraint(settings, lcA, lcB, lcC); - } - } - - getLinearCombinationType(linCom) { - // let k = this.Fr.zero; - // - // const signalIds = Object.keys(linCom); - // for (let i = 0; i < signalIds.length; i++) { - // if (signalIds[i] === "0") { - // k = this.Fr.add(k, linCom[signalIds[i]]); - // } else { - // return LINEAR_COMBINATION_VARIABLE; - // } - // } - // - // if (!this.Fr.eq(k, this.Fr.zero)) return LINEAR_COMBINATION_CONSTANT; - // - // return LINEAR_COMBINATION_NULLABLE; - - let k = this.Fr.zero; - let n = 0; - const ss = Object.keys(linCom); - for (let i = 0; i < ss.length; i++) { - if (linCom[ss[i]] == 0n) { - delete linCom[ss[i]]; - } else if (ss[i] == 0) { - k = this.Fr.add(k, linCom[ss[i]]); - } else { - n++; - } - } - if (n > 0) return LINEAR_COMBINATION_VARIABLE; - if (!this.Fr.isZero(k)) return LINEAR_COMBINATION_CONSTANT; - return LINEAR_COMBINATION_NULLABLE; - } - - normalizeLinearCombination(linCom) { - const signalIds = Object.keys(linCom); - for (let i = 0; i < signalIds.length; i++) { - if (this.Fr.isZero(linCom[signalIds[i]])) delete linCom[signalIds[i]]; - } - - return linCom; - } - - joinLinearCombinations(linCom1, linCom2, k) { - const res = {}; - - // for (let s in linCom1) { - // const val = this.Fr.mul(k, linCom1[s]); - // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); - // } - // - // for (let s in linCom2) { - // const val = this.Fr.mul(k, linCom2[s]); - // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); - // } - - for (let s in linCom1) { - if (typeof res[s] == "undefined") { - res[s] = this.Fr.mul(k, linCom1[s]); - } else { - res[s] = this.Fr.add(res[s], this.Fr.mul(k, linCom1[s])); - } - } - - for (let s in linCom2) { - if (typeof res[s] == "undefined") { - res[s] = linCom2[s]; - } else { - res[s] = this.Fr.add(res[s], linCom2[s]); - } - } - - return this.normalizeLinearCombination(res); - } - - reduceCoefs(settings, constraintsArr, additionsArr, linCom, maxC) { - const res = { - k: this.Fr.zero, - signals: [], - coefs: [] - }; - const cs = []; - - for (let signalId in linCom) { - if (signalId == 0) { - res.k = this.Fr.add(res.k, linCom[signalId]); - } else if (linCom[signalId] != 0n) { - cs.push([Number(signalId), linCom[signalId]]); - } - } - - while (cs.length > maxC) { - const c1 = cs.shift(); - const c2 = cs.shift(); - const so = settings.nVars++; - - const constraints = this.fnGetAdditionConstraint( - c1[0], c2[0], so, - this.Fr.neg(c1[1]), this.Fr.neg(c2[1]), this.Fr.zero, this.Fr.one, this.Fr.zero); - - constraintsArr.push(constraints); - additionsArr.push([c1[0], c2[0], c1[1], c2[1]]); - - cs.push([so, this.Fr.one]); - } - - for (let i = 0; i < cs.length; i++) { - res.signals[i] = cs[i][0]; - res.coefs[i] = cs[i][1]; - } - - while (res.coefs.length < maxC) { - res.signals.push(0); - res.coefs.push(this.Fr.zero); - } - - return res; - } - - processR1csAdditionConstraint(settings, linCom) { - const constraintsArr = []; - const additionsArr = []; - - const C = this.reduceCoefs(settings, constraintsArr, additionsArr, linCom, 3); - - const constraints = this.fnGetAdditionConstraint( - C.signals[0], C.signals[1], C.signals[2], - C.coefs[0], C.coefs[1], this.Fr.zero, C.coefs[2], C.k); - - constraintsArr.push(constraints); - - return [constraintsArr, additionsArr]; - } - - processR1csMultiplicationConstraint(settings, lcA, lcB, lcC) { - const constraintsArr = []; - const additionsArr = []; - - const A = this.reduceCoefs(settings, constraintsArr, additionsArr, lcA, 1); - const B = this.reduceCoefs(settings, constraintsArr, additionsArr, lcB, 1); - const C = this.reduceCoefs(settings, constraintsArr, additionsArr, lcC, 1); - - const constraints = this.fnGetMultiplicationConstraint( - A.signals[0], B.signals[0], C.signals[0], - this.Fr.mul(A.coefs[0], B.k), - this.Fr.mul(A.k, B.coefs[0]), - this.Fr.mul(A.coefs[0], B.coefs[0]), - this.Fr.neg(C.coefs[0]), - this.Fr.sub(this.Fr.mul(A.k, B.k), C.k)); - - constraintsArr.push(constraints); - - return [constraintsArr, additionsArr]; - } -} +const ZKEY_PL_ADDITIONS_SECTION = 3; +const ZKEY_PL_A_MAP_SECTION = 4; +const ZKEY_PL_B_MAP_SECTION = 5; +const ZKEY_PL_C_MAP_SECTION = 6; +const ZKEY_PL_QM_SECTION = 7; +const ZKEY_PL_QL_SECTION = 8; +const ZKEY_PL_QR_SECTION = 9; +const ZKEY_PL_QO_SECTION = 10; +const ZKEY_PL_QC_SECTION = 11; +const ZKEY_PL_SIGMA_SECTION = 12; +const ZKEY_PL_LAGRANGE_SECTION = 13; +const ZKEY_PL_PTAU_SECTION = 14; /* Copyright 2022 iden3 association. @@ -9093,7 +7783,8 @@ class Polynomial { this.coef.set(this.Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)), i_n8); } - for (let i = domainSize; i < domainSize * extensions; i++) { + const upperBound = this.coef.byteLength / this.Fr.n8; + for (let i = domainSize; i < upperBound; i++) { const i_n8 = i * this.Fr.n8; const a = this.Fr.sub( @@ -9532,6 +8223,1610 @@ class Evaluations { } } +/* + Copyright 2021 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const {stringifyBigInts: stringifyBigInts$1} = ffjavascript.utils; + +async function plonk16Prove(zkeyFileName, witnessFileName, logger) { + const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils__namespace.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23); + + // Read witness file + if (logger) logger.debug("> Reading witness file"); + const wtns = await readHeader(fdWtns, sectionsWtns); + + // Read zkey file + if (logger) logger.debug("> Reading zkey file"); + const {fd: fdZKey, sections: zkeySections} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23); + + const zkey = await readHeader$1(fdZKey, zkeySections); + if (zkey.protocol != "plonk") { + throw new Error("zkey file is not plonk"); + } + + if (!ffjavascript.Scalar.eq(zkey.r, wtns.q)) { + throw new Error("Curve of the witness does not match the curve of the proving key"); + } + + if (wtns.nWitness != zkey.nVars -zkey.nAdditions) { + throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}, ${zkey.nAdditions}`); + } + + const curve = zkey.curve; + + const Fr = curve.Fr; + const n8r = curve.Fr.n8; + const sDomain = zkey.domainSize * n8r; + + if (logger) { + logger.debug("----------------------------"); + logger.debug(" PLONK PROVE SETTINGS"); + logger.debug(` Curve: ${curve.name}`); + logger.debug(` Circuit power: ${zkey.power}`); + logger.debug(` Domain size: ${zkey.domainSize}`); + logger.debug(` Vars: ${zkey.nVars}`); + logger.debug(` Public vars: ${zkey.nPublic}`); + logger.debug(` Constraints: ${zkey.nConstraints}`); + logger.debug(` Additions: ${zkey.nAdditions}`); + logger.debug("----------------------------"); + } + + //Read witness data + if (logger) logger.debug("> Reading witness file data"); + const buffWitness = await binFileUtils__namespace.readSection(fdWtns, sectionsWtns, 2); + + // First element in plonk is not used and can be any value. (But always the same). + // We set it to zero to go faster in the exponentiations. + buffWitness.set(Fr.zero, 0); + const buffInternalWitness = new ffjavascript.BigBuffer(n8r*zkey.nAdditions); + + let buffers = {}; + let polynomials = {}; + let evaluations = {}; + + let challenges = {}; + let proof = new Proof(curve, logger); + const transcript = new Keccak256Transcript(curve); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_ADDITIONS_SECTION}. Additions`); + await calculateAdditions(); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_SIGMA_SECTION}. Sigma1, Sigma2 & Sigma 3`); + if (logger) logger.debug("··· Reading Sigma polynomials "); + polynomials.Sigma1 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.Sigma2 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.Sigma3 = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + + await fdZKey.readToBuffer(polynomials.Sigma1.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.Sigma2.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 5 * sDomain); + await fdZKey.readToBuffer(polynomials.Sigma3.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 10 * sDomain); + + if (logger) logger.debug("··· Reading Sigma evaluations"); + evaluations.Sigma1 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.Sigma2 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.Sigma3 = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + + await fdZKey.readToBuffer(evaluations.Sigma1.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.Sigma2.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 6 * sDomain); + await fdZKey.readToBuffer(evaluations.Sigma3.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 11 * sDomain); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_PTAU_SECTION}. Powers of Tau`); + const PTau = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_PTAU_SECTION); + + let publicSignals = []; + + for (let i=1; i<= zkey.nPublic; i++) { + const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); + publicSignals.push(ffjavascript.Scalar.fromRprLE(pub)); + } + + if (logger) logger.debug(""); + if (logger) logger.debug("> ROUND 1"); + await round1(); + + if (logger) logger.debug("> ROUND 2"); + await round2(); + + if (logger) logger.debug("> ROUND 3"); + await round3(); + + if (logger) logger.debug("> ROUND 4"); + await round4(); + + if (logger) logger.debug("> ROUND 5"); + await round5(); + + /////////////////////// + // Final adjustments // + /////////////////////// + + await fdZKey.close(); + await fdWtns.close(); + + // Prepare proof + let _proof = proof.toObjectProof(false); + _proof.protocol = "plonk"; + _proof.curve = curve.name; + + if (logger) logger.debug("PLONK PROVER FINISHED"); + + return { + proof: stringifyBigInts$1(_proof), + publicSignals: stringifyBigInts$1(publicSignals) + }; + + async function calculateAdditions() { + if (logger) logger.debug("··· Computing additions"); + const additionsBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_ADDITIONS_SECTION); + + // sizes: wireId_x = 4 bytes (32 bits), factor_x = field size bits + // Addition form: wireId_a wireId_b factor_a factor_b (size is 4 + 4 + sFr + sFr) + const sSum = 8 + n8r * 2; + + for (let i = 0; i < zkey.nAdditions; i++) { + if (logger && (0 !== i) && (i % 100000 === 0)) logger.debug(` addition ${i}/${zkey.nAdditions}`); + + // Read addition values + let offset = i * sSum; + const signalId1 = readUInt32(additionsBuff, offset); + offset += 4; + const signalId2 = readUInt32(additionsBuff, offset); + offset += 4; + const factor1 = additionsBuff.slice(offset, offset + n8r); + offset += n8r; + const factor2 = additionsBuff.slice(offset, offset + n8r); + + // Get witness value + const witness1 = getWitness(signalId1); + const witness2 = getWitness(signalId2); + + //Calculate final result + const result = Fr.add(Fr.mul(factor1, witness1), Fr.mul(factor2, witness2)); + + buffInternalWitness.set(result, n8r * i); + } + } + + function readUInt32(b, o) { + const buff = b.slice(o, o+4); + const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); + return buffV.getUint32(0, true); + } + + function getWitness(idx) { + if (idx < zkey.nVars-zkey.nAdditions) { + return buffWitness.slice(idx*n8r, idx*n8r+n8r); + } else if (idx < zkey.nVars) { + return buffInternalWitness.slice((idx - (zkey.nVars-zkey.nAdditions))*n8r, (idx-(zkey.nVars-zkey.nAdditions))*n8r + n8r); + } else { + return curve.Fr.zero; + } + } + + async function round1() { + // STEP 1.1 - Generate random blinding scalars (b1, ..., b11) ∈ F + challenges.b = []; + for (let i=1; i<=11; i++) { + challenges.b[i] = curve.Fr.random(); + } + + // STEP 1.2 - Compute wire polynomials a(X), b(X) and c(X) + if (logger) logger.debug("> Computing A, B, C wire polynomials"); + await computeWirePolynomials(); + + // STEP 1.3 - Compute [a]_1, [b]_1, [c]_1 + if (logger) logger.debug("> Computing A, B, C MSM"); + let commitA = await polynomials.A.multiExponentiation(PTau, "A"); + let commitB = await polynomials.B.multiExponentiation(PTau, "B"); + let commitC = await polynomials.C.multiExponentiation(PTau, "C"); + + // First output of the prover is ([A]_1, [B]_1, [C]_1) + proof.addPolynomial("A", commitA); + proof.addPolynomial("B", commitB); + proof.addPolynomial("C", commitC); + + return 0; + } + + async function computeWirePolynomials() { + if (logger) logger.debug("··· Reading data from zkey file"); + + // Build A, B and C evaluations buffer from zkey and witness files + buffers.A = new ffjavascript.BigBuffer(sDomain); + buffers.B = new ffjavascript.BigBuffer(sDomain); + buffers.C = new ffjavascript.BigBuffer(sDomain); + + // Read zkey file to the buffers + const aMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_A_MAP_SECTION); + const bMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_B_MAP_SECTION); + const cMapBuff = await binFileUtils__namespace.readSection(fdZKey, zkeySections, ZKEY_PL_C_MAP_SECTION); + + // Compute all witness from signal ids and set them to A,B & C buffers + for (let i = 0; i < zkey.nConstraints; i++) { + const i_sFr = i * n8r; + const offset = i * 4; + + // Compute A value from a signal id + const signalIdA = readUInt32(aMapBuff, offset); + buffers.A.set(getWitness(signalIdA), i_sFr); + + // Compute B value from a signal id + const signalIdB = readUInt32(bMapBuff, offset); + buffers.B.set(getWitness(signalIdB), i_sFr); + + // Compute C value from a signal id + const signalIdC = readUInt32(cMapBuff, offset); + buffers.C.set(getWitness(signalIdC), i_sFr); + } + + buffers.A = await Fr.batchToMontgomery(buffers.A); + buffers.B = await Fr.batchToMontgomery(buffers.B); + buffers.C = await Fr.batchToMontgomery(buffers.C); + + // Compute the coefficients of the wire polynomials a(X), b(X) and c(X) from A,B & C buffers + if (logger) logger.debug("··· Computing A ifft"); + polynomials.A = await Polynomial.fromEvaluations(buffers.A, curve, logger); + if (logger) logger.debug("··· Computing B ifft"); + polynomials.B = await Polynomial.fromEvaluations(buffers.B, curve, logger); + if (logger) logger.debug("··· Computing C ifft"); + polynomials.C = await Polynomial.fromEvaluations(buffers.C, curve, logger); + + // Compute extended evaluations of a(X), b(X) and c(X) polynomials + if (logger) logger.debug("··· Computing A fft"); + evaluations.A = await Evaluations.fromPolynomial(polynomials.A, 4, curve, logger); + if (logger) logger.debug("··· Computing B fft"); + evaluations.B = await Evaluations.fromPolynomial(polynomials.B, 4, curve, logger); + if (logger) logger.debug("··· Computing C fft"); + evaluations.C = await Evaluations.fromPolynomial(polynomials.C, 4, curve, logger); + + // Blind a(X), b(X) and c(X) polynomials coefficients with blinding scalars b + polynomials.A.blindCoefficients([challenges.b[2], challenges.b[1]]); + polynomials.B.blindCoefficients([challenges.b[4], challenges.b[3]]); + polynomials.C.blindCoefficients([challenges.b[6], challenges.b[5]]); + + // Check degrees + if (polynomials.A.degree() >= zkey.domainSize + 2) { + throw new Error("A Polynomial is not well calculated"); + } + if (polynomials.B.degree() >= zkey.domainSize + 2) { + throw new Error("B Polynomial is not well calculated"); + } + if (polynomials.C.degree() >= zkey.domainSize + 2) { + throw new Error("C Polynomial is not well calculated"); + } + } + + async function round2() { + // STEP 2.1 - Compute permutation challenge beta and gamma ∈ F + // Compute permutation challenge beta + if (logger) logger.debug("> Computing challenges beta and gamma"); + transcript.reset(); + + transcript.addPolCommitment(zkey.Qm); + transcript.addPolCommitment(zkey.Ql); + transcript.addPolCommitment(zkey.Qr); + transcript.addPolCommitment(zkey.Qo); + transcript.addPolCommitment(zkey.Qc); + transcript.addPolCommitment(zkey.S1); + transcript.addPolCommitment(zkey.S2); + transcript.addPolCommitment(zkey.S3); + + // Add A to the transcript + for (let i = 0; i < zkey.nPublic; i++) { + transcript.addScalar(buffers.A.slice(i * n8r, i * n8r + n8r)); + } + + // Add A, B, C to the transcript + transcript.addPolCommitment(proof.getPolynomial("A")); + transcript.addPolCommitment(proof.getPolynomial("B")); + transcript.addPolCommitment(proof.getPolynomial("C")); + + challenges.beta = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.beta: " + Fr.toString(challenges.beta, 16)); + + // Compute permutation challenge gamma + transcript.reset(); + transcript.addScalar(challenges.beta); + challenges.gamma = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.gamma: " + Fr.toString(challenges.gamma, 16)); + + // STEP 2.2 - Compute permutation polynomial z(X) + if (logger) logger.debug("> Computing Z polynomial"); + await computeZ(); + + // STEP 2.3 - Compute permutation [z]_1 + if (logger) logger.debug("> Computing Z MSM"); + let commitZ = await polynomials.Z.multiExponentiation(PTau, "Z"); + + // Second output of the prover is ([Z]_1) + proof.addPolynomial("Z", commitZ); + } + + async function computeZ() { + if (logger) logger.debug("··· Computing Z evaluations"); + + let numArr = new ffjavascript.BigBuffer(sDomain); + let denArr = new ffjavascript.BigBuffer(sDomain); + + // Set the first values to 1 + numArr.set(Fr.one, 0); + denArr.set(Fr.one, 0); + + // Set initial omega + let w = Fr.one; + for (let i = 0; i < zkey.domainSize; i++) { + const i_n8r = i * n8r; + + const a = buffers.A.slice(i_n8r, i_n8r + n8r); + const b = buffers.B.slice(i_n8r, i_n8r + n8r); + const c = buffers.C.slice(i_n8r, i_n8r + n8r); + + // Z(X) := numArr / denArr + // numArr := (a + beta·ω + gamma)(b + beta·ω·k1 + gamma)(c + beta·ω·k2 + gamma) + const betaw = Fr.mul(challenges.beta, w); + + let n1 = Fr.add(a, betaw); + n1 = Fr.add(n1, challenges.gamma); + + let n2 = Fr.add(b, Fr.mul(zkey.k1, betaw)); + n2 = Fr.add(n2, challenges.gamma); + + let n3 = Fr.add(c, Fr.mul(zkey.k2, betaw)); + n3 = Fr.add(n3, challenges.gamma); + + let num = Fr.mul(n1, Fr.mul(n2, n3)); + + // denArr := (a + beta·sigma1 + gamma)(b + beta·sigma2 + gamma)(c + beta·sigma3 + gamma) + let d1 = Fr.add(a, Fr.mul(evaluations.Sigma1.getEvaluation(i * 4), challenges.beta)); + d1 = Fr.add(d1, challenges.gamma); + + let d2 = Fr.add(b, Fr.mul(evaluations.Sigma2.getEvaluation(i * 4), challenges.beta)); + d2 = Fr.add(d2, challenges.gamma); + + let d3 = Fr.add(c, Fr.mul(evaluations.Sigma3.getEvaluation(i * 4), challenges.beta)); + d3 = Fr.add(d3, challenges.gamma); + + let den = Fr.mul(d1, Fr.mul(d2, d3)); + + // Multiply current num value with the previous one saved in numArr + num = Fr.mul(numArr.slice(i_n8r, i_n8r + n8r), num); + numArr.set(num, ((i + 1) % zkey.domainSize) * n8r); + + // Multiply current den value with the previous one saved in denArr + den = Fr.mul(denArr.slice(i_n8r, i_n8r + n8r), den); + denArr.set(den, ((i + 1) % zkey.domainSize) * n8r); + + w = Fr.mul(w, Fr.w[zkey.power]); + } + + // Compute the inverse of denArr to compute in the next command the + // division numArr/denArr by multiplying num · 1/denArr + denArr = await Fr.batchInverse(denArr); + + // TODO: Do it in assembly and in parallel + // Multiply numArr · denArr where denArr was inverted in the previous command + for (let i = 0; i < zkey.domainSize; i++) { + const i_sFr = i * n8r; + + const z = Fr.mul(numArr.slice(i_sFr, i_sFr + n8r), denArr.slice(i_sFr, i_sFr + n8r)); + numArr.set(z, i_sFr); + } + + // From now on the values saved on numArr will be Z(X) buffer + buffers.Z = numArr; + + if (!Fr.eq(numArr.slice(0, n8r), Fr.one)) { + throw new Error("Copy constraints does not match"); + } + + // Compute polynomial coefficients z(X) from buffers.Z + if (logger) logger.debug("··· Computing Z ifft"); + polynomials.Z = await Polynomial.fromEvaluations(buffers.Z, curve, logger); + + // Compute extended evaluations of z(X) polynomial + if (logger) logger.debug("··· Computing Z fft"); + evaluations.Z = await Evaluations.fromPolynomial(polynomials.Z, 4, curve, logger); + + // Blind z(X) polynomial coefficients with blinding scalars b + polynomials.Z.blindCoefficients([challenges.b[9], challenges.b[8], challenges.b[7]]); + + // Check degree + if (polynomials.Z.degree() >= zkey.domainSize + 3) { + throw new Error("Z Polynomial is not well calculated"); + } + + delete buffers.Z; + } + + async function round3() { + if (logger) logger.debug("> Computing challenge alpha"); + + // STEP 3.1 - Compute evaluation challenge alpha ∈ F + transcript.reset(); + transcript.addScalar(challenges.beta); + transcript.addScalar(challenges.gamma); + transcript.addPolCommitment(proof.getPolynomial("Z")); + + challenges.alpha = transcript.getChallenge(); + challenges.alpha2 = Fr.square(challenges.alpha); + if (logger) logger.debug("··· challenges.alpha: " + Fr.toString(challenges.alpha, 16)); + + // Compute quotient polynomial T(X) + if (logger) logger.debug("> Computing T polynomial"); + await computeT(); + + // Compute [T1]_1, [T2]_1, [T3]_1 + if (logger) logger.debug("> Computing T MSM"); + let commitT1 = await polynomials.T1.multiExponentiation(PTau, "T1"); + let commitT2 = await polynomials.T2.multiExponentiation(PTau, "T2"); + let commitT3 = await polynomials.T3.multiExponentiation(PTau, "T3"); + + // Third output of the prover is ([T1]_1, [T2]_1, [T3]_1) + proof.addPolynomial("T1", commitT1); + proof.addPolynomial("T2", commitT2); + proof.addPolynomial("T3", commitT3); + } + + async function computeT() { + if (logger) + logger.debug(`··· Reading sections ${ZKEY_PL_QL_SECTION}, ${ZKEY_PL_QR_SECTION}` + + `, ${ZKEY_PL_QM_SECTION}, ${ZKEY_PL_QO_SECTION}, ${ZKEY_PL_QC_SECTION}. Q selectors`); + // Reserve memory for Q's evaluations + evaluations.QL = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QR = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QM = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QO = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + evaluations.QC = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(evaluations.QL.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QL_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QR.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QR_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QM.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QM_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QO.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QO_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QC.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QC_SECTION][0].p + sDomain); + + // Read Lagrange polynomials & evaluations from zkey file + evaluations.Lagrange = new Evaluations(new ffjavascript.BigBuffer(sDomain * 4 * zkey.nPublic), curve, logger); + + for (let i = 0; i < zkey.nPublic; i++) { + await fdZKey.readToBuffer(evaluations.Lagrange.eval, i * sDomain * 4, sDomain * 4, zkeySections[ZKEY_PL_LAGRANGE_SECTION][0].p + i * 5 * sDomain + sDomain); + } + + buffers.T = new ffjavascript.BigBuffer(sDomain * 4); + buffers.Tz = new ffjavascript.BigBuffer(sDomain * 4); + + if (logger) logger.debug("··· Computing T evaluations"); + + let w = Fr.one; + for (let i = 0; i < zkey.domainSize * 4; i++) { + if (logger && (0 !== i) && (i % 100000 === 0)) + logger.debug(` T evaluation ${i}/${zkey.domainSize * 4}`); + + const a = evaluations.A.getEvaluation(i); + const b = evaluations.B.getEvaluation(i); + const c = evaluations.C.getEvaluation(i); + const z = evaluations.Z.getEvaluation(i); + const zw = evaluations.Z.getEvaluation((zkey.domainSize * 4 + 4 + i) % (zkey.domainSize * 4)); + + const qm = evaluations.QM.getEvaluation(i); + const ql = evaluations.QL.getEvaluation(i); + const qr = evaluations.QR.getEvaluation(i); + const qo = evaluations.QO.getEvaluation(i); + const qc = evaluations.QC.getEvaluation(i); + const s1 = evaluations.Sigma1.getEvaluation(i); + const s2 = evaluations.Sigma2.getEvaluation(i); + const s3 = evaluations.Sigma3.getEvaluation(i); + + const ap = Fr.add(challenges.b[2], Fr.mul(challenges.b[1], w)); + const bp = Fr.add(challenges.b[4], Fr.mul(challenges.b[3], w)); + const cp = Fr.add(challenges.b[6], Fr.mul(challenges.b[5], w)); + + const w2 = Fr.square(w); + const zp = Fr.add(Fr.add(Fr.mul(challenges.b[7], w2), Fr.mul(challenges.b[8], w)), challenges.b[9]); + const wW = Fr.mul(w, Fr.w[zkey.power]); + const wW2 = Fr.square(wW); + const zWp = Fr.add(Fr.add(Fr.mul(challenges.b[7], wW2), Fr.mul(challenges.b[8], wW)), challenges.b[9]); + + let pi = Fr.zero; + for (let j = 0; j < zkey.nPublic; j++) { + const offset = (j * 4 * zkey.domainSize) + i; + + const lPol = evaluations.Lagrange.getEvaluation(offset); + const aVal = buffers.A.slice(j * n8r, (j + 1) * n8r); + + pi = Fr.sub(pi, Fr.mul(lPol, aVal)); + } + + // e1 := a(X)b(X)qM(X) + a(X)qL(X) + b(X)qR(X) + c(X)qO(X) + PI(X) + qC(X) + let [e1, e1z] = MulZ.mul2(a, b, ap, bp, i % 4, Fr); + e1 = Fr.mul(e1, qm); + e1z = Fr.mul(e1z, qm); + + e1 = Fr.add(e1, Fr.mul(a, ql)); + e1z = Fr.add(e1z, Fr.mul(ap, ql)); + + e1 = Fr.add(e1, Fr.mul(b, qr)); + e1z = Fr.add(e1z, Fr.mul(bp, qr)); + + e1 = Fr.add(e1, Fr.mul(c, qo)); + e1z = Fr.add(e1z, Fr.mul(cp, qo)); + + e1 = Fr.add(e1, pi); + e1 = Fr.add(e1, qc); + + // e2 := α[(a(X) + βX + γ)(b(X) + βk1X + γ)(c(X) + βk2X + γ)z(X)] + const betaw = Fr.mul(challenges.beta, w); + let e2a = a; + e2a = Fr.add(e2a, betaw); + e2a = Fr.add(e2a, challenges.gamma); + + let e2b = b; + e2b = Fr.add(e2b, Fr.mul(betaw, zkey.k1)); + e2b = Fr.add(e2b, challenges.gamma); + + let e2c = c; + e2c = Fr.add(e2c, Fr.mul(betaw, zkey.k2)); + e2c = Fr.add(e2c, challenges.gamma); + + let e2d = z; + + let [e2, e2z] = MulZ.mul4(e2a, e2b, e2c, e2d, ap, bp, cp, zp, i % 4, Fr); + e2 = Fr.mul(e2, challenges.alpha); + e2z = Fr.mul(e2z, challenges.alpha); + + // e3 := α[(a(X) + βSσ1(X) + γ)(b(X) + βSσ2(X) + γ)(c(X) + βSσ3(X) + γ)z(Xω)] + let e3a = a; + e3a = Fr.add(e3a, Fr.mul(challenges.beta, s1)); + e3a = Fr.add(e3a, challenges.gamma); + + let e3b = b; + e3b = Fr.add(e3b, Fr.mul(challenges.beta, s2)); + e3b = Fr.add(e3b, challenges.gamma); + + let e3c = c; + e3c = Fr.add(e3c, Fr.mul(challenges.beta, s3)); + e3c = Fr.add(e3c, challenges.gamma); + + let e3d = zw; + let [e3, e3z] = MulZ.mul4(e3a, e3b, e3c, e3d, ap, bp, cp, zWp, i % 4, Fr); + + e3 = Fr.mul(e3, challenges.alpha); + e3z = Fr.mul(e3z, challenges.alpha); + + // e4 := α^2(z(X)−1)L1(X) + let e4 = Fr.sub(z, Fr.one); + e4 = Fr.mul(e4, evaluations.Lagrange.getEvaluation(i)); + e4 = Fr.mul(e4, challenges.alpha2); + + let e4z = Fr.mul(zp, evaluations.Lagrange.getEvaluation(i)); + e4z = Fr.mul(e4z, challenges.alpha2); + + + let t = Fr.add(Fr.sub(Fr.add(e1, e2), e3), e4); + let tz = Fr.add(Fr.sub(Fr.add(e1z, e2z), e3z), e4z); + + buffers.T.set(t, i * n8r); + buffers.Tz.set(tz, i * n8r); + + w = Fr.mul(w, Fr.w[zkey.power + 2]); + } + + // Compute the coefficients of the polynomial T0(X) from buffers.T0 + if (logger) + logger.debug("··· Computing T ifft"); + polynomials.T = await Polynomial.fromEvaluations(buffers.T, curve, logger); + + // Divide the polynomial T0 by Z_H(X) + if (logger) + logger.debug("··· Computing T / ZH"); + polynomials.T.divZh(zkey.domainSize, 4); + + // Compute the coefficients of the polynomial Tz(X) from buffers.Tz + if (logger) + logger.debug("··· Computing Tz ifft"); + polynomials.Tz = await Polynomial.fromEvaluations(buffers.Tz, curve, logger); + + // Add the polynomial T1z to T1 to get the final polynomial T1 + polynomials.T.add(polynomials.Tz); + + // Check degree + if (polynomials.T.degree() >= zkey.domainSize * 3 + 6) { + throw new Error("T Polynomial is not well calculated"); + } + + // t(x) has degree 3n + 5, we are going to split t(x) into three smaller polynomials: + // T1' and T2' with a degree < n and T3' with a degree n+5 + // such that t(x) = T1'(X) + X^n T2'(X) + X^{2n} T3'(X) + // To randomize the parts we use blinding scalars b_10 and b_11 in a way that doesn't change t(X): + // T1(X) = T1'(X) + b_10 X^n + // T2(X) = T2'(X) - b_10 + b_11 X^n + // T3(X) = T3'(X) - b_11 + // such that + // t(X) = T1(X) + X^n T2(X) + X^2n T3(X) + if (logger) logger.debug("··· Computing T1, T2, T3 polynomials"); + polynomials.T1 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T2 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T3 = new Polynomial(new ffjavascript.BigBuffer((zkey.domainSize + 6) * n8r), curve, logger); + + polynomials.T1.coef.set(polynomials.T.coef.slice(0, sDomain), 0); + polynomials.T2.coef.set(polynomials.T.coef.slice(sDomain, sDomain * 2), 0); + polynomials.T3.coef.set(polynomials.T.coef.slice(sDomain * 2, sDomain * 3 + 6 * n8r), 0); + + // Add blinding scalar b_10 as a new coefficient n + polynomials.T1.setCoef(zkey.domainSize, challenges.b[10]); + + // compute t_mid(X) + // Subtract blinding scalar b_10 to the lowest coefficient of t_mid + const lowestMid = Fr.sub(polynomials.T2.getCoef(0), challenges.b[10]); + polynomials.T2.setCoef(0, lowestMid); + polynomials.T2.setCoef(zkey.domainSize, challenges.b[11]); + + // compute t_high(X) + //Subtract blinding scalar b_11 to the lowest coefficient of t_high + const lowestHigh = Fr.sub(polynomials.T3.getCoef(0), challenges.b[11]); + polynomials.T3.setCoef(0, lowestHigh); + } + + async function round4() { + if (logger) logger.debug("> Computing challenge xi"); + + // STEP 4.1 - Compute evaluation challenge xi ∈ F + transcript.reset(); + transcript.addScalar(challenges.alpha); + transcript.addPolCommitment(proof.getPolynomial("T1")); + transcript.addPolCommitment(proof.getPolynomial("T2")); + transcript.addPolCommitment(proof.getPolynomial("T3")); + + challenges.xi = transcript.getChallenge(); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[zkey.power]); + + if (logger) logger.debug("··· challenges.xi: " + Fr.toString(challenges.xi, 16)); + + // Fourth output of the prover is ( a(xi), b(xi), c(xi), s1(xi), s2(xi), z(xiw) ) + proof.addEvaluation("eval_a", polynomials.A.evaluate(challenges.xi)); + proof.addEvaluation("eval_b", polynomials.B.evaluate(challenges.xi)); + proof.addEvaluation("eval_c", polynomials.C.evaluate(challenges.xi)); + proof.addEvaluation("eval_s1", polynomials.Sigma1.evaluate(challenges.xi)); + proof.addEvaluation("eval_s2", polynomials.Sigma2.evaluate(challenges.xi)); + proof.addEvaluation("eval_zw", polynomials.Z.evaluate(challenges.xiw)); + } + + async function round5() { + if (logger) logger.debug("> Computing challenge v"); + + // STEP 5.1 - Compute evaluation challenge v ∈ F + transcript.reset(); + transcript.addScalar(challenges.xi); + transcript.addScalar(proof.getEvaluation("eval_a")); + transcript.addScalar(proof.getEvaluation("eval_b")); + transcript.addScalar(proof.getEvaluation("eval_c")); + transcript.addScalar(proof.getEvaluation("eval_s1")); + transcript.addScalar(proof.getEvaluation("eval_s2")); + transcript.addScalar(proof.getEvaluation("eval_zw")); + + challenges.v = []; + challenges.v[1] = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.v: " + Fr.toString(challenges.v[1], 16)); + + for (let i = 2; i < 6; i++) { + challenges.v[i] = Fr.mul(challenges.v[i - 1], challenges.v[1]); + } + + // STEP 5.2 Compute linearisation polynomial r(X) + if (logger) logger.debug("> Computing linearisation polynomial R(X)"); + await computeR(); + + //STEP 5.3 Compute opening proof polynomial Wxi(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxi(X) polynomial"); + computeWxi(); + + //STEP 5.4 Compute opening proof polynomial Wxiw(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxiw(X) polynomial"); + computeWxiw(); + + if (logger) logger.debug("> Computing Wxi, Wxiw MSM"); + let commitWxi = await polynomials.Wxi.multiExponentiation(PTau, "Wxi"); + let commitWxiw = await polynomials.Wxiw.multiExponentiation(PTau, "Wxiw"); + + // Fifth output of the prover is ([Wxi]_1, [Wxiw]_1) + proof.addPolynomial("Wxi", commitWxi); + proof.addPolynomial("Wxiw", commitWxiw); + } + + async function computeR() { + const Fr = curve.Fr; + + // Reserve memory for Q's polynomials + polynomials.QL = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QR = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QM = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QO = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + polynomials.QC = new Polynomial(new ffjavascript.BigBuffer(sDomain), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(polynomials.QL.coef, 0, sDomain, zkeySections[ZKEY_PL_QL_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QR.coef, 0, sDomain, zkeySections[ZKEY_PL_QR_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QM.coef, 0, sDomain, zkeySections[ZKEY_PL_QM_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QO.coef, 0, sDomain, zkeySections[ZKEY_PL_QO_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QC.coef, 0, sDomain, zkeySections[ZKEY_PL_QC_SECTION][0].p); + + challenges.xin = challenges.xi; + for (let i = 0; i < zkey.power; i++) { + challenges.xin = Fr.square(challenges.xin); + } + + challenges.zh = Fr.sub(challenges.xin, Fr.one); + + const L = []; + + const n = Fr.e(zkey.domainSize); + let w = Fr.one; + for (let i = 1; i <= Math.max(1, zkey.nPublic); i++) { + L[i] = Fr.div(Fr.mul(w, challenges.zh), Fr.mul(n, Fr.sub(challenges.xi, w))); + w = Fr.mul(w, Fr.w[zkey.power]); + } + + const eval_l1 = Fr.div( + Fr.sub(challenges.xin, Fr.one), + Fr.mul(n, Fr.sub(challenges.xi, Fr.one)) + ); + + if (logger) { + logger.debug("Lagrange Evaluations: "); + for (let i=1; i. +*/ +const {unstringifyBigInts: unstringifyBigInts$5} = ffjavascript.utils; + +async function plonkFullProve(_input, wasmFile, zkeyFileName, logger) { + const input = unstringifyBigInts$5(_input); + + const wtns= { + type: "mem" + }; + await wtnsCalculate(input, wasmFile, wtns); + return await plonk16Prove(zkeyFileName, wtns, logger); +} + +/* + Copyright 2021 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ +const {unstringifyBigInts: unstringifyBigInts$4} = ffjavascript.utils; + + + +async function plonkVerify(_vk_verifier, _publicSignals, _proof, logger) { + let vk_verifier = unstringifyBigInts$4(_vk_verifier); + _proof = unstringifyBigInts$4(_proof); + let publicSignals = unstringifyBigInts$4(_publicSignals); + + const curve = await getCurveFromName(vk_verifier.curve); + + const Fr = curve.Fr; + const G1 = curve.G1; + + if (logger) logger.info("PLONK VERIFIER STARTED"); + + let proof = fromObjectProof(curve,_proof); + vk_verifier = fromObjectVk$1(curve, vk_verifier); + + if (!isWellConstructed(curve, proof)) { + logger.error("Proof is not well constructed"); + return false; + } + + if (publicSignals.length != vk_verifier.nPublic) { + logger.error("Invalid number of public inputs"); + return false; + } + const challenges = calculatechallenges(curve, proof, publicSignals, vk_verifier); + + if (logger) { + logger.debug("beta: " + Fr.toString(challenges.beta, 16)); + logger.debug("gamma: " + Fr.toString(challenges.gamma, 16)); + logger.debug("alpha: " + Fr.toString(challenges.alpha, 16)); + logger.debug("xi: " + Fr.toString(challenges.xi, 16)); + for(let i=1;i<6;i++) { + if (logger) logger.debug("v: " + Fr.toString(challenges.v[i], 16)); + } + logger.debug("u: " + Fr.toString(challenges.u, 16)); + } + const L = calculateLagrangeEvaluations(curve, challenges, vk_verifier); + if (logger) { + for (let i=1; i. +*/ +const { unstringifyBigInts: unstringifyBigInts$3} = ffjavascript.utils; + +function p256$1(n) { + let nstr = n.toString(16); + while (nstr.length < 64) nstr = "0"+nstr; + nstr = `"0x${nstr}"`; + return nstr; +} + +async function plonkExportSolidityCallData(_proof, _pub) { + const proof = unstringifyBigInts$3(_proof); + const pub = unstringifyBigInts$3(_pub); + + const curve = await getCurveFromName(proof.curve); + curve.G1; + curve.Fr; + + let inputs = ""; + for (let i=0; i. +*/ + +var plonk = /*#__PURE__*/Object.freeze({ + __proto__: null, + setup: plonkSetup, + fullProve: plonkFullProve, + prove: plonk16Prove, + verify: plonkVerify, + exportSolidityCallData: plonkExportSolidityCallData +}); + +/* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ + +// We export to zkey the signals and values of the a, b, c, ql, qr, qm, qo and qc + +// a, b and c are signals id (32-bit integers) +// ql, qr, qm, qo and qc are field values + +function getFFlonkConstantConstraint(signal1, Fr) { + return [signal1, 0, 0, Fr.one, Fr.zero, Fr.zero, Fr.zero, Fr.zero]; +} + +function getFFlonkAdditionConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc) { + return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; +} + +function getFFlonkMultiplicationConstraint(signal1, signal2, signalOut, ql, qr, qm, qo, qc, Fr) { + return [signal1, signal2, signalOut, ql, qr, qm, qo, qc]; +} + +/* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . +*/ + +const LINEAR_COMBINATION_NULLABLE = 0; +const LINEAR_COMBINATION_CONSTANT = 1; +const LINEAR_COMBINATION_VARIABLE = 2; + +class r1csConstraintProcessor { + constructor(Fr, fnGetConstantConstraint, fnGetAdditionConstraint, fnGetMultiplicationConstraint, logger) { + this.Fr = Fr; + this.logger = logger; + this.fnGetAdditionConstraint = fnGetAdditionConstraint; + this.fnGetMultiplicationConstraint = fnGetMultiplicationConstraint; + } + + processR1csConstraint(settings, lcA, lcB, lcC) { + this.normalizeLinearCombination(lcA); + this.normalizeLinearCombination(lcB); + this.normalizeLinearCombination(lcC); + + const lctA = this.getLinearCombinationType(lcA); + const lctB = this.getLinearCombinationType(lcB); + + if ((lctA === LINEAR_COMBINATION_NULLABLE) || (lctB === LINEAR_COMBINATION_NULLABLE)) { + return this.processR1csAdditionConstraint(settings, lcC); + } else if (lctA === LINEAR_COMBINATION_CONSTANT) { + const lcCC = this.joinLinearCombinations(lcB, lcC, lcA[0]); + return this.processR1csAdditionConstraint(settings, lcCC); + } else if (lctB === LINEAR_COMBINATION_CONSTANT) { + const lcCC = this.joinLinearCombinations(lcA, lcC, lcB[0]); + return this.processR1csAdditionConstraint(settings, lcCC); + } else { + return this.processR1csMultiplicationConstraint(settings, lcA, lcB, lcC); + } + } + + getLinearCombinationType(linCom) { + // let k = this.Fr.zero; + // + // const signalIds = Object.keys(linCom); + // for (let i = 0; i < signalIds.length; i++) { + // if (signalIds[i] === "0") { + // k = this.Fr.add(k, linCom[signalIds[i]]); + // } else { + // return LINEAR_COMBINATION_VARIABLE; + // } + // } + // + // if (!this.Fr.eq(k, this.Fr.zero)) return LINEAR_COMBINATION_CONSTANT; + // + // return LINEAR_COMBINATION_NULLABLE; + + let k = this.Fr.zero; + let n = 0; + const ss = Object.keys(linCom); + for (let i = 0; i < ss.length; i++) { + if (linCom[ss[i]] == 0n) { + delete linCom[ss[i]]; + } else if (ss[i] == 0) { + k = this.Fr.add(k, linCom[ss[i]]); + } else { + n++; + } + } + if (n > 0) return LINEAR_COMBINATION_VARIABLE; + if (!this.Fr.isZero(k)) return LINEAR_COMBINATION_CONSTANT; + return LINEAR_COMBINATION_NULLABLE; + } + + normalizeLinearCombination(linCom) { + const signalIds = Object.keys(linCom); + for (let i = 0; i < signalIds.length; i++) { + if (this.Fr.isZero(linCom[signalIds[i]])) delete linCom[signalIds[i]]; + } + + return linCom; + } + + joinLinearCombinations(linCom1, linCom2, k) { + const res = {}; + + // for (let s in linCom1) { + // const val = this.Fr.mul(k, linCom1[s]); + // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); + // } + // + // for (let s in linCom2) { + // const val = this.Fr.mul(k, linCom2[s]); + // res[s] = !(s in res) ? val : this.Fr.add(val, res[s]); + // } + + for (let s in linCom1) { + if (typeof res[s] == "undefined") { + res[s] = this.Fr.mul(k, linCom1[s]); + } else { + res[s] = this.Fr.add(res[s], this.Fr.mul(k, linCom1[s])); + } + } + + for (let s in linCom2) { + if (typeof res[s] == "undefined") { + res[s] = linCom2[s]; + } else { + res[s] = this.Fr.add(res[s], linCom2[s]); + } + } + + return this.normalizeLinearCombination(res); + } + + reduceCoefs(settings, constraintsArr, additionsArr, linCom, maxC) { + const res = { + k: this.Fr.zero, + signals: [], + coefs: [] + }; + const cs = []; + + for (let signalId in linCom) { + if (signalId == 0) { + res.k = this.Fr.add(res.k, linCom[signalId]); + } else if (linCom[signalId] != 0n) { + cs.push([Number(signalId), linCom[signalId]]); + } + } + + while (cs.length > maxC) { + const c1 = cs.shift(); + const c2 = cs.shift(); + const so = settings.nVars++; + + const constraints = this.fnGetAdditionConstraint( + c1[0], c2[0], so, + this.Fr.neg(c1[1]), this.Fr.neg(c2[1]), this.Fr.zero, this.Fr.one, this.Fr.zero); + + constraintsArr.push(constraints); + additionsArr.push([c1[0], c2[0], c1[1], c2[1]]); + + cs.push([so, this.Fr.one]); + } + + for (let i = 0; i < cs.length; i++) { + res.signals[i] = cs[i][0]; + res.coefs[i] = cs[i][1]; + } + + while (res.coefs.length < maxC) { + res.signals.push(0); + res.coefs.push(this.Fr.zero); + } + + return res; + } + + processR1csAdditionConstraint(settings, linCom) { + const constraintsArr = []; + const additionsArr = []; + + const C = this.reduceCoefs(settings, constraintsArr, additionsArr, linCom, 3); + + const constraints = this.fnGetAdditionConstraint( + C.signals[0], C.signals[1], C.signals[2], + C.coefs[0], C.coefs[1], this.Fr.zero, C.coefs[2], C.k); + + constraintsArr.push(constraints); + + return [constraintsArr, additionsArr]; + } + + processR1csMultiplicationConstraint(settings, lcA, lcB, lcC) { + const constraintsArr = []; + const additionsArr = []; + + const A = this.reduceCoefs(settings, constraintsArr, additionsArr, lcA, 1); + const B = this.reduceCoefs(settings, constraintsArr, additionsArr, lcB, 1); + const C = this.reduceCoefs(settings, constraintsArr, additionsArr, lcC, 1); + + const constraints = this.fnGetMultiplicationConstraint( + A.signals[0], B.signals[0], C.signals[0], + this.Fr.mul(A.coefs[0], B.k), + this.Fr.mul(A.k, B.coefs[0]), + this.Fr.mul(A.coefs[0], B.coefs[0]), + this.Fr.neg(C.coefs[0]), + this.Fr.sub(this.Fr.mul(A.k, B.k), C.k)); + + constraintsArr.push(constraints); + + return [constraintsArr, additionsArr]; + } +} + /* Copyright 2022 iden3 association. @@ -10129,164 +10424,6 @@ async function fflonkSetup(r1csFilename, ptauFilename, zkeyFilename, logger) { } } -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ -const { keccak256 } = jsSha3__default["default"]; - -const POLYNOMIAL = 0; -const SCALAR = 1; - -class Keccak256Transcript { - constructor(curve) { - this.G1 = curve.G1; - this.Fr = curve.Fr; - - this.reset(); - } - - reset() { - this.data = []; - } - - addPolCommitment(polynomialCommitment) { - this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); - } - - addScalar(scalar) { - this.data.push({type: SCALAR, data: scalar}); - } - - getChallenge() { - if(0 === this.data.length) { - throw new Error("Keccak256Transcript: No data to generate a transcript"); - } - - let nPolynomials = 0; - let nScalars = 0; - - this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); - - let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); - let offset = 0; - - for (let i = 0; i < this.data.length; i++) { - if (POLYNOMIAL === this.data[i].type) { - this.G1.toRprUncompressed(buffer, offset, this.data[i].data); - offset += this.G1.F.n8 * 2; - } else { - this.Fr.toRprBE(buffer, offset, this.data[i].data); - offset += this.Fr.n8; - } - } - - const value = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); - return this.Fr.e(value); - } -} - -/* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . -*/ - -class Proof { - constructor(curve, logger) { - this.curve = curve; - this.logger = logger; - - this.resetProof(); - } - - resetProof() { - this.polynomials = {}; - this.evaluations = {}; - } - - addPolynomial(key, polynomial) { - if (key in this.polynomials) { - this.logger.warn(`proof: polynomial.${key} already exist in proof`); - } - this.polynomials[key] = polynomial; - } - - getPolynomial(key) { - if (!(key in this.polynomials)) { - this.logger.warn(`proof: polynomial ${key} does not exist in proof`); - } - return this.polynomials[key]; - } - - addEvaluation(key, evaluation) { - if (key in this.evaluations) { - this.logger.warn(`proof: evaluations.${key} already exist in proof`); - } - this.evaluations[key] = evaluation; - } - - getEvaluation(key) { - if (!(key in this.evaluations)) { - this.logger.warn(`proof: evaluation ${key} does not exist in proof`); - } - return this.evaluations[key]; - } - - toObjectProof() { - let res = {polynomials: {}, evaluations: {}}; - - Object.keys(this.polynomials).forEach(key => { - res.polynomials[key] = this.curve.G1.toObject(this.polynomials[key]); - }); - - Object.keys(this.evaluations).forEach(key => { - res.evaluations[key] = this.curve.Fr.toObject(this.evaluations[key]); - }); - - return res; - } - - fromObjectProof(objectProof) { - this.resetProof(); - - Object.keys(objectProof.polynomials).forEach(key => { - this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); - }); - - Object.keys(objectProof.evaluations).forEach(key => { - this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); - }); - } -} - /* Copyright 2022 iden3 association. @@ -11451,17 +11588,11 @@ async function fflonkProve(zkeyFileName, witnessFileName, logger) { // toInverse.denH1 & toInverse.denH2 -> Computed in round5, computeL() // · denominator needed in the verifier when computing L_i^{S0}(X), L_i^{S1}(X) and L_i^{S2}(X) - for (let i = 0; i < 8; i++) { - toInverse["LiS0_" + (i + 1)] = computeLiS0(i); - } + computeLiS0(toInverse, roots.S0.h0w8, challenges.y, curve); - for (let i = 0; i < 4; i++) { - toInverse["LiS1_" + (i + 1)] = computeLiS1(i); - } + computeLiS1(toInverse, roots.S1.h1w4, challenges.y, curve); - for (let i = 0; i < 6; i++) { - toInverse["LiS2_" + (i + 1)] = computeLiS2(i); - } + computeLiS2(toInverse, roots.S2.h2w3, roots.S2.h3w3, challenges.y, challenges.xi, challenges.xiw, curve); // · L_i i=1 to num public inputs, needed in step 6 and 7 of the verifier to compute L_1(xi) and PI(xi) const size = Math.max(1, zkey.nPublic); @@ -11469,52 +11600,84 @@ async function fflonkProve(zkeyFileName, witnessFileName, logger) { let w = Fr.one; for (let i = 0; i < size; i++) { toInverse["Li_" + (i + 1)] = Fr.mul(Fr.e(zkey.domainSize), Fr.sub(challenges.xi, w)); - - w = Fr.mul(w, zkey.w); + w = Fr.mul(w, Fr.w[zkey.power]); } let mulAccumulator = Fr.one; for (const element of Object.values(toInverse)) { - mulAccumulator = Fr.mul(mulAccumulator, element); + if(Array.isArray(element)) { + for (const subElement of element) { + mulAccumulator = Fr.mul(mulAccumulator, subElement); + } + } else { + mulAccumulator = Fr.mul(mulAccumulator, element); + } } return Fr.inv(mulAccumulator); - function computeLiS0(i) { - // Compute L_i^{(S0)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 7; j++) { - idx = (idx + 1) % 8; - - den = Fr.mul(den, Fr.sub(roots.S0.h0w8[i], roots.S0.h0w8[idx])); + + function computeLiS0(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS0_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); } - return den; + + return Li; } - function computeLiS1(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 3; j++) { - idx = (idx + 1) % 4; + function computeLiS1(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS1_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); - den = Fr.mul(den, Fr.sub(roots.S1.h1w4[i], roots.S1.h1w4[idx])); } - return den; + + return Li; } - function computeLiS2(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 5; j++) { - idx = (idx + 1) % 6; - - const root1 = i < 3 ? roots.S2.h2w3[i] : roots.S2.h3w3[i - 3]; - const root2 = idx < 3 ? roots.S2.h2w3[idx] : roots.S2.h3w3[idx - 3]; - den = Fr.mul(den, Fr.sub(root1, root2)); + function computeLiS2(toInverse, S2, S2p, value, xi, xiw, curve) { + const Fr = curve.Fr; + + const Li = []; + + const _3h2 = Fr.mul(Fr.e(3), S2[0]); + const xisubxiw = Fr.sub(xi, xiw); + let den1 = Fr.mul(_3h2, xisubxiw); + for (let i = 0; i < 3; i++) { + const den2 = S2[2 * i % 3]; + const den3 = Fr.sub(value, S2[i]); + + toInverse[["LiS2_" + (i + 1)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } - return den; + + const _3h3 = Fr.mul(Fr.e(3), S2p[0]); + const xiwsubxi = Fr.sub(xiw, xi); + den1 = Fr.mul(_3h3, xiwsubxi); + for (let i = 0; i < 3; i++) { + const den2 = S2p[2 * i % 3]; + const den3 = Fr.sub(value, S2p[i]); + + toInverse[["LiS2_" + (i + 1 + 3)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } + + return Li; } } } @@ -11607,15 +11770,23 @@ async function fflonkVerify(_vk_verifier, _publicSignals, _proof, logger) { // STEP 1 - Validate that all polynomial commitments ∈ G_1 if (logger) logger.info("> Checking commitments belong to G1"); if (!commitmentsBelongToG1(curve, proof, vk)) { - logger.error("Proof is not well constructed"); + if (logger) logger.error("Proof commitments are not valid"); return false; } - // TODO // STEP 2 - Validate that all evaluations ∈ F + if (logger) logger.info("> Checking evaluations belong to F"); + if (!evaluationsAreValid(curve, proof)) { + if (logger) logger.error("Proof evaluations are not valid."); + return false; + } - // TODO // STEP 3 - Validate that w_i ∈ F for i ∈ [l] + if (logger) logger.info("> Checking public inputs belong to F"); + if (!publicInputsAreValid(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } // STEP 4 - Compute the challenges: beta, gamma, xi, alpha and y ∈ F // as in prover description, from the common preprocessed inputs, public inputs and elements of π_SNARK @@ -11637,7 +11808,7 @@ async function fflonkVerify(_vk_verifier, _publicSignals, _proof, logger) { // STEP 8 - Compute polynomial r0 ∈ F_{<4}[X] if (logger) logger.info("> Computing r0(y)"); - const r0 = computeR0(proof, challenges, roots, pi, curve, logger); + const r0 = computeR0(proof, challenges, roots, curve, logger); // STEP 9 - Compute polynomial r1 ∈ F_{<4}[X] if (logger) logger.info("> Computing r1(y)"); @@ -11697,6 +11868,41 @@ function commitmentsBelongToG1(curve, proof, vk) { && G1.isValid(vk.C0); } +function checkValueBelongToField(curve, value) { + return ffjavascript.Scalar.lt(value, curve.r); +} + +function checkEvaluationIsValid(curve, evaluation) { + return checkValueBelongToField(curve, ffjavascript.Scalar.fromRprLE(evaluation)); +} + +function evaluationsAreValid(curve, proof) { + return checkEvaluationIsValid(curve, proof.evaluations.ql) + && checkEvaluationIsValid(curve, proof.evaluations.qr) + && checkEvaluationIsValid(curve, proof.evaluations.qm) + && checkEvaluationIsValid(curve, proof.evaluations.qo) + && checkEvaluationIsValid(curve, proof.evaluations.qc) + && checkEvaluationIsValid(curve, proof.evaluations.s1) + && checkEvaluationIsValid(curve, proof.evaluations.s2) + && checkEvaluationIsValid(curve, proof.evaluations.s3) + && checkEvaluationIsValid(curve, proof.evaluations.a) + && checkEvaluationIsValid(curve, proof.evaluations.b) + && checkEvaluationIsValid(curve, proof.evaluations.c) + && checkEvaluationIsValid(curve, proof.evaluations.z) + && checkEvaluationIsValid(curve, proof.evaluations.zw) + && checkEvaluationIsValid(curve, proof.evaluations.t1w) + && checkEvaluationIsValid(curve, proof.evaluations.t2w); +} + +function publicInputsAreValid(curve, publicInputs) { + for(let i = 0; i < publicInputs.length; i++) { + if(!checkValueBelongToField(curve, publicInputs[i])) { + return false; + } + } + return true; +} + function computeChallenges(curve, proof, vk, publicSignals, logger) { const Fr = curve.Fr; @@ -11776,6 +11982,7 @@ function computeChallenges(curve, proof, vk, publicSignals, logger) { // Compute xi = xi_seeder^12 challenges.xi = Fr.mul(Fr.square(roots.S2.h2w3[0]), roots.S2.h2w3[0]); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[vk.power]); challenges.xiN = challenges.xi; vk.domainSize = 1; @@ -11855,15 +12062,17 @@ function calculatePI(curve, publicSignals, lagrangeEvals) { return pi; } -function computeR0(proof, challenges, roots, pi, curve, logger) { +function computeR0(proof, challenges, roots, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S0.h0w8, challenges.y, challenges.xi, curve); + // r0(y) = ∑_1^8 C_0(h_0 ω_8^{i-1}) L_i(y). To this end we need to compute // Compute the 8 C0 values - if (logger) logger.info("··· Computing C0(h_0ω_8^i) values"); + if (logger) logger.info("··· Computing r0(y)"); - let c0Values = []; + let res = Fr.zero; for (let i = 0; i < 8; i++) { let coefValues = []; coefValues[1] = roots.S0.h0w8[i]; @@ -11871,34 +12080,25 @@ function computeR0(proof, challenges, roots, pi, curve, logger) { coefValues[j] = Fr.mul(coefValues[j - 1], roots.S0.h0w8[i]); } - c0Values[i] = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qo, coefValues[2])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qm, coefValues[3])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qc, coefValues[4])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s1, coefValues[5])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s2, coefValues[6])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s3, coefValues[7])); + let c0 = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qo, coefValues[2])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qm, coefValues[3])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qc, coefValues[4])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s1, coefValues[5])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s2, coefValues[6])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s3, coefValues[7])); + + res = Fr.add(res, Fr.mul(c0, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R0 = Polynomial.lagrangePolynomialInterpolation( - [roots.S0.h0w8[0], roots.S0.h0w8[1], roots.S0.h0w8[2], roots.S0.h0w8[3], - roots.S0.h0w8[4], roots.S0.h0w8[5], roots.S0.h0w8[6], roots.S0.h0w8[7]], - c0Values, curve); - - // Check the degree of r1(X) < 4 - if (R0.degree() > 7) { - throw new Error("R0 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r0(y)"); - return R0.evaluate(challenges.y); + return res; } function computeR1(proof, challenges, roots, pi, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S1.h1w4, challenges.y, challenges.xi, curve); + // r1(y) = ∑_1^4 C_1(h_1 ω_4^{i-1}) L_i(y). To this end we need to compute // Z1 = {C1(h_1}, C1(h_1 ω_4), C1(h_1 ω_4^2), C1(h_1 ω_4^3)} // where C_1(h_1 ω_4^{i-1}) = eval.a + h_1 ω_4^i eval.b + (h_1 ω_4^i)^2 eval.c + (h_1 ω_4^i)^3 T0(xi), @@ -11917,33 +12117,25 @@ function computeR1(proof, challenges, roots, pi, curve, logger) { // Compute the 4 C1 values if (logger) logger.info("··· Computing C1(h_1ω_4^i) values"); - let c1Values = []; + let res = Fr.zero; for (let i = 0; i < 4; i++) { - c1Values[i] = proof.evaluations.a; - c1Values[i] = Fr.add(c1Values[i], Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); + let c1 = proof.evaluations.a; + c1 = Fr.add(c1, Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); const h1w4Squared = Fr.square(roots.S1.h1w4[i]); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(h1w4Squared, proof.evaluations.c)); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + c1 = Fr.add(c1, Fr.mul(h1w4Squared, proof.evaluations.c)); + c1 = Fr.add(c1, Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + + res = Fr.add(res, Fr.mul(c1, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R1 = Polynomial.lagrangePolynomialInterpolation( - [roots.S1.h1w4[0], roots.S1.h1w4[1], roots.S1.h1w4[2], roots.S1.h1w4[3]], - c1Values, curve); - - // Check the degree of r1(X) < 4 - if (R1.degree() > 3) { - throw new Error("R1 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r1(y)"); - return R1.evaluate(challenges.y); + return res; } function computeR2(proof, challenges, roots, lagrange1, vk, curve, logger) { const Fr = curve.Fr; + const LiS2 = computeLagrangeLiS2([roots.S2.h2w3, roots.S2.h3w3], challenges.y, challenges.xi, challenges.xiw, curve); + // r2(y) = ∑_1^3 C_2(h_2 ω_3^{i-1}) L_i(y) + ∑_1^3 C_2(h_3 ω_3^{i-1}) L_{i+3}(y). To this end we need to compute // Z2 = {[C2(h_2}, C2(h_2 ω_3), C2(h_2 ω_3^2)], [C2(h_3}, C2(h_3 ω_3), C2(h_3 ω_3^2)]} // where C_2(h_2 ω_3^{i-1}) = eval.z + h_2 ω_2^i T1(xi) + (h_2 ω_3^i)^2 T2(xi), @@ -11976,33 +12168,23 @@ function computeR2(proof, challenges, roots, lagrange1, vk, curve, logger) { // Compute the 6 C2 values if (logger) logger.info("··· Computing C2(h_2ω_3^i) values"); - let c2Values = []; + let res = Fr.zero; for (let i = 0; i < 3; i++) { - c2Values[i] = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); - c2Values[i] = Fr.add(c2Values[i], Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + let c2 = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i])); } if (logger) logger.info("··· Computing C2(h_3ω_3^i) values"); for (let i = 0; i < 3; i++) { - c2Values[i + 3] = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); - c2Values[i + 3] = Fr.add(c2Values[i + 3], Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + let c2 = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i + 3])); } - // Interpolate a polynomial with the points computed previously - if (logger) logger.info("··· Computing r2(xi)"); - const R2 = Polynomial.lagrangePolynomialInterpolation( - [roots.S2.h2w3[0], roots.S2.h2w3[1], roots.S2.h2w3[2], - roots.S2.h3w3[0], roots.S2.h3w3[1], roots.S2.h3w3[2]], - c2Values, curve); - - // Check the degree of r2(X) < 6 - if (R2.degree() > 5) { - throw new Error("R2 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r2(y)"); - return R2.evaluate(challenges.y); + return res; } function computeF(curve, proof, vk, challenges, roots) { @@ -12067,6 +12249,61 @@ async function isValidPairing(curve, proof, challenges, vk, F, E, J) { return await curve.pairingEq(G1.neg(A1), A2, B1, B2); } + +function computeLagrangeLiSi(roots, x, xi, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const num = Fr.sub(Fr.exp(x, len), xi); + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + Li[i] = Fr.div(num, Fr.mul(Fr.mul(den1, den2), den3)); + } + + return Li; +} + +function computeLagrangeLiS2(roots, value, xi0, xi1, curve) { + const Fr = curve.Fr; + + const Li = []; + + const len = roots[0].length; + const n = len * roots.length; + + const num1 = Fr.exp(value, n); + const num2 = Fr.mul(Fr.add(xi0, xi1), Fr.exp(value, len)); + const num3 = Fr.mul(xi0, xi1); + const num = Fr.add(Fr.sub(num1, num2), num3); + + let den1 = Fr.mul(Fr.mul(Fr.e(len), roots[0][0]), Fr.sub(xi0, xi1)); + for (let i = 0; i < len; i++) { + const den2 = roots[0][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[0][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i] = Fr.div(num, den); + } + + den1 = Fr.mul(Fr.mul(Fr.e(len), roots[1][0]), Fr.sub(xi1, xi0)); + for (let i = 0; i < len; i++) { + const den2 = roots[1][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[1][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i + len] = Fr.div(num, den); + } + + return Li; +} + /* Copyright 2021 0KIMS association. @@ -12088,14 +12325,10 @@ async function isValidPairing(curve, proof, challenges, vk, F, E, J) { const {unstringifyBigInts} = ffjavascript.utils; -function i2hex(i) { - return ("0" + i.toString(16)).slice(-2); -} - function p256(n) { let nstr = n.toString(16); while (nstr.length < 64) nstr = "0" + nstr; - nstr = `"0x${nstr}"`; + nstr = `0x${nstr}`; return nstr; } @@ -12104,8 +12337,8 @@ async function fflonkExportCallData(_pub, _proof) { const pub = unstringifyBigInts(_pub); const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; + curve.G1; + curve.Fr; let inputs = ""; for (let i = 0; i < pub.length; i++) { @@ -12113,32 +12346,17 @@ async function fflonkExportCallData(_pub, _proof) { inputs = inputs + p256(pub[i]); } - const proofBuff = new Uint8Array(G1.F.n8 * 2 * 4 + Fr.n8 * 16); - - G1.toRprUncompressed(proofBuff, 0, G1.e(proof.polynomials.C1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 2, G1.e(proof.polynomials.C2)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 4, G1.e(proof.polynomials.W1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 6, G1.e(proof.polynomials.W2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8, Fr.e(proof.evaluations.ql)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8, Fr.e(proof.evaluations.qr)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 2, Fr.e(proof.evaluations.qm)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 3, Fr.e(proof.evaluations.qo)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 4, Fr.e(proof.evaluations.qc)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 5, Fr.e(proof.evaluations.s1)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 6, Fr.e(proof.evaluations.s2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 7, Fr.e(proof.evaluations.s3)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 8, Fr.e(proof.evaluations.a)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 9, Fr.e(proof.evaluations.b)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 10, Fr.e(proof.evaluations.c)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 11, Fr.e(proof.evaluations.z)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 12, Fr.e(proof.evaluations.zw)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 13, Fr.e(proof.evaluations.t1w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 14, Fr.e(proof.evaluations.t2w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 15, Fr.e(proof.evaluations.inv)); - - const proofHex = Array.from(proofBuff).map(i2hex).join(""); - - return `0x${proofHex},[${inputs}]`; + return `[${p256(proof.polynomials.C1[0])}, ${p256(proof.polynomials.C1[1])},` + + `${p256(proof.polynomials.C2[0])},${p256(proof.polynomials.C2[1])},` + + `${p256(proof.polynomials.W1[0])},${p256(proof.polynomials.W1[1])},` + + `${p256(proof.polynomials.W2[0])},${p256(proof.polynomials.W2[1])},` + + `${p256(proof.evaluations.ql)},${p256(proof.evaluations.qr)},${p256(proof.evaluations.qm)},` + + `${p256(proof.evaluations.qo)},${p256(proof.evaluations.qc)},${p256(proof.evaluations.s1)},` + + `${p256(proof.evaluations.s2)},${p256(proof.evaluations.s3)},${p256(proof.evaluations.a)},` + + `${p256(proof.evaluations.b)},${p256(proof.evaluations.c)},${p256(proof.evaluations.z)},` + + `${p256(proof.evaluations.zw)},${p256(proof.evaluations.t1w)},${p256(proof.evaluations.t2w)},` + + `${p256(proof.evaluations.inv)}],` + + `[${inputs}]`; } /* diff --git a/build/snarkjs.js b/build/snarkjs.js index 5e7b6e4..4d08c84 100644 --- a/build/snarkjs.js +++ b/build/snarkjs.js @@ -2,9 +2,9 @@ var snarkjs = (function (exports) { 'use strict'; /* global BigInt */ - const hexLen = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4]; + const hexLen$2 = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4]; - function fromString(s, radix) { + function fromString$2(s, radix) { if ((!radix)||(radix==10)) { return BigInt(s); } else if (radix==16) { @@ -16,7 +16,19933 @@ var snarkjs = (function (exports) { } } - const e = fromString; + const e$2 = fromString$2; + + function fromArray$1(a, radix) { + let acc =BigInt(0); + radix = BigInt(radix); + for (let i=0; i> BigInt(n); + } + + const shl$1 = shiftLeft$2; + const shr$1 = shiftRight$2; + + function isOdd$c(a) { + return (BigInt(a) & BigInt(1)) == BigInt(1); + } + + + function naf$1(n) { + let E = BigInt(n); + const res = []; + while (E) { + if (E & BigInt(1)) { + const z = 2 - Number(E % BigInt(4)); + res.push( z ); + E = E - BigInt(z); + } else { + res.push( 0 ); + } + E = E >> BigInt(1); + } + return res; + } + + + function bits$2(n) { + let E = BigInt(n); + const res = []; + while (E) { + if (E & BigInt(1)) { + res.push(1); + } else { + res.push( 0 ); + } + E = E >> BigInt(1); + } + return res; + } + + function toNumber$3(s) { + if (s>BigInt(Number.MAX_SAFE_INTEGER )) { + throw new Error("Number too big"); + } + return Number(s); + } + + function toArray$1(s, radix) { + const res = []; + let rem = BigInt(s); + radix = BigInt(radix); + while (rem) { + res.unshift( Number(rem % radix)); + rem = rem / radix; + } + return res; + } + + + function add$2(a, b) { + return BigInt(a) + BigInt(b); + } + + function sub$2(a, b) { + return BigInt(a) - BigInt(b); + } + + function neg$2(a) { + return -BigInt(a); + } + + function mul$2(a, b) { + return BigInt(a) * BigInt(b); + } + + function square$5(a) { + return BigInt(a) * BigInt(a); + } + + function pow$2(a, b) { + return BigInt(a) ** BigInt(b); + } + + function exp$4(a, b) { + return BigInt(a) ** BigInt(b); + } + + function abs$3(a) { + return BigInt(a) >= 0 ? BigInt(a) : -BigInt(a); + } + + function div$2(a, b) { + return BigInt(a) / BigInt(b); + } + + function mod$2(a, b) { + return BigInt(a) % BigInt(b); + } + + function eq$2(a, b) { + return BigInt(a) == BigInt(b); + } + + function neq$1(a, b) { + return BigInt(a) != BigInt(b); + } + + function lt$1(a, b) { + return BigInt(a) < BigInt(b); + } + + function gt$2(a, b) { + return BigInt(a) > BigInt(b); + } + + function leq$1(a, b) { + return BigInt(a) <= BigInt(b); + } + + function geq$2(a, b) { + return BigInt(a) >= BigInt(b); + } + + function band$2(a, b) { + return BigInt(a) & BigInt(b); + } + + function bor$1(a, b) { + return BigInt(a) | BigInt(b); + } + + function bxor$1(a, b) { + return BigInt(a) ^ BigInt(b); + } + + function land$1(a, b) { + return BigInt(a) && BigInt(b); + } + + function lor$1(a, b) { + return BigInt(a) || BigInt(b); + } + + function lnot$1(a) { + return !BigInt(a); + } + + // Returns a buffer with Little Endian Representation + function toRprLE$2(buff, o, e, n8) { + const s = "0000000" + e.toString(16); + const v = new Uint32Array(buff.buffer, buff.byteOffset + o, n8/4); + const l = (((s.length-7)*4 - 1) >> 5)+1; // Number of 32bit words; + for (let i=0; i> 5)+1; // Number of 32bit words; + for (let i=0; i a[a.length-i-1] = ch.toString(16).padStart(8,"0") ); + return fromString$2(a.join(""), 16); + } + + // Pases a buffer with Big Endian Representation + function fromRprBE$2(buff, o, n8) { + n8 = n8 || buff.byteLength; + o = o || 0; + const v = new DataView(buff.buffer, buff.byteOffset + o, n8); + const a = new Array(n8/4); + for (let i=0; i. + */ + + + /* + exports.mulScalar = (F, base, e) =>{ + let res = F.zero; + let rem = bigInt(e); + let exp = base; + + while (! rem.eq(bigInt.zero)) { + if (rem.and(bigInt.one).eq(bigInt.one)) { + res = F.add(res, exp); + } + exp = F.double(exp); + rem = rem.shiftRight(1); + } + + return res; + }; + */ + + + function exp$3(F, base, e) { + + if (isZero$3(e)) return F.one; + + const n = bits$2(e); + + if (n.length==0) return F.one; + + let res = base; + + for (let i=n.length-2; i>=0; i--) { + + res = F.square(res); + + if (n[i]) { + res = F.mul(res, base); + } + } + + return res; + } + + // Check here: https://eprint.iacr.org/2012/685.pdf + + function buildSqrt$2 (F) { + if ((F.m % 2) == 1) { + if (eq$2(mod$2(F.p, 4), 1 )) { + if (eq$2(mod$2(F.p, 8), 1 )) { + if (eq$2(mod$2(F.p, 16), 1 )) { + // alg7_muller(F); + alg5_tonelliShanks$2(F); + } else if (eq$2(mod$2(F.p, 16), 9 )) { + alg4_kong$2(F); + } else { + throw new Error("Field withot sqrt"); + } + } else if (eq$2(mod$2(F.p, 8), 5 )) { + alg3_atkin$2(F); + } else { + throw new Error("Field withot sqrt"); + } + } else if (eq$2(mod$2(F.p, 4), 3 )) { + alg2_shanks$2(F); + } + } else { + const pm2mod4 = mod$2(pow$2(F.p, F.m/2), 4); + if (pm2mod4 == 1) { + alg10_adj$2(F); + } else if (pm2mod4 == 3) { + alg9_adj$2(F); + } else { + alg8_complex$2(F); + } + + } + } + + + function alg5_tonelliShanks$2(F) { + F.sqrt_q = pow$2(F.p, F.m); + + F.sqrt_s = 0; + F.sqrt_t = sub$2(F.sqrt_q, 1); + + while (!isOdd$c(F.sqrt_t)) { + F.sqrt_s = F.sqrt_s + 1; + F.sqrt_t = div$2(F.sqrt_t, 2); + } + + let c0 = F.one; + + while (F.eq(c0, F.one)) { + const c = F.random(); + F.sqrt_z = F.pow(c, F.sqrt_t); + c0 = F.pow(F.sqrt_z, 2 ** (F.sqrt_s-1) ); + } + + F.sqrt_tm1d2 = div$2(sub$2(F.sqrt_t, 1),2); + + F.sqrt = function(a) { + const F=this; + if (F.isZero(a)) return F.zero; + let w = F.pow(a, F.sqrt_tm1d2); + const a0 = F.pow( F.mul(F.square(w), a), 2 ** (F.sqrt_s-1) ); + if (F.eq(a0, F.negone)) return null; + + let v = F.sqrt_s; + let x = F.mul(a, w); + let b = F.mul(x, w); + let z = F.sqrt_z; + while (!F.eq(b, F.one)) { + let b2k = F.square(b); + let k=1; + while (!F.eq(b2k, F.one)) { + b2k = F.square(b2k); + k++; + } + + w = z; + for (let i=0; i>> 0; + st[d] = (st[d] ^ st[a]) >>> 0; + st[d] = ((st[d] << 16) | ((st[d]>>>16) & 0xFFFF)) >>> 0; + + st[c] = (st[c] + st[d]) >>> 0; + st[b] = (st[b] ^ st[c]) >>> 0; + st[b] = ((st[b] << 12) | ((st[b]>>>20) & 0xFFF)) >>> 0; + + st[a] = (st[a] + st[b]) >>> 0; + st[d] = (st[d] ^ st[a]) >>> 0; + st[d] = ((st[d] << 8) | ((st[d]>>>24) & 0xFF)) >>> 0; + + st[c] = (st[c] + st[d]) >>> 0; + st[b] = (st[b] ^ st[c]) >>> 0; + st[b] = ((st[b] << 7) | ((st[b]>>>25) & 0x7F)) >>> 0; + } + + function doubleRound$1(st) { + quarterRound$1(st, 0, 4, 8,12); + quarterRound$1(st, 1, 5, 9,13); + quarterRound$1(st, 2, 6,10,14); + quarterRound$1(st, 3, 7,11,15); + + quarterRound$1(st, 0, 5,10,15); + quarterRound$1(st, 1, 6,11,12); + quarterRound$1(st, 2, 7, 8,13); + quarterRound$1(st, 3, 4, 9,14); + } + + class ChaCha$1 { + + constructor(seed) { + seed = seed || [0,0,0,0,0,0,0,0]; + this.state = [ + 0x61707865, + 0x3320646E, + 0x79622D32, + 0x6B206574, + seed[0], + seed[1], + seed[2], + seed[3], + seed[4], + seed[5], + seed[6], + seed[7], + 0, + 0, + 0, + 0 + ]; + this.idx = 16; + this.buff = new Array(16); + } + + nextU32() { + if (this.idx == 16) this.update(); + return this.buff[this.idx++]; + } + + nextU64() { + return add$2(mul$2(this.nextU32(), 0x100000000), this.nextU32()); + } + + nextBool() { + return (this.nextU32() & 1) == 1; + } + + update() { + // Copy the state + for (let i=0; i<16; i++) this.buff[i] = this.state[i]; + + // Apply the rounds + for (let i=0; i<10; i++) doubleRound$1(this.buff); + + // Add to the initial + for (let i=0; i<16; i++) this.buff[i] = (this.buff[i] + this.state[i]) >>> 0; + + this.idx = 0; + + this.state[12] = (this.state[12] + 1) >>> 0; + if (this.state[12] != 0) return; + this.state[13] = (this.state[13] + 1) >>> 0; + if (this.state[13] != 0) return; + this.state[14] = (this.state[14] + 1) >>> 0; + if (this.state[14] != 0) return; + this.state[15] = (this.state[15] + 1) >>> 0; + } + } + + var crypto = {}; + + function getRandomBytes$3(n) { + let array = new Uint8Array(n); + { // Browser + if (typeof globalThis.crypto !== "undefined") { // Supported + globalThis.crypto.getRandomValues(array); + } else { // fallback + for (let i=0; i>>0; + } + } + } + return array; + } + + function getRandomSeed$1() { + const arr = getRandomBytes$3(32); + const arrV = new Uint32Array(arr.buffer); + const seed = []; + for (let i=0; i<8; i++) { + seed.push(arrV[i]); + } + return seed; + } + + let threadRng$1 = null; + + function getThreadRng$1() { + if (threadRng$1) return threadRng$1; + threadRng$1 = new ChaCha$1(getRandomSeed$1()); + return threadRng$1; + } + + /* + Copyright 2018 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + /* + This library does operations on polynomials with coefficients in a field F. + + A polynomial P(x) = p0 + p1 * x + p2 * x^2 + ... + pn * x^n is represented + by the array [ p0, p1, p2, ... , pn ]. + */ + + class FFT$2 { + constructor (G, F, opMulGF) { + this.F = F; + this.G = G; + this.opMulGF = opMulGF; + + let rem = F.sqrt_t || F.t; + let s = F.sqrt_s || F.s; + + let nqr = F.one; + while (F.eq(F.pow(nqr, F.half), F.one)) nqr = F.add(nqr, F.one); + + this.w = new Array(s+1); + this.wi = new Array(s+1); + this.w[s] = this.F.pow(nqr, rem); + this.wi[s] = this.F.inv(this.w[s]); + + let n=s-1; + while (n>=0) { + this.w[n] = this.F.square(this.w[n+1]); + this.wi[n] = this.F.square(this.wi[n+1]); + n--; + } + + + this.roots = []; + /* + for (let i=0; i<16; i++) { + let r = this.F.one; + n = 1 << i; + const rootsi = new Array(n); + for (let j=0; j=0) && (!this.roots[i]); i--) { + let r = this.F.one; + const nroots = 1 << i; + const rootsi = new Array(nroots); + for (let j=0; j> 1; + const p1 = __fft$2(PF, pall, bits-1, offset, step*2); + const p2 = __fft$2(PF, pall, bits-1, offset+step, step*2); + + const out = new Array(n); + + for (let i=0; i> this.one; + this.bitLength = bitLength$d(this.p); + this.mask = (this.one << BigInt(this.bitLength)) - this.one; + + this.n64 = Math.floor((this.bitLength - 1) / 64)+1; + this.n32 = this.n64*2; + this.n8 = this.n64*8; + this.R = this.e(this.one << BigInt(this.n64*64)); + this.Ri = this.inv(this.R); + + const e = this.negone >> this.one; + this.nqr = this.two; + let r = this.pow(this.nqr, e); + while (!this.eq(r, this.negone)) { + this.nqr = this.nqr + this.one; + r = this.pow(this.nqr, e); + } + + + this.s = 0; + this.t = this.negone; + + while ((this.t & this.one) == this.zero) { + this.s = this.s + 1; + this.t = this.t >> this.one; + } + + this.nqr_to_t = this.pow(this.nqr, this.t); + + buildSqrt$2(this); + + this.FFT = new FFT$2(this, this, this.mul.bind(this)); + + this.fft = this.FFT.fft.bind(this.FFT); + this.ifft = this.FFT.ifft.bind(this.FFT); + this.w = this.FFT.w; + this.wi = this.FFT.wi; + + this.shift = this.square(this.nqr); + this.k = this.exp(this.nqr, 2**this.s); + } + + e(a,b) { + let res; + if (!b) { + res = BigInt(a); + } else if (b==16) { + res = BigInt("0x"+a); + } + if (res < 0) { + let nres = -res; + if (nres >= this.p) nres = nres % this.p; + return this.p - nres; + } else { + return (res>= this.p) ? res%this.p : res; + } + + } + + add(a, b) { + const res = a + b; + return res >= this.p ? res-this.p : res; + } + + sub(a, b) { + return (a >= b) ? a-b : this.p-b+a; + } + + neg(a) { + return a ? this.p-a : a; + } + + mul(a, b) { + return (a*b)%this.p; + } + + mulScalar(base, s) { + return (base * this.e(s)) % this.p; + } + + square(a) { + return (a*a) % this.p; + } + + eq(a, b) { + return a==b; + } + + neq(a, b) { + return a!=b; + } + + lt(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa < bb; + } + + gt(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa > bb; + } + + leq(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa <= bb; + } + + geq(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa >= bb; + } + + div(a, b) { + return this.mul(a, this.inv(b)); + } + + idiv(a, b) { + if (!b) throw new Error("Division by zero"); + return a / b; + } + + inv(a) { + if (!a) throw new Error("Division by zero"); + + let t = this.zero; + let r = this.p; + let newt = this.one; + let newr = a % this.p; + while (newr) { + let q = r/newr; + [t, newt] = [newt, t-q*newt]; + [r, newr] = [newr, r-q*newr]; + } + if (t= this.p ? res-this.p : res; + } + + bor(a, b) { + const res = ((a | b) & this.mask); + return res >= this.p ? res-this.p : res; + } + + bxor(a, b) { + const res = ((a ^ b) & this.mask); + return res >= this.p ? res-this.p : res; + } + + bnot(a) { + const res = a ^ this.mask; + return res >= this.p ? res-this.p : res; + } + + shl(a, b) { + if (Number(b) < this.bitLength) { + const res = (a << b) & this.mask; + return res >= this.p ? res-this.p : res; + } else { + const nb = this.p - b; + if (Number(nb) < this.bitLength) { + return a >> nb; + } else { + return this.zero; + } + } + } + + shr(a, b) { + if (Number(b) < this.bitLength) { + return a >> b; + } else { + const nb = this.p - b; + if (Number(nb) < this.bitLength) { + const res = (a << nb) & this.mask; + return res >= this.p ? res-this.p : res; + } else { + return 0; + } + } + } + + land(a, b) { + return (a && b) ? this.one : this.zero; + } + + lor(a, b) { + return (a || b) ? this.one : this.zero; + } + + lnot(a) { + return (a) ? this.zero : this.one; + } + + sqrt_old(n) { + + if (n == this.zero) return this.zero; + + // Test that have solution + const res = this.pow(n, this.negone >> this.one); + if ( res != this.one ) return null; + + let m = this.s; + let c = this.nqr_to_t; + let t = this.pow(n, this.t); + let r = this.pow(n, this.add(this.t, this.one) >> this.one ); + + while ( t != this.one ) { + let sq = this.square(t); + let i = 1; + while (sq != this.one ) { + i++; + sq = this.square(sq); + } + + // b = c ^ m-i-1 + let b = c; + for (let j=0; j< m-i-1; j ++) b = this.square(b); + + m = i; + c = this.square(b); + t = this.mul(t, c); + r = this.mul(r, b); + } + + if (r > (this.p >> this.one)) { + r = this.neg(r); + } + + return r; + } + + normalize(a, b) { + a = BigInt(a,b); + if (a < 0) { + let na = -a; + if (na >= this.p) na = na % this.p; + return this.p - na; + } else { + return (a>= this.p) ? a%this.p : a; + } + } + + random() { + const nBytes = (this.bitLength*2 / 8); + let res =this.zero; + for (let i=0; i this.half)&&(base == 10)) { + const v = this.p-a; + vs = "-"+v.toString(base); + } else { + vs = a.toString(base); + } + return vs; + } + + isZero(a) { + return a == this.zero; + } + + fromRng(rng) { + let v; + do { + v=this.zero; + for (let i=0; i= this.p); + v = (v * this.Ri) % this.p; // Convert from montgomery + return v; + } + + fft(a) { + return this.FFT.fft(a); + } + + ifft(a) { + return this.FFT.ifft(a); + } + + // Returns a buffer with Little Endian Representation + toRprLE(buff, o, e) { + toRprLE$2(buff, o, e, this.n64*8); + } + + // Returns a buffer with Big Endian Representation + toRprBE(buff, o, e) { + toRprBE$2(buff, o, e, this.n64*8); + } + + // Returns a buffer with Big Endian Montgomery Representation + toRprBEM(buff, o, e) { + return this.toRprBE(buff, o, this.mul(this.R, e)); + } + + toRprLEM(buff, o, e) { + return this.toRprLE(buff, o, this.mul(this.R, e)); + } + + + // Pases a buffer with Little Endian Representation + fromRprLE(buff, o) { + return fromRprLE$2(buff, o, this.n8); + } + + // Pases a buffer with Big Endian Representation + fromRprBE(buff, o) { + return fromRprBE$2(buff, o, this.n8); + } + + fromRprLEM(buff, o) { + return this.mul(this.fromRprLE(buff, o), this.Ri); + } + + fromRprBEM(buff, o) { + return this.mul(this.fromRprBE(buff, o), this.Ri); + } + + toObject(a) { + return a; + } + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var utils$c = {}; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + utils$c.bigInt2BytesLE = function bigInt2BytesLE(_a, len) { + const b = Array(len); + let v = BigInt(_a); + for (let i=0; i> 8n; + } + return b; + }; + + utils$c.bigInt2U32LE = function bigInt2BytesLE(_a, len) { + const b = Array(len); + let v = BigInt(_a); + for (let i=0; i> 32n; + } + return b; + }; + + utils$c.isOcamNum = function(a) { + if (!Array.isArray(a)) return false; + if (a.length != 3) return false; + if (typeof a[0] !== "number") return false; + if (typeof a[1] !== "number") return false; + if (!Array.isArray(a[2])) return false; + return true; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_int$1 = function buildInt(module, n64, _prefix) { + + const prefix = _prefix || "int"; + if (module.modules[prefix]) return prefix; // already builded + module.modules[prefix] = {}; + + const n32 = n64*2; + const n8 = n64*8; + + function buildCopy() { + const f = module.addFunction(prefix+"_copy"); + f.addParam("px", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + for (let i=0; i>1) )&&(i>1, k>>1) + ) + ) + ); + + f.addCode( + c.setLocal(c1, + c.i64_add( + c.getLocal(c1), + c.i64_shr_u( + c.getLocal(c0), + c.i64_const(32) + ) + ) + ) + ); + } + + // Add the old carry + + if (k>0) { + f.addCode( + c.setLocal(c0, + c.i64_add( + c.i64_and( + c.getLocal(c0), + c.i64_const(0xFFFFFFFF) + ), + c.i64_and( + c.getLocal(c0_old), + c.i64_const(0xFFFFFFFF) + ), + ) + ) + ); + + f.addCode( + c.setLocal(c1, + c.i64_add( + c.i64_add( + c.getLocal(c1), + c.i64_shr_u( + c.getLocal(c0), + c.i64_const(32) + ) + ), + c.getLocal(c1_old) + ) + ) + ); + } + + f.addCode( + c.i64_store32( + c.getLocal("r"), + k*4, + c.getLocal(c0) + ) + ); + + f.addCode( + c.setLocal( + c0_old, + c.getLocal(c1) + ), + c.setLocal( + c1_old, + c.i64_shr_u( + c.getLocal(c0_old), + c.i64_const(32) + ) + ) + ); + + } + f.addCode( + c.i64_store32( + c.getLocal("r"), + n32*4*2-4, + c.getLocal(c0_old) + ) + ); + + } + + + function buildSquareOld() { + const f = module.addFunction(prefix+"_squareOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + + function _buildMul1() { + const f = module.addFunction(prefix+"__mul1"); + f.addParam("px", "i32"); + f.addParam("y", "i64"); + f.addParam("pr", "i32"); + f.addLocal("c", "i64"); + + const c = f.getCodeBuilder(); + + f.addCode(c.setLocal( + "c", + c.i64_mul( + c.i64_load32_u(c.getLocal("px"), 0, 0), + c.getLocal("y") + ) + )); + + f.addCode(c.i64_store32( + c.getLocal("pr"), + 0, + 0, + c.getLocal("c"), + )); + + for (let i=1; i3)&&(Y[eY]==0) ey--; + f.addCode(c.block(c.loop( + c.br_if( + 1, + c.i32_or( + c.i32_load8_u( + c.i32_add(Y , c.getLocal("eY")), + 0, + 0 + ), + c.i32_eq( + c.getLocal("eY"), + c.i32_const(3) + ) + ) + ), + c.setLocal("eY", c.i32_sub(c.getLocal("eY"), c.i32_const(1))), + c.br(0) + ))); + + f.addCode( + c.setLocal( + "sy", + c.i64_add( + c.i64_load32_u( + c.i32_sub( + c.i32_add( Y, c.getLocal("eY")), + c.i32_const(3) + ), + 0, + 0 + ), + c.i64_const(1) + ) + ) + ); + + // Force a divide by 0 if quotien is 0 + f.addCode( + c.if( + c.i64_eq( + c.getLocal("sy"), + c.i64_const(1) + ), + c.drop(c.i64_div_u(c.i64_const(0), c.i64_const(0))) + ) + ); + + f.addCode(c.block(c.loop( + + // while (eX>7)&&(Y[eX]==0) ex--; + c.block(c.loop( + c.br_if( + 1, + c.i32_or( + c.i32_load8_u( + c.i32_add(R , c.getLocal("eX")), + 0, + 0 + ), + c.i32_eq( + c.getLocal("eX"), + c.i32_const(7) + ) + ) + ), + c.setLocal("eX", c.i32_sub(c.getLocal("eX"), c.i32_const(1))), + c.br(0) + )), + + c.setLocal( + "sx", + c.i64_load( + c.i32_sub( + c.i32_add( R, c.getLocal("eX")), + c.i32_const(7) + ), + 0, + 0 + ) + ), + + c.setLocal( + "sx", + c.i64_div_u( + c.getLocal("sx"), + c.getLocal("sy") + ) + ), + c.setLocal( + "ec", + c.i32_sub( + c.i32_sub( + c.getLocal("eX"), + c.getLocal("eY") + ), + c.i32_const(4) + ) + ), + + // While greater than 32 bits or ec is neg, shr and inc exp + c.block(c.loop( + c.br_if( + 1, + c.i32_and( + c.i64_eqz( + c.i64_and( + c.getLocal("sx"), + c.i64_const("0xFFFFFFFF00000000") + ) + ), + c.i32_ge_s( + c.getLocal("ec"), + c.i32_const(0) + ) + ) + ), + + c.setLocal( + "sx", + c.i64_shr_u( + c.getLocal("sx"), + c.i64_const(8) + ) + ), + + c.setLocal( + "ec", + c.i32_add( + c.getLocal("ec"), + c.i32_const(1) + ) + ), + c.br(0) + )), + + c.if( + c.i64_eqz(c.getLocal("sx")), + [ + ...c.br_if( + 2, + c.i32_eqz(c.call(prefix + "_gte", R, Y)) + ), + ...c.setLocal("sx", c.i64_const(1)), + ...c.setLocal("ec", c.i32_const(0)) + ] + ), + + c.call(prefix + "__mul1", Y, c.getLocal("sx"), R2), + c.drop(c.call( + prefix + "_sub", + R, + c.i32_sub(R2, c.getLocal("ec")), + R + )), + c.call( + prefix + "__add1", + c.i32_add(C, c.getLocal("ec")), + c.getLocal("sx") + ), + c.br(0) + ))); + } + + function buildInverseMod() { + + const f = module.addFunction(prefix+"_inverseMod"); + f.addParam("px", "i32"); + f.addParam("pm", "i32"); + f.addParam("pr", "i32"); + f.addLocal("t", "i32"); + f.addLocal("newt", "i32"); + f.addLocal("r", "i32"); + f.addLocal("qq", "i32"); + f.addLocal("qr", "i32"); + f.addLocal("newr", "i32"); + f.addLocal("swp", "i32"); + f.addLocal("x", "i32"); + f.addLocal("signt", "i32"); + f.addLocal("signnewt", "i32"); + f.addLocal("signx", "i32"); + + const c = f.getCodeBuilder(); + + const aux1 = c.i32_const(module.alloc(n8)); + const aux2 = c.i32_const(module.alloc(n8)); + const aux3 = c.i32_const(module.alloc(n8)); + const aux4 = c.i32_const(module.alloc(n8)); + const aux5 = c.i32_const(module.alloc(n8)); + const aux6 = c.i32_const(module.alloc(n8)); + const mulBuff = c.i32_const(module.alloc(n8*2)); + const aux7 = c.i32_const(module.alloc(n8)); + + f.addCode( + c.setLocal("t", aux1), + c.call(prefix + "_zero", aux1), + c.setLocal("signt", c.i32_const(0)), + ); + + f.addCode( + c.setLocal("r", aux2), + c.call(prefix + "_copy", c.getLocal("pm"), aux2) + ); + + f.addCode( + c.setLocal("newt", aux3), + c.call(prefix + "_one", aux3), + c.setLocal("signnewt", c.i32_const(0)), + ); + + f.addCode( + c.setLocal("newr", aux4), + c.call(prefix + "_copy", c.getLocal("px"), aux4) + ); + + + + + f.addCode(c.setLocal("qq", aux5)); + f.addCode(c.setLocal("qr", aux6)); + f.addCode(c.setLocal("x", aux7)); + + f.addCode(c.block(c.loop( + c.br_if( + 1, + c.call(prefix + "_isZero", c.getLocal("newr") ) + ), + c.call(prefix + "_div", c.getLocal("r"), c.getLocal("newr"), c.getLocal("qq"), c.getLocal("qr")), + + c.call(prefix + "_mul", c.getLocal("qq"), c.getLocal("newt"), mulBuff), + + c.if( + c.getLocal("signt"), + c.if( + c.getLocal("signnewt"), + c.if ( + c.call(prefix + "_gte", mulBuff, c.getLocal("t")), + [ + ...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(0)) + ], + [ + ...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(1)) + ], + ), + [ + ...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(1)) + ] + ), + c.if( + c.getLocal("signnewt"), + [ + ...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(0)) + ], + c.if ( + c.call(prefix + "_gte", c.getLocal("t"), mulBuff), + [ + ...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(0)) + ], + [ + ...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))), + ...c.setLocal("signx", c.i32_const(1)) + ] + ) + ) + ), + + c.setLocal("swp", c.getLocal("t")), + c.setLocal("t", c.getLocal("newt")), + c.setLocal("newt", c.getLocal("x")), + c.setLocal("x", c.getLocal("swp")), + + c.setLocal("signt", c.getLocal("signnewt")), + c.setLocal("signnewt", c.getLocal("signx")), + + c.setLocal("swp", c.getLocal("r")), + c.setLocal("r", c.getLocal("newr")), + c.setLocal("newr", c.getLocal("qr")), + c.setLocal("qr", c.getLocal("swp")), + + c.br(0) + ))); + + f.addCode(c.if( + c.getLocal("signt"), + c.drop(c.call(prefix + "_sub", c.getLocal("pm"), c.getLocal("t"), c.getLocal("pr"))), + c.call(prefix + "_copy", c.getLocal("t"), c.getLocal("pr")) + )); + } + + + buildCopy(); + buildZero(); + buildIsZero(); + buildOne(); + buildEq(); + buildGte(); + buildAdd(); + buildSub(); + buildMul(); + buildSquare(); + buildSquareOld(); + buildDiv(); + buildInverseMod(); + module.exportFunction(prefix+"_copy"); + module.exportFunction(prefix+"_zero"); + module.exportFunction(prefix+"_one"); + module.exportFunction(prefix+"_isZero"); + module.exportFunction(prefix+"_eq"); + module.exportFunction(prefix+"_gte"); + module.exportFunction(prefix+"_add"); + module.exportFunction(prefix+"_sub"); + module.exportFunction(prefix+"_mul"); + module.exportFunction(prefix+"_square"); + module.exportFunction(prefix+"_squareOld"); + module.exportFunction(prefix+"_div"); + module.exportFunction(prefix+"_inverseMod"); + + return prefix; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_timesscalar$1 = function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) { + + const f = module.addFunction(fnName); + f.addParam("base", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLength", "i32"); + f.addParam("r", "i32"); + f.addLocal("i", "i32"); + f.addLocal("b", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(elementLen)); + + f.addCode( + c.if( + c.i32_eqz(c.getLocal("scalarLength")), + [ + ...c.call(opInit, c.getLocal("r")), + ...c.ret([]) + ] + ) + ); + f.addCode(c.call(opCopy, c.getLocal("base"), aux)); + f.addCode(c.call(opInit, c.getLocal("r"))); + f.addCode(c.setLocal("i", c.getLocal("scalarLength"))); + f.addCode(c.block(c.loop( + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + + c.setLocal( + "b", + c.i32_load8_u( + c.i32_add( + c.getLocal("scalar"), + c.getLocal("i") + ) + ) + ), + ...innerLoop(), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.br(0) + ))); + + + function innerLoop() { + const code = []; + for (let i=0; i<8; i++) { + code.push( + ...c.call(opAA, c.getLocal("r"), c.getLocal("r")), + ...c.if( + c.i32_ge_u( c.getLocal("b"), c.i32_const(0x80 >> i)), + [ + ...c.setLocal( + "b", + c.i32_sub( + c.getLocal("b"), + c.i32_const(0x80 >> i) + ) + ), + ...c.call(opAB, c.getLocal("r"),aux, c.getLocal("r")) + ] + ) + ); + } + return code; + } + + }; + + var build_batchinverse$1 = buildBatchInverse$7; + + function buildBatchInverse$7(module, prefix) { + + + const n8 = module.modules[prefix].n64*8; + + const f = module.addFunction(prefix+"_batchInverse"); + f.addParam("pIn", "i32"); + f.addParam("inStep", "i32"); + f.addParam("n", "i32"); + f.addParam("pOut", "i32"); + f.addParam("outStep", "i32"); + f.addLocal("itAux", "i32"); + f.addLocal("itIn", "i32"); + f.addLocal("itOut","i32"); + f.addLocal("i","i32"); + + const c = f.getCodeBuilder(); + + const AUX = c.i32_const(module.alloc(n8)); + + + // Alloc Working space for accumulated umltiplications + f.addCode( + c.setLocal("itAux", c.i32_load( c.i32_const(0) )), + c.i32_store( + c.i32_const(0), + c.i32_add( + c.getLocal("itAux"), + c.i32_mul( + c.i32_add( + c.getLocal("n"), + c.i32_const(1) + ), + c.i32_const(n8) + ) + ) + ) + ); + + f.addCode( + + // aux[0] = a; + c.call(prefix+"_one", c.getLocal("itAux")), + // for (i=0;i b ? 1 : -1; + } + + function square$4(n) { + return n * n; + } + + function isOdd$b(n) { + return n % 2n !== 0n; + } + + function isEven$1(n) { + return n % 2n === 0n; + } + + function isNegative$8(n) { + return n < 0n; + } + + function isPositive$1(n) { + return n > 0n; + } + + function bitLength$c(n) { + if (isNegative$8(n)) { + return n.toString(2).length - 1; // discard the - sign + } else { + return n.toString(2).length; + } + } + + function abs$2(n) { + return n < 0n ? -n : n; + } + + function isUnit$1(n) { + return abs$2(n) === 1n; + } + + function modInv$7(a, n) { + var t = 0n, newT = 1n, r = n, newR = abs$2(a), q, lastT, lastR; + while (newR !== 0n) { + q = r / newR; + lastT = t; + lastR = r; + t = newT; + r = newR; + newT = lastT - (q * newT); + newR = lastR - (q * newR); + } + if (!isUnit$1(r)) throw new Error(a.toString() + " and " + n.toString() + " are not co-prime"); + if (compare$1(t, 0n) === -1) { + t = t + n; + } + if (isNegative$8(a)) { + return -t; + } + return t; + } + + function modPow$5(n, exp, mod) { + if (mod === 0n) throw new Error("Cannot take modPow with modulus 0"); + var r = 1n, + base = n % mod; + if (isNegative$8(exp)) { + exp = exp * -1n; + base = modInv$7(base, mod); + } + while (isPositive$1(exp)) { + if (base === 0n) return 0n; + if (isOdd$b(exp)) r = r * base % mod; + exp = exp / 2n; + base = square$4(base) % mod; + } + return r; + } + + function compareAbs$1(a, b) { + a = a >= 0n ? a : -a; + b = b >= 0n ? b : -b; + return a === b ? 0 : a > b ? 1 : -1; + } + + function isDivisibleBy$1(a, n) { + if (n === 0n) return false; + if (isUnit$1(n)) return true; + if (compareAbs$1(n, 2n) === 0) return isEven$1(a); + return a % n === 0n; + } + + function isBasicPrime$1(v) { + var n = abs$2(v); + if (isUnit$1(n)) return false; + if (n === 2n || n === 3n || n === 5n) return true; + if (isEven$1(n) || isDivisibleBy$1(n, 3n) || isDivisibleBy$1(n, 5n)) return false; + if (n < 49n) return true; + // we don't know if it's prime: let the other functions figure it out + } + + function prev$1(n) { + return n - 1n; + } + + function millerRabinTest$1(n, a) { + var nPrev = prev$1(n), + b = nPrev, + r = 0, + d, i, x; + while (isEven$1(b)) b = b / 2n, r++; + next: for (i = 0; i < a.length; i++) { + if (n < a[i]) continue; + x = modPow$5(BigInt(a[i]), b, n); + if (isUnit$1(x) || x === nPrev) continue; + for (d = r - 1; d != 0; d--) { + x = square$4(x) % n; + if (isUnit$1(x)) return false; + if (x === nPrev) continue next; + } + return false; + } + return true; + } + + function isPrime$3(p) { + var isPrime = isBasicPrime$1(p); + if (isPrime !== undefined) return isPrime; + var n = abs$2(p); + var bits = bitLength$c(n); + if (bits <= 64) + return millerRabinTest$1(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]); + var logN = Math.log(2) * Number(bits); + var t = Math.ceil(logN); + for (var a = [], i = 0; i < t; i++) { + a.push(BigInt(i + 2)); + } + return millerRabinTest$1(n, a); + } + + bigint$1.bitLength = bitLength$c; + bigint$1.isOdd = isOdd$b; + bigint$1.isNegative = isNegative$8; + bigint$1.abs = abs$2; + bigint$1.isUnit = isUnit$1; + bigint$1.compare = compare$1; + bigint$1.modInv = modInv$7; + bigint$1.modPow = modPow$5; + bigint$1.isPrime = isPrime$3; + bigint$1.square = square$4; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + const buildInt$1 = build_int$1; + const utils$b = utils$c; + const buildExp$5 = build_timesscalar$1; + const buildBatchInverse$6 = build_batchinverse$1; + const buildBatchConvertion$5 = build_batchconvertion$1; + const buildBatchOp$1 = build_batchop$1; + const { bitLength: bitLength$b, modInv: modInv$6, modPow: modPow$4, isPrime: isPrime$2, isOdd: isOdd$a, square: square$3 } = bigint$1; + + var build_f1m$1 = function buildF1m(module, _q, _prefix, _intPrefix) { + const q = BigInt(_q); + const n64 = Math.floor((bitLength$b(q - 1n) - 1)/64) +1; + const n32 = n64*2; + const n8 = n64*8; + + const prefix = _prefix || "f1m"; + if (module.modules[prefix]) return prefix; // already builded + + const intPrefix = buildInt$1(module, n64, _intPrefix); + const pq = module.alloc(n8, utils$b.bigInt2BytesLE(q, n8)); + + const pR2 = module.alloc(utils$b.bigInt2BytesLE(square$3(1n << BigInt(n64*64)) % q, n8)); + const pOne = module.alloc(utils$b.bigInt2BytesLE((1n << BigInt(n64*64)) % q, n8)); + const pZero = module.alloc(utils$b.bigInt2BytesLE(0n, n8)); + const _minusOne = q - 1n; + const _e = _minusOne >> 1n; // e = (p-1)/2 + const pe = module.alloc(n8, utils$b.bigInt2BytesLE(_e, n8)); + + const _ePlusOne = _e + 1n; // e = (p-1)/2 + const pePlusOne = module.alloc(n8, utils$b.bigInt2BytesLE(_ePlusOne, n8)); + + module.modules[prefix] = { + pq: pq, + pR2: pR2, + n64: n64, + q: q, + pOne: pOne, + pZero: pZero, + pePlusOne: pePlusOne + }; + + function buildOne() { + const f = module.addFunction(prefix+"_one"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode(c.call(intPrefix + "_copy", c.i32_const(pOne), c.getLocal("pr"))); + } + + function buildAdd() { + const f = module.addFunction(prefix+"_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.if( + c.call(intPrefix+"_add", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + c.if( + c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + ) + ) + ); + } + + function buildSub() { + const f = module.addFunction(prefix+"_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.if( + c.call(intPrefix+"_sub", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), + c.drop(c.call(intPrefix+"_add", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))) + ) + ); + } + + function buildNeg() { + const f = module.addFunction(prefix+"_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(prefix + "_sub", c.i32_const(pZero), c.getLocal("x"), c.getLocal("r")) + ); + } + + + function buildIsNegative() { + const f = module.addFunction(prefix+"_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const AUX = c.i32_const(module.alloc(n8)); + + f.addCode( + c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), + c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne) ) + ); + } + + function buildSign() { + const f = module.addFunction(prefix+"_sign"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const AUX = c.i32_const(module.alloc(n8)); + + f.addCode( + c.if ( + c.call(intPrefix + "_isZero", c.getLocal("x")), + c.ret(c.i32_const(0)) + ), + c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX), + c.if( + c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne)), + c.ret(c.i32_const(-1)) + ), + c.ret(c.i32_const(1)) + ); + } + + + function buildMReduct() { + const carries = module.alloc(n32*n32*8); + + const f = module.addFunction(prefix+"_mReduct"); + f.addParam("t", "i32"); + f.addParam("r", "i32"); + f.addLocal("np32", "i64"); + f.addLocal("c", "i64"); + f.addLocal("m", "i64"); + + const c = f.getCodeBuilder(); + + const np32 = Number(0x100000000n - modInv$6(q, 0x100000000n)); + + f.addCode(c.setLocal("np32", c.i64_const(np32))); + + for (let i=0; i=n32) { + f.addCode( + c.i64_store32( + c.getLocal("r"), + (k-n32)*4, + c.getLocal(c0) + ) + ); + } + [c0, c1] = [c1, c0]; + f.addCode( + c.setLocal(c1, + c.i64_shr_u( + c.getLocal(c0), + c.i64_const(32) + ) + ) + ); + } + f.addCode( + c.i64_store32( + c.getLocal("r"), + n32*4-4, + c.getLocal(c0) + ) + ); + + f.addCode( + c.if( + c.i32_wrap_i64(c.getLocal(c1)), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + c.if( + c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + ) + ) + ); + } + + + function buildSquare() { + + const f = module.addFunction(prefix+"_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("c0", "i64"); + f.addLocal("c1", "i64"); + f.addLocal("c0_old", "i64"); + f.addLocal("c1_old", "i64"); + f.addLocal("np32", "i64"); + + + for (let i=0;i>1) )&&(i>1, k>>1) + ) + ) + ); + + f.addCode( + c.setLocal(c1, + c.i64_add( + c.getLocal(c1), + c.i64_shr_u( + c.getLocal(c0), + c.i64_const(32) + ) + ) + ) + ); + } + + // Add the old carry + + if (k>0) { + f.addCode( + c.setLocal(c0, + c.i64_add( + c.i64_and( + c.getLocal(c0), + c.i64_const(0xFFFFFFFF) + ), + c.i64_and( + c.getLocal(c0_old), + c.i64_const(0xFFFFFFFF) + ), + ) + ) + ); + + f.addCode( + c.setLocal(c1, + c.i64_add( + c.i64_add( + c.getLocal(c1), + c.i64_shr_u( + c.getLocal(c0), + c.i64_const(32) + ) + ), + c.getLocal(c1_old) + ) + ) + ); + } + + + for (let i=Math.max(1, k-n32+1); (i<=k)&&(i=n32) { + f.addCode( + c.i64_store32( + c.getLocal("r"), + (k-n32)*4, + c.getLocal(c0) + ) + ); + } + f.addCode( + c.setLocal( + c0_old, + c.getLocal(c1) + ), + c.setLocal( + c1_old, + c.i64_shr_u( + c.getLocal(c0_old), + c.i64_const(32) + ) + ) + ); + } + f.addCode( + c.i64_store32( + c.getLocal("r"), + n32*4-4, + c.getLocal(c0_old) + ) + ); + + f.addCode( + c.if( + c.i32_wrap_i64(c.getLocal(c1_old)), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + c.if( + c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ), + c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))), + ) + ) + ); + } + + + function buildSquareOld() { + const f = module.addFunction(prefix+"_squareOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + + function buildToMontgomery() { + const f = module.addFunction(prefix+"_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix+"_mul", c.getLocal("x"), c.i32_const(pR2), c.getLocal("r"))); + } + + function buildFromMontgomery() { + + const pAux2 = module.alloc(n8*2); + + const f = module.addFunction(prefix+"_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_copy", c.getLocal("x"), c.i32_const(pAux2) )); + f.addCode(c.call(intPrefix + "_zero", c.i32_const(pAux2 + n8) )); + f.addCode(c.call(prefix+"_mReduct", c.i32_const(pAux2), c.getLocal("r"))); + } + + function buildInverse() { + + const f = module.addFunction(prefix+ "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), c.getLocal("r"))); + f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))); + f.addCode(c.call(prefix + "_toMontgomery", c.getLocal("r"), c.getLocal("r"))); + } + + // Calculate various valuse needed for sqrt + + + let _nqr = 2n; + if (isPrime$2(q)) { + while (modPow$4(_nqr, _e, q) !== _minusOne) _nqr = _nqr + 1n; + } + + let s2 = 0; + let _t = _minusOne; + + while ((!isOdd$a(_t))&&(_t !== 0n)) { + s2++; + _t = _t >> 1n; + } + const pt = module.alloc(n8, utils$b.bigInt2BytesLE(_t, n8)); + + const _nqrToT = modPow$4(_nqr, _t, q); + const pNqrToT = module.alloc(utils$b.bigInt2BytesLE((_nqrToT << BigInt(n64*64)) % q, n8)); + + const _tPlusOneOver2 = (_t + 1n) >> 1n; + const ptPlusOneOver2 = module.alloc(n8, utils$b.bigInt2BytesLE(_tPlusOneOver2, n8)); + + function buildSqrt() { + + const f = module.addFunction(prefix+ "_sqrt"); + f.addParam("n", "i32"); + f.addParam("r", "i32"); + f.addLocal("m", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + + const c = f.getCodeBuilder(); + + const ONE = c.i32_const(pOne); + const C = c.i32_const(module.alloc(n8)); + const T = c.i32_const(module.alloc(n8)); + const R = c.i32_const(module.alloc(n8)); + const SQ = c.i32_const(module.alloc(n8)); + const B = c.i32_const(module.alloc(n8)); + + f.addCode( + + // If (n==0) return 0 + c.if( + c.call(prefix + "_isZero", c.getLocal("n")), + c.ret( + c.call(prefix + "_zero", c.getLocal("r")) + ) + ), + + c.setLocal("m", c.i32_const(s2)), + c.call(prefix + "_copy", c.i32_const(pNqrToT), C), + c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pt), c.i32_const(n8), T), + c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(ptPlusOneOver2), c.i32_const(n8), R), + + c.block(c.loop( + c.br_if(1, c.call(prefix + "_eq", T, ONE)), + + c.call(prefix + "_square", T, SQ), + c.setLocal("i", c.i32_const(1)), + c.block(c.loop( + c.br_if(1, c.call(prefix + "_eq", SQ, ONE)), + c.call(prefix + "_square", SQ, SQ), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )), + + c.call(prefix + "_copy", C, B), + c.setLocal("j", c.i32_sub(c.i32_sub( c.getLocal("m"), c.getLocal("i")), c.i32_const(1)) ), + c.block(c.loop( + c.br_if(1, c.i32_eqz(c.getLocal("j"))), + c.call(prefix + "_square", B, B), + c.setLocal("j", c.i32_sub(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + + c.setLocal("m", c.getLocal("i")), + c.call(prefix + "_square", B, C), + c.call(prefix + "_mul", T, C, T), + c.call(prefix + "_mul", R, B, R), + + c.br(0) + )), + + c.if( + c.call(prefix + "_isNegative", R), + c.call(prefix + "_neg", R, c.getLocal("r")), + c.call(prefix + "_copy", R, c.getLocal("r")), + ) + ); + } + + function buildIsSquare() { + const f = module.addFunction(prefix+"_isSquare"); + f.addParam("n", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const ONE = c.i32_const(pOne); + const AUX = c.i32_const(module.alloc(n8)); + + f.addCode( + c.if( + c.call(prefix + "_isZero", c.getLocal("n")), + c.ret(c.i32_const(1)) + ), + c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pe), c.i32_const(n8), AUX), + c.call(prefix + "_eq", AUX, ONE) + ); + } + + + function buildLoad() { + const f = module.addFunction(prefix+"_load"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + f.addLocal("p", "i32"); + f.addLocal("l", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + const c = f.getCodeBuilder(); + + const R = c.i32_const(module.alloc(n8)); + const pAux = module.alloc(n8); + const AUX = c.i32_const(pAux); + + f.addCode( + c.call(intPrefix + "_zero", c.getLocal("r")), + c.setLocal("i", c.i32_const(n8)), + c.setLocal("p", c.getLocal("scalar")), + c.block(c.loop( + c.br_if(1, c.i32_gt_u(c.getLocal("i"), c.getLocal("scalarLen"))), + + c.if( + c.i32_eq(c.getLocal("i"), c.i32_const(n8)), + c.call(prefix + "_one", R), + c.call(prefix + "_mul", R, c.i32_const(pR2), R) + ), + c.call(prefix + "_mul", c.getLocal("p"), R, AUX), + c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")), + + c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(n8))), + c.br(0) + )), + + c.setLocal("l", c.i32_rem_u( c.getLocal("scalarLen"), c.i32_const(n8))), + c.if(c.i32_eqz(c.getLocal("l")), c.ret([])), + c.call(intPrefix + "_zero", AUX), + c.setLocal("j", c.i32_const(0)), + c.block(c.loop( + c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("l"))), + + c.i32_store8( + c.getLocal("j"), + pAux, + c.i32_load8_u(c.getLocal("p")), + ), + c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1))), + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + + c.if( + c.i32_eq(c.getLocal("i"), c.i32_const(n8)), + c.call(prefix + "_one", R), + c.call(prefix + "_mul", R, c.i32_const(pR2), R) + ), + c.call(prefix + "_mul", AUX, R, AUX), + c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")), + ); + } + + function buildTimesScalar() { + const f = module.addFunction(prefix+"_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const AUX = c.i32_const(module.alloc(n8)); + + f.addCode( + c.call(prefix + "_load", c.getLocal("scalar"), c.getLocal("scalarLen"), AUX), + c.call(prefix + "_toMontgomery", AUX, AUX), + c.call(prefix + "_mul", c.getLocal("x"), AUX, c.getLocal("r")), + ); + } + + function buildIsOne() { + const f = module.addFunction(prefix+"_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + f.addCode( + c.ret(c.call(intPrefix + "_eq", c.getLocal("x"), c.i32_const(pOne))) + ); + } + + + module.exportFunction(intPrefix + "_copy", prefix+"_copy"); + module.exportFunction(intPrefix + "_zero", prefix+"_zero"); + module.exportFunction(intPrefix + "_isZero", prefix+"_isZero"); + module.exportFunction(intPrefix + "_eq", prefix+"_eq"); + + buildIsOne(); + buildAdd(); + buildSub(); + buildNeg(); + buildMReduct(); + buildMul(); + buildSquare(); + buildSquareOld(); + buildToMontgomery(); + buildFromMontgomery(); + buildIsNegative(); + buildSign(); + buildInverse(); + buildOne(); + buildLoad(); + buildTimesScalar(); + buildBatchInverse$6(module, prefix); + buildBatchConvertion$5(module, prefix + "_batchToMontgomery", prefix + "_toMontgomery", n8, n8); + buildBatchConvertion$5(module, prefix + "_batchFromMontgomery", prefix + "_fromMontgomery", n8, n8); + buildBatchConvertion$5(module, prefix + "_batchNeg", prefix + "_neg", n8, n8); + buildBatchOp$1(module, prefix + "_batchAdd", prefix + "_add", n8, n8); + buildBatchOp$1(module, prefix + "_batchSub", prefix + "_sub", n8, n8); + buildBatchOp$1(module, prefix + "_batchMul", prefix + "_mul", n8, n8); + + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_isNegative"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_mReduct"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_squareOld"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_inverse"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_load"); + module.exportFunction(prefix + "_timesScalar"); + buildExp$5( + module, + prefix + "_exp", + n8, + prefix + "_mul", + prefix + "_square", + intPrefix + "_copy", + prefix + "_one", + ); + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_batchInverse"); + if (isPrime$2(q)) { + buildSqrt(); + buildIsSquare(); + module.exportFunction(prefix + "_sqrt"); + module.exportFunction(prefix + "_isSquare"); + } + module.exportFunction(prefix + "_batchToMontgomery"); + module.exportFunction(prefix + "_batchFromMontgomery"); + // console.log(module.functionIdxByName); + + return prefix; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + const buildF1m$5 =build_f1m$1; + const { bitLength: bitLength$a } = bigint$1; + + var build_f1$1 = function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) { + + const q = BigInt(_q); + const n64 = Math.floor((bitLength$a(q - 1n) - 1)/64) +1; + const n8 = n64*8; + + const prefix = _prefix || "f1"; + if (module.modules[prefix]) return prefix; // already builded + module.modules[prefix] = { + n64: n64 + }; + + const intPrefix = _intPrefix || "int"; + const f1mPrefix = buildF1m$5(module, q, _f1mPrefix, intPrefix); + + + const pR2 = module.modules[f1mPrefix].pR2; + const pq = module.modules[f1mPrefix].pq; + const pePlusOne = module.modules[f1mPrefix].pePlusOne; + + function buildMul() { + const pAux1 = module.alloc(n8); + + const f = module.addFunction(prefix+ "_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + f.addCode(c.call(f1mPrefix + "_mul", c.getLocal("x"), c.getLocal("y"), c.i32_const(pAux1))); + f.addCode(c.call(f1mPrefix + "_mul", c.i32_const(pAux1), c.i32_const(pR2), c.getLocal("r"))); + } + + function buildSquare() { + const f = module.addFunction(prefix+"_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r"))); + } + + + function buildInverse() { + + const f = module.addFunction(prefix+ "_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("x"), c.i32_const(pq), c.getLocal("r"))); + } + + function buildIsNegative() { + const f = module.addFunction(prefix+"_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(intPrefix + "_gte", c.getLocal("x"), c.i32_const(pePlusOne) ) + ); + } + + + buildMul(); + buildSquare(); + buildInverse(); + buildIsNegative(); + module.exportFunction(f1mPrefix + "_add", prefix + "_add"); + module.exportFunction(f1mPrefix + "_sub", prefix + "_sub"); + module.exportFunction(f1mPrefix + "_neg", prefix + "_neg"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_inverse"); + module.exportFunction(prefix + "_isNegative"); + module.exportFunction(f1mPrefix + "_copy", prefix+"_copy"); + module.exportFunction(f1mPrefix + "_zero", prefix+"_zero"); + module.exportFunction(f1mPrefix + "_one", prefix+"_one"); + module.exportFunction(f1mPrefix + "_isZero", prefix+"_isZero"); + module.exportFunction(f1mPrefix + "_eq", prefix+"_eq"); + + return prefix; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + const buildExp$4 = build_timesscalar$1; + const buildBatchInverse$5 = build_batchinverse$1; + const utils$a = utils$c; + + var build_f2m$1 = function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) { + + if (module.modules[prefix]) return prefix; // already builded + + const f1n8 = module.modules[f1mPrefix].n64*8; + const q = module.modules[f1mPrefix].q; + + module.modules[prefix] = { + n64: module.modules[f1mPrefix].n64*2 + }; + + function buildAdd() { + const f = module.addFunction(prefix+"_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_add", x0, y0, r0), + c.call(f1mPrefix+"_add", x1, y1, r1), + ); + } + + function buildTimesScalar() { + const f = module.addFunction(prefix+"_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), + c.call(f1mPrefix+"_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1), + ); + } + + function buildSub() { + const f = module.addFunction(prefix+"_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_sub", x0, y0, r0), + c.call(f1mPrefix+"_sub", x1, y1, r1), + ); + } + + function buildNeg() { + const f = module.addFunction(prefix+"_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_neg", x0, r0), + c.call(f1mPrefix+"_neg", x1, r1), + ); + } + + function buildConjugate() { + const f = module.addFunction(prefix+"_conjugate"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_copy", x0, r0), + c.call(f1mPrefix+"_neg", x1, r1), + ); + } + + + function buildIsNegative() { + const f = module.addFunction(prefix+"_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.if( + c.call(f1mPrefix+"_isZero", x1), + c.ret(c.call(f1mPrefix+"_isNegative", x0)) + ), + c.ret(c.call(f1mPrefix+"_isNegative", x1)) + ); + } + + function buildMul() { + const f = module.addFunction(prefix+"_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + const A = c.i32_const(module.alloc(f1n8)); + const B = c.i32_const(module.alloc(f1n8)); + const C = c.i32_const(module.alloc(f1n8)); + const D = c.i32_const(module.alloc(f1n8)); + + + f.addCode( + c.call(f1mPrefix + "_mul", x0, y0, A), // A = x0*y0 + c.call(f1mPrefix + "_mul", x1, y1, B), // B = x1*y1 + + c.call(f1mPrefix + "_add", x0, x1, C), // C = x0 + x1 + c.call(f1mPrefix + "_add", y0, y1, D), // D = y0 + y1 + c.call(f1mPrefix + "_mul", C, D, C), // C = (x0 + x1)*(y0 + y1) = x0*y0+x0*y1+x1*y0+x1*y1 + + // c.call(f1mPrefix + "_mul", B, c.i32_const(pNonResidue), r0), // r0 = nr*(x1*y1) + c.call(mulNonResidueFn, B, r0), // r0 = nr*(x1*y1) + c.call(f1mPrefix + "_add", A, r0, r0), // r0 = x0*y0 + nr*(x1*y1) + c.call(f1mPrefix + "_add", A, B, r1), // r1 = x0*y0+x1*y1 + c.call(f1mPrefix + "_sub", C, r1, r1) // r1 = x0*y0+x0*y1+x1*y0+x1*y1 - x0*y0+x1*y1 = x0*y1+x1*y0 + ); + + } + + function buildMul1() { + const f = module.addFunction(prefix+"_mul1"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y = c.getLocal("y"); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + + f.addCode( + c.call(f1mPrefix + "_mul", x0, y, r0), // A = x0*y + c.call(f1mPrefix + "_mul", x1, y, r1), // B = x1*y + ); + } + + function buildSquare() { + const f = module.addFunction(prefix+"_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + const AB = c.i32_const(module.alloc(f1n8)); + const APB = c.i32_const(module.alloc(f1n8)); + const APNB = c.i32_const(module.alloc(f1n8)); + const ABPNAB = c.i32_const(module.alloc(f1n8)); + + + f.addCode( + // AB = x0*y1 + c.call(f1mPrefix + "_mul", x0, x1, AB), + + // APB = x0+y1 + c.call(f1mPrefix + "_add", x0, x1, APB), + + // APBN0 = x0 + nr*x1 + c.call(mulNonResidueFn, x1, APNB), + c.call(f1mPrefix + "_add", x0, APNB, APNB), + + // ABPNAB = ab + nr*ab + c.call(mulNonResidueFn, AB, ABPNAB), + c.call(f1mPrefix + "_add", ABPNAB, AB, ABPNAB), + + // r0 = APB * APNB - ABPNAB + c.call(f1mPrefix + "_mul", APB, APNB, r0), + c.call(f1mPrefix + "_sub", r0, ABPNAB, r0), + + // r1 = AB + AB + c.call(f1mPrefix + "_add", AB, AB, r1), + ); + + } + + + function buildToMontgomery() { + const f = module.addFunction(prefix+"_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_toMontgomery", x0, r0), + c.call(f1mPrefix+"_toMontgomery", x1, r1) + ); + } + + function buildFromMontgomery() { + const f = module.addFunction(prefix+"_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_fromMontgomery", x0, r0), + c.call(f1mPrefix+"_fromMontgomery", x1, r1) + ); + } + + function buildCopy() { + const f = module.addFunction(prefix+"_copy"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_copy", x0, r0), + c.call(f1mPrefix+"_copy", x1, r1) + ); + } + + function buildZero() { + const f = module.addFunction(prefix+"_zero"); + f.addParam("x", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_zero", x0), + c.call(f1mPrefix+"_zero", x1) + ); + } + + function buildOne() { + const f = module.addFunction(prefix+"_one"); + f.addParam("x", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_one", x0), + c.call(f1mPrefix+"_zero", x1) + ); + } + + function buildEq() { + const f = module.addFunction(prefix+"_eq"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + + f.addCode( + c.i32_and( + c.call(f1mPrefix+"_eq", x0, y0), + c.call(f1mPrefix+"_eq", x1, y1) + ) + ); + } + + function buildIsZero() { + const f = module.addFunction(prefix+"_isZero"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.i32_and( + c.call(f1mPrefix+"_isZero", x0), + c.call(f1mPrefix+"_isZero", x1) + ) + ); + } + + function buildInverse() { + const f = module.addFunction(prefix+"_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + + const t0 = c.i32_const(module.alloc(f1n8)); + const t1 = c.i32_const(module.alloc(f1n8)); + const t2 = c.i32_const(module.alloc(f1n8)); + const t3 = c.i32_const(module.alloc(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_square", x0, t0), + c.call(f1mPrefix+"_square", x1, t1), + // c.call(f1mPrefix+"_mul", t1, c.i32_const(pNonResidue), t2), + c.call(mulNonResidueFn, t1, t2), + + c.call(f1mPrefix+"_sub", t0, t2, t2), + c.call(f1mPrefix+"_inverse", t2, t3), + + c.call(f1mPrefix+"_mul", x0, t3, r0), + c.call(f1mPrefix+"_mul", x1, t3, r1), + c.call(f1mPrefix+"_neg", r1, r1), + ); + } + + + function buildSign() { + const f = module.addFunction(prefix+"_sign"); + f.addParam("x", "i32"); + f.addLocal("s", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.setLocal("s" , c.call( f1mPrefix + "_sign", x1)), + c.if( + c.getLocal("s"), + c.ret(c.getLocal("s")) + ), + c.ret(c.call( f1mPrefix + "_sign", x0)) + ); + } + + function buildIsOne() { + const f = module.addFunction(prefix+"_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + + f.addCode( + c.ret(c.i32_and( + c.call(f1mPrefix + "_isOne", x0), + c.call(f1mPrefix + "_isZero", x1), + )) + ); + } + + + // Check here: https://eprint.iacr.org/2012/685.pdf + // Alg 9adj + function buildSqrt() { + + const f = module.addFunction(prefix+"_sqrt"); + f.addParam("a", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + // BigInt can't take `undefined` so we use `|| 0` + const e34 = c.i32_const(module.alloc(utils$a.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); + // BigInt can't take `undefined` so we use `|| 0` + const e12 = c.i32_const(module.alloc(utils$a.bigInt2BytesLE((BigInt(q || 0) - 1n) / 2n, f1n8 ))); + + const a = c.getLocal("a"); + const a1 = c.i32_const(module.alloc(f1n8*2)); + const alpha = c.i32_const(module.alloc(f1n8*2)); + const a0 = c.i32_const(module.alloc(f1n8*2)); + const pn1 = module.alloc(f1n8*2); + const n1 = c.i32_const(pn1); + const n1a = c.i32_const(pn1); + const n1b = c.i32_const(pn1+f1n8); + const x0 = c.i32_const(module.alloc(f1n8*2)); + const b = c.i32_const(module.alloc(f1n8*2)); + + f.addCode( + + c.call(prefix + "_one", n1), + c.call(prefix + "_neg", n1, n1), + + // const a1 = F.pow(a, F.sqrt_e34); + c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), + + // const a1 = F.pow(a, F.sqrt_e34); + c.call(prefix + "_square", a1, alpha), + c.call(prefix + "_mul", a, alpha, alpha), + + // const a0 = F.mul(F.frobenius(1, alfa), alfa); + c.call(prefix + "_conjugate", alpha, a0), + c.call(prefix + "_mul", a0, alpha, a0), + + // if (F.eq(a0, F.negone)) return null; + c.if(c.call(prefix + "_eq",a0,n1), c.unreachable() ), + + // const x0 = F.mul(a1, a); + c.call(prefix + "_mul", a1, a, x0), + + // if (F.eq(alfa, F.negone)) { + c.if( + c.call(prefix + "_eq", alpha, n1), + [ + // x = F.mul(x0, [F.F.zero, F.F.one]); + ...c.call(f1mPrefix + "_zero", n1a), + ...c.call(f1mPrefix + "_one", n1b), + ...c.call(prefix + "_mul", n1, x0, c.getLocal("pr")), + ], + [ + // const b = F.pow(F.add(F.one, alfa), F.sqrt_e12); + ...c.call(prefix + "_one", b), + ...c.call(prefix + "_add", b, alpha, b), + ...c.call(prefix + "_exp", b, e12, c.i32_const(f1n8), b), + + // x = F.mul(b, x0); + ...c.call(prefix + "_mul", b, x0, c.getLocal("pr")), + ] + ) + ); + + } + + + function buildIsSquare() { + + const f = module.addFunction(prefix+"_isSquare"); + f.addParam("a", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + // BigInt can't take `undefined` so we use `|| 0` + const e34 = c.i32_const(module.alloc(utils$a.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); + + const a = c.getLocal("a"); + const a1 = c.i32_const(module.alloc(f1n8*2)); + const alpha = c.i32_const(module.alloc(f1n8*2)); + const a0 = c.i32_const(module.alloc(f1n8*2)); + const pn1 = module.alloc(f1n8*2); + const n1 = c.i32_const(pn1); + + f.addCode( + + c.call(prefix + "_one", n1), + c.call(prefix + "_neg", n1, n1), + + // const a1 = F.pow(a, F.sqrt_e34); + c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1), + + // const a1 = F.pow(a, F.sqrt_e34); + c.call(prefix + "_square", a1, alpha), + c.call(prefix + "_mul", a, alpha, alpha), + + // const a0 = F.mul(F.frobenius(1, alfa), alfa); + c.call(prefix + "_conjugate", alpha, a0), + c.call(prefix + "_mul", a0, alpha, a0), + + // if (F.eq(a0, F.negone)) return null; + c.if( + c.call( + prefix + "_eq", + a0, + n1 + ), + c.ret(c.i32_const(0)) + ), + c.ret(c.i32_const(1)) + ); + + } + + + buildIsZero(); + buildIsOne(); + buildZero(); + buildOne(); + buildCopy(); + buildMul(); + buildMul1(); + buildSquare(); + buildAdd(); + buildSub(); + buildNeg(); + buildConjugate(); + buildToMontgomery(); + buildFromMontgomery(); + buildEq(); + buildInverse(); + buildTimesScalar(); + buildSign(); + buildIsNegative(); + + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_mul1"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_conjugate"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_inverse"); + buildBatchInverse$5(module, prefix); + buildExp$4( + module, + prefix + "_exp", + f1n8*2, + prefix + "_mul", + prefix + "_square", + prefix + "_copy", + prefix + "_one", + ); + buildSqrt(); + buildIsSquare(); + + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_timesScalar"); + module.exportFunction(prefix + "_batchInverse"); + module.exportFunction(prefix + "_sqrt"); + module.exportFunction(prefix + "_isSquare"); + module.exportFunction(prefix + "_isNegative"); + + + return prefix; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + const buildExp$3 = build_timesscalar$1; + const buildBatchInverse$4 = build_batchinverse$1; + + var build_f3m$1 = function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) { + + if (module.modules[prefix]) return prefix; // already builded + + const f1n8 = module.modules[f1mPrefix].n64*8; + module.modules[prefix] = { + n64: module.modules[f1mPrefix].n64*3 + }; + + function buildAdd() { + const f = module.addFunction(prefix+"_add"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_add", x0, y0, r0), + c.call(f1mPrefix+"_add", x1, y1, r1), + c.call(f1mPrefix+"_add", x2, y2, r2), + ); + } + + function buildTimesScalar() { + const f = module.addFunction(prefix+"_timesScalar"); + f.addParam("x", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLen", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0), + c.call(f1mPrefix+"_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1), + c.call(f1mPrefix+"_timesScalar", x2, c.getLocal("scalar"), c.getLocal("scalarLen"), r2), + ); + } + + + function buildSub() { + const f = module.addFunction(prefix+"_sub"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_sub", x0, y0, r0), + c.call(f1mPrefix+"_sub", x1, y1, r1), + c.call(f1mPrefix+"_sub", x2, y2, r2), + ); + } + + function buildNeg() { + const f = module.addFunction(prefix+"_neg"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_neg", x0, r0), + c.call(f1mPrefix+"_neg", x1, r1), + c.call(f1mPrefix+"_neg", x2, r2), + ); + } + + function buildIsNegative() { + const f = module.addFunction(prefix+"_isNegative"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + + f.addCode( + c.if( + c.call(f1mPrefix+"_isZero", x2), + c.if( + c.call(f1mPrefix+"_isZero", x1), + c.ret(c.call(f1mPrefix+"_isNegative", x0)), + c.ret(c.call(f1mPrefix+"_isNegative", x1)) + ) + ), + c.ret(c.call(f1mPrefix+"_isNegative", x2)) + ); + } + + + function buildMul() { + const f = module.addFunction(prefix+"_mul"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.addParam("r", "i32"); + + const cd = f.getCodeBuilder(); + + const a = cd.getLocal("x"); + const b = cd.i32_add(cd.getLocal("x"), cd.i32_const(f1n8)); + const c = cd.i32_add(cd.getLocal("x"), cd.i32_const(2*f1n8)); + const A = cd.getLocal("y"); + const B = cd.i32_add(cd.getLocal("y"), cd.i32_const(f1n8)); + const C = cd.i32_add(cd.getLocal("y"), cd.i32_const(2*f1n8)); + const r0 = cd.getLocal("r"); + const r1 = cd.i32_add(cd.getLocal("r"), cd.i32_const(f1n8)); + const r2 = cd.i32_add(cd.getLocal("r"), cd.i32_const(2*f1n8)); + + const aA = cd.i32_const(module.alloc(f1n8)); + const bB = cd.i32_const(module.alloc(f1n8)); + const cC = cd.i32_const(module.alloc(f1n8)); + const a_b = cd.i32_const(module.alloc(f1n8)); + const A_B = cd.i32_const(module.alloc(f1n8)); + const a_c = cd.i32_const(module.alloc(f1n8)); + const A_C = cd.i32_const(module.alloc(f1n8)); + const b_c = cd.i32_const(module.alloc(f1n8)); + const B_C = cd.i32_const(module.alloc(f1n8)); + const aA_bB = cd.i32_const(module.alloc(f1n8)); + const aA_cC = cd.i32_const(module.alloc(f1n8)); + const bB_cC = cd.i32_const(module.alloc(f1n8)); + const AUX = cd.i32_const(module.alloc(f1n8)); + + + f.addCode( + cd.call(f1mPrefix + "_mul", a, A, aA), + cd.call(f1mPrefix + "_mul", b, B, bB), + cd.call(f1mPrefix + "_mul", c, C, cC), + + cd.call(f1mPrefix + "_add", a, b, a_b), + cd.call(f1mPrefix + "_add", A, B, A_B), + cd.call(f1mPrefix + "_add", a, c, a_c), + cd.call(f1mPrefix + "_add", A, C, A_C), + cd.call(f1mPrefix + "_add", b, c, b_c), + cd.call(f1mPrefix + "_add", B, C, B_C), + + cd.call(f1mPrefix + "_add", aA, bB, aA_bB), + cd.call(f1mPrefix + "_add", aA, cC, aA_cC), + cd.call(f1mPrefix + "_add", bB, cC, bB_cC), + + cd.call(f1mPrefix + "_mul", b_c, B_C, r0), + cd.call(f1mPrefix + "_sub", r0, bB_cC, r0), + cd.call(mulNonResidueFn, r0, r0), + cd.call(f1mPrefix + "_add", aA, r0, r0), + + cd.call(f1mPrefix + "_mul", a_b, A_B, r1), + cd.call(f1mPrefix + "_sub", r1, aA_bB, r1), + cd.call(mulNonResidueFn, cC, AUX), + cd.call(f1mPrefix + "_add", r1, AUX, r1), + + cd.call(f1mPrefix + "_mul", a_c, A_C, r2), + cd.call(f1mPrefix + "_sub", r2, aA_cC, r2), + cd.call(f1mPrefix + "_add", r2, bB, r2), + ); + + } + + function buildSquare() { + const f = module.addFunction(prefix+"_square"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const A = c.getLocal("x"); + const B = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const C = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + const s0 = c.i32_const(module.alloc(f1n8)); + const ab = c.i32_const(module.alloc(f1n8)); + const s1 = c.i32_const(module.alloc(f1n8)); + const s2 = c.i32_const(module.alloc(f1n8)); + const bc = c.i32_const(module.alloc(f1n8)); + const s3 = c.i32_const(module.alloc(f1n8)); + const s4 = c.i32_const(module.alloc(f1n8)); + + + f.addCode( + + c.call(f1mPrefix + "_square", A, s0), + c.call(f1mPrefix + "_mul", A, B, ab), + c.call(f1mPrefix + "_add", ab, ab, s1), + + c.call(f1mPrefix + "_sub", A, B, s2), + c.call(f1mPrefix + "_add", s2, C, s2), + c.call(f1mPrefix + "_square", s2, s2), + + c.call(f1mPrefix + "_mul", B, C, bc), + c.call(f1mPrefix + "_add", bc, bc, s3), + + c.call(f1mPrefix + "_square", C, s4), + + c.call(mulNonResidueFn, s3, r0), + c.call(f1mPrefix + "_add", s0, r0, r0), + + c.call(mulNonResidueFn, s4, r1), + c.call(f1mPrefix + "_add", s1, r1, r1), + + c.call(f1mPrefix + "_add", s0, s4, r2), + c.call(f1mPrefix + "_sub", s3, r2, r2), + c.call(f1mPrefix + "_add", s2, r2, r2), + c.call(f1mPrefix + "_add", s1, r2, r2), + ); + + } + + + function buildToMontgomery() { + const f = module.addFunction(prefix+"_toMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_toMontgomery", x0, r0), + c.call(f1mPrefix+"_toMontgomery", x1, r1), + c.call(f1mPrefix+"_toMontgomery", x2, r2) + ); + } + + function buildFromMontgomery() { + const f = module.addFunction(prefix+"_fromMontgomery"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_fromMontgomery", x0, r0), + c.call(f1mPrefix+"_fromMontgomery", x1, r1), + c.call(f1mPrefix+"_fromMontgomery", x2, r2) + ); + } + + function buildCopy() { + const f = module.addFunction(prefix+"_copy"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_copy", x0, r0), + c.call(f1mPrefix+"_copy", x1, r1), + c.call(f1mPrefix+"_copy", x2, r2), + ); + } + + function buildZero() { + const f = module.addFunction(prefix+"_zero"); + f.addParam("x", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_zero", x0), + c.call(f1mPrefix+"_zero", x1), + c.call(f1mPrefix+"_zero", x2), + ); + } + + function buildOne() { + const f = module.addFunction(prefix+"_one"); + f.addParam("x", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + + f.addCode( + c.call(f1mPrefix+"_one", x0), + c.call(f1mPrefix+"_zero", x1), + c.call(f1mPrefix+"_zero", x2), + ); + } + + function buildEq() { + const f = module.addFunction(prefix+"_eq"); + f.addParam("x", "i32"); + f.addParam("y", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const y0 = c.getLocal("y"); + const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8)); + const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8)); + + f.addCode( + c.i32_and( + c.i32_and( + c.call(f1mPrefix+"_eq", x0, y0), + c.call(f1mPrefix+"_eq", x1, y1), + ), + c.call(f1mPrefix+"_eq", x2, y2) + ) + ); + } + + function buildIsZero() { + const f = module.addFunction(prefix+"_isZero"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + + f.addCode( + c.i32_and( + c.i32_and( + c.call(f1mPrefix+"_isZero", x0), + c.call(f1mPrefix+"_isZero", x1) + ), + c.call(f1mPrefix+"_isZero", x2) + ) + ); + } + + function buildInverse() { + const f = module.addFunction(prefix+"_inverse"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + const r0 = c.getLocal("r"); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8)); + + const t0 = c.i32_const(module.alloc(f1n8)); + const t1 = c.i32_const(module.alloc(f1n8)); + const t2 = c.i32_const(module.alloc(f1n8)); + const t3 = c.i32_const(module.alloc(f1n8)); + const t4 = c.i32_const(module.alloc(f1n8)); + const t5 = c.i32_const(module.alloc(f1n8)); + const c0 = c.i32_const(module.alloc(f1n8)); + const c1 = c.i32_const(module.alloc(f1n8)); + const c2 = c.i32_const(module.alloc(f1n8)); + const t6 = c.i32_const(module.alloc(f1n8)); + const AUX = c.i32_const(module.alloc(f1n8)); + + f.addCode( + c.call(f1mPrefix+"_square", x0, t0), + c.call(f1mPrefix+"_square", x1, t1), + c.call(f1mPrefix+"_square", x2, t2), + c.call(f1mPrefix+"_mul", x0, x1, t3), + c.call(f1mPrefix+"_mul", x0, x2, t4), + c.call(f1mPrefix+"_mul", x1, x2, t5), + + c.call(mulNonResidueFn, t5, c0), + c.call(f1mPrefix+"_sub", t0, c0, c0), + + c.call(mulNonResidueFn, t2, c1), + c.call(f1mPrefix+"_sub", c1, t3, c1), + + c.call(f1mPrefix+"_sub", t1, t4, c2), + + c.call(f1mPrefix+"_mul", x2, c1, t6), + c.call(f1mPrefix+"_mul", x1, c2, AUX), + c.call(f1mPrefix+"_add", t6, AUX, t6), + c.call(mulNonResidueFn, t6, t6), + c.call(f1mPrefix+"_mul", x0, c0, AUX), + c.call(f1mPrefix+"_add", AUX, t6, t6), + + c.call(f1mPrefix+"_inverse", t6, t6), + + c.call(f1mPrefix+"_mul", t6, c0, r0), + c.call(f1mPrefix+"_mul", t6, c1, r1), + c.call(f1mPrefix+"_mul", t6, c2, r2) + ); + } + + + function buildSign() { + const f = module.addFunction(prefix+"_sign"); + f.addParam("x", "i32"); + f.addLocal("s", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8)); + + f.addCode( + c.setLocal("s" , c.call( f1mPrefix + "_sign", x2)), + c.if( + c.getLocal("s"), + c.ret(c.getLocal("s")) + ), + c.setLocal("s" , c.call( f1mPrefix + "_sign", x1)), + c.if( + c.getLocal("s"), + c.ret(c.getLocal("s")) + ), + c.ret(c.call( f1mPrefix + "_sign", x0)) + ); + } + + function buildIsOne() { + const f = module.addFunction(prefix+"_isOne"); + f.addParam("x", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8*2)); + + f.addCode( + c.ret( + c.i32_and( + c.i32_and( + c.call(f1mPrefix + "_isOne", x0), + c.call(f1mPrefix + "_isZero", x1) + ), + c.call(f1mPrefix + "_isZero", x2) + ) + ) + ); + } + + buildIsZero(); + buildIsOne(); + buildZero(); + buildOne(); + buildCopy(); + buildMul(); + buildSquare(); + buildAdd(); + buildSub(); + buildNeg(); + buildSign(); + buildToMontgomery(); + buildFromMontgomery(); + buildEq(); + buildInverse(); + buildTimesScalar(); + buildIsNegative(); + + module.exportFunction(prefix + "_isZero"); + module.exportFunction(prefix + "_isOne"); + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_one"); + module.exportFunction(prefix + "_copy"); + module.exportFunction(prefix + "_mul"); + module.exportFunction(prefix + "_square"); + module.exportFunction(prefix + "_add"); + module.exportFunction(prefix + "_sub"); + module.exportFunction(prefix + "_neg"); + module.exportFunction(prefix + "_sign"); + module.exportFunction(prefix + "_fromMontgomery"); + module.exportFunction(prefix + "_toMontgomery"); + module.exportFunction(prefix + "_eq"); + module.exportFunction(prefix + "_inverse"); + buildBatchInverse$4(module, prefix); + buildExp$3( + module, + prefix + "_exp", + f1n8*3, + prefix + "_mul", + prefix + "_square", + prefix + "_copy", + prefix + "_one" + ); + module.exportFunction(prefix + "_exp"); + module.exportFunction(prefix + "_timesScalar"); + module.exportFunction(prefix + "_batchInverse"); + module.exportFunction(prefix + "_isNegative"); + + return prefix; + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_timesscalarnaf$1 = function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) { + + const f = module.addFunction(fnName); + f.addParam("base", "i32"); + f.addParam("scalar", "i32"); + f.addParam("scalarLength", "i32"); + f.addParam("r", "i32"); + f.addLocal("old0", "i32"); + f.addLocal("nbits", "i32"); + f.addLocal("i", "i32"); + f.addLocal("last", "i32"); + f.addLocal("cur", "i32"); + f.addLocal("carry", "i32"); + f.addLocal("p", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(elementLen)); + + function getBit(IDX) { + return c.i32_and( + c.i32_shr_u( + c.i32_load( + c.i32_add( + c.getLocal("scalar"), + c.i32_and( + c.i32_shr_u( + IDX, + c.i32_const(3) + ), + c.i32_const(0xFFFFFFFC) + ) + ) + ), + c.i32_and( + IDX, + c.i32_const(0x1F) + ) + ), + c.i32_const(1) + ); + } + + function pushBit(b) { + return [ + ...c.i32_store8( + c.getLocal("p"), + c.i32_const(b) + ), + ...c.setLocal( + "p", + c.i32_add( + c.getLocal("p"), + c.i32_const(1) + ) + ) + ]; + } + + f.addCode( + c.if( + c.i32_eqz(c.getLocal("scalarLength")), + [ + ...c.call(opInit, c.getLocal("r")), + ...c.ret([]) + ] + ), + c.setLocal("nbits", c.i32_shl(c.getLocal("scalarLength"), c.i32_const(3))), + c.setLocal("old0", c.i32_load(c.i32_const(0))), + c.setLocal("p", c.getLocal("old0")), + c.i32_store( + c.i32_const(0), + c.i32_and( + c.i32_add( + c.i32_add( + c.getLocal("old0"), + c.i32_const(32) + ), + c.getLocal("nbits") + ), + c.i32_const(0xFFFFFFF8) + ) + ), + c.setLocal("i", c.i32_const(1)), + + c.setLocal("last",getBit(c.i32_const(0))), + c.setLocal("carry",c.i32_const(0)), + + c.block(c.loop( + c.br_if(1, c.i32_eq( c.getLocal("i"), c.getLocal("nbits"))), + + c.setLocal("cur", getBit(c.getLocal("i"))), + c.if( c.getLocal("last"), + c.if( c.getLocal("cur"), + c.if(c.getLocal("carry"), + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(1) + ] + , + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(255) + ], + ), + c.if(c.getLocal("carry"), + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(255) + ] + , + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(1) + ], + ), + ), + c.if( c.getLocal("cur"), + c.if(c.getLocal("carry"), + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(1)), + ...pushBit(0) + ] + , + [ + ...c.setLocal("last", c.i32_const(1)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ], + ), + c.if(c.getLocal("carry"), + [ + ...c.setLocal("last", c.i32_const(1)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ] + , + [ + ...c.setLocal("last", c.i32_const(0)), + ...c.setLocal("carry", c.i32_const(0)), + ...pushBit(0) + ], + ), + ) + ), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )), + + c.if( c.getLocal("last"), + c.if(c.getLocal("carry"), + [ + ...pushBit(255), + ...pushBit(0), + ...pushBit(1) + ] + , + [ + ...pushBit(1) + ], + ), + c.if(c.getLocal("carry"), + [ + ...pushBit(0), + ...pushBit(1) + ] + ), + ), + + c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), + + // p already points to the last bit + + c.call(opCopy, c.getLocal("base"), aux), + + c.call(opInit, c.getLocal("r")), + + c.block(c.loop( + + + c.call(opAA, c.getLocal("r"), c.getLocal("r")), + + + c.setLocal("cur", + c.i32_load8_u( + c.getLocal("p") + ) + ), + + c.if( + c.getLocal("cur"), + c.if( + c.i32_eq(c.getLocal("cur"), c.i32_const(1)), + c.call(opAB, c.getLocal("r"), aux, c.getLocal("r")), + c.call(opAmB, c.getLocal("r"), aux, c.getLocal("r")), + ) + ), + + c.br_if(1, c.i32_eq( c.getLocal("old0"), c.getLocal("p"))), + c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), + c.br(0) + + )), + + c.i32_store( c.i32_const(0), c.getLocal("old0")) + + ); + + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_multiexp$1 = function buildMultiexp(module, prefix, fnName, opAdd, n8b) { + + const n64g = module.modules[prefix].n64; + const n8g = n64g*8; + + function buildGetChunk() { + const f = module.addFunction(fnName + "_getChunk"); + f.addParam("pScalar", "i32"); + f.addParam("scalarSize", "i32"); // Number of bytes of the scalar + f.addParam("startBit", "i32"); // Bit to start extract + f.addParam("chunkSize", "i32"); // Chunk size in bits + f.addLocal("bitsToEnd", "i32"); + f.addLocal("mask", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.setLocal("bitsToEnd", + c.i32_sub( + c.i32_mul( + c.getLocal("scalarSize"), + c.i32_const(8) + ), + c.getLocal("startBit") + ) + ), + c.if( + c.i32_gt_s( + c.getLocal("chunkSize"), + c.getLocal("bitsToEnd") + ), + c.setLocal( + "mask", + c.i32_sub( + c.i32_shl( + c.i32_const(1), + c.getLocal("bitsToEnd") + ), + c.i32_const(1) + ) + ), + c.setLocal( + "mask", + c.i32_sub( + c.i32_shl( + c.i32_const(1), + c.getLocal("chunkSize") + ), + c.i32_const(1) + ) + ) + ), + c.i32_and( + c.i32_shr_u( + c.i32_load( + c.i32_add( + c.getLocal("pScalar"), + c.i32_shr_u( + c.getLocal("startBit"), + c.i32_const(3) + ) + ), + 0, // offset + 0 // align to byte. + ), + c.i32_and( + c.getLocal("startBit"), + c.i32_const(0x7) + ) + ), + c.getLocal("mask") + ) + ); + } + + function buildMutiexpChunk() { + const f = module.addFunction(fnName + "_chunk"); + f.addParam("pBases", "i32"); + f.addParam("pScalars", "i32"); + f.addParam("scalarSize", "i32"); // Number of points + f.addParam("n", "i32"); // Number of points + f.addParam("startBit", "i32"); // bit where it starts the chunk + f.addParam("chunkSize", "i32"); // bit where it starts the chunk + f.addParam("pr", "i32"); + f.addLocal("nChunks", "i32"); + f.addLocal("itScalar", "i32"); + f.addLocal("endScalar", "i32"); + f.addLocal("itBase", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("nTable", "i32"); + f.addLocal("pTable", "i32"); + f.addLocal("idx", "i32"); + f.addLocal("pIdxTable", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.if( + c.i32_eqz(c.getLocal("n")), + [ + ...c.call(prefix + "_zero", c.getLocal("pr")), + ...c.ret([]) + ] + ), + + // Allocate memory + + c.setLocal( + "nTable", + c.i32_shl( + c.i32_const(1), + c.getLocal("chunkSize") + ) + ), + c.setLocal("pTable", c.i32_load( c.i32_const(0) )), + c.i32_store( + c.i32_const(0), + c.i32_add( + c.getLocal("pTable"), + c.i32_mul( + c.getLocal("nTable"), + c.i32_const(n8g) + ) + ) + ), + + // Reset Table + c.setLocal("j", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("j"), + c.getLocal("nTable") + ) + ), + + c.call( + prefix + "_zero", + c.i32_add( + c.getLocal("pTable"), + c.i32_mul( + c.getLocal("j"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + + // Distribute elements + c.setLocal("itBase", c.getLocal("pBases")), + c.setLocal("itScalar", c.getLocal("pScalars")), + c.setLocal("endScalar", + c.i32_add( + c.getLocal("pScalars"), + c.i32_mul( + c.getLocal("n"), + c.getLocal("scalarSize") + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("itScalar"), + c.getLocal("endScalar") + ) + ), + + c.setLocal( + "idx", + c.call(fnName + "_getChunk", + c.getLocal("itScalar"), + c.getLocal("scalarSize"), + c.getLocal("startBit"), + c.getLocal("chunkSize") + ) + ), + + c.if( + c.getLocal("idx"), + [ + ...c.setLocal( + "pIdxTable", + c.i32_add( + c.getLocal("pTable"), + c.i32_mul( + c.i32_sub( + c.getLocal("idx"), + c.i32_const(1) + ), + c.i32_const(n8g) + ) + ) + ), + ...c.call( + opAdd, + c.getLocal("pIdxTable"), + c.getLocal("itBase"), + c.getLocal("pIdxTable"), + ) + ] + ), + + c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))), + c.setLocal("itBase", c.i32_add(c.getLocal("itBase"), c.i32_const(n8b))), + c.br(0) + )), + + c.call(fnName + "_reduceTable", c.getLocal("pTable"), c.getLocal("chunkSize")), + c.call( + prefix + "_copy", + c.getLocal("pTable"), + c.getLocal("pr") + ), + + + c.i32_store( + c.i32_const(0), + c.getLocal("pTable") + ) + + ); + } + + function buildMultiexp() { + const f = module.addFunction(fnName); + f.addParam("pBases", "i32"); + f.addParam("pScalars", "i32"); + f.addParam("scalarSize", "i32"); // Number of points + f.addParam("n", "i32"); // Number of points + f.addParam("pr", "i32"); + f.addLocal("chunkSize", "i32"); + f.addLocal("nChunks", "i32"); + f.addLocal("itScalar", "i32"); + f.addLocal("endScalar", "i32"); + f.addLocal("itBase", "i32"); + f.addLocal("itBit", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("nTable", "i32"); + f.addLocal("pTable", "i32"); + f.addLocal("idx", "i32"); + f.addLocal("pIdxTable", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(n8g)); + + const pTSizes = module.alloc([ + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 16, 16, 15, 14, 13, 13, + 12, 11, 10, 9, 8, 7, 7, 6, + 5 , 4, 3, 2, 1, 1, 1, 1 + ]); + + f.addCode( + c.call(prefix + "_zero", c.getLocal("pr")), + c.if( + c.i32_eqz(c.getLocal("n")), + c.ret([]) + ), + c.setLocal("chunkSize", c.i32_load8_u( c.i32_clz(c.getLocal("n")), pTSizes )), + c.setLocal( + "nChunks", + c.i32_add( + c.i32_div_u( + c.i32_sub( + c.i32_shl( + c.getLocal("scalarSize"), + c.i32_const(3) + ), + c.i32_const(1) + ), + c.getLocal("chunkSize") + ), + c.i32_const(1) + ) + ), + + + // Allocate memory + + c.setLocal( + "itBit", + c.i32_mul( + c.i32_sub( + c.getLocal("nChunks"), + c.i32_const(1) + ), + c.getLocal("chunkSize") + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_lt_s( + c.getLocal("itBit"), + c.i32_const(0) + ) + ), + + // Double nChunk times + c.if( + c.i32_eqz(c.call(prefix + "_isZero", c.getLocal("pr"))), + [ + ...c.setLocal("j", c.i32_const(0)), + ...c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("j"), + c.getLocal("chunkSize") + ) + ), + + c.call(prefix + "_double", c.getLocal("pr"), c.getLocal("pr")), + + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )) + ] + ), + + c.call( + fnName + "_chunk", + c.getLocal("pBases"), + c.getLocal("pScalars"), + c.getLocal("scalarSize"), + c.getLocal("n"), + c.getLocal("itBit"), + c.getLocal("chunkSize"), + aux + ), + + c.call( + prefix + "_add", + c.getLocal("pr"), + aux, + c.getLocal("pr") + ), + c.setLocal("itBit", c.i32_sub(c.getLocal("itBit"), c.getLocal("chunkSize"))), + c.br(0) + )) + ); + } + + function buildReduceTable() { + const f = module.addFunction(fnName + "_reduceTable"); + f.addParam("pTable", "i32"); + f.addParam("p", "i32"); // Number of bits of the table + f.addLocal("half", "i32"); + f.addLocal("it1", "i32"); + f.addLocal("it2", "i32"); + f.addLocal("pAcc", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.if( + c.i32_eq(c.getLocal("p"), c.i32_const(1)), + c.ret([]) + ), + c.setLocal( + "half", + c.i32_shl( + c.i32_const(1), + c.i32_sub( + c.getLocal("p"), + c.i32_const(1) + ) + ) + ), + + c.setLocal("it1", c.getLocal("pTable")), + c.setLocal( + "it2", + c.i32_add( + c.getLocal("pTable"), + c.i32_mul( + c.getLocal("half"), + c.i32_const(n8g) + ) + ) + ), + c.setLocal("pAcc", + c.i32_sub( + c.getLocal("it2"), + c.i32_const(n8g) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("it1"), + c.getLocal("pAcc") + ) + ), + c.call( + prefix + "_add", + c.getLocal("it1"), + c.getLocal("it2"), + c.getLocal("it1") + ), + c.call( + prefix + "_add", + c.getLocal("pAcc"), + c.getLocal("it2"), + c.getLocal("pAcc") + ), + c.setLocal("it1", c.i32_add(c.getLocal("it1"), c.i32_const(n8g))), + c.setLocal("it2", c.i32_add(c.getLocal("it2"), c.i32_const(n8g))), + c.br(0) + )), + + c.call( + fnName + "_reduceTable", + c.getLocal("pTable"), + c.i32_sub( + c.getLocal("p"), + c.i32_const(1) + ) + ), + + c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), + c.block(c.loop( + c.br_if(1, c.i32_eqz(c.getLocal("p"))), + c.call(prefix + "_double", c.getLocal("pAcc"), c.getLocal("pAcc")), + c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))), + c.br(0) + )), + + c.call(prefix + "_add", c.getLocal("pTable"), c.getLocal("pAcc"), c.getLocal("pTable")) + ); + } + + buildGetChunk(); + buildReduceTable(); + buildMutiexpChunk(); + buildMultiexp(); + + module.exportFunction(fnName); + module.exportFunction(fnName +"_chunk"); + + + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + const buildTimesScalarNAF$1 = build_timesscalarnaf$1; + //const buildTimesScalar = require("./build_timesscalar"); + const buildBatchConvertion$4 = build_batchconvertion$1; + const buildMultiexp$3 = build_multiexp$1; + + var build_curve_jacobian_a0$1 = function buildCurve(module, prefix, prefixField, pB) { + + + const n64 = module.modules[prefixField].n64; + const n8 = n64*8; + + if (module.modules[prefix]) return prefix; // already builded + module.modules[prefix] = { + n64: n64*3 + }; + + function buildIsZero() { + const f = module.addFunction(prefix + "_isZero"); + f.addParam("p1", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + f.addCode(c.call( + prefixField + "_isZero", + c.i32_add( + c.getLocal("p1"), + c.i32_const(n8*2) + ) + )); + } + function buildIsZeroAffine() { + const f = module.addFunction(prefix + "_isZeroAffine"); + f.addParam("p1", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.i32_and( + c.call( + prefixField + "_isZero", + c.getLocal("p1") + ), + c.call( + prefixField + "_isZero", + c.i32_add( + c.getLocal("p1"), + c.i32_const(n8) + ) + ) + ) + ); + } + + function buildCopy() { + const f = module.addFunction(prefix + "_copy"); + f.addParam("ps", "i32"); + f.addParam("pd", "i32"); + + const c = f.getCodeBuilder(); + + for (let i=0; i. + */ + + const { isOdd: isOdd$9, modInv: modInv$5, modPow: modPow$3 } = bigint$1; + const utils$9 = utils$c; + + var build_fft$1 = function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) { + + const n64f = module.modules[fPrefix].n64; + const n8f = n64f*8; + + const n64g = module.modules[gPrefix].n64; + const n8g = n64g*8; + + const q = module.modules[fPrefix].q; + + let rem = q - 1n; + let maxBits = 0; + while (!isOdd$9(rem)) { + maxBits ++; + rem = rem >> 1n; + } + + let nr = 2n; + + while ( modPow$3(nr, q >> 1n, q) === 1n ) nr = nr + 1n; + + // console.log(nr); + + const w = new Array(maxBits+1); + w[maxBits] = modPow$3(nr, rem, q); + + let n=maxBits-1; + while (n>=0) { + w[n] = modPow$3(w[n+1], 2n, q); + n--; + } + + const bytes = []; + const R = (1n << BigInt(n8f*8)) % q; + + for (let i=0; i> i); + } + } + return r; + } + + const rtable = Array(256); + for (let i=0; i<256; i++) { + rtable[i] = rev(i); + } + + const REVTABLE = module.alloc(rtable); + + + function buildLog2() { + const f = module.addFunction(prefix+"__log2"); + f.addParam("n", "i32"); + f.setReturnType("i32"); + f.addLocal("bits", "i32"); + f.addLocal("aux", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.setLocal( + "aux", + c.i32_shr_u( + c.getLocal("n"), + c.i32_const(1) + ) + ) + ); + f.addCode(c.setLocal("bits", c.i32_const(0))); + + f.addCode(c.block(c.loop( + c.br_if( + 1, + c.i32_eqz(c.getLocal("aux")) + ), + + c.setLocal( + "aux", + c.i32_shr_u( + c.getLocal("aux"), + c.i32_const(1) + ) + ), + + c.setLocal( + "bits", + c.i32_add( + c.getLocal("bits"), + c.i32_const(1) + ) + ), + + c.br(0) + ))); + + f.addCode(c.if( + c.i32_ne( + c.getLocal("n"), + c.i32_shl( + c.i32_const(1), + c.getLocal("bits") + ) + ), + c.unreachable() + )); + + f.addCode(c.if( + c.i32_gt_u( + c.getLocal("bits"), + c.i32_const(maxBits) + ), + c.unreachable() + )); + + f.addCode(c.getLocal("bits")); + } + + function buildFFT() { + const f = module.addFunction(prefix+"_fft"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + + f.addLocal("bits", "i32"); + + const c = f.getCodeBuilder(); + + const One = c.i32_const(module.alloc(n8f)); + + f.addCode( + c.setLocal( + "bits", + c.call( + prefix + "__log2", + c.getLocal("n") + ) + ), + c.call(fPrefix + "_one", One), + c.call( + prefix+"_rawfft", + c.getLocal("px"), + c.getLocal("bits"), + c.i32_const(0), + One + ) + ); + + } + + function buildIFFT() { + const f = module.addFunction(prefix+"_ifft"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + f.addLocal("bits", "i32"); + f.addLocal("pInv2", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.setLocal( + "bits", + c.call( + prefix + "__log2", + c.getLocal("n") + ) + ), + c.setLocal( + "pInv2", + c.i32_add( + c.i32_const(INV2), + c.i32_mul( + c.getLocal("bits"), + c.i32_const(n8f) + ) + ) + ), + + c.call( + prefix+"_rawfft", + c.getLocal("px"), + c.getLocal("bits"), + c.i32_const(1), + c.getLocal("pInv2") + ), + ); + } + + function buildRawFFT() { + const f = module.addFunction(prefix+"_rawfft"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); // 2 power + f.addParam("reverse", "i32"); + f.addParam("mulFactor", "i32"); + + f.addLocal("s", "i32"); + f.addLocal("k", "i32"); + f.addLocal("j", "i32"); + f.addLocal("m", "i32"); + f.addLocal("mdiv2", "i32"); + f.addLocal("n", "i32"); + f.addLocal("pwm", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.call(prefix + "__reversePermutation", c.getLocal("px"), c.getLocal("bits")), + c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))), + c.setLocal("s", c.i32_const(1)), + c.block(c.loop( + c.br_if( + 1, + c.i32_gt_u( + c.getLocal("s"), + c.getLocal("bits") + ) + ), + c.setLocal("m", c.i32_shl(c.i32_const(1), c.getLocal("s"))), + c.setLocal("pwm", + c.i32_add( + c.i32_const(ROOTs), + c.i32_mul( + c.getLocal("s"), + c.i32_const(n8f) + ) + ) + ), + c.setLocal("k", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_ge_u( + c.getLocal("k"), + c.getLocal("n") + ) + ), + + c.call(fPrefix + "_one", W), + + c.setLocal("mdiv2", c.i32_shr_u(c.getLocal("m"), c.i32_const(1)) ), + c.setLocal("j", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_ge_u( + c.getLocal("j"), + c.getLocal("mdiv2") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.i32_add( + c.getLocal("k"), + c.getLocal("j") + ), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("idx1"), + c.i32_mul( + c.getLocal("mdiv2"), + c.i32_const(n8g) + ) + ) + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + T + ), + + c.call( + gPrefix + "_copy", + c.getLocal("idx1"), + U + ), + + c.call( + gPrefix + "_add", + U, + T, + c.getLocal("idx1"), + ), + + c.call( + gPrefix + "_sub", + U, + T, + c.getLocal("idx2"), + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("pwm"), + W, + ), + + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + + c.setLocal("k", c.i32_add(c.getLocal("k"), c.getLocal("m"))), + c.br(0) + )), + + c.setLocal("s", c.i32_add(c.getLocal("s"), c.i32_const(1))), + c.br(0) + )), + c.call( + prefix + "__fftFinal", + c.getLocal("px"), + c.getLocal("bits"), + c.getLocal("reverse"), + c.getLocal("mulFactor") + ) + ); + } + + + function buildFinalInverse() { + const f = module.addFunction(prefix+"__fftFinal"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); + f.addParam("reverse", "i32"); + f.addParam("mulFactor", "i32"); + f.addLocal("n", "i32"); + f.addLocal("ndiv2", "i32"); + f.addLocal("pInv2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("mask", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + + const c = f.getCodeBuilder(); + + const T = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.if( + c.i32_and( + c.i32_eqz(c.getLocal("reverse")), + c.call(fPrefix + "_isOne", c.getLocal("mulFactor")) + ), + c.ret([]) + ), + c.setLocal("n", c.i32_shl( c.i32_const(1), c.getLocal("bits"))), + + c.setLocal("mask", c.i32_sub( c.getLocal("n") , c.i32_const(1))), + c.setLocal("i", c.i32_const(1)), + c.setLocal( + "ndiv2", + c.i32_shr_u( + c.getLocal("n"), + c.i32_const(1) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_ge_u( + c.getLocal("i"), + c.getLocal("ndiv2") + ) + ), + + c.setLocal("idx1", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal("idx2", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.i32_sub( + c.getLocal("n"), + c.getLocal("i") + ), + c.i32_const(n8g) + ) + ) + ), + + c.if( + c.getLocal("reverse"), + c.if( + c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), + [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(gPrefix + "_copy", c.getLocal("idx2") , c.getLocal("idx1") ), + ...c.call(gPrefix + "_copy", T , c.getLocal("idx2")), + ], + [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(opGtimesF , c.getLocal("idx2") , c.getLocal("mulFactor"), c.getLocal("idx1") ), + ...c.call(opGtimesF , T , c.getLocal("mulFactor"), c.getLocal("idx2")), + ] + ), + c.if( + c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), + [ + // Do nothing (It should not be here) + ], + [ + ...c.call(opGtimesF , c.getLocal("idx1") , c.getLocal("mulFactor"), c.getLocal("idx1") ), + ...c.call(opGtimesF , c.getLocal("idx2") , c.getLocal("mulFactor"), c.getLocal("idx2")), + ] + ) + ), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + + c.br(0) + )), + + c.if( + c.call(fPrefix + "_isOne", c.getLocal("mulFactor")), + [ + // Do nothing (It should not be here) + ], + [ + ...c.call(opGtimesF, c.getLocal("px") , c.getLocal("mulFactor"), c.getLocal("px")), + ...c.setLocal("idx2", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.getLocal("ndiv2"), + c.i32_const(n8g) + ) + ) + ), + ...c.call(opGtimesF, c.getLocal("idx2"),c.getLocal("mulFactor"), c.getLocal("idx2")) + ] + ) + ); + } + + function buildReversePermutation() { + const f = module.addFunction(prefix+"__reversePermutation"); + f.addParam("px", "i32"); + f.addParam("bits", "i32"); + f.addLocal("n", "i32"); + f.addLocal("i", "i32"); + f.addLocal("ri", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + + const c = f.getCodeBuilder(); + + const T = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.setLocal("n", c.i32_shl( c.i32_const(1), c.getLocal("bits"))), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("n") + ) + ), + + c.setLocal("idx1", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal("ri", c.call(prefix + "__rev", c.getLocal("i"), c.getLocal("bits"))), + + c.setLocal("idx2", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.getLocal("ri"), + c.i32_const(n8g) + ) + ) + ), + + c.if( + c.i32_lt_u( + c.getLocal("i"), + c.getLocal("ri") + ), + [ + ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T), + ...c.call(gPrefix + "_copy", c.getLocal("idx2") , c.getLocal("idx1")), + ...c.call(gPrefix + "_copy", T , c.getLocal("idx2")) + ] + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + + c.br(0) + )) + ); + } + + function buildRev() { + const f = module.addFunction(prefix+"__rev"); + f.addParam("x", "i32"); + f.addParam("bits", "i32"); + f.setReturnType("i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.i32_rotl( + c.i32_add( + c.i32_add( + c.i32_shl( + c.i32_load8_u( + c.i32_and( + c.getLocal("x"), + c.i32_const(0xFF) + ), + REVTABLE, + 0 + ), + c.i32_const(24) + ), + c.i32_shl( + c.i32_load8_u( + c.i32_and( + c.i32_shr_u( + c.getLocal("x"), + c.i32_const(8) + ), + c.i32_const(0xFF) + ), + REVTABLE, + 0 + ), + c.i32_const(16) + ), + ), + c.i32_add( + c.i32_shl( + c.i32_load8_u( + c.i32_and( + c.i32_shr_u( + c.getLocal("x"), + c.i32_const(16) + ), + c.i32_const(0xFF) + ), + REVTABLE, + 0 + ), + c.i32_const(8) + ), + c.i32_load8_u( + c.i32_and( + c.i32_shr_u( + c.getLocal("x"), + c.i32_const(24) + ), + c.i32_const(0xFF) + ), + REVTABLE, + 0 + ), + ) + ), + c.getLocal("bits") + ) + ); + } + + + function buildFFTJoin() { + const f = module.addFunction(prefix+"_fftJoin"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.call( fPrefix + "_copy", c.getLocal("first"), W), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("n") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff1"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("pBuff2"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + T + ), + + c.call( + gPrefix + "_copy", + c.getLocal("idx1"), + U + ), + + c.call( + gPrefix + "_add", + U, + T, + c.getLocal("idx1"), + ), + + c.call( + gPrefix + "_sub", + U, + T, + c.getLocal("idx2"), + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("inc"), + W, + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + + function buildFFTJoinExt() { + const f = module.addFunction(prefix+"_fftJoinExt"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + + c.setLocal("pShiftToM", + c.i32_add( + c.i32_const(SHIFT_TO_M), + c.i32_mul( + c.getLocal("totalBits"), + c.i32_const(n8f) + ) + ) + ), + + + c.call( fPrefix + "_copy", c.getLocal("first"), W), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("n") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff1"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("pBuff2"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.call( + gPrefix + "_add", + c.getLocal("idx1"), + c.getLocal("idx2"), + U + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + c.getLocal("pShiftToM"), + c.getLocal("idx2") + ), + + c.call( + gPrefix + "_add", + c.getLocal("idx1"), + c.getLocal("idx2"), + c.getLocal("idx2") + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + c.getLocal("idx2"), + ), + + c.call( + gPrefix + "_copy", + U, + c.getLocal("idx1") + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("inc"), + W + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + function buildFFTJoinExtInv() { + const f = module.addFunction(prefix+"_fftJoinExtInv"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + f.addLocal("pSConst", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + + c.setLocal("pShiftToM", + c.i32_add( + c.i32_const(SHIFT_TO_M), + c.i32_mul( + c.getLocal("totalBits"), + c.i32_const(n8f) + ) + ) + ), + c.setLocal("pSConst", + c.i32_add( + c.i32_const(SCONST), + c.i32_mul( + c.getLocal("totalBits"), + c.i32_const(n8f) + ) + ) + ), + + + c.call( fPrefix + "_copy", c.getLocal("first"), W), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("n") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff1"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("pBuff2"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + U + ), + + c.call( + gPrefix + "_sub", + c.getLocal("idx1"), + U, + c.getLocal("idx2"), + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + c.getLocal("pSConst"), + c.getLocal("idx2") + ), + + c.call( + opGtimesF, + c.getLocal("idx1"), + c.getLocal("pShiftToM"), + c.getLocal("idx1") + ), + + c.call( + gPrefix + "_sub", + U, + c.getLocal("idx1"), + c.getLocal("idx1") + ), + + c.call( + opGtimesF, + c.getLocal("idx1"), + c.getLocal("pSConst"), + c.getLocal("idx1") + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("inc"), + W + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + + + function buildPrepareLagrangeEvaluation() { + const f = module.addFunction(prefix+"_prepareLagrangeEvaluation"); + f.addParam("pBuff1", "i32"); + f.addParam("pBuff2", "i32"); + f.addParam("n", "i32"); + f.addParam("first", "i32"); + f.addParam("inc", "i32"); + f.addParam("totalBits", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pShiftToM", "i32"); + f.addLocal("pSConst", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + + c.setLocal("pShiftToM", + c.i32_add( + c.i32_const(SHIFT_TO_M), + c.i32_mul( + c.getLocal("totalBits"), + c.i32_const(n8f) + ) + ) + ), + c.setLocal("pSConst", + c.i32_add( + c.i32_const(SCONST), + c.i32_mul( + c.getLocal("totalBits"), + c.i32_const(n8f) + ) + ) + ), + + + c.call( fPrefix + "_copy", c.getLocal("first"), W), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("n") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff1"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("pBuff2"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + + c.call( + opGtimesF, + c.getLocal("idx1"), + c.getLocal("pShiftToM"), + U + ), + + c.call( + gPrefix + "_sub", + c.getLocal("idx2"), + U, + U + ), + + c.call( + gPrefix + "_sub", + c.getLocal("idx1"), + c.getLocal("idx2"), + c.getLocal("idx2"), + ), + + c.call( + opGtimesF, + U, + c.getLocal("pSConst"), + c.getLocal("idx1"), + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + c.getLocal("idx2"), + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("inc"), + W + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + function buildFFTMix() { + const f = module.addFunction(prefix+"_fftMix"); + f.addParam("pBuff", "i32"); + f.addParam("n", "i32"); + f.addParam("exp", "i32"); + f.addLocal("nGroups", "i32"); + f.addLocal("nPerGroup", "i32"); + f.addLocal("nPerGroupDiv2", "i32"); + f.addLocal("pairOffset", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("pwm", "i32"); + + const c = f.getCodeBuilder(); + + const W = c.i32_const(module.alloc(n8f)); + const T = c.i32_const(module.alloc(n8g)); + const U = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.setLocal("nPerGroup", c.i32_shl(c.i32_const(1), c.getLocal("exp"))), + c.setLocal("nPerGroupDiv2", c.i32_shr_u(c.getLocal("nPerGroup"), c.i32_const(1))), + c.setLocal("nGroups", c.i32_shr_u(c.getLocal("n"), c.getLocal("exp"))), + c.setLocal("pairOffset", c.i32_mul(c.getLocal("nPerGroupDiv2"), c.i32_const(n8g))), + c.setLocal("pwm", + c.i32_add( + c.i32_const(ROOTs), + c.i32_mul( + c.getLocal("exp"), + c.i32_const(n8f) + ) + ) + ), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("nGroups") + ) + ), + c.call( fPrefix + "_one", W), + c.setLocal("j", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("j"), + c.getLocal("nPerGroupDiv2") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff"), + c.i32_mul( + c.i32_add( + c.i32_mul( + c.getLocal("i"), + c.getLocal("nPerGroup") + ), + c.getLocal("j") + ), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("idx1"), + c.getLocal("pairOffset") + ) + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + W, + T + ), + + c.call( + gPrefix + "_copy", + c.getLocal("idx1"), + U + ), + + c.call( + gPrefix + "_add", + U, + T, + c.getLocal("idx1"), + ), + + c.call( + gPrefix + "_sub", + U, + T, + c.getLocal("idx2"), + ), + + c.call( + fPrefix + "_mul", + W, + c.getLocal("pwm"), + W, + ), + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + + // Reverse all and multiply by factor + function buildFFTFinal() { + const f = module.addFunction(prefix+"_fftFinal"); + f.addParam("pBuff", "i32"); + f.addParam("n", "i32"); + f.addParam("factor", "i32"); + f.addLocal("idx1", "i32"); + f.addLocal("idx2", "i32"); + f.addLocal("i", "i32"); + f.addLocal("ndiv2", "i32"); + + const c = f.getCodeBuilder(); + + const T = c.i32_const(module.alloc(n8g)); + + f.addCode( + c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))), + c.if( + c.i32_and( + c.getLocal("n"), + c.i32_const(1) + ), + c.call( + opGtimesF, + c.i32_add( + c.getLocal("pBuff"), + c.i32_mul( + c.getLocal("ndiv2"), + c.i32_const(n8g) + ) + ), + c.getLocal("factor"), + c.i32_add( + c.getLocal("pBuff"), + c.i32_mul( + c.getLocal("ndiv2"), + c.i32_const(n8g) + ) + ), + ), + ), + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_ge_u( + c.getLocal("i"), + c.getLocal("ndiv2") + ) + ), + + c.setLocal( + "idx1", + c.i32_add( + c.getLocal("pBuff"), + c.i32_mul( + c.getLocal("i"), + c.i32_const(n8g) + ) + ) + ), + + c.setLocal( + "idx2", + c.i32_add( + c.getLocal("pBuff"), + c.i32_mul( + c.i32_sub( + c.i32_sub( + c.getLocal("n"), + c.i32_const(1) + ), + c.getLocal("i") + ), + c.i32_const(n8g) + ) + ) + ), + + c.call( + opGtimesF, + c.getLocal("idx2"), + c.getLocal("factor"), + T + ), + + c.call( + opGtimesF, + c.getLocal("idx1"), + c.getLocal("factor"), + c.getLocal("idx2"), + ), + + c.call( + gPrefix + "_copy", + T, + c.getLocal("idx1"), + ), + + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + buildRev(); + buildReversePermutation(); + buildFinalInverse(); + buildRawFFT(); + buildLog2(); + buildFFT(); + buildIFFT(); + buildFFTJoin(); + buildFFTJoinExt(); + buildFFTJoinExtInv(); + buildFFTMix(); + buildFFTFinal(); + buildPrepareLagrangeEvaluation(); + + module.exportFunction(prefix+"_fft"); + module.exportFunction(prefix+"_ifft"); + module.exportFunction(prefix+"_rawfft"); + module.exportFunction(prefix+"_fftJoin"); + module.exportFunction(prefix+"_fftJoinExt"); + module.exportFunction(prefix+"_fftJoinExtInv"); + module.exportFunction(prefix+"_fftMix"); + module.exportFunction(prefix+"_fftFinal"); + module.exportFunction(prefix+"_prepareLagrangeEvaluation"); + + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_pol$1 = function buildPol(module, prefix, prefixField) { + + const n64 = module.modules[prefixField].n64; + const n8 = n64*8; + + + function buildZero() { + const f = module.addFunction(prefix+"_zero"); + f.addParam("px", "i32"); + f.addParam("n", "i32"); + f.addLocal("lastp", "i32"); + f.addLocal("p", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.setLocal("p", c.getLocal("px")), + c.setLocal( + "lastp", + c.i32_add( + c.getLocal("px"), + c.i32_mul( + c.getLocal("n"), + c.i32_const(n8) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("p"), + c.getLocal("lastp") + ) + ), + c.call(prefixField + "_zero", c.getLocal("p")), + c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))), + c.br(0) + )) + ); + } + + function buildConstructLC() { + const f = module.addFunction(prefix+"_constructLC"); + f.addParam("ppolynomials", "i32"); + f.addParam("psignals", "i32"); + f.addParam("nSignals", "i32"); + f.addParam("pres", "i32"); + f.addLocal("i", "i32"); + f.addLocal("j", "i32"); + f.addLocal("pp", "i32"); + f.addLocal("ps", "i32"); + f.addLocal("pd", "i32"); + f.addLocal("ncoefs", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(n8)); + + f.addCode( + c.setLocal("i", c.i32_const(0)), + c.setLocal("pp", c.getLocal("ppolynomials")), + c.setLocal("ps", c.getLocal("psignals")), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("i"), + c.getLocal("nSignals") + ) + ), + + c.setLocal("ncoefs", c.i32_load(c.getLocal("pp"))), + c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), + + c.setLocal("j", c.i32_const(0)), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("j"), + c.getLocal("ncoefs") + ) + ), + + c.setLocal( + "pd", + c.i32_add( + c.getLocal("pres"), + c.i32_mul( + c.i32_load(c.getLocal("pp")), + c.i32_const(n8) + ) + ) + ), + + c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))), + + + c.call( + prefixField + "_mul", + c.getLocal("ps"), + c.getLocal("pp"), + aux + ), + + c.call( + prefixField + "_add", + aux, + c.getLocal("pd"), + c.getLocal("pd") + ), + + c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(n8))), + c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))), + c.br(0) + )), + + c.setLocal("ps", c.i32_add(c.getLocal("ps"), c.i32_const(n8))), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + + } + + buildZero(); + buildConstructLC(); + + + module.exportFunction(prefix + "_zero"); + module.exportFunction(prefix + "_constructLC"); + + return prefix; + + + + + }; + + var build_qap$1 = function buildQAP(module, prefix, prefixField) { + + const n64 = module.modules[prefixField].n64; + const n8 = n64*8; + + + function buildBuildABC() { + const f = module.addFunction(prefix+"_buildABC"); + f.addParam("pCoefs", "i32"); + f.addParam("nCoefs", "i32"); + f.addParam("pWitness", "i32"); + f.addParam("pA", "i32"); + f.addParam("pB", "i32"); + f.addParam("pC", "i32"); + f.addParam("offsetOut", "i32"); + f.addParam("nOut", "i32"); + f.addParam("offsetWitness", "i32"); + f.addParam("nWitness", "i32"); + f.addLocal("it", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("last", "i32"); + f.addLocal("m", "i32"); + f.addLocal("c", "i32"); + f.addLocal("s", "i32"); + f.addLocal("pOut", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(n8)); + + f.addCode( + + // Set output a and b to 0 + c.setLocal("ita", c.getLocal("pA")), + c.setLocal("itb", c.getLocal("pB")), + c.setLocal( + "last", + c.i32_add( + c.getLocal("pA"), + c.i32_mul( + c.getLocal("nOut"), + c.i32_const(n8) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("ita"), + c.getLocal("last") + ) + ), + c.call(prefixField + "_zero", c.getLocal("ita")), + c.call(prefixField + "_zero", c.getLocal("itb")), + c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), + c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), + c.br(0) + )), + + + c.setLocal("it", c.getLocal("pCoefs")), + c.setLocal( + "last", + c.i32_add( + c.getLocal("pCoefs"), + c.i32_mul( + c.getLocal("nCoefs"), + c.i32_const(n8+12) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("it"), + c.getLocal("last") + ) + ), + c.setLocal( + "s", + c.i32_load(c.getLocal("it"), 8) + ), + c.if( + c.i32_or( + c.i32_lt_u( + c.getLocal("s"), + c.getLocal("offsetWitness"), + ), + c.i32_ge_u( + c.getLocal("s"), + c.i32_add( + c.getLocal("offsetWitness"), + c.getLocal("nWitness"), + ) + ) + ), + [ + ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))), + ...c.br(1) + ] + ), + + c.setLocal( + "m", + c.i32_load(c.getLocal("it")) + ), + c.if( + c.i32_eq(c.getLocal("m"), c.i32_const(0)), + c.setLocal("pOut", c.getLocal("pA")), + c.if( + c.i32_eq(c.getLocal("m"), c.i32_const(1)), + c.setLocal("pOut", c.getLocal("pB")), + [ + ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))), + ...c.br(1) + ] + ) + ), + c.setLocal( + "c", + c.i32_load(c.getLocal("it"), 4) + ), + c.if( + c.i32_or( + c.i32_lt_u( + c.getLocal("c"), + c.getLocal("offsetOut"), + ), + c.i32_ge_u( + c.getLocal("c"), + c.i32_add( + c.getLocal("offsetOut"), + c.getLocal("nOut"), + ) + ) + ), + [ + ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))), + ...c.br(1) + ] + ), + c.setLocal( + "pOut", + c.i32_add( + c.getLocal("pOut"), + c.i32_mul( + c.i32_sub( + c.getLocal("c"), + c.getLocal("offsetOut") + ), + c.i32_const(n8) + ) + ) + ), + c.call( + prefixField + "_mul", + c.i32_add( + c.getLocal("pWitness"), + c.i32_mul( + c.i32_sub(c.getLocal("s"), c.getLocal("offsetWitness")), + c.i32_const(n8) + ) + ), + c.i32_add( c.getLocal("it"), c.i32_const(12)), + aux + ), + c.call( + prefixField + "_add", + c.getLocal("pOut"), + aux, + c.getLocal("pOut"), + ), + c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))), + c.br(0) + )), + + c.setLocal("ita", c.getLocal("pA")), + c.setLocal("itb", c.getLocal("pB")), + c.setLocal("it", c.getLocal("pC")), + c.setLocal( + "last", + c.i32_add( + c.getLocal("pA"), + c.i32_mul( + c.getLocal("nOut"), + c.i32_const(n8) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("ita"), + c.getLocal("last") + ) + ), + c.call( + prefixField + "_mul", + c.getLocal("ita"), + c.getLocal("itb"), + c.getLocal("it") + ), + c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), + c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), + c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8))), + c.br(0) + )), + + ); + } + + function buildJoinABC() { + const f = module.addFunction(prefix+"_joinABC"); + f.addParam("pA", "i32"); + f.addParam("pB", "i32"); + f.addParam("pC", "i32"); + f.addParam("n", "i32"); + f.addParam("pP", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("itc", "i32"); + f.addLocal("itp", "i32"); + f.addLocal("last", "i32"); + + const c = f.getCodeBuilder(); + + const aux = c.i32_const(module.alloc(n8)); + + f.addCode( + c.setLocal("ita", c.getLocal("pA")), + c.setLocal("itb", c.getLocal("pB")), + c.setLocal("itc", c.getLocal("pC")), + c.setLocal("itp", c.getLocal("pP")), + c.setLocal( + "last", + c.i32_add( + c.getLocal("pA"), + c.i32_mul( + c.getLocal("n"), + c.i32_const(n8) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("ita"), + c.getLocal("last") + ) + ), + c.call( + prefixField + "_mul", + c.getLocal("ita"), + c.getLocal("itb"), + aux + ), + c.call( + prefixField + "_sub", + aux, + c.getLocal("itc"), + c.getLocal("itp"), + ), + c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), + c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), + c.setLocal("itc", c.i32_add(c.getLocal("itc"), c.i32_const(n8))), + c.setLocal("itp", c.i32_add(c.getLocal("itp"), c.i32_const(n8))), + c.br(0) + )) + ); + } + + function buildBatchAdd() { + const f = module.addFunction(prefix+"_batchAdd"); + f.addParam("pa", "i32"); + f.addParam("pb", "i32"); + f.addParam("n", "i32"); + f.addParam("pr", "i32"); + f.addLocal("ita", "i32"); + f.addLocal("itb", "i32"); + f.addLocal("itr", "i32"); + f.addLocal("last", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.setLocal("ita", c.getLocal("pa")), + c.setLocal("itb", c.getLocal("pb")), + c.setLocal("itr", c.getLocal("pr")), + c.setLocal( + "last", + c.i32_add( + c.getLocal("pa"), + c.i32_mul( + c.getLocal("n"), + c.i32_const(n8) + ) + ) + ), + c.block(c.loop( + c.br_if( + 1, + c.i32_eq( + c.getLocal("ita"), + c.getLocal("last") + ) + ), + c.call( + prefixField + "_add", + c.getLocal("ita"), + c.getLocal("itb"), + c.getLocal("itr"), + ), + c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))), + c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))), + c.setLocal("itr", c.i32_add(c.getLocal("itr"), c.i32_const(n8))), + c.br(0) + )) + ); + } + + buildBuildABC(); + buildJoinABC(); + buildBatchAdd(); + + module.exportFunction(prefix + "_buildABC"); + module.exportFunction(prefix + "_joinABC"); + module.exportFunction(prefix + "_batchAdd"); + + return prefix; + + }; + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmsnark (Web Assembly zkSnark Prover). + + wasmsnark is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmsnark is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmsnark. If not, see . + */ + + var build_applykey$1 = function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) { + + const f = module.addFunction(fnName); + f.addParam("pIn", "i32"); + f.addParam("n", "i32"); + f.addParam("pFirst", "i32"); + f.addParam("pInc", "i32"); + f.addParam("pOut", "i32"); + f.addLocal("pOldFree", "i32"); + f.addLocal("i", "i32"); + f.addLocal("pFrom", "i32"); + f.addLocal("pTo", "i32"); + + const c = f.getCodeBuilder(); + + const t = c.i32_const(module.alloc(sizeF)); + + f.addCode( + c.setLocal("pFrom", c.getLocal("pIn")), + c.setLocal("pTo", c.getLocal("pOut")), + ); + + // t = first + f.addCode( + c.call( + frPrefix + "_copy", + c.getLocal("pFirst"), + t + ) + ); + f.addCode( + c.setLocal("i", c.i32_const(0)), + c.block(c.loop( + c.br_if(1, c.i32_eq ( c.getLocal("i"), c.getLocal("n") )), + + c.call( + opGtimesF, + c.getLocal("pFrom"), + t, + c.getLocal("pTo") + ), + c.setLocal("pFrom", c.i32_add(c.getLocal("pFrom"), c.i32_const(sizeGIn))), + c.setLocal("pTo", c.i32_add(c.getLocal("pTo"), c.i32_const(sizeGOut))), + + // t = t* inc + c.call( + frPrefix + "_mul", + t, + c.getLocal("pInc"), + t + ), + c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + + module.exportFunction(fnName); + + }; + + const utils$8 = utils$c; + + const buildF1m$4 =build_f1m$1; + const buildF1$3 =build_f1$1; + const buildF2m$3 =build_f2m$1; + const buildF3m$3 =build_f3m$1; + const buildCurve$3 =build_curve_jacobian_a0$1; + const buildFFT$5 = build_fft$1; + const buildPol$3 = build_pol$1; + const buildQAP$3 = build_qap$1; + const buildApplyKey$3 = build_applykey$1; + const { bitLength: bitLength$9, modInv: modInv$4, isOdd: isOdd$8, isNegative: isNegative$7 } = bigint$1; + + var build_bn128$1 = function buildBN128(module, _prefix) { + + const prefix = _prefix || "bn128"; + + if (module.modules[prefix]) return prefix; // already builded + + const q = 21888242871839275222246405745257275088696311157297823662689037894645226208583n; + const r = 21888242871839275222246405745257275088548364400416034343698204186575808495617n; + + + const n64 = Math.floor((bitLength$9(q - 1n) - 1)/64) +1; + const n8 = n64*8; + const frsize = n8; + const f1size = n8; + const f2size = f1size * 2; + const ftsize = f1size * 12; + + const pr = module.alloc(utils$8.bigInt2BytesLE( r, frsize )); + + const f1mPrefix = buildF1m$4(module, q, "f1m"); + buildF1$3(module, r, "fr", "frm"); + + const pG1b = module.alloc(utils$8.bigInt2BytesLE( toMontgomery(3n), f1size )); + const g1mPrefix = buildCurve$3(module, "g1m", "f1m", pG1b); + + buildFFT$5(module, "frm", "frm", "frm", "frm_mul"); + + buildPol$3(module, "pol", "frm"); + buildQAP$3(module, "qap", "frm"); + + const f2mPrefix = buildF2m$3(module, "f1m_neg", "f2m", "f1m"); + const pG2b = module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size ) + ]); + const g2mPrefix = buildCurve$3(module, "g2m", "f2m", pG2b); + + + function buildGTimesFr(fnName, opMul) { + const f = module.addFunction(fnName); + f.addParam("pG", "i32"); + f.addParam("pFr", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + const AUX = c.i32_const(module.alloc(n8)); + + f.addCode( + c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX), + c.call( + opMul, + c.getLocal("pG"), + AUX, + c.i32_const(n8), + c.getLocal("pr") + ) + ); + + module.exportFunction(fnName); + } + buildGTimesFr("g1m_timesFr", "g1m_timesScalar"); + buildFFT$5(module, "g1m", "g1m", "frm", "g1m_timesFr"); + + buildGTimesFr("g2m_timesFr", "g2m_timesScalar"); + buildFFT$5(module, "g2m", "g2m", "frm", "g2m_timesFr"); + + buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine"); + buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine"); + + buildApplyKey$3(module, "frm_batchApplyKey", "fmr", "frm", n8, n8, n8, "frm_mul"); + buildApplyKey$3(module, "g1m_batchApplyKey", "g1m", "frm", n8*3, n8*3, n8, "g1m_timesFr"); + buildApplyKey$3(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8*2, n8*3, n8, "g1m_timesFrAffine"); + buildApplyKey$3(module, "g2m_batchApplyKey", "g2m", "frm", n8*2*3, n8*3*2, n8, "g2m_timesFr"); + buildApplyKey$3(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8*2*2, n8*3*2, n8, "g2m_timesFrAffine"); + + function toMontgomery(a) { + return BigInt(a) * ( 1n << BigInt(f1size*8)) % q; + } + + const G1gen = [ + 1n, + 2n, + 1n + ]; + + const pG1gen = module.alloc( + [ + ...utils$8.bigInt2BytesLE( toMontgomery(G1gen[0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G1gen[1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G1gen[2]), f1size ), + ] + ); + + const G1zero = [ + 0n, + 1n, + 0n + ]; + + const pG1zero = module.alloc( + [ + ...utils$8.bigInt2BytesLE( toMontgomery(G1zero[0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G1zero[1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G1zero[2]), f1size ) + ] + ); + + const G2gen = [ + [ + 10857046999023057135944570762232829481370756359578518086990519993285655852781n, + 11559732032986387107991004021392285783925812861821192530917403151452391805634n, + ],[ + 8495653923123431417604973247489272438418190587263600148770280649306958101930n, + 4082367875863433681332203403145435568316851327593401208105741076214120093531n, + ],[ + 1n, + 0n, + ] + ]; + + const pG2gen = module.alloc( + [ + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[0][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[0][1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[1][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[1][1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[2][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2gen[2][1]), f1size ), + ] + ); + + const G2zero = [ + [ + 0n, + 0n, + ],[ + 1n, + 0n, + ],[ + 0n, + 0n, + ] + ]; + + const pG2zero = module.alloc( + [ + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[0][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[0][1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[1][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[1][1]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[2][0]), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(G2zero[2][1]), f1size ), + ] + ); + + const pOneT = module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery(1), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(0), f1size ), + ]); + + const pNonResidueF6 = module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery(9), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(1), f1size ), + ]); + + const pTwoInv = module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery( modInv$4(2n, q)), f1size ), + ...utils$8.bigInt2BytesLE( 0n, f1size ) + ]); + + const pAltBn128Twist = pNonResidueF6; + + const pTwistCoefB = module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery(19485874751759354771024239261021720505790618469301721065564631296452457478373n), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery(266929791119991161246907387137283842545076965332900288569378510910307636690n), f1size ), + ]); + + function build_mulNR6() { + const f = module.addFunction(prefix + "_mulNR6"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call( + f2mPrefix + "_mul", + c.i32_const(pNonResidueF6), + c.getLocal("x"), + c.getLocal("pr") + ) + ); + } + build_mulNR6(); + + const f6mPrefix = buildF3m$3(module, prefix+"_mulNR6", "f6m", "f2m"); + + function build_mulNR12() { + const f = module.addFunction(prefix + "_mulNR12"); + f.addParam("x", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call( + f2mPrefix + "_mul", + c.i32_const(pNonResidueF6), + c.i32_add(c.getLocal("x"), c.i32_const(n8*4)), + c.getLocal("pr") + ), + c.call( + f2mPrefix + "_copy", + c.getLocal("x"), + c.i32_add(c.getLocal("pr"), c.i32_const(n8*2)), + ), + c.call( + f2mPrefix + "_copy", + c.i32_add(c.getLocal("x"), c.i32_const(n8*2)), + c.i32_add(c.getLocal("pr"), c.i32_const(n8*4)), + ) + ); + } + build_mulNR12(); + + const ftmPrefix = buildF2m$3(module, prefix+"_mulNR12", "ftm", f6mPrefix); + + + const ateLoopCount = 29793968203157093288n; + const ateLoopBitBytes = bits(ateLoopCount); + const pAteLoopBitBytes = module.alloc(ateLoopBitBytes); + + const ateCoefSize = 3 * f2size; + const ateNDblCoefs = ateLoopBitBytes.length-1; + const ateNAddCoefs = ateLoopBitBytes.reduce((acc, b) => acc + ( b!=0 ? 1 : 0) ,0); + const ateNCoefs = ateNAddCoefs + ateNDblCoefs + 1; + const prePSize = 3*2*n8; + const preQSize = 3*n8*2 + ateNCoefs*ateCoefSize; + + + module.modules[prefix] = { + n64: n64, + pG1gen: pG1gen, + pG1zero: pG1zero, + pG1b: pG1b, + pG2gen: pG2gen, + pG2zero: pG2zero, + pG2b: pG2b, + pq: module.modules["f1m"].pq, + pr: pr, + pOneT: pOneT, + prePSize: prePSize, + preQSize: preQSize, + r: r.toString(), + q: q.toString() + }; + + // console.log("PrePSize: " +prePSize); + // console.log("PreQSize: " +preQSize); + + const finalExpZ = 4965661367192848881n; + + function naf(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd$8(E)) { + const z = 2 - Number(E % 4n); + res.push( z ); + E = E - BigInt(z); + } else { + res.push( 0 ); + } + E = E >> 1n; + } + return res; + } + + function bits(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd$8(E)) { + res.push( 1 ); + } else { + res.push( 0 ); + } + E = E >> 1n; + } + return res; + } + + function buildPrepareG1() { + const f = module.addFunction(prefix+ "_prepareG1"); + f.addParam("pP", "i32"); + f.addParam("ppreP", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")), // TODO Remove if already in affine + ); + } + + function buildPrepAddStep() { + const f = module.addFunction(prefix+ "_prepAddStep"); + f.addParam("pQ", "i32"); + f.addParam("pR", "i32"); + f.addParam("pCoef", "i32"); + + const c = f.getCodeBuilder(); + + const X2 = c.getLocal("pQ"); + const Y2 = c.i32_add(c.getLocal("pQ"), c.i32_const(f2size)); + + const X1 = c.getLocal("pR"); + const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size)); + const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*f2size)); + + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size)); + + const D = ELL_VW; + const E = c.i32_const(module.alloc(f2size)); + const F = c.i32_const(module.alloc(f2size)); + const G = c.i32_const(module.alloc(f2size)); + const H = c.i32_const(module.alloc(f2size)); + const I = c.i32_const(module.alloc(f2size)); + const J = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + + f.addCode( + // D = X1 - X2*Z1 + c.call(f2mPrefix + "_mul", X2, Z1, D), + c.call(f2mPrefix + "_sub", X1, D, D), + + // E = Y1 - Y2*Z1 + c.call(f2mPrefix + "_mul", Y2, Z1, E), + c.call(f2mPrefix + "_sub", Y1, E, E), + + // F = D^2 + c.call(f2mPrefix + "_square", D, F), + + // G = E^2 + c.call(f2mPrefix + "_square", E, G), + + // H = D*F + c.call(f2mPrefix + "_mul", D, F, H), + + // I = X1 * F + c.call(f2mPrefix + "_mul", X1, F, I), + + // J = H + Z1*G - (I+I) + c.call(f2mPrefix + "_add", I, I, AUX), + c.call(f2mPrefix + "_mul", Z1, G, J), + c.call(f2mPrefix + "_add", H, J, J), + c.call(f2mPrefix + "_sub", J, AUX, J), + + + // X3 (X1) = D*J + c.call(f2mPrefix + "_mul", D, J, X1), + + // Y3 (Y1) = E*(I-J)-(H*Y1) + c.call(f2mPrefix + "_mul", H, Y1, Y1), + c.call(f2mPrefix + "_sub", I, J, AUX), + c.call(f2mPrefix + "_mul", E, AUX, AUX), + c.call(f2mPrefix + "_sub", AUX, Y1, Y1), + + // Z3 (Z1) = Z1*H + c.call(f2mPrefix + "_mul", Z1, H, Z1), + + // ell_0 = xi * (E * X2 - D * Y2) + c.call(f2mPrefix + "_mul", D, Y2, AUX), + c.call(f2mPrefix + "_mul", E, X2, ELL_0), + c.call(f2mPrefix + "_sub", ELL_0, AUX, ELL_0), + c.call(f2mPrefix + "_mul", ELL_0, c.i32_const(pAltBn128Twist), ELL_0), + + + // ell_VV = - E (later: * xP) + c.call(f2mPrefix + "_neg", E, ELL_VV), + + // ell_VW = D (later: * yP ) + // Already assigned + + ); + } + + + + function buildPrepDoubleStep() { + const f = module.addFunction(prefix+ "_prepDblStep"); + f.addParam("pR", "i32"); + f.addParam("pCoef", "i32"); + + const c = f.getCodeBuilder(); + + const X1 = c.getLocal("pR"); + const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size)); + const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*f2size)); + + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size)); + + const A = c.i32_const(module.alloc(f2size)); + const B = c.i32_const(module.alloc(f2size)); + const C = c.i32_const(module.alloc(f2size)); + const D = c.i32_const(module.alloc(f2size)); + const E = c.i32_const(module.alloc(f2size)); + const F = c.i32_const(module.alloc(f2size)); + const G = c.i32_const(module.alloc(f2size)); + const H = c.i32_const(module.alloc(f2size)); + const I = c.i32_const(module.alloc(f2size)); + const J = c.i32_const(module.alloc(f2size)); + const E2 = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + + f.addCode( + + // A = X1 * Y1 / 2 + c.call(f2mPrefix + "_mul", Y1, c.i32_const(pTwoInv), A), + c.call(f2mPrefix + "_mul", X1, A, A), + + // B = Y1^2 + c.call(f2mPrefix + "_square", Y1, B), + + // C = Z1^2 + c.call(f2mPrefix + "_square", Z1, C), + + // D = 3 * C + c.call(f2mPrefix + "_add", C, C, D), + c.call(f2mPrefix + "_add", D, C, D), + + // E = twist_b * D + c.call(f2mPrefix + "_mul", c.i32_const(pTwistCoefB), D, E), + + // F = 3 * E + c.call(f2mPrefix + "_add", E, E, F), + c.call(f2mPrefix + "_add", E, F, F), + + // G = (B+F)/2 + c.call(f2mPrefix + "_add", B, F, G), + c.call(f2mPrefix + "_mul", G, c.i32_const(pTwoInv), G), + + // H = (Y1+Z1)^2-(B+C) + c.call(f2mPrefix + "_add", B, C, AUX), + c.call(f2mPrefix + "_add", Y1, Z1, H), + c.call(f2mPrefix + "_square", H, H), + c.call(f2mPrefix + "_sub", H, AUX, H), + + // I = E-B + c.call(f2mPrefix + "_sub", E, B, I), + + // J = X1^2 + c.call(f2mPrefix + "_square", X1, J), + + // E_squared = E^2 + c.call(f2mPrefix + "_square", E, E2), + + // X3 (X1) = A * (B-F) + c.call(f2mPrefix + "_sub", B, F, AUX), + c.call(f2mPrefix + "_mul", A, AUX, X1), + + // Y3 (Y1) = G^2 - 3*E^2 + c.call(f2mPrefix + "_add", E2, E2, AUX), + c.call(f2mPrefix + "_add", E2, AUX, AUX), + c.call(f2mPrefix + "_square", G, Y1), + c.call(f2mPrefix + "_sub", Y1, AUX, Y1), + + // Z3 (Z1) = B * H + c.call(f2mPrefix + "_mul", B, H, Z1), + + // ell_0 = xi * I + c.call(f2mPrefix + "_mul", c.i32_const(pAltBn128Twist), I, ELL_0), + + // ell_VW = - H (later: * yP) + c.call(f2mPrefix + "_neg", H, ELL_VW), + + // ell_VV = 3*J (later: * xP) + c.call(f2mPrefix + "_add", J, J, ELL_VV), + c.call(f2mPrefix + "_add", J, ELL_VV, ELL_VV), + + ); + } + + function buildMulByQ() { + const f = module.addFunction(prefix + "_mulByQ"); + f.addParam("p1", "i32"); + f.addParam("pr", "i32"); + + const c = f.getCodeBuilder(); + + const x = c.getLocal("p1"); + const y = c.i32_add(c.getLocal("p1"), c.i32_const(f2size)); + const z = c.i32_add(c.getLocal("p1"), c.i32_const(f2size*2)); + const x3 = c.getLocal("pr"); + const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size)); + const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size*2)); + + const MulByQX = c.i32_const(module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery("21575463638280843010398324269430826099269044274347216827212613867836435027261"), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery("10307601595873709700152284273816112264069230130616436755625194854815875713954"), f1size ), + ])); + + const MulByQY = c.i32_const(module.alloc([ + ...utils$8.bigInt2BytesLE( toMontgomery("2821565182194536844548159561693502659359617185244120367078079554186484126554"), f1size ), + ...utils$8.bigInt2BytesLE( toMontgomery("3505843767911556378687030309984248845540243509899259641013678093033130930403"), f1size ), + ])); + + f.addCode( + // The frobeniusMap(1) in this field, is the conjugate + c.call(f2mPrefix + "_conjugate", x, x3), + c.call(f2mPrefix + "_mul", MulByQX, x3, x3), + c.call(f2mPrefix + "_conjugate", y, y3), + c.call(f2mPrefix + "_mul", MulByQY, y3, y3), + c.call(f2mPrefix + "_conjugate", z, z3), + ); + } + + + function buildPrepareG2() { + buildMulByQ(); + const f = module.addFunction(prefix+ "_prepareG2"); + f.addParam("pQ", "i32"); + f.addParam("ppreQ", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const QX = c.getLocal("pQ"); + + const pR = module.alloc(f2size*3); + const R = c.i32_const(pR); + const RX = c.i32_const(pR); + const RY = c.i32_const(pR+f2size); + const RZ = c.i32_const(pR+2*f2size); + + const cQX = c.i32_add( c.getLocal("ppreQ"), c.i32_const(0)); + const cQY = c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size)); + + const pQ1 = module.alloc(f2size*3); + const Q1 = c.i32_const(pQ1); + + const pQ2 = module.alloc(f2size*3); + const Q2 = c.i32_const(pQ2); + const Q2Y = c.i32_const(pQ2 + f2size); + + f.addCode( + c.call(g2mPrefix + "_normalize", QX, cQX), // TODO Remove if already in affine + c.call(f2mPrefix + "_copy", cQX, RX), + c.call(f2mPrefix + "_copy", cQY, RY), + c.call(f2mPrefix + "_one", RZ), + ); + + f.addCode( + c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))), + c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)), + c.block(c.loop( + + c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.if( + c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), + [ + ...c.call(prefix + "_prepAddStep", cQX, R, c.getLocal("pCoef")), + ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + ] + ), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + + f.addCode( + c.call(prefix + "_mulByQ", cQX, Q1), + c.call(prefix + "_mulByQ", Q1, Q2) + ); + + f.addCode( + c.call(f2mPrefix + "_neg", Q2Y, Q2Y), + + c.call(prefix + "_prepAddStep", Q1, R, c.getLocal("pCoef")), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.call(prefix + "_prepAddStep", Q2, R, c.getLocal("pCoef")), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + ); + } + + function buildMulBy024Old() { + const f = module.addFunction(prefix+ "__mulBy024Old"); + f.addParam("pEll0", "i32"); + f.addParam("pEllVW", "i32"); + f.addParam("pEllVV", "i32"); + f.addParam("pR", "i32"); // Result in F12 + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("pEll0"); + const x2 = c.getLocal("pEllVV"); + const x4 = c.getLocal("pEllVW"); + + const z0 = c.getLocal("pR"); + + const pAUX12 = module.alloc(ftsize); + const AUX12 = c.i32_const(pAUX12); + const AUX12_0 = c.i32_const(pAUX12); + const AUX12_2 = c.i32_const(pAUX12+f2size); + const AUX12_4 = c.i32_const(pAUX12+f2size*2); + const AUX12_6 = c.i32_const(pAUX12+f2size*3); + const AUX12_8 = c.i32_const(pAUX12+f2size*4); + const AUX12_10 = c.i32_const(pAUX12+f2size*5); + + f.addCode( + + c.call(f2mPrefix + "_copy", x0, AUX12_0), + c.call(f2mPrefix + "_zero", AUX12_2), + c.call(f2mPrefix + "_copy", x2, AUX12_4), + c.call(f2mPrefix + "_zero", AUX12_6), + c.call(f2mPrefix + "_copy", x4, AUX12_8), + c.call(f2mPrefix + "_zero", AUX12_10), + c.call(ftmPrefix + "_mul", AUX12, z0, z0), + ); + } + + function buildMulBy024() { + const f = module.addFunction(prefix+ "__mulBy024"); + f.addParam("pEll0", "i32"); + f.addParam("pEllVW", "i32"); + f.addParam("pEllVV", "i32"); + f.addParam("pR", "i32"); // Result in F12 + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("pEll0"); + const x2 = c.getLocal("pEllVV"); + const x4 = c.getLocal("pEllVW"); + + const z0 = c.getLocal("pR"); + const z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*n8)); + const z2 = c.i32_add(c.getLocal("pR"), c.i32_const(4*n8)); + const z3 = c.i32_add(c.getLocal("pR"), c.i32_const(6*n8)); + const z4 = c.i32_add(c.getLocal("pR"), c.i32_const(8*n8)); + const z5 = c.i32_add(c.getLocal("pR"), c.i32_const(10*n8)); + + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const s0 = c.i32_const(module.alloc(f2size)); + const T3 = c.i32_const(module.alloc(f2size)); + const T4 = c.i32_const(module.alloc(f2size)); + const D0 = c.i32_const(module.alloc(f2size)); + const D2 = c.i32_const(module.alloc(f2size)); + const D4 = c.i32_const(module.alloc(f2size)); + const S1 = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + + f.addCode( + + // D0 = z0 * x0; + c.call(f2mPrefix + "_mul", z0, x0, D0), + // D2 = z2 * x2; + c.call(f2mPrefix + "_mul", z2, x2, D2), + // D4 = z4 * x4; + c.call(f2mPrefix + "_mul", z4, x4, D4), + // t2 = z0 + z4; + c.call(f2mPrefix + "_add", z0, z4, t2), + // t1 = z0 + z2; + c.call(f2mPrefix + "_add", z0, z2, t1), + // s0 = z1 + z3 + z5; + c.call(f2mPrefix + "_add", z1, z3, s0), + c.call(f2mPrefix + "_add", s0, z5, s0), + + + // For z.a_.a_ = z0. + // S1 = z1 * x2; + c.call(f2mPrefix + "_mul", z1, x2, S1), + // T3 = S1 + D4; + c.call(f2mPrefix + "_add", S1, D4, T3), + // T4 = my_Fp6::non_residue * T3 + D0; + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), + c.call(f2mPrefix + "_add", T4, D0, z0), + // z0 = T4; + + // For z.a_.b_ = z1 + // T3 = z5 * x4; + c.call(f2mPrefix + "_mul", z5, x4, T3), + // S1 = S1 + T3; + c.call(f2mPrefix + "_add", S1, T3, S1), + // T3 = T3 + D2; + c.call(f2mPrefix + "_add", T3, D2, T3), + // T4 = my_Fp6::non_residue * T3; + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), + // T3 = z1 * x0; + c.call(f2mPrefix + "_mul", z1, x0, T3), + // S1 = S1 + T3; + c.call(f2mPrefix + "_add", S1, T3, S1), + // T4 = T4 + T3; + c.call(f2mPrefix + "_add", T4, T3, z1), + // z1 = T4; + + + + // For z.a_.c_ = z2 + // t0 = x0 + x2; + c.call(f2mPrefix + "_add", x0, x2, t0), + // T3 = t1 * t0 - D0 - D2; + c.call(f2mPrefix + "_mul", t1, t0, T3), + c.call(f2mPrefix + "_add", D0, D2, AUX), + c.call(f2mPrefix + "_sub", T3, AUX, T3), + // T4 = z3 * x4; + c.call(f2mPrefix + "_mul", z3, x4, T4), + // S1 = S1 + T4; + c.call(f2mPrefix + "_add", S1, T4, S1), + + + // For z.b_.a_ = z3 (z3 needs z2) + // t0 = z2 + z4; + c.call(f2mPrefix + "_add", z2, z4, t0), + // T3 = T3 + T4; + // z2 = T3; + c.call(f2mPrefix + "_add", T3, T4, z2), + // t1 = x2 + x4; + c.call(f2mPrefix + "_add", x2, x4, t1), + // T3 = t0 * t1 - D2 - D4; + c.call(f2mPrefix + "_mul", t1, t0, T3), + c.call(f2mPrefix + "_add", D2, D4, AUX), + c.call(f2mPrefix + "_sub", T3, AUX, T3), + // T4 = my_Fp6::non_residue * T3; + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), + // T3 = z3 * x0; + c.call(f2mPrefix + "_mul", z3, x0, T3), + // S1 = S1 + T3; + c.call(f2mPrefix + "_add", S1, T3, S1), + // T4 = T4 + T3; + c.call(f2mPrefix + "_add", T4, T3, z3), + // z3 = T4; + + // For z.b_.b_ = z4 + // T3 = z5 * x2; + c.call(f2mPrefix + "_mul", z5, x2, T3), + // S1 = S1 + T3; + c.call(f2mPrefix + "_add", S1, T3, S1), + // T4 = my_Fp6::non_residue * T3; + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4), + // t0 = x0 + x4; + c.call(f2mPrefix + "_add", x0, x4, t0), + // T3 = t2 * t0 - D0 - D4; + c.call(f2mPrefix + "_mul", t2, t0, T3), + c.call(f2mPrefix + "_add", D0, D4, AUX), + c.call(f2mPrefix + "_sub", T3, AUX, T3), + // T4 = T4 + T3; + c.call(f2mPrefix + "_add", T4, T3, z4), + // z4 = T4; + + // For z.b_.c_ = z5. + // t0 = x0 + x2 + x4; + c.call(f2mPrefix + "_add", x0, x2, t0), + c.call(f2mPrefix + "_add", t0, x4, t0), + // T3 = s0 * t0 - S1; + c.call(f2mPrefix + "_mul", s0, t0, T3), + c.call(f2mPrefix + "_sub", T3, S1, z5), + // z5 = T3; + + ); + } + + + function buildMillerLoop() { + const f = module.addFunction(prefix+ "_millerLoop"); + f.addParam("ppreP", "i32"); + f.addParam("ppreQ", "i32"); + f.addParam("r", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const preP_PX = c.getLocal("ppreP"); + const preP_PY = c.i32_add(c.getLocal("ppreP"), c.i32_const(f1size)); + + const ELL_0 = c.getLocal("pCoef"); + const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size)); + const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size)); + + + const pVW = module.alloc(f2size); + const VW = c.i32_const(pVW); + const pVV = module.alloc(f2size); + const VV = c.i32_const(pVV); + + const F = c.getLocal("r"); + + + f.addCode( + c.call(ftmPrefix + "_one", F), + + c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))), + + c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)), + c.block(c.loop( + + + c.call(ftmPrefix + "_square", F, F), + + c.call(f2mPrefix + "_mul1", ELL_VW,preP_PY, VW), + c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), + c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.if( + c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), + [ + ...c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), + ...c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), + + ...c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), + ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + ] + ), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + + ); + + f.addCode( + c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), + c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), + c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW), + c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV), + c.call(prefix + "__mulBy024", ELL_0, VW, VV, F), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + ); + + } + + + function buildFrobeniusMap(n) { + const F12 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + ], + [ + [1n, 0n], + [8376118865763821496583973867626364092589906065868298776909617916018768340080n, 16469823323077808223889137241176536799009286646108169935659301613961712198316n], + [21888242871839275220042445260109153167277707414472061641714758635765020556617n, 0n], + [11697423496358154304825782922584725312912383441159505038794027105778954184319n, 303847389135065887422783454877609941456349188919719272345083954437860409601n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [3321304630594332808241809054958361220322477375291206261884409189760185844239n, 5722266937896532885780051958958348231143373700109372999374820235121374419868n], + [21888242871839275222246405745257275088696311157297823662689037894645226208582n, 0n], + [13512124006075453725662431877630910996106405091429524885779419978626457868503n, 5418419548761466998357268504080738289687024511189653727029736280683514010267n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [10190819375481120917420622822672549775783927716138318623895010788866272024264n, 21584395482704209334823622290379665147239961968378104390343953940207365798982n], + [2203960485148121921418603742825762020974279258880205651967n, 0n], + [18566938241244942414004596690298913868373833782006617400804628704885040364344n, 16165975933942742336466353786298926857552937457188450663314217659523851788715n], + ] + ]; + + const F6 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + ], + [ + [1n, 0n], + [21575463638280843010398324269430826099269044274347216827212613867836435027261n, 10307601595873709700152284273816112264069230130616436755625194854815875713954n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [3772000881919853776433695186713858239009073593817195771773381919316419345261n, 2236595495967245188281701248203181795121068902605861227855261137820944008926n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [18429021223477853657660792034369865839114504446431234726392080002137598044644n, 9344045779998320333812420223237981029506012124075525679208581902008406485703n], + ], + [ + [1n, 0n], + [2581911344467009335267311115468803099551665605076196740867805258568234346338n, 19937756971775647987995932169929341994314640652964949448313374472400716661030n], + [2203960485148121921418603742825762020974279258880205651966n, 0n], + [5324479202449903542726783395506214481928257762400643279780343368557297135718n, 16208900380737693084919495127334387981393726419856888799917914180988844123039n], + [21888242871839275220042445260109153167277707414472061641714758635765020556616n, 0n], + [13981852324922362344252311234282257507216387789820983642040889267519694726527n, 7629828391165209371577384193250820201684255241773809077146787135900891633097n], + ] + ]; + + const f = module.addFunction(prefix+ "__frobeniusMap"+n); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + for (let i=0; i<6; i++) { + const X = (i==0) ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i*f2size)); + const Xc0 = X; + const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i*f2size + f1size)); + const R = (i==0) ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i*f2size)); + const Rc0 = R; + const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i*f2size + f1size)); + const coef = mul2(F12[Math.floor(i/3)][n%12] , F6[i%3][n%6]); + const pCoef = module.alloc([ + ...utils$8.bigInt2BytesLE(toMontgomery(coef[0]), 32), + ...utils$8.bigInt2BytesLE(toMontgomery(coef[1]), 32), + ]); + if (n%2 == 1) { + f.addCode( + c.call(f1mPrefix + "_copy", Xc0, Rc0), + c.call(f1mPrefix + "_neg", Xc1, Rc1), + c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R), + ); + } else { + f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R)); + } + } + + function mul2(a, b) { + const ac0 = BigInt(a[0]); + const ac1 = BigInt(a[1]); + const bc0 = BigInt(b[0]); + const bc1 = BigInt(b[1]); + const res = [ + (ac0 * bc0 - ( ac1 * bc1) ) % q, + (ac0 * bc1 + ( ac1 * bc0) ) % q, + ]; + if (isNegative$7(res[0])) res[0] = res[0] + q; + return res; + } + + } + + + + function buildFinalExponentiationFirstChunk() { + + const f = module.addFunction(prefix+ "__finalExponentiationFirstChunk"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const elt = c.getLocal("x"); + const eltC0 = elt; + const eltC1 = c.i32_add(elt, c.i32_const(n8*6)); + const r = c.getLocal("r"); + const pA = module.alloc(ftsize); + const A = c.i32_const(pA); + const Ac0 = A; + const Ac1 = c.i32_const(pA + n8*6); + const B = c.i32_const(module.alloc(ftsize)); + const C = c.i32_const(module.alloc(ftsize)); + const D = c.i32_const(module.alloc(ftsize)); + + f.addCode( + // const alt_bn128_Fq12 A = alt_bn128_Fq12(elt.c0,-elt.c1); + c.call(f6mPrefix + "_copy", eltC0, Ac0), + c.call(f6mPrefix + "_neg", eltC1, Ac1), + + // const alt_bn128_Fq12 B = elt.inverse(); + c.call(ftmPrefix + "_inverse", elt, B), + + // const alt_bn128_Fq12 C = A * B; + c.call(ftmPrefix + "_mul", A, B, C), + // const alt_bn128_Fq12 D = C.Frobenius_map(2); + c.call(prefix + "__frobeniusMap2", C, D), + // const alt_bn128_Fq12 result = D * C; + c.call(ftmPrefix + "_mul", C, D, r), + ); + } + + function buildCyclotomicSquare() { + const f = module.addFunction(prefix+ "__cyclotomicSquare"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size)); + const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2*f2size)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3*f2size)); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4*f2size)); + const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5*f2size)); + + const r0 = c.getLocal("r"); + const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size)); + const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2*f2size)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3*f2size)); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4*f2size)); + const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5*f2size)); + + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const tmp = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + + + f.addCode( + // // t0 + t1*y = (z0 + z1*y)^2 = a^2 + // tmp = z0 * z1; + // t0 = (z0 + z1) * (z0 + my_Fp6::non_residue * z1) - tmp - my_Fp6::non_residue * tmp; + // t1 = tmp + tmp; + c.call(f2mPrefix + "_mul", x0, x1, tmp), + c.call(f2mPrefix + "_mul", x1, c.i32_const(pNonResidueF6), t0), + c.call(f2mPrefix + "_add", x0, t0, t0), + c.call(f2mPrefix + "_add", x0, x1, AUX), + c.call(f2mPrefix + "_mul", AUX, t0, t0), + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t0, AUX, t0), + c.call(f2mPrefix + "_add", tmp, tmp, t1), + + // // t2 + t3*y = (z2 + z3*y)^2 = b^2 + // tmp = z2 * z3; + // t2 = (z2 + z3) * (z2 + my_Fp6::non_residue * z3) - tmp - my_Fp6::non_residue * tmp; + // t3 = tmp + tmp; + c.call(f2mPrefix + "_mul", x2, x3, tmp), + c.call(f2mPrefix + "_mul", x3, c.i32_const(pNonResidueF6), t2), + c.call(f2mPrefix + "_add", x2, t2, t2), + c.call(f2mPrefix + "_add", x2, x3, AUX), + c.call(f2mPrefix + "_mul", AUX, t2, t2), + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t2, AUX, t2), + c.call(f2mPrefix + "_add", tmp, tmp, t3), + + // // t4 + t5*y = (z4 + z5*y)^2 = c^2 + // tmp = z4 * z5; + // t4 = (z4 + z5) * (z4 + my_Fp6::non_residue * z5) - tmp - my_Fp6::non_residue * tmp; + // t5 = tmp + tmp; + c.call(f2mPrefix + "_mul", x4, x5, tmp), + c.call(f2mPrefix + "_mul", x5, c.i32_const(pNonResidueF6), t4), + c.call(f2mPrefix + "_add", x4, t4, t4), + c.call(f2mPrefix + "_add", x4, x5, AUX), + c.call(f2mPrefix + "_mul", AUX, t4, t4), + c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t4, AUX, t4), + c.call(f2mPrefix + "_add", tmp, tmp, t5), + + // For A + // z0 = 3 * t0 - 2 * z0 + c.call(f2mPrefix + "_sub", t0, x0, r0), + c.call(f2mPrefix + "_add", r0, r0, r0), + c.call(f2mPrefix + "_add", t0, r0, r0), + // z1 = 3 * t1 + 2 * z1 + c.call(f2mPrefix + "_add", t1, x1, r1), + c.call(f2mPrefix + "_add", r1, r1, r1), + c.call(f2mPrefix + "_add", t1, r1, r1), + + // For B + // z2 = 3 * (xi * t5) + 2 * z2 + c.call(f2mPrefix + "_mul", t5, c.i32_const(pAltBn128Twist), AUX), + c.call(f2mPrefix + "_add", AUX, x2, r2), + c.call(f2mPrefix + "_add", r2, r2, r2), + c.call(f2mPrefix + "_add", AUX, r2, r2), + // z3 = 3 * t4 - 2 * z3 + c.call(f2mPrefix + "_sub", t4, x3, r3), + c.call(f2mPrefix + "_add", r3, r3, r3), + c.call(f2mPrefix + "_add", t4, r3, r3), + + // For C + // z4 = 3 * t2 - 2 * z4 + c.call(f2mPrefix + "_sub", t2, x4, r4), + c.call(f2mPrefix + "_add", r4, r4, r4), + c.call(f2mPrefix + "_add", t2, r4, r4), + // z5 = 3 * t3 + 2 * z5 + c.call(f2mPrefix + "_add", t3, x5, r5), + c.call(f2mPrefix + "_add", r5, r5, r5), + c.call(f2mPrefix + "_add", t3, r5, r5), + + ); + } + + + function buildCyclotomicExp(exponent, fnName) { + const exponentNafBytes = naf(exponent).map( (b) => (b==-1 ? 0xFF: b) ); + const pExponentNafBytes = module.alloc(exponentNafBytes); + + const f = module.addFunction(prefix+ "__cyclotomicExp_"+fnName); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("bit", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const x = c.getLocal("x"); + + const res = c.getLocal("r"); + + const inverse = c.i32_const(module.alloc(ftsize)); + + + f.addCode( + c.call(ftmPrefix + "_conjugate", x, inverse), + c.call(ftmPrefix + "_one", res), + + c.if( + c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length-1), pExponentNafBytes)), + c.if( + c.i32_eq( + c.getLocal("bit"), + c.i32_const(1) + ), + c.call(ftmPrefix + "_mul", res, x, res), + c.call(ftmPrefix + "_mul", res, inverse, res), + ) + ), + + c.setLocal("i", c.i32_const(exponentNafBytes.length-2)), + c.block(c.loop( + c.call(prefix + "__cyclotomicSquare", res, res), + c.if( + c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), + c.if( + c.i32_eq( + c.getLocal("bit"), + c.i32_const(1) + ), + c.call(ftmPrefix + "_mul", res, x, res), + c.call(ftmPrefix + "_mul", res, inverse, res), + ) + ), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + + + function buildFinalExponentiationLastChunk() { + buildCyclotomicSquare(); + buildCyclotomicExp(finalExpZ, "w0"); + + const f = module.addFunction(prefix+ "__finalExponentiationLastChunk"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const elt = c.getLocal("x"); + const result = c.getLocal("r"); + const A = c.i32_const(module.alloc(ftsize)); + const B = c.i32_const(module.alloc(ftsize)); + const C = c.i32_const(module.alloc(ftsize)); + const D = c.i32_const(module.alloc(ftsize)); + const E = c.i32_const(module.alloc(ftsize)); + const F = c.i32_const(module.alloc(ftsize)); + const G = c.i32_const(module.alloc(ftsize)); + const H = c.i32_const(module.alloc(ftsize)); + const I = c.i32_const(module.alloc(ftsize)); + const J = c.i32_const(module.alloc(ftsize)); + const K = c.i32_const(module.alloc(ftsize)); + const L = c.i32_const(module.alloc(ftsize)); + const M = c.i32_const(module.alloc(ftsize)); + const N = c.i32_const(module.alloc(ftsize)); + const O = c.i32_const(module.alloc(ftsize)); + const P = c.i32_const(module.alloc(ftsize)); + const Q = c.i32_const(module.alloc(ftsize)); + const R = c.i32_const(module.alloc(ftsize)); + const S = c.i32_const(module.alloc(ftsize)); + const T = c.i32_const(module.alloc(ftsize)); + const U = c.i32_const(module.alloc(ftsize)); + + f.addCode( + + + // A = exp_by_neg_z(elt) // = elt^(-z) + c.call(prefix + "__cyclotomicExp_w0", elt, A), + c.call(ftmPrefix + "_conjugate", A, A), + // B = A^2 // = elt^(-2*z) + c.call(prefix + "__cyclotomicSquare", A, B), + // C = B^2 // = elt^(-4*z) + c.call(prefix + "__cyclotomicSquare", B, C), + // D = C * B // = elt^(-6*z) + c.call(ftmPrefix + "_mul", C, B, D), + // E = exp_by_neg_z(D) // = elt^(6*z^2) + c.call(prefix + "__cyclotomicExp_w0", D, E), + c.call(ftmPrefix + "_conjugate", E, E), + // F = E^2 // = elt^(12*z^2) + c.call(prefix + "__cyclotomicSquare", E, F), + // G = epx_by_neg_z(F) // = elt^(-12*z^3) + c.call(prefix + "__cyclotomicExp_w0", F, G), + c.call(ftmPrefix + "_conjugate", G, G), + // H = conj(D) // = elt^(6*z) + c.call(ftmPrefix + "_conjugate", D, H), + // I = conj(G) // = elt^(12*z^3) + c.call(ftmPrefix + "_conjugate", G, I), + // J = I * E // = elt^(12*z^3 + 6*z^2) + c.call(ftmPrefix + "_mul", I, E, J), + // K = J * H // = elt^(12*z^3 + 6*z^2 + 6*z) + c.call(ftmPrefix + "_mul", J, H, K), + // L = K * B // = elt^(12*z^3 + 6*z^2 + 4*z) + c.call(ftmPrefix + "_mul", K, B, L), + // M = K * E // = elt^(12*z^3 + 12*z^2 + 6*z) + c.call(ftmPrefix + "_mul", K, E, M), + + // N = M * elt // = elt^(12*z^3 + 12*z^2 + 6*z + 1) + c.call(ftmPrefix + "_mul", M, elt, N), + + // O = L.Frobenius_map(1) // = elt^(q*(12*z^3 + 6*z^2 + 4*z)) + c.call(prefix + "__frobeniusMap1", L, O), + // P = O * N // = elt^(q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1)) + c.call(ftmPrefix + "_mul", O, N, P), + // Q = K.Frobenius_map(2) // = elt^(q^2 * (12*z^3 + 6*z^2 + 6*z)) + c.call(prefix + "__frobeniusMap2", K, Q), + // R = Q * P // = elt^(q^2 * (12*z^3 + 6*z^2 + 6*z) + q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1)) + c.call(ftmPrefix + "_mul", Q, P, R), + // S = conj(elt) // = elt^(-1) + c.call(ftmPrefix + "_conjugate", elt, S), + // T = S * L // = elt^(12*z^3 + 6*z^2 + 4*z - 1) + c.call(ftmPrefix + "_mul", S, L, T), + // U = T.Frobenius_map(3) // = elt^(q^3(12*z^3 + 6*z^2 + 4*z - 1)) + c.call(prefix + "__frobeniusMap3", T, U), + // V = U * R // = elt^(q^3(12*z^3 + 6*z^2 + 4*z - 1) + q^2 * (12*z^3 + 6*z^2 + 6*z) + q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1)) + c.call(ftmPrefix + "_mul", U, R, result), + // result = V + ); + } + + + function buildFinalExponentiation() { + buildFinalExponentiationFirstChunk(); + buildFinalExponentiationLastChunk(); + const f = module.addFunction(prefix+ "_finalExponentiation"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const elt = c.getLocal("x"); + const result = c.getLocal("r"); + const eltToFirstChunk = c.i32_const(module.alloc(ftsize)); + + f.addCode( + c.call(prefix + "__finalExponentiationFirstChunk", elt, eltToFirstChunk ), + c.call(prefix + "__finalExponentiationLastChunk", eltToFirstChunk, result ) + ); + } + + + function buildFinalExponentiationOld() { + const f = module.addFunction(prefix+ "_finalExponentiationOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const exponent = 552484233613224096312617126783173147097382103762957654188882734314196910839907541213974502761540629817009608548654680343627701153829446747810907373256841551006201639677726139946029199968412598804882391702273019083653272047566316584365559776493027495458238373902875937659943504873220554161550525926302303331747463515644711876653177129578303191095900909191624817826566688241804408081892785725967931714097716709526092261278071952560171111444072049229123565057483750161460024353346284167282452756217662335528813519139808291170539072125381230815729071544861602750936964829313608137325426383735122175229541155376346436093930287402089517426973178917569713384748081827255472576937471496195752727188261435633271238710131736096299798168852925540549342330775279877006784354801422249722573783561685179618816480037695005515426162362431072245638324744480n; + + const pExponent = module.alloc(utils$8.bigInt2BytesLE( exponent, 352 )); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(352), c.getLocal("r")), + ); + } + + + + + const pPreP = module.alloc(prePSize); + const pPreQ = module.alloc(preQSize); + + function buildPairingEquation(nPairings) { + + const f = module.addFunction(prefix+ "_pairingEq"+nPairings); + for (let i=0; i acc + ( b!=0 ? 1 : 0) ,0); + const ateNCoefs = ateNAddCoefs + ateNDblCoefs + 1; + const prePSize = 3*2*n8q; + const preQSize = 3*n8q*2 + ateNCoefs*ateCoefSize; + const finalExpIsNegative = true; + + const finalExpZ = 15132376222941642752n; + + + module.modules[prefix] = { + n64q: n64q, + n64r: n64r, + n8q: n8q, + n8r: n8r, + pG1gen: pG1gen, + pG1zero: pG1zero, + pG1b: pG1b, + pG2gen: pG2gen, + pG2zero: pG2zero, + pG2b: pG2b, + pq: module.modules["f1m"].pq, + pr: pr, + pOneT: pOneT, + r: r, + q: q, + prePSize: prePSize, + preQSize: preQSize + }; + + + function naf(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd$7(E)) { + const z = 2 - Number(E % 4n); + res.push( z ); + E = E - BigInt(z); + } else { + res.push( 0 ); + } + E = E >> 1n; + } + return res; + } + + function bits(n) { + let E = n; + const res = []; + while (E > 0n) { + if (isOdd$7(E)) { + res.push( 1 ); + } else { + res.push( 0 ); + } + E = E >> 1n; + } + return res; + } + + function buildPrepareG1() { + const f = module.addFunction(prefix+ "_prepareG1"); + f.addParam("pP", "i32"); + f.addParam("ppreP", "i32"); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")), // TODO Remove if already in affine + ); + } + + + + function buildPrepDoubleStep() { + const f = module.addFunction(prefix+ "_prepDblStep"); + f.addParam("R", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const Rx = c.getLocal("R"); + const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2*n8q)); + const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4*n8q)); + + const t0 = c.getLocal("r"); + const t3 = c.i32_add(c.getLocal("r"), c.i32_const(2*n8q)); + const t6 = c.i32_add(c.getLocal("r"), c.i32_const(4*n8q)); + + + const zsquared = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + + f.addCode( + + // tmp0 = r.x.square(); + c.call(f2mPrefix + "_square", Rx, t0), + + // tmp1 = r.y.square(); + c.call(f2mPrefix + "_square", Ry, t1), + + // tmp2 = tmp1.square(); + c.call(f2mPrefix + "_square", t1, t2), + + // tmp3 = (tmp1 + r.x).square() - tmp0 - tmp2; + c.call(f2mPrefix + "_add", t1, Rx, t3), + c.call(f2mPrefix + "_square", t3, t3), + c.call(f2mPrefix + "_sub", t3, t0, t3), + c.call(f2mPrefix + "_sub", t3, t2, t3), + + // tmp3 = tmp3 + tmp3; + c.call(f2mPrefix + "_add", t3, t3, t3), + + // tmp4 = tmp0 + tmp0 + tmp0; + c.call(f2mPrefix + "_add", t0, t0, t4), + c.call(f2mPrefix + "_add", t4, t0, t4), + + // tmp6 = r.x + tmp4; + c.call(f2mPrefix + "_add", Rx, t4, t6), + + // tmp5 = tmp4.square(); + c.call(f2mPrefix + "_square", t4, t5), + + // zsquared = r.z.square(); + c.call(f2mPrefix + "_square", Rz, zsquared), + + // r.x = tmp5 - tmp3 - tmp3; + c.call(f2mPrefix + "_sub", t5, t3, Rx), + c.call(f2mPrefix + "_sub", Rx, t3, Rx), + + // r.z = (r.z + r.y).square() - tmp1 - zsquared; + c.call(f2mPrefix + "_add", Rz, Ry, Rz), + c.call(f2mPrefix + "_square", Rz, Rz), + c.call(f2mPrefix + "_sub", Rz, t1, Rz), + c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), + + // r.y = (tmp3 - r.x) * tmp4; + c.call(f2mPrefix + "_sub", t3, Rx, Ry), + c.call(f2mPrefix + "_mul", Ry, t4, Ry), + + // tmp2 = tmp2 + tmp2; + c.call(f2mPrefix + "_add", t2, t2, t2), + + // tmp2 = tmp2 + tmp2; + c.call(f2mPrefix + "_add", t2, t2, t2), + + // tmp2 = tmp2 + tmp2; + c.call(f2mPrefix + "_add", t2, t2, t2), + + // r.y -= tmp2; + c.call(f2mPrefix + "_sub", Ry, t2, Ry), + + // tmp3 = tmp4 * zsquared; + c.call(f2mPrefix + "_mul", t4, zsquared, t3), + + // tmp3 = tmp3 + tmp3; + c.call(f2mPrefix + "_add", t3, t3, t3), + + // tmp3 = -tmp3; + c.call(f2mPrefix + "_neg", t3, t3), + + // tmp6 = tmp6.square() - tmp0 - tmp5; + c.call(f2mPrefix + "_square", t6, t6), + c.call(f2mPrefix + "_sub", t6, t0, t6), + c.call(f2mPrefix + "_sub", t6, t5, t6), + + // tmp1 = tmp1 + tmp1; + c.call(f2mPrefix + "_add", t1, t1, t1), + + // tmp1 = tmp1 + tmp1; + c.call(f2mPrefix + "_add", t1, t1, t1), + + // tmp6 = tmp6 - tmp1; + c.call(f2mPrefix + "_sub", t6, t1, t6), + + // tmp0 = r.z * zsquared; + c.call(f2mPrefix + "_mul", Rz, zsquared, t0), + + // tmp0 = tmp0 + tmp0; + c.call(f2mPrefix + "_add", t0, t0, t0), + + ); + } + + function buildPrepAddStep() { + const f = module.addFunction(prefix+ "_prepAddStep"); + f.addParam("R", "i32"); + f.addParam("Q", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const Rx = c.getLocal("R"); + const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2*n8q)); + const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4*n8q)); + + const Qx = c.getLocal("Q"); + const Qy = c.i32_add(c.getLocal("Q"), c.i32_const(2*n8q)); + + const t10 = c.getLocal("r"); + const t1 = c.i32_add(c.getLocal("r"), c.i32_const(2*n8q)); + const t9 = c.i32_add(c.getLocal("r"), c.i32_const(4*n8q)); + + const zsquared = c.i32_const(module.alloc(f2size)); + const ysquared = c.i32_const(module.alloc(f2size)); + const ztsquared = c.i32_const(module.alloc(f2size)); + const t0 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const t6 = c.i32_const(module.alloc(f2size)); + const t7 = c.i32_const(module.alloc(f2size)); + const t8 = c.i32_const(module.alloc(f2size)); + + f.addCode( + + // zsquared = r.z.square(); + c.call(f2mPrefix + "_square", Rz, zsquared), + + // ysquared = q.y.square(); + c.call(f2mPrefix + "_square", Qy, ysquared), + + // t0 = zsquared * q.x; + c.call(f2mPrefix + "_mul", zsquared, Qx, t0), + + // t1 = ((q.y + r.z).square() - ysquared - zsquared) * zsquared; + c.call(f2mPrefix + "_add", Qy, Rz, t1), + c.call(f2mPrefix + "_square", t1, t1), + c.call(f2mPrefix + "_sub", t1, ysquared, t1), + c.call(f2mPrefix + "_sub", t1, zsquared, t1), + c.call(f2mPrefix + "_mul", t1, zsquared, t1), + + // t2 = t0 - r.x; + c.call(f2mPrefix + "_sub", t0, Rx, t2), + + // t3 = t2.square(); + c.call(f2mPrefix + "_square", t2, t3), + + // t4 = t3 + t3; + c.call(f2mPrefix + "_add", t3, t3, t4), + + // t4 = t4 + t4; + c.call(f2mPrefix + "_add", t4, t4, t4), + + // t5 = t4 * t2; + c.call(f2mPrefix + "_mul", t4, t2, t5), + + // t6 = t1 - r.y - r.y; + c.call(f2mPrefix + "_sub", t1, Ry, t6), + c.call(f2mPrefix + "_sub", t6, Ry, t6), + + // t9 = t6 * q.x; + c.call(f2mPrefix + "_mul", t6, Qx, t9), + + // t7 = t4 * r.x; + c.call(f2mPrefix + "_mul", t4, Rx, t7), + + // r.x = t6.square() - t5 - t7 - t7; + c.call(f2mPrefix + "_square", t6, Rx), + c.call(f2mPrefix + "_sub", Rx, t5, Rx), + c.call(f2mPrefix + "_sub", Rx, t7, Rx), + c.call(f2mPrefix + "_sub", Rx, t7, Rx), + + // r.z = (r.z + t2).square() - zsquared - t3; + c.call(f2mPrefix + "_add", Rz, t2, Rz), + c.call(f2mPrefix + "_square", Rz, Rz), + c.call(f2mPrefix + "_sub", Rz, zsquared, Rz), + c.call(f2mPrefix + "_sub", Rz, t3, Rz), + + // t10 = q.y + r.z; + c.call(f2mPrefix + "_add", Qy, Rz, t10), + + // t8 = (t7 - r.x) * t6; + c.call(f2mPrefix + "_sub", t7, Rx, t8), + c.call(f2mPrefix + "_mul", t8, t6, t8), + + // t0 = r.y * t5; + c.call(f2mPrefix + "_mul", Ry, t5, t0), + + // t0 = t0 + t0; + c.call(f2mPrefix + "_add", t0, t0, t0), + + // r.y = t8 - t0; + c.call(f2mPrefix + "_sub", t8, t0, Ry), + + // t10 = t10.square() - ysquared; + c.call(f2mPrefix + "_square", t10, t10), + c.call(f2mPrefix + "_sub", t10, ysquared, t10), + + // ztsquared = r.z.square(); + c.call(f2mPrefix + "_square", Rz, ztsquared), + + // t10 = t10 - ztsquared; + c.call(f2mPrefix + "_sub", t10, ztsquared, t10), + + // t9 = t9 + t9 - t10; + c.call(f2mPrefix + "_add", t9, t9, t9), + c.call(f2mPrefix + "_sub", t9, t10, t9), + + // t10 = r.z + r.z; + c.call(f2mPrefix + "_add", Rz, Rz, t10), + + // t6 = -t6; + c.call(f2mPrefix + "_neg", t6, t6), + + // t1 = t6 + t6; + c.call(f2mPrefix + "_add", t6, t6, t1), + ); + } + + + function buildPrepareG2() { + const f = module.addFunction(prefix+ "_prepareG2"); + f.addParam("pQ", "i32"); + f.addParam("ppreQ", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + + const Q = c.getLocal("pQ"); + + const pR = module.alloc(f2size*3); + const R = c.i32_const(pR); + + const base = c.getLocal("ppreQ"); + + f.addCode( + c.call(g2mPrefix + "_normalize", Q, base), + c.if( + c.call(g2mPrefix + "_isZero", base), + c.ret([]) + ), + c.call(g2mPrefix + "_copy", base, R), + c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size*3))), + ); + + f.addCode( + c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)), + c.block(c.loop( + + c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.if( + c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), + [ + ...c.call(prefix + "_prepAddStep", R, base, c.getLocal("pCoef")), + ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + ] + ), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + } + + + function buildF6Mul1() { + const f = module.addFunction(f6mPrefix+ "_mul1"); + f.addParam("pA", "i32"); // F6 + f.addParam("pC1", "i32"); // F2 + f.addParam("pR", "i32"); // F6 + + const c = f.getCodeBuilder(); + + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*2)); + const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*4)); + + const c1 = c.getLocal("pC1"); + + const t1 = c.getLocal("pR"); + const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*2)); + const b_b = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*4)); + + const Ac0_Ac1 = c.i32_const(module.alloc(f1size*2)); + const Ac1_Ac2 = c.i32_const(module.alloc(f1size*2)); + + f.addCode( + + c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), + c.call(f2mPrefix + "_add", A_c1, A_c2, Ac1_Ac2), + + // let b_b = self.c1 * c1; + c.call(f2mPrefix + "_mul", A_c1, c1, b_b), + + // let t1 = (self.c1 + self.c2) * c1 - b_b; + c.call(f2mPrefix + "_mul", Ac1_Ac2, c1, t1), + c.call(f2mPrefix + "_sub", t1, b_b, t1), + + // let t1 = t1.mul_by_nonresidue(); + c.call(f2mPrefix + "_mulNR", t1, t1), + + // let t2 = (self.c0 + self.c1) * c1 - b_b; + c.call(f2mPrefix + "_mul", Ac0_Ac1, c1, t2), + c.call(f2mPrefix + "_sub", t2, b_b, t2), + ); + } + buildF6Mul1(); + + function buildF6Mul01() { + const f = module.addFunction(f6mPrefix+ "_mul01"); + f.addParam("pA", "i32"); // F6 + f.addParam("pC0", "i32"); // F2 + f.addParam("pC1", "i32"); // F2 + f.addParam("pR", "i32"); // F6 + + const c = f.getCodeBuilder(); + + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*2)); + const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*4)); + + const c0 = c.getLocal("pC0"); + const c1 = c.getLocal("pC1"); + + const t1 = c.getLocal("pR"); + const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*2)); + const t3 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*4)); + + const a_a = c.i32_const(module.alloc(f1size*2)); + const b_b = c.i32_const(module.alloc(f1size*2)); + const Ac0_Ac1 = c.i32_const(module.alloc(f1size*2)); + const Ac0_Ac2 = c.i32_const(module.alloc(f1size*2)); + + f.addCode( + // let a_a = self.c0 * c0; + c.call(f2mPrefix + "_mul", A_c0, c0, a_a), + + // let b_b = self.c1 * c1; + c.call(f2mPrefix + "_mul", A_c1, c1, b_b), + + + c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1), + c.call(f2mPrefix + "_add", A_c0, A_c2, Ac0_Ac2), + + // let t1 = (self.c1 + self.c2) * c1 - b_b; + c.call(f2mPrefix + "_add", A_c1, A_c2, t1), + c.call(f2mPrefix + "_mul", t1, c1, t1), + c.call(f2mPrefix + "_sub", t1, b_b, t1), + + // let t1 = t1.mul_by_nonresidue() + a_a; + c.call(f2mPrefix + "_mulNR", t1, t1), + c.call(f2mPrefix + "_add", t1, a_a, t1), + + // let t2 = (c0 + c1) * (self.c0 + self.c1) - a_a - b_b; + c.call(f2mPrefix + "_add", c0, c1, t2), + c.call(f2mPrefix + "_mul", t2, Ac0_Ac1, t2), + c.call(f2mPrefix + "_sub", t2, a_a, t2), + c.call(f2mPrefix + "_sub", t2, b_b, t2), + + // let t3 = (self.c0 + self.c2) * c0 - a_a + b_b; + c.call(f2mPrefix + "_mul", Ac0_Ac2, c0, t3), + c.call(f2mPrefix + "_sub", t3, a_a, t3), + c.call(f2mPrefix + "_add", t3, b_b, t3), + + + ); + } + buildF6Mul01(); + + + function buildF12Mul014() { + + const f = module.addFunction(ftmPrefix+ "_mul014"); + f.addParam("pA", "i32"); // F12 + f.addParam("pC0", "i32"); // F2 + f.addParam("pC1", "i32"); // F2 + f.addParam("pC4", "i32"); // F2 + f.addParam("pR", "i32"); // F12 + + const c = f.getCodeBuilder(); + + + const A_c0 = c.getLocal("pA"); + const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*6)); + + const c0 = c.getLocal("pC0"); + const c1 = c.getLocal("pC1"); + const c4 = c.getLocal("pC4"); + + const aa = c.i32_const(module.alloc(f1size*6)); + const bb = c.i32_const(module.alloc(f1size*6)); + const o = c.i32_const(module.alloc(f1size*2)); + + const R_c0 = c.getLocal("pR"); + const R_c1 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*6)); + + f.addCode( + // let aa = self.c0.mul_by_01(c0, c1); + c.call(f6mPrefix + "_mul01", A_c0, c0, c1, aa), + + // let bb = self.c1.mul_by_1(c4); + c.call(f6mPrefix + "_mul1", A_c1, c4, bb), + + // let o = c1 + c4; + c.call(f2mPrefix + "_add", c1, c4, o), + + // let c1 = self.c1 + self.c0; + c.call(f6mPrefix + "_add", A_c1, A_c0, R_c1), + + // let c1 = c1.mul_by_01(c0, &o); + c.call(f6mPrefix + "_mul01", R_c1, c0, o, R_c1), + + // let c1 = c1 - aa - bb; + c.call(f6mPrefix + "_sub", R_c1, aa, R_c1), + c.call(f6mPrefix + "_sub", R_c1, bb, R_c1), + + // let c0 = bb; + c.call(f6mPrefix + "_copy", bb, R_c0), + + // let c0 = c0.mul_by_nonresidue(); + c.call(f6mPrefix + "_mulNR", R_c0, R_c0), + + // let c0 = c0 + aa; + c.call(f6mPrefix + "_add", R_c0, aa, R_c0), + ); + } + buildF12Mul014(); + + + function buildELL() { + const f = module.addFunction(prefix+ "_ell"); + f.addParam("pP", "i32"); + f.addParam("pCoefs", "i32"); + f.addParam("pF", "i32"); + + const c = f.getCodeBuilder(); + + const Px = c.getLocal("pP"); + const Py = c.i32_add(c.getLocal("pP"), c.i32_const(n8q)); + + const F = c.getLocal("pF"); + + const coef0_0 = c.getLocal("pCoefs"); + const coef0_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size)); + const coef1_0 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*2)); + const coef1_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*3)); + const coef2 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*4)); + + const pc0 = module.alloc(f1size*2); + const c0 = c.i32_const(pc0); + const c0_c0 = c.i32_const(pc0); + const c0_c1 = c.i32_const(pc0+f1size); + + const pc1 = module.alloc(f1size*2); + const c1 = c.i32_const(pc1); + const c1_c0 = c.i32_const(pc1); + const c1_c1 = c.i32_const(pc1+f1size); + f.addCode( + // let mut c0 = coeffs.0; + // let mut c1 = coeffs.1; + // + // c0.c0 *= p.y; + // c0.c1 *= p.y; + // + // c1.c0 *= p.x; + // c1.c1 *= p.x; + // + // f.mul_by_014(&coeffs.2, &c1, &c0) + + c.call(f1mPrefix + "_mul", coef0_0, Py, c0_c0), + c.call(f1mPrefix + "_mul", coef0_1, Py, c0_c1), + c.call(f1mPrefix + "_mul", coef1_0, Px, c1_c0), + c.call(f1mPrefix + "_mul", coef1_1, Px, c1_c1), + + c.call(ftmPrefix + "_mul014", F, coef2, c1, c0, F), + + ); + + } + buildELL(); + + function buildMillerLoop() { + const f = module.addFunction(prefix+ "_millerLoop"); + f.addParam("ppreP", "i32"); + f.addParam("ppreQ", "i32"); + f.addParam("r", "i32"); + f.addLocal("pCoef", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const preP = c.getLocal("ppreP"); + + const coefs = c.getLocal("pCoef"); + + const F = c.getLocal("r"); + + + f.addCode( + c.call(ftmPrefix + "_one", F), + + c.if( + c.call(g1mPrefix + "_isZero", preP), + c.ret([]) + ), + c.if( + c.call(g1mPrefix + "_isZero", c.getLocal("ppreQ")), + c.ret([]) + ), + c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))), + + c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)), + c.block(c.loop( + + + c.call(prefix + "_ell", preP, coefs, F), + c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + + c.if( + c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes), + [ + ...c.call(prefix + "_ell", preP, coefs, F), + ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))), + ] + ), + c.call(ftmPrefix + "_square", F, F), + + c.br_if(1, c.i32_eq ( c.getLocal("i"), c.i32_const(1) )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )), + c.call(prefix + "_ell", preP, coefs, F), + + ); + + + { + f.addCode( + c.call(ftmPrefix + "_conjugate", F, F), + ); + } + } + + + function buildFrobeniusMap(n) { + const F12 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + ], + [ + [1n, 0n], + [3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n, 151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n], + [2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n, 1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n, 877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n], + [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n], + [151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n, 3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n, 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n], + [877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n, 3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n], + ] + ]; + + const F6 = [ + [ + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + [1n, 0n], + ], + [ + [1n, 0n], + [0n, 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [0n, 1n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [0n, 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n], + ], + [ + [1n, 0n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n, 0n], + [4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n, 0n], + [4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n, 0n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n, 0n], + [793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n, 0n], + ] + ]; + + const f = module.addFunction(ftmPrefix + "_frobeniusMap"+n); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + for (let i=0; i<6; i++) { + const X = (i==0) ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i*f2size)); + const Xc0 = X; + const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i*f2size + f1size)); + const R = (i==0) ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i*f2size)); + const Rc0 = R; + const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i*f2size + f1size)); + const coef = mul2(F12[Math.floor(i/3)][n%12] , F6[i%3][n%6]); + const pCoef = module.alloc([ + ...utils$7.bigInt2BytesLE(toMontgomery(coef[0]), n8q), + ...utils$7.bigInt2BytesLE(toMontgomery(coef[1]), n8q), + ]); + if (n%2 == 1) { + f.addCode( + c.call(f1mPrefix + "_copy", Xc0, Rc0), + c.call(f1mPrefix + "_neg", Xc1, Rc1), + c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R), + ); + } else { + f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R)); + } + } + + function mul2(a, b) { + const ac0 = a[0]; + const ac1 = a[1]; + const bc0 = b[0]; + const bc1 = b[1]; + const res = [ + (ac0 * bc0 - (ac1 * bc1)) % q, + (ac0 * bc1 + (ac1 * bc0)) % q, + ]; + if (isNegative$6(res[0])) res[0] = res[0] + q; + return res; + } + + } + + + function buildCyclotomicSquare() { + const f = module.addFunction(prefix+ "__cyclotomicSquare"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const x0 = c.getLocal("x"); + const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size)); + const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2*f2size)); + const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3*f2size)); + const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4*f2size)); + const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5*f2size)); + + const r0 = c.getLocal("r"); + const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size)); + const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2*f2size)); + const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3*f2size)); + const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4*f2size)); + const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5*f2size)); + + const t0 = c.i32_const(module.alloc(f2size)); + const t1 = c.i32_const(module.alloc(f2size)); + const t2 = c.i32_const(module.alloc(f2size)); + const t3 = c.i32_const(module.alloc(f2size)); + const t4 = c.i32_const(module.alloc(f2size)); + const t5 = c.i32_const(module.alloc(f2size)); + const tmp = c.i32_const(module.alloc(f2size)); + const AUX = c.i32_const(module.alloc(f2size)); + + + f.addCode( + // // t0 + t1*y = (z0 + z1*y)^2 = a^2 + // tmp = z0 * z1; + // t0 = (z0 + z1) * (z0 + my_Fp6::non_residue * z1) - tmp - my_Fp6::non_residue * tmp; + // t1 = tmp + tmp; + c.call(f2mPrefix + "_mul", x0, x1, tmp), + c.call(f2mPrefix + "_mulNR", x1, t0), + c.call(f2mPrefix + "_add", x0, t0, t0), + c.call(f2mPrefix + "_add", x0, x1, AUX), + c.call(f2mPrefix + "_mul", AUX, t0, t0), + c.call(f2mPrefix + "_mulNR", tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t0, AUX, t0), + c.call(f2mPrefix + "_add", tmp, tmp, t1), + + // // t2 + t3*y = (z2 + z3*y)^2 = b^2 + // tmp = z2 * z3; + // t2 = (z2 + z3) * (z2 + my_Fp6::non_residue * z3) - tmp - my_Fp6::non_residue * tmp; + // t3 = tmp + tmp; + c.call(f2mPrefix + "_mul", x2, x3, tmp), + c.call(f2mPrefix + "_mulNR", x3, t2), + c.call(f2mPrefix + "_add", x2, t2, t2), + c.call(f2mPrefix + "_add", x2, x3, AUX), + c.call(f2mPrefix + "_mul", AUX, t2, t2), + c.call(f2mPrefix + "_mulNR", tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t2, AUX, t2), + c.call(f2mPrefix + "_add", tmp, tmp, t3), + + // // t4 + t5*y = (z4 + z5*y)^2 = c^2 + // tmp = z4 * z5; + // t4 = (z4 + z5) * (z4 + my_Fp6::non_residue * z5) - tmp - my_Fp6::non_residue * tmp; + // t5 = tmp + tmp; + c.call(f2mPrefix + "_mul", x4, x5, tmp), + c.call(f2mPrefix + "_mulNR", x5, t4), + c.call(f2mPrefix + "_add", x4, t4, t4), + c.call(f2mPrefix + "_add", x4, x5, AUX), + c.call(f2mPrefix + "_mul", AUX, t4, t4), + c.call(f2mPrefix + "_mulNR", tmp, AUX), + c.call(f2mPrefix + "_add", tmp, AUX, AUX), + c.call(f2mPrefix + "_sub", t4, AUX, t4), + c.call(f2mPrefix + "_add", tmp, tmp, t5), + + // For A + // z0 = 3 * t0 - 2 * z0 + c.call(f2mPrefix + "_sub", t0, x0, r0), + c.call(f2mPrefix + "_add", r0, r0, r0), + c.call(f2mPrefix + "_add", t0, r0, r0), + // z1 = 3 * t1 + 2 * z1 + c.call(f2mPrefix + "_add", t1, x1, r1), + c.call(f2mPrefix + "_add", r1, r1, r1), + c.call(f2mPrefix + "_add", t1, r1, r1), + + // For B + // z2 = 3 * (xi * t5) + 2 * z2 + c.call(f2mPrefix + "_mul", t5, c.i32_const(pBls12381Twist), AUX), + c.call(f2mPrefix + "_add", AUX, x2, r2), + c.call(f2mPrefix + "_add", r2, r2, r2), + c.call(f2mPrefix + "_add", AUX, r2, r2), + // z3 = 3 * t4 - 2 * z3 + c.call(f2mPrefix + "_sub", t4, x3, r3), + c.call(f2mPrefix + "_add", r3, r3, r3), + c.call(f2mPrefix + "_add", t4, r3, r3), + + // For C + // z4 = 3 * t2 - 2 * z4 + c.call(f2mPrefix + "_sub", t2, x4, r4), + c.call(f2mPrefix + "_add", r4, r4, r4), + c.call(f2mPrefix + "_add", t2, r4, r4), + // z5 = 3 * t3 + 2 * z5 + c.call(f2mPrefix + "_add", t3, x5, r5), + c.call(f2mPrefix + "_add", r5, r5, r5), + c.call(f2mPrefix + "_add", t3, r5, r5), + + ); + } + + + function buildCyclotomicExp(exponent, isExpNegative, fnName) { + const exponentNafBytes = naf(exponent).map( (b) => (b==-1 ? 0xFF: b) ); + const pExponentNafBytes = module.alloc(exponentNafBytes); + // const pExponent = module.alloc(utils.bigInt2BytesLE(exponent, n8)); + + const f = module.addFunction(prefix+ "__cyclotomicExp_"+fnName); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + f.addLocal("bit", "i32"); + f.addLocal("i", "i32"); + + const c = f.getCodeBuilder(); + + const x = c.getLocal("x"); + + const res = c.getLocal("r"); + + const inverse = c.i32_const(module.alloc(ftsize)); + + + f.addCode( + c.call(ftmPrefix + "_conjugate", x, inverse), + c.call(ftmPrefix + "_one", res), + + c.if( + c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length-1), pExponentNafBytes)), + c.if( + c.i32_eq( + c.getLocal("bit"), + c.i32_const(1) + ), + c.call(ftmPrefix + "_mul", res, x, res), + c.call(ftmPrefix + "_mul", res, inverse, res), + ) + ), + + c.setLocal("i", c.i32_const(exponentNafBytes.length-2)), + c.block(c.loop( + c.call(prefix + "__cyclotomicSquare", res, res), + c.if( + c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)), + c.if( + c.i32_eq( + c.getLocal("bit"), + c.i32_const(1) + ), + c.call(ftmPrefix + "_mul", res, x, res), + c.call(ftmPrefix + "_mul", res, inverse, res), + ) + ), + c.br_if(1, c.i32_eqz ( c.getLocal("i") )), + c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), + c.br(0) + )) + ); + + if (isExpNegative) { + f.addCode( + c.call(ftmPrefix + "_conjugate", res, res), + ); + } + + } + + function buildFinalExponentiation() { + buildCyclotomicSquare(); + buildCyclotomicExp(finalExpZ, finalExpIsNegative, "w0"); + + const f = module.addFunction(prefix+ "_finalExponentiation"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const c = f.getCodeBuilder(); + + const elt = c.getLocal("x"); + const res = c.getLocal("r"); + const t0 = c.i32_const(module.alloc(ftsize)); + const t1 = c.i32_const(module.alloc(ftsize)); + const t2 = c.i32_const(module.alloc(ftsize)); + const t3 = c.i32_const(module.alloc(ftsize)); + const t4 = c.i32_const(module.alloc(ftsize)); + const t5 = c.i32_const(module.alloc(ftsize)); + const t6 = c.i32_const(module.alloc(ftsize)); + + f.addCode( + + // let mut t0 = f.frobenius_map(6) + c.call(ftmPrefix + "_frobeniusMap6", elt, t0), + + // let t1 = f.invert() + c.call(ftmPrefix + "_inverse", elt, t1), + + // let mut t2 = t0 * t1; + c.call(ftmPrefix + "_mul", t0, t1, t2), + + // t1 = t2.clone(); + c.call(ftmPrefix + "_copy", t2, t1), + + // t2 = t2.frobenius_map().frobenius_map(); + c.call(ftmPrefix + "_frobeniusMap2", t2, t2), + + // t2 *= t1; + c.call(ftmPrefix + "_mul", t2, t1, t2), + + + // t1 = cyclotomic_square(t2).conjugate(); + c.call(prefix + "__cyclotomicSquare", t2, t1), + c.call(ftmPrefix + "_conjugate", t1, t1), + + // let mut t3 = cycolotomic_exp(t2); + c.call(prefix + "__cyclotomicExp_w0", t2, t3), + + // let mut t4 = cyclotomic_square(t3); + c.call(prefix + "__cyclotomicSquare", t3, t4), + + // let mut t5 = t1 * t3; + c.call(ftmPrefix + "_mul", t1, t3, t5), + + // t1 = cycolotomic_exp(t5); + c.call(prefix + "__cyclotomicExp_w0", t5, t1), + + // t0 = cycolotomic_exp(t1); + c.call(prefix + "__cyclotomicExp_w0", t1, t0), + + // let mut t6 = cycolotomic_exp(t0); + c.call(prefix + "__cyclotomicExp_w0", t0, t6), + + // t6 *= t4; + c.call(ftmPrefix + "_mul", t6, t4, t6), + + // t4 = cycolotomic_exp(t6); + c.call(prefix + "__cyclotomicExp_w0", t6, t4), + + // t5 = t5.conjugate(); + c.call(ftmPrefix + "_conjugate", t5, t5), + + // t4 *= t5 * t2; + c.call(ftmPrefix + "_mul", t4, t5, t4), + c.call(ftmPrefix + "_mul", t4, t2, t4), + + // t5 = t2.conjugate(); + c.call(ftmPrefix + "_conjugate", t2, t5), + + // t1 *= t2; + c.call(ftmPrefix + "_mul", t1, t2, t1), + + // t1 = t1.frobenius_map().frobenius_map().frobenius_map(); + c.call(ftmPrefix + "_frobeniusMap3", t1, t1), + + // t6 *= t5; + c.call(ftmPrefix + "_mul", t6, t5, t6), + + // t6 = t6.frobenius_map(); + c.call(ftmPrefix + "_frobeniusMap1", t6, t6), + + // t3 *= t0; + c.call(ftmPrefix + "_mul", t3, t0, t3), + + // t3 = t3.frobenius_map().frobenius_map(); + c.call(ftmPrefix + "_frobeniusMap2", t3, t3), + + // t3 *= t1; + c.call(ftmPrefix + "_mul", t3, t1, t3), + + // t3 *= t6; + c.call(ftmPrefix + "_mul", t3, t6, t3), + + // f = t3 * t4; + c.call(ftmPrefix + "_mul", t3, t4, res), + + ); + } + + + function buildFinalExponentiationOld() { + const f = module.addFunction(prefix+ "_finalExponentiationOld"); + f.addParam("x", "i32"); + f.addParam("r", "i32"); + + const exponent = 322277361516934140462891564586510139908379969514828494218366688025288661041104682794998680497580008899973249814104447692778988208376779573819485263026159588510513834876303014016798809919343532899164848730280942609956670917565618115867287399623286813270357901731510188149934363360381614501334086825442271920079363289954510565375378443704372994881406797882676971082200626541916413184642520269678897559532260949334760604962086348898118982248842634379637598665468817769075878555493752214492790122785850202957575200176084204422751485957336465472324810982833638490904279282696134323072515220044451592646885410572234451732790590013479358343841220074174848221722017083597872017638514103174122784843925578370430843522959600095676285723737049438346544753168912974976791528535276317256904336520179281145394686565050419250614107803233314658825463117900250701199181529205942363159325765991819433914303908860460720581408201373164047773794825411011922305820065611121544561808414055302212057471395719432072209245600258134364584636810093520285711072578721435517884103526483832733289802426157301542744476740008494780363354305116978805620671467071400711358839553375340724899735460480144599782014906586543813292157922220645089192130209334926661588737007768565838519456601560804957985667880395221049249803753582637708560n; + + const pExponent = module.alloc(utils$7.bigInt2BytesLE( exponent, 544 )); + + const c = f.getCodeBuilder(); + + f.addCode( + c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(544), c.getLocal("r")), + ); + } + + + const pPreP = module.alloc(prePSize); + const pPreQ = module.alloc(preQSize); + + function buildPairingEquation(nPairings) { + + const f = module.addFunction(prefix+ "_pairingEq"+nPairings); + for (let i=0; i. + */ + + // module.exports.bn128_wasm = require("./build/bn128_wasm.js"); + // module.exports.bls12381_wasm = require("./build/bls12381_wasm.js"); + // module.exports.mnt6753_wasm = require("./build/mnt6753_wasm.js"); + + var buildBn128$3 = build_bn128$1; + var buildBls12381$3 = build_bls12381$1; + + /* global BigInt */ + + function stringifyBigInts$5(o) { + if (typeof o == "bigint" || o.eq !== undefined) { + return o.toString(10); + } else if (o instanceof Uint8Array) { + return fromRprLE$2(o, 0); + } else if (Array.isArray(o)) { + return o.map(stringifyBigInts$5); + } else if (typeof o == "object") { + const res = {}; + const keys = Object.keys(o); + keys.forEach((k) => { + res[k] = stringifyBigInts$5(o[k]); + }); + return res; + } else { + return o; + } + } + + function unstringifyBigInts$c(o) { + if (typeof o == "string" && /^[0-9]+$/.test(o)) { + return BigInt(o); + } else if (typeof o == "string" && /^0x[0-9a-fA-F]+$/.test(o)) { + return BigInt(o); + } else if (Array.isArray(o)) { + return o.map(unstringifyBigInts$c); + } else if (typeof o == "object") { + if (o === null) return null; + const res = {}; + const keys = Object.keys(o); + keys.forEach((k) => { + res[k] = unstringifyBigInts$c(o[k]); + }); + return res; + } else { + return o; + } + } + + function beBuff2int(buff) { + let res = BigInt(0); + let i = buff.length; + let offset = 0; + const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); + while (i > 0) { + if (i >= 4) { + i -= 4; + res += BigInt(buffV.getUint32(i)) << BigInt(offset * 8); + offset += 4; + } else if (i >= 2) { + i -= 2; + res += BigInt(buffV.getUint16(i)) << BigInt(offset * 8); + offset += 2; + } else { + i -= 1; + res += BigInt(buffV.getUint8(i)) << BigInt(offset * 8); + offset += 1; + } + } + return res; + } + + function beInt2Buff(n, len) { + let r = n; + const buff = new Uint8Array(len); + const buffV = new DataView(buff.buffer); + let o = len; + while (o > 0) { + if (o - 4 >= 0) { + o -= 4; + buffV.setUint32(o, Number(r & BigInt(0xffffffff))); + r = r >> BigInt(32); + } else if (o - 2 >= 0) { + o -= 2; + buffV.setUint16(o, Number(r & BigInt(0xffff))); + r = r >> BigInt(16); + } else { + o -= 1; + buffV.setUint8(o, Number(r & BigInt(0xff))); + r = r >> BigInt(8); + } + } + if (r) { + throw new Error("Number does not fit in this length"); + } + return buff; + } + + function leBuff2int(buff) { + let res = BigInt(0); + let i = 0; + const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); + while (i < buff.length) { + if (i + 4 <= buff.length) { + res += BigInt(buffV.getUint32(i, true)) << BigInt(i * 8); + i += 4; + } else if (i + 2 <= buff.length) { + res += BigInt(buffV.getUint16(i, true)) << BigInt(i * 8); + i += 2; + } else { + res += BigInt(buffV.getUint8(i, true)) << BigInt(i * 8); + i += 1; + } + } + return res; + } + + function leInt2Buff$1(n, len) { + let r = n; + if (typeof len === "undefined") { + len = Math.floor((bitLength$d(n) - 1) / 8) + 1; + if (len == 0) len = 1; + } + const buff = new Uint8Array(len); + const buffV = new DataView(buff.buffer); + let o = 0; + while (o < len) { + if (o + 4 <= len) { + buffV.setUint32(o, Number(r & BigInt(0xffffffff)), true); + o += 4; + r = r >> BigInt(32); + } else if (o + 2 <= len) { + buffV.setUint16(o, Number(r & BigInt(0xffff)), true); + o += 2; + r = r >> BigInt(16); + } else { + buffV.setUint8(o, Number(r & BigInt(0xff)), true); + o += 1; + r = r >> BigInt(8); + } + } + if (r) { + throw new Error("Number does not fit in this length"); + } + return buff; + } + + function stringifyFElements(F, o) { + if (typeof o == "bigint" || o.eq !== undefined) { + return o.toString(10); + } else if (o instanceof Uint8Array) { + return F.toString(F.e(o)); + } else if (Array.isArray(o)) { + return o.map(stringifyFElements.bind(this, F)); + } else if (typeof o == "object") { + const res = {}; + const keys = Object.keys(o); + keys.forEach((k) => { + res[k] = stringifyFElements(F, o[k]); + }); + return res; + } else { + return o; + } + } + + function unstringifyFElements(F, o) { + if (typeof o == "string" && /^[0-9]+$/.test(o)) { + return F.e(o); + } else if (typeof o == "string" && /^0x[0-9a-fA-F]+$/.test(o)) { + return F.e(o); + } else if (Array.isArray(o)) { + return o.map(unstringifyFElements.bind(this, F)); + } else if (typeof o == "object") { + if (o === null) return null; + const res = {}; + const keys = Object.keys(o); + keys.forEach((k) => { + res[k] = unstringifyFElements(F, o[k]); + }); + return res; + } else { + return o; + } + } + + const _revTable$1 = []; + for (let i = 0; i < 256; i++) { + _revTable$1[i] = _revSlow$1(i, 8); + } + + function _revSlow$1(idx, bits) { + let res = 0; + let a = idx; + for (let i = 0; i < bits; i++) { + res <<= 1; + res = res | (a & 1); + a >>= 1; + } + return res; + } + + function bitReverse$1(idx, bits) { + return ( + (_revTable$1[idx >>> 24] | + (_revTable$1[(idx >>> 16) & 0xff] << 8) | + (_revTable$1[(idx >>> 8) & 0xff] << 16) | + (_revTable$1[idx & 0xff] << 24)) >>> + (32 - bits) + ); + } + + function log2$4(V) { + return ( + ((V & 0xffff0000) !== 0 ? ((V &= 0xffff0000), 16) : 0) | + ((V & 0xff00ff00) !== 0 ? ((V &= 0xff00ff00), 8) : 0) | + ((V & 0xf0f0f0f0) !== 0 ? ((V &= 0xf0f0f0f0), 4) : 0) | + ((V & 0xcccccccc) !== 0 ? ((V &= 0xcccccccc), 2) : 0) | + ((V & 0xaaaaaaaa) !== 0) + ); + } + + function buffReverseBits$1(buff, eSize) { + const n = buff.byteLength / eSize; + const bits = log2$4(n); + if (n != 1 << bits) { + throw new Error("Invalid number of pointers"); + } + for (let i = 0; i < n; i++) { + const r = bitReverse$1(i, bits); + if (i > r) { + const tmp = buff.slice(i * eSize, (i + 1) * eSize); + buff.set(buff.slice(r * eSize, (r + 1) * eSize), i * eSize); + buff.set(tmp, r * eSize); + } + } + } + + function array2buffer$1(arr, sG) { + const buff = new Uint8Array(sG * arr.length); + + for (let i = 0; i < arr.length; i++) { + buff.set(arr[i], i * sG); + } + + return buff; + } + + function buffer2array$1(buff, sG) { + const n = buff.byteLength / sG; + const arr = new Array(n); + for (let i = 0; i < n; i++) { + arr[i] = buff.slice(i * sG, i * sG + sG); + } + return arr; + } + + var _utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + stringifyBigInts: stringifyBigInts$5, + unstringifyBigInts: unstringifyBigInts$c, + beBuff2int: beBuff2int, + beInt2Buff: beInt2Buff, + leBuff2int: leBuff2int, + leInt2Buff: leInt2Buff$1, + stringifyFElements: stringifyFElements, + unstringifyFElements: unstringifyFElements, + bitReverse: bitReverse$1, + log2: log2$4, + buffReverseBits: buffReverseBits$1, + array2buffer: array2buffer$1, + buffer2array: buffer2array$1 + }); + + const PAGE_SIZE$2 = 1<<30; + + class BigBuffer$1 { + + constructor(size) { + this.buffers = []; + this.byteLength = size; + for (let i=0; i0) { + // bytes to copy from this page + const l = (o+r > PAGE_SIZE$2) ? (PAGE_SIZE$2 -o) : r; + const srcView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset+o, l); + if (l == len) return srcView.slice(); + if (!buff) { + if (len <= PAGE_SIZE$2) { + buff = new Uint8Array(len); + } else { + buff = new BigBuffer$1(len); + } + } + buff.set(srcView, len-r); + r = r-l; + p ++; + o = 0; + } + + return buff; + } + + set(buff, offset) { + if (offset === undefined) offset = 0; + + const len = buff.byteLength; + + if (len==0) return; + + const firstPage = Math.floor(offset / PAGE_SIZE$2); + const lastPage = Math.floor((offset+len-1) / PAGE_SIZE$2); + + if (firstPage == lastPage) { + if ((buff instanceof BigBuffer$1)&&(buff.buffers.length==1)) { + return this.buffers[firstPage].set(buff.buffers[0], offset % PAGE_SIZE$2); + } else { + return this.buffers[firstPage].set(buff, offset % PAGE_SIZE$2); + } + + } + + + let p = firstPage; + let o = offset % PAGE_SIZE$2; + let r = len; + while (r>0) { + const l = (o+r > PAGE_SIZE$2) ? (PAGE_SIZE$2 -o) : r; + const srcView = buff.slice( len -r, len -r+l); + const dstView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset + o, l); + dstView.set(srcView); + r = r-l; + p ++; + o = 0; + } + + } + } + + function buildBatchConvert$1(tm, fnName, sIn, sOut) { + return async function batchConvert(buffIn) { + const nPoints = Math.floor(buffIn.byteLength / sIn); + if ( nPoints * sIn !== buffIn.byteLength) { + throw new Error("Invalid buffer size"); + } + const pointsPerChunk = Math.floor(nPoints/tm.concurrency); + const opPromises = []; + for (let i=0; i=0; i--) { + this.w[i] = this.square(this.w[i+1]); + } + + if (!this.eq(this.w[0], this.one)) { + throw new Error("Error calculating roots of unity"); + } + + this.batchToMontgomery = buildBatchConvert$1(tm, prefix + "_batchToMontgomery", this.n8, this.n8); + this.batchFromMontgomery = buildBatchConvert$1(tm, prefix + "_batchFromMontgomery", this.n8, this.n8); + } + + + op2(opName, a, b) { + this.tm.setBuff(this.pOp1, a); + this.tm.setBuff(this.pOp2, b); + this.tm.instance.exports[this.prefix + opName](this.pOp1, this.pOp2, this.pOp3); + return this.tm.getBuff(this.pOp3, this.n8); + } + + op2Bool(opName, a, b) { + this.tm.setBuff(this.pOp1, a); + this.tm.setBuff(this.pOp2, b); + return !!this.tm.instance.exports[this.prefix + opName](this.pOp1, this.pOp2); + } + + op1(opName, a) { + this.tm.setBuff(this.pOp1, a); + this.tm.instance.exports[this.prefix + opName](this.pOp1, this.pOp3); + return this.tm.getBuff(this.pOp3, this.n8); + } + + op1Bool(opName, a) { + this.tm.setBuff(this.pOp1, a); + return !!this.tm.instance.exports[this.prefix + opName](this.pOp1, this.pOp3); + } + + add(a,b) { + return this.op2("_add", a, b); + } + + + eq(a,b) { + return this.op2Bool("_eq", a, b); + } + + isZero(a) { + return this.op1Bool("_isZero", a); + } + + sub(a,b) { + return this.op2("_sub", a, b); + } + + neg(a) { + return this.op1("_neg", a); + } + + inv(a) { + return this.op1("_inverse", a); + } + + toMontgomery(a) { + return this.op1("_toMontgomery", a); + } + + fromMontgomery(a) { + return this.op1("_fromMontgomery", a); + } + + mul(a,b) { + return this.op2("_mul", a, b); + } + + div(a, b) { + this.tm.setBuff(this.pOp1, a); + this.tm.setBuff(this.pOp2, b); + this.tm.instance.exports[this.prefix + "_inverse"](this.pOp2, this.pOp2); + this.tm.instance.exports[this.prefix + "_mul"](this.pOp1, this.pOp2, this.pOp3); + return this.tm.getBuff(this.pOp3, this.n8); + } + + square(a) { + return this.op1("_square", a); + } + + isSquare(a) { + return this.op1Bool("_isSquare", a); + } + + sqrt(a) { + return this.op1("_sqrt", a); + } + + exp(a, b) { + if (!(b instanceof Uint8Array)) { + b = toLEBuff$2(e$2(b)); + } + this.tm.setBuff(this.pOp1, a); + this.tm.setBuff(this.pOp2, b); + this.tm.instance.exports[this.prefix + "_exp"](this.pOp1, this.pOp2, b.byteLength, this.pOp3); + return this.tm.getBuff(this.pOp3, this.n8); + } + + isNegative(a) { + return this.op1Bool("_isNegative", a); + } + + e(a, b) { + if (a instanceof Uint8Array) return a; + let ra = e$2(a, b); + if (isNegative$9(ra)) { + ra = neg$2(ra); + if (gt$2(ra, this.p)) { + ra = mod$2(ra, this.p); + } + ra = sub$2(this.p, ra); + } else { + if (gt$2(ra, this.p)) { + ra = mod$2(ra, this.p); + } + } + const buff = leInt2Buff$1(ra, this.n8); + return this.toMontgomery(buff); + } + + toString(a, radix) { + const an = this.fromMontgomery(a); + const s = fromRprLE$2(an, 0); + return toString$7(s, radix); + } + + fromRng(rng) { + let v; + const buff = new Uint8Array(this.n8); + do { + v = zero$2; + for (let i=0; i memory.buffer.byteLength) { + const currentPages = memory.buffer.byteLength / 0x10000; + let requiredPages = Math.floor((u32[0] + length) / 0x10000)+1; + if (requiredPages>MAXMEM) requiredPages=MAXMEM; + memory.grow(requiredPages-currentPages); + } + return res; + } + + function allocBuffer(buffer) { + const p = alloc(buffer.byteLength); + setBuffer(p, buffer); + return p; + } + + function getBuffer(pointer, length) { + const u8 = new Uint8Array(memory.buffer); + return new Uint8Array(u8.buffer, u8.byteOffset + pointer, length); + } + + function setBuffer(pointer, buffer) { + const u8 = new Uint8Array(memory.buffer); + u8.set(new Uint8Array(buffer), pointer); + } + + function runTask(task) { + if (task[0].cmd == "INIT") { + return init(task[0]); + } + const ctx = { + vars: [], + out: [] + }; + const u32a = new Uint32Array(memory.buffer, 0, 1); + const oldAlloc = u32a[0]; + for (let i=0; i. + */ + + // const MEM_SIZE = 1000; // Memory size in 64K Pakes (512Mb) + const MEM_SIZE$1 = 25; // Memory size in 64K Pakes (1600Kb) + + class Deferred$1 { + constructor() { + this.promise = new Promise((resolve, reject)=> { + this.reject = reject; + this.resolve = resolve; + }); + } + } + + function sleep$1(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + function stringToBase64$2(str) { + { + return globalThis.btoa(str); + } + } + + const threadSource$1 = stringToBase64$2("(" + thread$2.toString() + ")(self)"); + const workerSource$1 = "data:application/javascript;base64," + threadSource$1; + + + + async function buildThreadManager$1(wasm, singleThread) { + const tm = new ThreadManager$1(); + + tm.memory = new WebAssembly.Memory({initial:MEM_SIZE$1}); + tm.u8 = new Uint8Array(tm.memory.buffer); + tm.u32 = new Uint32Array(tm.memory.buffer); + + const wasmModule = await WebAssembly.compile(wasm.code); + + tm.instance = await WebAssembly.instantiate(wasmModule, { + env: { + "memory": tm.memory + } + }); + + tm.singleThread = singleThread; + tm.initalPFree = tm.u32[0]; // Save the Pointer to free space. + tm.pq = wasm.pq; + tm.pr = wasm.pr; + tm.pG1gen = wasm.pG1gen; + tm.pG1zero = wasm.pG1zero; + tm.pG2gen = wasm.pG2gen; + tm.pG2zero = wasm.pG2zero; + tm.pOneT = wasm.pOneT; + + // tm.pTmp0 = tm.alloc(curve.G2.F.n8*3); + // tm.pTmp1 = tm.alloc(curve.G2.F.n8*3); + + + if (singleThread) { + tm.code = wasm.code; + tm.taskManager = thread$2(); + await tm.taskManager([{ + cmd: "INIT", + init: MEM_SIZE$1, + code: tm.code.slice() + }]); + tm.concurrency = 1; + } else { + tm.workers = []; + tm.pendingDeferreds = []; + tm.working = []; + + let concurrency; + + if ((typeof(navigator) === "object") && navigator.hardwareConcurrency) { + concurrency = navigator.hardwareConcurrency; + } else { + concurrency = os.cpus().length; + } + + if(concurrency == 0){ + concurrency = 2; + } + + // Limit to 64 threads for memory reasons. + if (concurrency>64) concurrency=64; + tm.concurrency = concurrency; + + for (let i = 0; i 0); i++) { + if (this.working[i] == false) { + const work = this.actionQueue.shift(); + this.postAction(i, work.data, work.transfers, work.deferred); + } + } + } + + queueAction(actionData, transfers) { + const d = new Deferred$1(); + + if (this.singleThread) { + const res = this.taskManager(actionData); + d.resolve(res); + } else { + this.actionQueue.push({ + data: actionData, + transfers: transfers, + deferred: d + }); + this.processWorks(); + } + return d.promise; + } + + resetMemory() { + this.u32[0] = this.initalPFree; + } + + allocBuff(buff) { + const pointer = this.alloc(buff.byteLength); + this.setBuff(pointer, buff); + return pointer; + } + + getBuff(pointer, length) { + return this.u8.slice(pointer, pointer+ length); + } + + setBuff(pointer, buffer) { + this.u8.set(new Uint8Array(buffer), pointer); + } + + alloc(length) { + while (this.u32[0] & 3) this.u32[0]++; // Return always aligned pointers + const res = this.u32[0]; + this.u32[0] += length; + return res; + } + + async terminate() { + for (let i=0; i=0; i--) { + if (!G.isZero(res)) { + for (let j=0; jMAX_CHUNK_SIZE) chunkSize = MAX_CHUNK_SIZE; + if (chunkSize { + if (logger) logger.debug(`Multiexp end: ${logText}: ${i}/${nPoints}`); + return r; + })); + } + + const result = await Promise.all(opPromises); + + let res = G.zero; + for (let i=result.length-1; i>=0; i--) { + res = G.add(res, result[i]); + } + + return res; + } + + G.multiExp = async function multiExpAffine(buffBases, buffScalars, logger, logText) { + return await _multiExp(buffBases, buffScalars, "jacobian", logger, logText); + }; + G.multiExpAffine = async function multiExpAffine(buffBases, buffScalars, logger, logText) { + return await _multiExp(buffBases, buffScalars, "affine", logger, logText); + }; + } + + function buildFFT$3(curve, groupName) { + const G = curve[groupName]; + const Fr = curve.Fr; + const tm = G.tm; + async function _fft(buff, inverse, inType, outType, logger, loggerTxt) { + + inType = inType || "affine"; + outType = outType || "affine"; + const MAX_BITS_THREAD = 14; + + let sIn, sMid, sOut, fnIn2Mid, fnMid2Out, fnFFTMix, fnFFTJoin, fnFFTFinal; + if (groupName == "G1") { + if (inType == "affine") { + sIn = G.F.n8*2; + fnIn2Mid = "g1m_batchToJacobian"; + } else { + sIn = G.F.n8*3; + } + sMid = G.F.n8*3; + if (inverse) { + fnFFTFinal = "g1m_fftFinal"; + } + fnFFTJoin = "g1m_fftJoin"; + fnFFTMix = "g1m_fftMix"; + + if (outType == "affine") { + sOut = G.F.n8*2; + fnMid2Out = "g1m_batchToAffine"; + } else { + sOut = G.F.n8*3; + } + + } else if (groupName == "G2") { + if (inType == "affine") { + sIn = G.F.n8*2; + fnIn2Mid = "g2m_batchToJacobian"; + } else { + sIn = G.F.n8*3; + } + sMid = G.F.n8*3; + if (inverse) { + fnFFTFinal = "g2m_fftFinal"; + } + fnFFTJoin = "g2m_fftJoin"; + fnFFTMix = "g2m_fftMix"; + if (outType == "affine") { + sOut = G.F.n8*2; + fnMid2Out = "g2m_batchToAffine"; + } else { + sOut = G.F.n8*3; + } + } else if (groupName == "Fr") { + sIn = G.n8; + sMid = G.n8; + sOut = G.n8; + if (inverse) { + fnFFTFinal = "frm_fftFinal"; + } + fnFFTMix = "frm_fftMix"; + fnFFTJoin = "frm_fftJoin"; + } + + + let returnArray = false; + if (Array.isArray(buff)) { + buff = array2buffer$1(buff, sIn); + returnArray = true; + } else { + buff = buff.slice(0, buff.byteLength); + } + + const nPoints = buff.byteLength / sIn; + const bits = log2$4(nPoints); + + if ((1 << bits) != nPoints) { + throw new Error("fft must be multiple of 2" ); + } + + if (bits == Fr.s +1) { + let buffOut; + + if (inverse) { + buffOut = await _fftExtInv(buff, inType, outType, logger, loggerTxt); + } else { + buffOut = await _fftExt(buff, inType, outType, logger, loggerTxt); + } + + if (returnArray) { + return buffer2array$1(buffOut, sOut); + } else { + return buffOut; + } + } + + let inv; + if (inverse) { + inv = Fr.inv(Fr.e(nPoints)); + } + + let buffOut; + + buffReverseBits$1(buff, sIn); + + let chunks; + let pointsInChunk = Math.min(1 << MAX_BITS_THREAD, nPoints); + let nChunks = nPoints / pointsInChunk; + + while ((nChunks < tm.concurrency)&&(pointsInChunk>=16)) { + nChunks *= 2; + pointsInChunk /= 2; + } + + const l2Chunk = log2$4(pointsInChunk); + + const promises = []; + for (let i = 0; i< nChunks; i++) { + if (logger) logger.debug(`${loggerTxt}: fft ${bits} mix start: ${i}/${nChunks}`); + const task = []; + task.push({cmd: "ALLOC", var: 0, len: sMid*pointsInChunk}); + const buffChunk = buff.slice( (pointsInChunk * i)*sIn, (pointsInChunk * (i+1))*sIn); + task.push({cmd: "SET", var: 0, buff: buffChunk}); + if (fnIn2Mid) { + task.push({cmd: "CALL", fnName:fnIn2Mid, params: [{var:0}, {val: pointsInChunk}, {var: 0}]}); + } + for (let j=1; j<=l2Chunk;j++) { + task.push({cmd: "CALL", fnName:fnFFTMix, params: [{var:0}, {val: pointsInChunk}, {val: j}]}); + } + + if (l2Chunk==bits) { + if (fnFFTFinal) { + task.push({cmd: "ALLOCSET", var: 1, buff: inv}); + task.push({cmd: "CALL", fnName: fnFFTFinal, params:[ + {var: 0}, + {val: pointsInChunk}, + {var: 1}, + ]}); + } + if (fnMid2Out) { + task.push({cmd: "CALL", fnName:fnMid2Out, params: [{var:0}, {val: pointsInChunk}, {var: 0}]}); + } + task.push({cmd: "GET", out: 0, var: 0, len: pointsInChunk*sOut}); + } else { + task.push({cmd: "GET", out:0, var: 0, len: sMid*pointsInChunk}); + } + promises.push(tm.queueAction(task).then( (r) => { + if (logger) logger.debug(`${loggerTxt}: fft ${bits} mix end: ${i}/${nChunks}`); + return r; + })); + } + + chunks = await Promise.all(promises); + for (let i = 0; i< nChunks; i++) chunks[i] = chunks[i][0]; + + for (let i = l2Chunk+1; i<=bits; i++) { + if (logger) logger.debug(`${loggerTxt}: fft ${bits} join: ${i}/${bits}`); + const nGroups = 1 << (bits - i); + const nChunksPerGroup = nChunks / nGroups; + const opPromises = []; + for (let j=0; j { + if (logger) logger.debug(`${loggerTxt}: fft ${bits} join ${i}/${bits} ${j+1}/${nGroups} ${k}/${nChunksPerGroup/2}`); + return r; + })); + } + } + + const res = await Promise.all(opPromises); + for (let j=0; j0; i--) { + buffOut.set(chunks[i], p); + p += pointsInChunk*sOut; + delete chunks[i]; // Liberate mem + } + buffOut.set(chunks[0].slice(0, (pointsInChunk-1)*sOut), p); + delete chunks[0]; + } else { + for (let i=0; i (1<<28)) { + buffOut = new BigBuffer$1(res1[0].byteLength*2); + } else { + buffOut = new Uint8Array(res1[0].byteLength*2); + } + + buffOut.set(res1[0]); + buffOut.set(res1[1], res1[0].byteLength); + + return buffOut; + } + + async function _fftExtInv(buff, inType, outType, logger, loggerTxt) { + let b1, b2; + b1 = buff.slice( 0 , buff.byteLength/2); + b2 = buff.slice( buff.byteLength/2, buff.byteLength); + + const promises = []; + + promises.push( _fft(b1, true, inType, "jacobian", logger, loggerTxt)); + promises.push( _fft(b2, true, inType, "jacobian", logger, loggerTxt)); + + [b1, b2] = await Promise.all(promises); + + const res1 = await _fftJoinExt(b1, b2, "fftJoinExtInv", Fr.one, Fr.shiftInv, "jacobian", outType, logger, loggerTxt); + + let buffOut; + if (res1[0].byteLength > (1<<28)) { + buffOut = new BigBuffer$1(res1[0].byteLength*2); + } else { + buffOut = new Uint8Array(res1[0].byteLength*2); + } + + buffOut.set(res1[0]); + buffOut.set(res1[1], res1[0].byteLength); + + return buffOut; + } + + + async function _fftJoinExt(buff1, buff2, fn, first, inc, inType, outType, logger, loggerTxt) { + const MAX_CHUNK_SIZE = 1<<16; + const MIN_CHUNK_SIZE = 1<<4; + + let fnName; + let fnIn2Mid, fnMid2Out; + let sOut, sIn, sMid; + + if (groupName == "G1") { + if (inType == "affine") { + sIn = G.F.n8*2; + fnIn2Mid = "g1m_batchToJacobian"; + } else { + sIn = G.F.n8*3; + } + sMid = G.F.n8*3; + fnName = "g1m_"+fn; + if (outType == "affine") { + fnMid2Out = "g1m_batchToAffine"; + sOut = G.F.n8*2; + } else { + sOut = G.F.n8*3; + } + } else if (groupName == "G2") { + if (inType == "affine") { + sIn = G.F.n8*2; + fnIn2Mid = "g2m_batchToJacobian"; + } else { + sIn = G.F.n8*3; + } + fnName = "g2m_"+fn; + sMid = G.F.n8*3; + if (outType == "affine") { + fnMid2Out = "g2m_batchToAffine"; + sOut = G.F.n8*2; + } else { + sOut = G.F.n8*3; + } + } else if (groupName == "Fr") { + sIn = Fr.n8; + sOut = Fr.n8; + sMid = Fr.n8; + fnName = "frm_" + fn; + } else { + throw new Error("Invalid group"); + } + + if (buff1.byteLength != buff2.byteLength) { + throw new Error("Invalid buffer size"); + } + const nPoints = Math.floor(buff1.byteLength / sIn); + if (nPoints != 1 << log2$4(nPoints)) { + throw new Error("Invalid number of points"); + } + + let chunkSize = Math.floor(nPoints /tm.concurrency); + if (chunkSize < MIN_CHUNK_SIZE) chunkSize = MIN_CHUNK_SIZE; + if (chunkSize > MAX_CHUNK_SIZE) chunkSize = MAX_CHUNK_SIZE; + + const opPromises = []; + + for (let i=0; i { + if (logger) logger.debug(`${loggerTxt}: fftJoinExt End: ${i}/${nPoints}`); + return r; + }) + ); + } + + const result = await Promise.all(opPromises); + + let fullBuffOut1; + let fullBuffOut2; + if (nPoints * sOut > 1<<28) { + fullBuffOut1 = new BigBuffer$1(nPoints*sOut); + fullBuffOut2 = new BigBuffer$1(nPoints*sOut); + } else { + fullBuffOut1 = new Uint8Array(nPoints*sOut); + fullBuffOut2 = new Uint8Array(nPoints*sOut); + } + + let p =0; + for (let i=0; i Fr.s+1) { + if (logger) logger.error("lagrangeEvaluations input too big"); + throw new Error("lagrangeEvaluations input too big"); + } + + let t0 = buff.slice(0, buff.byteLength/2); + let t1 = buff.slice(buff.byteLength/2, buff.byteLength); + + + const shiftToSmallM = Fr.exp(Fr.shift, nPoints/2); + const sConst = Fr.inv( Fr.sub(Fr.one, shiftToSmallM)); + + [t0, t1] = await _fftJoinExt(t0, t1, "prepareLagrangeEvaluation", sConst, Fr.shiftInv, inType, "jacobian", logger, loggerTxt + " prep"); + + const promises = []; + + promises.push( _fft(t0, true, "jacobian", outType, logger, loggerTxt + " t0")); + promises.push( _fft(t1, true, "jacobian", outType, logger, loggerTxt + " t1")); + + [t0, t1] = await Promise.all(promises); + + let buffOut; + if (t0.byteLength > (1<<28)) { + buffOut = new BigBuffer$1(t0.byteLength*2); + } else { + buffOut = new Uint8Array(t0.byteLength*2); + } + + buffOut.set(t0); + buffOut.set(t1, t0.byteLength); + + return buffOut; + }; + + G.fftMix = async function fftMix(buff) { + const sG = G.F.n8*3; + let fnName, fnFFTJoin; + if (groupName == "G1") { + fnName = "g1m_fftMix"; + fnFFTJoin = "g1m_fftJoin"; + } else if (groupName == "G2") { + fnName = "g2m_fftMix"; + fnFFTJoin = "g2m_fftJoin"; + } else if (groupName == "Fr") { + fnName = "frm_fftMix"; + fnFFTJoin = "frm_fftJoin"; + } else { + throw new Error("Invalid group"); + } + + const nPoints = Math.floor(buff.byteLength / sG); + const power = log2$4(nPoints); + + let nChunks = 1 << log2$4(tm.concurrency); + + if (nPoints <= nChunks*2) nChunks = 1; + + const pointsPerChunk = nPoints / nChunks; + + const powerChunk = log2$4(pointsPerChunk); + + const opPromises = []; + for (let i=0; i=0; i--) { + fullBuffOut.set(result[i][0], p); + p+=result[i][0].byteLength; + } + + return fullBuffOut; + }; + } + + async function buildEngine$1(params) { + + const tm = await buildThreadManager$1(params.wasm, params.singleThread); + + + const curve = {}; + + curve.q = e$2(params.wasm.q.toString()); + curve.r = e$2(params.wasm.r.toString()); + curve.name = params.name; + curve.tm = tm; + curve.prePSize = params.wasm.prePSize; + curve.preQSize = params.wasm.preQSize; + curve.Fr = new WasmField1$1(tm, "frm", params.n8r, params.r); + curve.F1 = new WasmField1$1(tm, "f1m", params.n8q, params.q); + curve.F2 = new WasmField2$1(tm, "f2m", curve.F1); + curve.G1 = new WasmCurve$1(tm, "g1m", curve.F1, params.wasm.pG1gen, params.wasm.pG1b, params.cofactorG1); + curve.G2 = new WasmCurve$1(tm, "g2m", curve.F2, params.wasm.pG2gen, params.wasm.pG2b, params.cofactorG2); + curve.F6 = new WasmField3$1(tm, "f6m", curve.F2); + curve.F12 = new WasmField2$1(tm, "ftm", curve.F6); + + curve.Gt = curve.F12; + + buildBatchApplyKey$1(curve, "G1"); + buildBatchApplyKey$1(curve, "G2"); + buildBatchApplyKey$1(curve, "Fr"); + + buildMultiexp$2(curve, "G1"); + buildMultiexp$2(curve, "G2"); + + buildFFT$3(curve, "G1"); + buildFFT$3(curve, "G2"); + buildFFT$3(curve, "Fr"); + + buildPairing$1(curve); + + curve.array2buffer = function(arr, sG) { + const buff = new Uint8Array(sG*arr.length); + + for (let i=0; i. + */ + + function toNumber$2(n) { + return BigInt(n); + } + + function isNegative$5(n) { + return n < 0n; + } + + function isZero$2(n) { + return n === 0n; + } + + function bitLength$7(n) { + if (isNegative$5(n)) { + return n.toString(2).length - 1; // discard the - sign + } else { + return n.toString(2).length; + } + } + + function u32(n) { + const b = []; + const v = toNumber$2(n); + b.push(Number(v & 0xFFn)); + b.push(Number(v >> 8n & 0xFFn)); + b.push(Number(v >> 16n & 0xFFn)); + b.push(Number(v >> 24n & 0xFFn)); + return b; + } + + function toUTF8Array(str) { + var utf8 = []; + for (var i=0; i < str.length; i++) { + var charcode = str.charCodeAt(i); + if (charcode < 0x80) utf8.push(charcode); + else if (charcode < 0x800) { + utf8.push(0xc0 | (charcode >> 6), + 0x80 | (charcode & 0x3f)); + } + else if (charcode < 0xd800 || charcode >= 0xe000) { + utf8.push(0xe0 | (charcode >> 12), + 0x80 | ((charcode>>6) & 0x3f), + 0x80 | (charcode & 0x3f)); + } + // surrogate pair + else { + i++; + // UTF-16 encodes 0x10000-0x10FFFF by + // subtracting 0x10000 and splitting the + // 20 bits of 0x0-0xFFFFF into two halves + charcode = 0x10000 + (((charcode & 0x3ff)<<10) + | (str.charCodeAt(i) & 0x3ff)); + utf8.push(0xf0 | (charcode >>18), + 0x80 | ((charcode>>12) & 0x3f), + 0x80 | ((charcode>>6) & 0x3f), + 0x80 | (charcode & 0x3f)); + } + } + return utf8; + } + + function string(str) { + const bytes = toUTF8Array(str); + return [ ...varuint32(bytes.length), ...bytes ]; + } + + function varuint(n) { + const code = []; + let v = toNumber$2(n); + if (isNegative$5(v)) throw new Error("Number cannot be negative"); + while (!isZero$2(v)) { + code.push(Number(v & 0x7Fn)); + v = v >> 7n; + } + if (code.length==0) code.push(0); + for (let i=0; i 0xFFFFFFFFn) throw new Error("Number too big"); + if (v > 0x7FFFFFFFn) v = v - 0x100000000n; + // bigInt("-80000000", 16) as base10 + if (v < -2147483648n) throw new Error("Number too small"); + return varint(v); + } + + function varint64(n) { + let v = toNumber$2(n); + if (v > 0xFFFFFFFFFFFFFFFFn) throw new Error("Number too big"); + if (v > 0x7FFFFFFFFFFFFFFFn) v = v - 0x10000000000000000n; + // bigInt("-8000000000000000", 16) as base10 + if (v < -9223372036854775808n) throw new Error("Number too small"); + return varint(v); + } + + function varuint32(n) { + let v = toNumber$2(n); + if (v > 0xFFFFFFFFn) throw new Error("Number too big"); + return varuint(v); + } + + function toHexString(byteArray) { + return Array.from(byteArray, function(byte) { + return ("0" + (byte & 0xFF).toString(16)).slice(-2); + }).join(""); + } + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmbuilder + + wasmbuilder is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmbuilder is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmbuilder. If not, see . + */ + + class CodeBuilder { + constructor(func) { + this.func = func; + this.functionName = func.functionName; + this.module = func.module; + } + + setLocal(localName, valCode) { + const idx = this.func.localIdxByName[localName]; + if (idx === undefined) + throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); + return [...valCode, 0x21, ...varuint32( idx )]; + } + + teeLocal(localName, valCode) { + const idx = this.func.localIdxByName[localName]; + if (idx === undefined) + throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); + return [...valCode, 0x22, ...varuint32( idx )]; + } + + getLocal(localName) { + const idx = this.func.localIdxByName[localName]; + if (idx === undefined) + throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); + return [0x20, ...varuint32( idx )]; + } + + i64_load8_s(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default + return [...idxCode, 0x30, align, ...varuint32(offset)]; + } + + i64_load8_u(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default + return [...idxCode, 0x31, align, ...varuint32(offset)]; + } + + i64_load16_s(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default + return [...idxCode, 0x32, align, ...varuint32(offset)]; + } + + i64_load16_u(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default + return [...idxCode, 0x33, align, ...varuint32(offset)]; + } + + i64_load32_s(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default + return [...idxCode, 0x34, align, ...varuint32(offset)]; + } + + i64_load32_u(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default + return [...idxCode, 0x35, align, ...varuint32(offset)]; + } + + i64_load(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 3 : _align; // 64 bits alignment by default + return [...idxCode, 0x29, align, ...varuint32(offset)]; + } + + + i64_store(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 3; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 3; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x37, align, ...varuint32(offset)]; + } + + i64_store32(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 2; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 2; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x3e, align, ...varuint32(offset)]; + } + + + i64_store16(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 1; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 1; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x3d, align, ...varuint32(offset)]; + } + + + i64_store8(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 0; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 0; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x3c, align, ...varuint32(offset)]; + } + + i32_load8_s(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default + return [...idxCode, 0x2c, align, ...varuint32(offset)]; + } + + i32_load8_u(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default + return [...idxCode, 0x2d, align, ...varuint32(offset)]; + } + + i32_load16_s(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default + return [...idxCode, 0x2e, align, ...varuint32(offset)]; + } + + i32_load16_u(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default + return [...idxCode, 0x2f, align, ...varuint32(offset)]; + } + + i32_load(idxCode, _offset, _align) { + const offset = _offset || 0; + const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default + return [...idxCode, 0x28, align, ...varuint32(offset)]; + } + + i32_store(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 2; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 2; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x36, align, ...varuint32(offset)]; + } + + + i32_store16(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 1; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 1; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x3b, align, ...varuint32(offset)]; + } + + i32_store8(idxCode, _offset, _align, _codeVal) { + let offset, align, codeVal; + if (Array.isArray(_offset)) { + offset = 0; + align = 0; + codeVal = _offset; + } else if (Array.isArray(_align)) { + offset = _offset; + align = 0; + codeVal = _align; + } else if (Array.isArray(_codeVal)) { + offset = _offset; + align = _align; + codeVal = _codeVal; + } + return [...idxCode, ...codeVal, 0x3a, align, ...varuint32(offset)]; + } + + call(fnName, ...args) { + const idx = this.module.functionIdxByName[fnName]; + if (idx === undefined) + throw new Error(`Function not defined: Function: ${fnName}`); + return [...[].concat(...args), 0x10, ...varuint32(idx)]; + } + + call_indirect(fnIdx, ...args) { + return [...[].concat(...args), ...fnIdx, 0x11, 0, 0]; + } + + if(condCode, thenCode, elseCode) { + if (elseCode) { + return [...condCode, 0x04, 0x40, ...thenCode, 0x05, ...elseCode, 0x0b]; + } else { + return [...condCode, 0x04, 0x40, ...thenCode, 0x0b]; + } + } + + block(bCode) { return [0x02, 0x40, ...bCode, 0x0b]; } + loop(...args) { + return [0x03, 0x40, ...[].concat(...[...args]), 0x0b]; + } + br_if(relPath, condCode) { return [...condCode, 0x0d, ...varuint32(relPath)]; } + br(relPath) { return [0x0c, ...varuint32(relPath)]; } + ret(rCode) { return [...rCode, 0x0f]; } + drop(dCode) { return [...dCode, 0x1a]; } + + i64_const(num) { return [0x42, ...varint64(num)]; } + i32_const(num) { return [0x41, ...varint32(num)]; } + + + i64_eqz(opcode) { return [...opcode, 0x50]; } + i64_eq(op1code, op2code) { return [...op1code, ...op2code, 0x51]; } + i64_ne(op1code, op2code) { return [...op1code, ...op2code, 0x52]; } + i64_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x53]; } + i64_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x54]; } + i64_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x55]; } + i64_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x56]; } + i64_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x57]; } + i64_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x58]; } + i64_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x59]; } + i64_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x5a]; } + i64_add(op1code, op2code) { return [...op1code, ...op2code, 0x7c]; } + i64_sub(op1code, op2code) { return [...op1code, ...op2code, 0x7d]; } + i64_mul(op1code, op2code) { return [...op1code, ...op2code, 0x7e]; } + i64_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x7f]; } + i64_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x80]; } + i64_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x81]; } + i64_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x82]; } + i64_and(op1code, op2code) { return [...op1code, ...op2code, 0x83]; } + i64_or(op1code, op2code) { return [...op1code, ...op2code, 0x84]; } + i64_xor(op1code, op2code) { return [...op1code, ...op2code, 0x85]; } + i64_shl(op1code, op2code) { return [...op1code, ...op2code, 0x86]; } + i64_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x87]; } + i64_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x88]; } + i64_extend_i32_s(op1code) { return [...op1code, 0xac]; } + i64_extend_i32_u(op1code) { return [...op1code, 0xad]; } + i64_clz(op1code) { return [...op1code, 0x79]; } + i64_ctz(op1code) { return [...op1code, 0x7a]; } + + i32_eqz(op1code) { return [...op1code, 0x45]; } + i32_eq(op1code, op2code) { return [...op1code, ...op2code, 0x46]; } + i32_ne(op1code, op2code) { return [...op1code, ...op2code, 0x47]; } + i32_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x48]; } + i32_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x49]; } + i32_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x4a]; } + i32_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x4b]; } + i32_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x4c]; } + i32_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x4d]; } + i32_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x4e]; } + i32_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x4f]; } + i32_add(op1code, op2code) { return [...op1code, ...op2code, 0x6a]; } + i32_sub(op1code, op2code) { return [...op1code, ...op2code, 0x6b]; } + i32_mul(op1code, op2code) { return [...op1code, ...op2code, 0x6c]; } + i32_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x6d]; } + i32_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x6e]; } + i32_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x6f]; } + i32_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x70]; } + i32_and(op1code, op2code) { return [...op1code, ...op2code, 0x71]; } + i32_or(op1code, op2code) { return [...op1code, ...op2code, 0x72]; } + i32_xor(op1code, op2code) { return [...op1code, ...op2code, 0x73]; } + i32_shl(op1code, op2code) { return [...op1code, ...op2code, 0x74]; } + i32_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x75]; } + i32_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x76]; } + i32_rotl(op1code, op2code) { return [...op1code, ...op2code, 0x77]; } + i32_rotr(op1code, op2code) { return [...op1code, ...op2code, 0x78]; } + i32_wrap_i64(op1code) { return [...op1code, 0xa7]; } + i32_clz(op1code) { return [...op1code, 0x67]; } + i32_ctz(op1code) { return [...op1code, 0x68]; } + + unreachable() { return [ 0x0 ]; } + + current_memory() { return [ 0x3f, 0]; } + + comment() { return []; } + } + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmbuilder + + wasmbuilder is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmbuilder is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmbuilder. If not, see . + */ + + const typeCodes = { + "i32": 0x7f, + "i64": 0x7e, + "f32": 0x7d, + "f64": 0x7c, + "anyfunc": 0x70, + "func": 0x60, + "emptyblock": 0x40 + }; + + + class FunctionBuilder { + + constructor (module, fnName, fnType, moduleName, fieldName) { + if (fnType == "import") { + this.fnType = "import"; + this.moduleName = moduleName; + this.fieldName = fieldName; + } else if (fnType == "internal") { + this.fnType = "internal"; + } else { + throw new Error("Invalid function fnType: " + fnType); + } + this.module = module; + this.fnName = fnName; + this.params = []; + this.locals = []; + this.localIdxByName = {}; + this.code = []; + this.returnType = null; + this.nextLocal =0; + } + + addParam(paramName, paramType) { + if (this.localIdxByName[paramName]) + throw new Error(`param already exists. Function: ${this.fnName}, Param: ${paramName} `); + const idx = this.nextLocal++; + this.localIdxByName[paramName] = idx; + this.params.push({ + type: paramType + }); + } + + addLocal(localName, localType, _length) { + const length = _length || 1; + if (this.localIdxByName[localName]) + throw new Error(`local already exists. Function: ${this.fnName}, Param: ${localName} `); + const idx = this.nextLocal++; + this.localIdxByName[localName] = idx; + this.locals.push({ + type: localType, + length: length + }); + } + + setReturnType(returnType) { + if (this.returnType) + throw new Error(`returnType already defined. Function: ${this.fnName}`); + this.returnType = returnType; + } + + getSignature() { + const params = [...varuint32(this.params.length), ...this.params.map((p) => typeCodes[p.type])]; + const returns = this.returnType ? [0x01, typeCodes[this.returnType]] : [0]; + return [0x60, ...params, ...returns]; + } + + getBody() { + const locals = this.locals.map((l) => [ + ...varuint32(l.length), + typeCodes[l.type] + ]); + + const body = [ + ...varuint32(this.locals.length), + ...[].concat(...locals), + ...this.code, + 0x0b + ]; + return [ + ...varuint32(body.length), + ...body + ]; + } + + addCode(...code) { + this.code.push(...[].concat(...[...code])); + } + + getCodeBuilder() { + return new CodeBuilder(this); + } + } + + /* + Copyright 2019 0KIMS association. + + This file is part of wasmbuilder + + wasmbuilder is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + wasmbuilder is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with wasmbuilder. If not, see . + */ + + class ModuleBuilder { + + constructor() { + this.functions = []; + this.functionIdxByName = {}; + this.nImportFunctions = 0; + this.nInternalFunctions =0; + this.memory = { + pagesSize: 1, + moduleName: "env", + fieldName: "memory" + }; + this.free = 8; + this.datas = []; + this.modules = {}; + this.exports = []; + this.functionsTable = []; + } + + build() { + this._setSignatures(); + return new Uint8Array([ + ...u32(0x6d736100), + ...u32(1), + ...this._buildType(), + ...this._buildImport(), + ...this._buildFunctionDeclarations(), + ...this._buildFunctionsTable(), + ...this._buildExports(), + ...this._buildElements(), + ...this._buildCode(), + ...this._buildData() + ]); + } + + addFunction(fnName) { + if (typeof(this.functionIdxByName[fnName]) !== "undefined") + throw new Error(`Function already defined: ${fnName}`); + + const idx = this.functions.length; + this.functionIdxByName[fnName] = idx; + + this.functions.push(new FunctionBuilder(this, fnName, "internal")); + + this.nInternalFunctions++; + return this.functions[idx]; + } + + addIimportFunction(fnName, moduleName, _fieldName) { + if (typeof(this.functionIdxByName[fnName]) !== "undefined") + throw new Error(`Function already defined: ${fnName}`); + + if ( (this.functions.length>0) + &&(this.functions[this.functions.length-1].type == "internal")) + throw new Error(`Import functions must be declared before internal: ${fnName}`); + + let fieldName = _fieldName || fnName; + + const idx = this.functions.length; + this.functionIdxByName[fnName] = idx; + + this.functions.push(new FunctionBuilder(this, fnName, "import", moduleName, fieldName)); + + this.nImportFunctions ++; + return this.functions[idx]; + } + + setMemory(pagesSize, moduleName, fieldName) { + this.memory = { + pagesSize: pagesSize, + moduleName: moduleName || "env", + fieldName: fieldName || "memory" + }; + } + + exportFunction(fnName, _exportName) { + const exportName = _exportName || fnName; + if (typeof(this.functionIdxByName[fnName]) === "undefined") + throw new Error(`Function not defined: ${fnName}`); + const idx = this.functionIdxByName[fnName]; + if (exportName != fnName) { + this.functionIdxByName[exportName] = idx; + } + this.exports.push({ + exportName: exportName, + idx: idx + }); + } + + addFunctionToTable(fnName) { + const idx = this.functionIdxByName[fnName]; + this.functionsTable.push(idx); + } + + addData(offset, bytes) { + this.datas.push({ + offset: offset, + bytes: bytes + }); + } + + alloc(a, b) { + let size; + let bytes; + if ((Array.isArray(a) || ArrayBuffer.isView(a)) && (typeof(b) === "undefined")) { + size = a.length; + bytes = a; + } else { + size = a; + bytes = b; + } + size = (((size-1)>>3) +1)<<3; // Align to 64 bits. + const p = this.free; + this.free += size; + if (bytes) { + this.addData(p, bytes); + } + return p; + } + + allocString(s) { + const encoder = new globalThis.TextEncoder(); + const uint8array = encoder.encode(s); + return this.alloc([...uint8array, 0]); + } + + _setSignatures() { + this.signatures = []; + const signatureIdxByName = {}; + if (this.functionsTable.length>0) { + const signature = this.functions[this.functionsTable[0]].getSignature(); + const signatureName = "s_"+toHexString(signature); + signatureIdxByName[signatureName] = 0; + this.signatures.push(signature); + } + for (let i=0; i { + self.pendingLoads.push({ + page: p, + resolve: resolve, + reject: reject + }); + }); + self.__statusPage("After Load request: ", p); + return P; + } + + __statusPage(s, p) { + const logEntry = []; + const self=this; + if (!self.logHistory) return; + logEntry.push("==" + s+ " " +p); + let S = ""; + for (let i=0; i " + self.history[p][i][j]); + } + } + } + + + + _triggerLoad() { + const self = this; + + if (self.reading) return; + if (self.pendingLoads.length==0) return; + + const pageIdxs = Object.keys(self.pages); + + const deletablePages = []; + for (let i=0; i0) && + ( (typeof self.pages[self.pendingLoads[0].page] != "undefined" ) + ||( (freePages>0) + ||(deletablePages.length>0)))) { + const load = self.pendingLoads.shift(); + if (typeof self.pages[load.page] != "undefined") { + self.pages[load.page].pendingOps ++; + const idx = deletablePages.indexOf(load.page); + if (idx>=0) deletablePages.splice(idx, 1); + if (self.pages[load.page].loading) { + self.pages[load.page].loading.push(load); + } else { + load.resolve(); + } + self.__statusPage("After Load (cached): ", load.page); + + } else { + if (freePages) { + freePages--; + } else { + const fp = deletablePages.shift(); + self.__statusPage("Before Unload: ", fp); + self.avBuffs.unshift(self.pages[fp]); + delete self.pages[fp]; + self.__statusPage("After Unload: ", fp); + } + + if (load.page>=self.totalPages) { + self.pages[load.page] = getNewPage(); + load.resolve(); + self.__statusPage("After Load (new): ", load.page); + } else { + self.reading = true; + self.pages[load.page] = getNewPage(); + self.pages[load.page].loading = [load]; + ops.push(self.fd.read(self.pages[load.page].buff, 0, self.pageSize, load.page*self.pageSize).then((res)=> { + self.pages[load.page].size = res.bytesRead; + const loading = self.pages[load.page].loading; + delete self.pages[load.page].loading; + for (let i=0; i { + load.reject(err); + })); + self.__statusPage("After Load (loading): ", load.page); + } + } + } + // if (ops.length>1) console.log(ops.length); + + Promise.all(ops).then( () => { + self.reading = false; + if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); + self._tryClose(); + }); + + function getNewPage() { + if (self.avBuffs.length>0) { + const p = self.avBuffs.shift(); + p.dirty = false; + p.pendingOps = 1; + p.size =0; + return p; + } else { + return { + dirty: false, + buff: new Uint8Array(self.pageSize), + pendingOps: 1, + size: 0 + }; + } + } + + } + + + _triggerWrite() { + const self = this; + if (self.writing) return; + + const pageIdxs = Object.keys(self.pages); + + const ops = []; + + for (let i=0; i { + page.writing = false; + return; + }, (err) => { + console.log("ERROR Writing: "+err); + self.error = err; + self._tryClose(); + })); + } + } + + if (self.writing) { + Promise.all(ops).then( () => { + self.writing = false; + setImmediate(self._triggerWrite.bind(self)); + self._tryClose(); + if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); + }); + } + } + + _getDirtyPage() { + for (let p in this.pages) { + if (this.pages[p].dirty) return p; + } + return -1; + } + + async write(buff, pos) { + if (buff.byteLength == 0) return; + const self = this; + /* + if (buff.byteLength > self.pageSize*self.maxPagesLoaded*0.8) { + const cacheSize = Math.floor(buff.byteLength * 1.1); + this.maxPagesLoaded = Math.floor( cacheSize / self.pageSize)+1; + } + */ + if (typeof pos == "undefined") pos = self.pos; + self.pos = pos+buff.byteLength; + if (self.totalSize < pos + buff.byteLength) self.totalSize = pos + buff.byteLength; + if (self.pendingClose) + throw new Error("Writing a closing file"); + const firstPage = Math.floor(pos / self.pageSize); + const lastPage = Math.floor((pos + buff.byteLength -1) / self.pageSize); + + const pagePromises = []; + for (let i=firstPage; i<=lastPage; i++) pagePromises.push(self._loadPage(i)); + self._triggerLoad(); + + let p = firstPage; + let o = pos % self.pageSize; + let r = buff.byteLength; + while (r>0) { + await pagePromises[p-firstPage]; + const l = (o+r > self.pageSize) ? (self.pageSize -o) : r; + const srcView = buff.slice( buff.byteLength - r, buff.byteLength - r + l); + const dstView = new Uint8Array(self.pages[p].buff.buffer, o, l); + dstView.set(srcView); + self.pages[p].dirty = true; + self.pages[p].pendingOps --; + self.pages[p].size = Math.max(o+l, self.pages[p].size); + if (p>=self.totalPages) { + self.totalPages = p+1; + } + r = r-l; + p ++; + o = 0; + if (!self.writing) setImmediate(self._triggerWrite.bind(self)); + } + } + + async read(len, pos) { + const self = this; + let buff = new Uint8Array(len); + await self.readToBuffer(buff, 0, len, pos); + + return buff; + } + + async readToBuffer(buffDst, offset, len, pos) { + if (len == 0) { + return; + } + const self = this; + if (len > self.pageSize*self.maxPagesLoaded*0.8) { + const cacheSize = Math.floor(len * 1.1); + this.maxPagesLoaded = Math.floor( cacheSize / self.pageSize)+1; + } + if (typeof pos == "undefined") pos = self.pos; + self.pos = pos+len; + if (self.pendingClose) + throw new Error("Reading a closing file"); + const firstPage = Math.floor(pos / self.pageSize); + const lastPage = Math.floor((pos + len -1) / self.pageSize); + + const pagePromises = []; + for (let i=firstPage; i<=lastPage; i++) pagePromises.push(self._loadPage(i)); + + self._triggerLoad(); + + let p = firstPage; + let o = pos % self.pageSize; + // Remaining bytes to read + let r = pos + len > self.totalSize ? len - (pos + len - self.totalSize): len; + while (r>0) { + await pagePromises[p - firstPage]; + self.__statusPage("After Await (read): ", p); + + // bytes to copy from this page + const l = (o+r > self.pageSize) ? (self.pageSize -o) : r; + const srcView = new Uint8Array(self.pages[p].buff.buffer, self.pages[p].buff.byteOffset + o, l); + buffDst.set(srcView, offset+len-r); + self.pages[p].pendingOps --; + + self.__statusPage("After Op done: ", p); + + r = r-l; + p ++; + o = 0; + if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); + } + + this.pos = pos + len; + + } + + + _tryClose() { + const self = this; + if (!self.pendingClose) return; + if (self.error) { + self.pendingCloseReject(self.error); + } + const p = self._getDirtyPage(); + if ((p>=0) || (self.writing) || (self.reading) || (self.pendingLoads.length>0)) return; + self.pendingClose(); + } + + close() { + const self = this; + if (self.pendingClose) + throw new Error("Closing the file twice"); + return new Promise((resolve, reject) => { + self.pendingClose = resolve; + self.pendingCloseReject = reject; + self._tryClose(); + }).then(()=> { + self.fd.close(); + }, (err) => { + self.fd.close(); + throw (err); + }); + } + + async discard() { + const self = this; + await self.close(); + await fs.promises.unlink(this.fileName); + } + + async writeULE32(v, pos) { + const self = this; + const tmpBuff32 = new Uint8Array(4); + const tmpBuff32v = new DataView(tmpBuff32.buffer); + + tmpBuff32v.setUint32(0, v, true); + + await self.write(tmpBuff32, pos); + } + + async writeUBE32(v, pos) { + const self = this; + + const tmpBuff32 = new Uint8Array(4); + const tmpBuff32v = new DataView(tmpBuff32.buffer); + + tmpBuff32v.setUint32(0, v, false); + + await self.write(tmpBuff32, pos); + } + + + async writeULE64(v, pos) { + const self = this; + + const tmpBuff64 = new Uint8Array(8); + const tmpBuff64v = new DataView(tmpBuff64.buffer); + + tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true); + tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true); + + await self.write(tmpBuff64, pos); + } + + async readULE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new Uint32Array(b.buffer); + + return view[0]; + } + + async readUBE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new DataView(b.buffer); + + return view.getUint32(0, false); + } + + async readULE64(pos) { + const self = this; + const b = await self.read(8, pos); + + const view = new Uint32Array(b.buffer); + + return view[1] * 0x100000000 + view[0]; + } + + async readString(pos) { + const self = this; + + if (self.pendingClose) { + throw new Error("Reading a closing file"); + } + + let currentPosition = typeof pos == "undefined" ? self.pos : pos; + let currentPage = Math.floor(currentPosition / self.pageSize); + + let endOfStringFound = false; + let str = ""; + + while (!endOfStringFound) { + //Read page + let pagePromise = self._loadPage(currentPage); + self._triggerLoad(); + await pagePromise; + self.__statusPage("After Await (read): ", currentPage); + + let offsetOnPage = currentPosition % self.pageSize; + + const dataArray = new Uint8Array( + self.pages[currentPage].buff.buffer, + self.pages[currentPage].buff.byteOffset + offsetOnPage, + self.pageSize - offsetOnPage + ); + + let indexEndOfString = dataArray.findIndex(element => element === 0); + endOfStringFound = indexEndOfString !== -1; + + if (endOfStringFound) { + str += new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); + self.pos = currentPage * this.pageSize + offsetOnPage + indexEndOfString + 1; + } else { + str += new TextDecoder().decode(dataArray); + self.pos = currentPage * this.pageSize + offsetOnPage + dataArray.length; + } + + self.pages[currentPage].pendingOps--; + self.__statusPage("After Op done: ", currentPage); + + currentPosition = self.pos; + currentPage++; + + if (self.pendingLoads.length > 0) setImmediate(self._triggerLoad.bind(self)); + } + + return str; + } + } + + function createNew$1(o) { + const initialSize = o.initialSize || 1<<20; + const fd = new MemFile(); + fd.o = o; + fd.o.data = new Uint8Array(initialSize); + fd.allocSize = initialSize; + fd.totalSize = 0; + fd.readOnly = false; + fd.pos = 0; + return fd; + } + + function readExisting$2(o) { + const fd = new MemFile(); + fd.o = o; + fd.allocSize = o.data.byteLength; + fd.totalSize = o.data.byteLength; + fd.readOnly = true; + fd.pos = 0; + return fd; + } + + const tmpBuff32$1 = new Uint8Array(4); + const tmpBuff32v$1 = new DataView(tmpBuff32$1.buffer); + const tmpBuff64$1 = new Uint8Array(8); + const tmpBuff64v$1 = new DataView(tmpBuff64$1.buffer); + + class MemFile { + + constructor() { + this.pageSize = 1 << 14; // for compatibility + } + + _resizeIfNeeded(newLen) { + if (newLen > this.allocSize) { + const newAllocSize = Math.max( + this.allocSize + (1 << 20), + Math.floor(this.allocSize * 1.1), + newLen + ); + const newData = new Uint8Array(newAllocSize); + newData.set(this.o.data); + this.o.data = newData; + this.allocSize = newAllocSize; + } + } + + async write(buff, pos) { + const self =this; + if (typeof pos == "undefined") pos = self.pos; + if (this.readOnly) throw new Error("Writing a read only file"); + + this._resizeIfNeeded(pos + buff.byteLength); + + this.o.data.set(buff.slice(), pos); + + if (pos + buff.byteLength > this.totalSize) this.totalSize = pos + buff.byteLength; + + this.pos = pos + buff.byteLength; + } + + async readToBuffer(buffDest, offset, len, pos) { + const self = this; + if (typeof pos == "undefined") pos = self.pos; + if (this.readOnly) { + if (pos + len > this.totalSize) throw new Error("Reading out of bounds"); + } + this._resizeIfNeeded(pos + len); + + const buffSrc = new Uint8Array(this.o.data.buffer, this.o.data.byteOffset + pos, len); + + buffDest.set(buffSrc, offset); + + this.pos = pos + len; + } + + async read(len, pos) { + const self = this; + + const buff = new Uint8Array(len); + await self.readToBuffer(buff, 0, len, pos); + + return buff; + } + + close() { + if (this.o.data.byteLength != this.totalSize) { + this.o.data = this.o.data.slice(0, this.totalSize); + } + } + + async discard() { + } + + + async writeULE32(v, pos) { + const self = this; + + tmpBuff32v$1.setUint32(0, v, true); + + await self.write(tmpBuff32$1, pos); + } + + async writeUBE32(v, pos) { + const self = this; + + tmpBuff32v$1.setUint32(0, v, false); + + await self.write(tmpBuff32$1, pos); + } + + + async writeULE64(v, pos) { + const self = this; + + tmpBuff64v$1.setUint32(0, v & 0xFFFFFFFF, true); + tmpBuff64v$1.setUint32(4, Math.floor(v / 0x100000000) , true); + + await self.write(tmpBuff64$1, pos); + } + + + async readULE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new Uint32Array(b.buffer); + + return view[0]; + } + + async readUBE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new DataView(b.buffer); + + return view.getUint32(0, false); + } + + async readULE64(pos) { + const self = this; + const b = await self.read(8, pos); + + const view = new Uint32Array(b.buffer); + + return view[1] * 0x100000000 + view[0]; + } + + async readString(pos) { + const self = this; + + let currentPosition = typeof pos == "undefined" ? self.pos : pos; + + if (currentPosition > this.totalSize) { + if (this.readOnly) { + throw new Error("Reading out of bounds"); + } + this._resizeIfNeeded(pos); + } + const dataArray = new Uint8Array( + self.o.data.buffer, + currentPosition, + this.totalSize - currentPosition + ); + + let indexEndOfString = dataArray.findIndex(element => element === 0); + let endOfStringFound = indexEndOfString !== -1; + + let str = ""; + if (endOfStringFound) { + str = new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); + self.pos = currentPosition + indexEndOfString + 1; + } else { + self.pos = currentPosition; + } + return str; + } + } + + const PAGE_SIZE$1 = 1<<22; + + function createNew(o) { + const initialSize = o.initialSize || 0; + const fd = new BigMemFile(); + fd.o = o; + const nPages = initialSize ? Math.floor((initialSize - 1) / PAGE_SIZE$1)+1 : 0; + fd.o.data = []; + for (let i=0; i0) { + const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r; + const srcView = buff.slice(buff.byteLength - r, buff.byteLength - r + l); + const dstView = new Uint8Array(self.o.data[p].buffer, o, l); + dstView.set(srcView); + r = r-l; + p ++; + o = 0; + } + + this.pos = pos + buff.byteLength; + } + + async readToBuffer(buffDst, offset, len, pos) { + const self = this; + if (typeof pos == "undefined") pos = self.pos; + if (this.readOnly) { + if (pos + len > this.totalSize) throw new Error("Reading out of bounds"); + } + this._resizeIfNeeded(pos + len); + + const firstPage = Math.floor(pos / PAGE_SIZE$1); + + let p = firstPage; + let o = pos % PAGE_SIZE$1; + // Remaining bytes to read + let r = len; + while (r>0) { + // bytes to copy from this page + const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r; + const srcView = new Uint8Array(self.o.data[p].buffer, o, l); + buffDst.set(srcView, offset+len-r); + r = r-l; + p ++; + o = 0; + } + + this.pos = pos + len; + } + + async read(len, pos) { + const self = this; + const buff = new Uint8Array(len); + + await self.readToBuffer(buff, 0, len, pos); + + return buff; + } + + close() { + } + + async discard() { + } + + + async writeULE32(v, pos) { + const self = this; + + tmpBuff32v.setUint32(0, v, true); + + await self.write(tmpBuff32, pos); + } + + async writeUBE32(v, pos) { + const self = this; + + tmpBuff32v.setUint32(0, v, false); + + await self.write(tmpBuff32, pos); + } + + + async writeULE64(v, pos) { + const self = this; + + tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true); + tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true); + + await self.write(tmpBuff64, pos); + } + + + async readULE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new Uint32Array(b.buffer); + + return view[0]; + } + + async readUBE32(pos) { + const self = this; + const b = await self.read(4, pos); + + const view = new DataView(b.buffer); + + return view.getUint32(0, false); + } + + async readULE64(pos) { + const self = this; + const b = await self.read(8, pos); + + const view = new Uint32Array(b.buffer); + + return view[1] * 0x100000000 + view[0]; + } + + async readString(pos) { + const self = this; + const fixedSize = 2048; + + let currentPosition = typeof pos == "undefined" ? self.pos : pos; + + if (currentPosition > this.totalSize) { + if (this.readOnly) { + throw new Error("Reading out of bounds"); + } + this._resizeIfNeeded(pos); + } + + let endOfStringFound = false; + let str = ""; + + while (!endOfStringFound) { + let currentPage = Math.floor(currentPosition / PAGE_SIZE$1); + let offsetOnPage = currentPosition % PAGE_SIZE$1; + + if (self.o.data[currentPage] === undefined) { + throw new Error("ERROR"); + } + + let readLength = Math.min(fixedSize, self.o.data[currentPage].length - offsetOnPage); + const dataArray = new Uint8Array(self.o.data[currentPage].buffer, offsetOnPage, readLength); + + let indexEndOfString = dataArray.findIndex(element => element === 0); + endOfStringFound = indexEndOfString !== -1; + + if (endOfStringFound) { + str += new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); + self.pos = currentPage * PAGE_SIZE$1 + offsetOnPage + indexEndOfString + 1; + } else { + str += new TextDecoder().decode(dataArray); + self.pos = currentPage * PAGE_SIZE$1 + offsetOnPage + dataArray.length; + } + + currentPosition = self.pos; + } + return str; + } + } + + const O_TRUNC = 1024; + const O_CREAT = 512; + const O_RDWR = 2; + const O_RDONLY = 0; + + /* global fetch */ + + const DEFAULT_CACHE_SIZE = (1 << 16); + const DEFAULT_PAGE_SIZE = (1 << 13); + + + async function createOverride(o, b, c) { + if (typeof o === "string") { + o = { + type: "file", + fileName: o, + cacheSize: b || DEFAULT_CACHE_SIZE, + pageSize: c || DEFAULT_PAGE_SIZE + }; + } + if (o.type == "file") { + return await open(o.fileName, O_TRUNC | O_CREAT | O_RDWR, o.cacheSize, o.pageSize); + } else if (o.type == "mem") { + return createNew$1(o); + } else if (o.type == "bigMem") { + return createNew(o); + } else { + throw new Error("Invalid FastFile type: "+o.type); + } + } + + async function readExisting(o, b, c) { + if (o instanceof Uint8Array) { + o = { + type: "mem", + data: o + }; + } + { + if (typeof o === "string") { + const buff = await fetch(o).then( function(res) { + return res.arrayBuffer(); + }).then(function (ab) { + return new Uint8Array(ab); + }); + o = { + type: "mem", + data: buff + }; + } + } + if (o.type == "file") { + return await open(o.fileName, O_RDONLY, o.cacheSize, o.pageSize); + } else if (o.type == "mem") { + return await readExisting$2(o); + } else if (o.type == "bigMem") { + return await readExisting$1(o); + } else { + throw new Error("Invalid FastFile type: "+o.type); + } + } + + async function readBinFile(fileName, type, maxVersion, cacheSize, pageSize) { + + const fd = await readExisting(fileName); + + const b = await fd.read(4); + let readedType = ""; + for (let i=0; i<4; i++) readedType += String.fromCharCode(b[i]); + + if (readedType != type) throw new Error(fileName + ": Invalid File format"); + + let v = await fd.readULE32(); + + if (v>maxVersion) throw new Error("Version not supported"); + + const nSections = await fd.readULE32(); + + // Scan sections + let sections = []; + for (let i=0; i1) throw new Error(fd.fileName +": Section Duplicated " +idSection); + + fd.pos = sections[idSection][0].p; + + fd.readingSection = sections[idSection][0]; + } + + async function endReadSection(fd, noCheck) { + if (typeof fd.readingSection === "undefined") throw new Error("Not reading a section"); + if (!noCheck) { + if (fd.pos-fd.readingSection.p != fd.readingSection.size) throw new Error("Invalid section size reading"); + } + delete fd.readingSection; + } + + async function writeBigInt(fd, n, n8, pos) { + const buff = new Uint8Array(n8); + Scalar$1.toRprLE(buff, 0, n, n8); + await fd.write(buff, pos); + } + + async function readBigInt(fd, n8, pos) { + const buff = await fd.read(n8, pos); + return Scalar$1.fromRprLE(buff, 0, n8); + } + + async function copySection(fdFrom, sections, fdTo, sectionId, size) { + if (typeof size === "undefined") { + size = sections[sectionId][0].size; + } + const chunkSize = fdFrom.pageSize; + await startReadUniqueSection(fdFrom, sections, sectionId); + await startWriteSection(fdTo, sectionId); + for (let p=0; p sections[idSection][0].size) { + throw new Error("Reading out of the range of the section"); + } + + let buff; + if (length < (1 << 30) ) { + buff = new Uint8Array(length); + } else { + buff = new BigBuffer$1(length); + } + + await fd.readToBuffer(buff, 0, length, sections[idSection][0].p + offset); + return buff; + } + + async function sectionIsEqual(fd1, sections1, fd2, sections2, idSection) { + const MAX_BUFF_SIZE = fd1.pageSize * 16; + await startReadUniqueSection(fd1, sections1, idSection); + await startReadUniqueSection(fd2, sections2, idSection); + if (sections1[idSection][0].size != sections2[idSection][0].size) return false; + const totalBytes=sections1[idSection][0].size; + for (let i=0; i= 0) { + curve = await buildBn128$2(); + } else if (["BLS12381"].indexOf(normName) >= 0) { + curve = await buildBls12381$2(); + } else { + throw new Error(`Curve not supported: ${name}`); + } + return curve; + + function normalizeName(n) { + return n.toUpperCase().match(/[A-Za-z0-9]+/g).join(""); + } + + } + + var blake2bWasm = {exports: {}}; + + var nanoassert = assert$1; + + class AssertionError extends Error {} + AssertionError.prototype.name = 'AssertionError'; + + /** + * Minimal assert function + * @param {any} t Value to check if falsy + * @param {string=} m Optional assertion error message + * @throws {AssertionError} + */ + function assert$1 (t, m) { + if (!t) { + var err = new AssertionError(m); + if (Error.captureStackTrace) Error.captureStackTrace(err, assert$1); + throw err + } + } + + var browser = {exports: {}}; + + function byteLength$4 (string) { + return string.length + } + + function toString$6 (buffer) { + const len = buffer.byteLength; + + let result = ''; + + for (let i = 0; i < len; i++) { + result += String.fromCharCode(buffer[i]); + } + + return result + } + + function write$5 (buffer, string, offset = 0, length = byteLength$4(string)) { + const len = Math.min(length, buffer.byteLength - offset); + + for (let i = 0; i < len; i++) { + buffer[offset + i] = string.charCodeAt(i); + } + + return len + } + + var ascii = { + byteLength: byteLength$4, + toString: toString$6, + write: write$5 + }; + + const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + const codes = new Uint8Array(256); + + for (let i = 0; i < alphabet.length; i++) { + codes[alphabet.charCodeAt(i)] = i; + } + + codes[/* - */ 0x2d] = 62; + codes[/* _ */ 0x5f] = 63; + + function byteLength$3 (string) { + let len = string.length; + + if (string.charCodeAt(len - 1) === 0x3d) len--; + if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--; + + return (len * 3) >>> 2 + } + + function toString$5 (buffer) { + const len = buffer.byteLength; + + let result = ''; + + for (let i = 0; i < len; i += 3) { + result += ( + alphabet[buffer[i] >> 2] + + alphabet[((buffer[i] & 3) << 4) | (buffer[i + 1] >> 4)] + + alphabet[((buffer[i + 1] & 15) << 2) | (buffer[i + 2] >> 6)] + + alphabet[buffer[i + 2] & 63] + ); + } + + if (len % 3 === 2) { + result = result.substring(0, result.length - 1) + '='; + } else if (len % 3 === 1) { + result = result.substring(0, result.length - 2) + '=='; + } + + return result + } + function write$4 (buffer, string, offset = 0, length = byteLength$3(string)) { + const len = Math.min(length, buffer.byteLength - offset); + + for (let i = 0, j = 0; j < len; i += 4) { + const a = codes[string.charCodeAt(i)]; + const b = codes[string.charCodeAt(i + 1)]; + const c = codes[string.charCodeAt(i + 2)]; + const d = codes[string.charCodeAt(i + 3)]; + + buffer[j++] = (a << 2) | (b >> 4); + buffer[j++] = ((b & 15) << 4) | (c >> 2); + buffer[j++] = ((c & 3) << 6) | (d & 63); + } + + return len + } + var base64 = { + byteLength: byteLength$3, + toString: toString$5, + write: write$4 + }; + + function byteLength$2 (string) { + return string.length >>> 1 + } + + function toString$4 (buffer) { + const len = buffer.byteLength; + + buffer = new DataView(buffer.buffer, buffer.byteOffset, len); + + let result = ''; + let i = 0; + + for (let n = len - (len % 4); i < n; i += 4) { + result += buffer.getUint32(i).toString(16).padStart(8, '0'); + } + + for (; i < len; i++) { + result += buffer.getUint8(i).toString(16).padStart(2, '0'); + } + + return result + } + + function write$3 (buffer, string, offset = 0, length = byteLength$2(string)) { + const len = Math.min(length, buffer.byteLength - offset); + + for (let i = 0; i < len; i++) { + const a = hexValue(string.charCodeAt(i * 2)); + const b = hexValue(string.charCodeAt(i * 2 + 1)); + + if (a === undefined || b === undefined) { + return buffer.subarray(0, i) + } + + buffer[offset + i] = (a << 4) | b; + } + + return len + } + + var hex = { + byteLength: byteLength$2, + toString: toString$4, + write: write$3 + }; + + function hexValue (char) { + if (char >= 0x30 && char <= 0x39) return char - 0x30 + if (char >= 0x41 && char <= 0x46) return char - 0x41 + 10 + if (char >= 0x61 && char <= 0x66) return char - 0x61 + 10 + } + + function byteLength$1 (string) { + let length = 0; + + for (let i = 0, n = string.length; i < n; i++) { + const code = string.charCodeAt(i); + + if (code >= 0xd800 && code <= 0xdbff && i + 1 < n) { + const code = string.charCodeAt(i + 1); + + if (code >= 0xdc00 && code <= 0xdfff) { + length += 4; + i++; + continue + } + } + + if (code <= 0x7f) length += 1; + else if (code <= 0x7ff) length += 2; + else length += 3; + } + + return length + } + + let toString$3; + + if (typeof TextDecoder !== 'undefined') { + const decoder = new TextDecoder(); + + toString$3 = function toString (buffer) { + return decoder.decode(buffer) + }; + } else { + toString$3 = function toString (buffer) { + const len = buffer.byteLength; + + let output = ''; + let i = 0; + + while (i < len) { + let byte = buffer[i]; + + if (byte <= 0x7f) { + output += String.fromCharCode(byte); + i++; + continue + } + + let bytesNeeded = 0; + let codePoint = 0; + + if (byte <= 0xdf) { + bytesNeeded = 1; + codePoint = byte & 0x1f; + } else if (byte <= 0xef) { + bytesNeeded = 2; + codePoint = byte & 0x0f; + } else if (byte <= 0xf4) { + bytesNeeded = 3; + codePoint = byte & 0x07; + } + + if (len - i - bytesNeeded > 0) { + let k = 0; + + while (k < bytesNeeded) { + byte = buffer[i + k + 1]; + codePoint = (codePoint << 6) | (byte & 0x3f); + k += 1; + } + } else { + codePoint = 0xfffd; + bytesNeeded = len - i; + } + + output += String.fromCodePoint(codePoint); + i += bytesNeeded + 1; + } + + return output + }; + } + + let write$2; + + if (typeof TextEncoder !== 'undefined') { + const encoder = new TextEncoder(); + + write$2 = function write (buffer, string, offset = 0, length = byteLength$1(string)) { + const len = Math.min(length, buffer.byteLength - offset); + encoder.encodeInto(string, buffer.subarray(offset, offset + len)); + return len + }; + } else { + write$2 = function write (buffer, string, offset = 0, length = byteLength$1(string)) { + const len = Math.min(length, buffer.byteLength - offset); + + buffer = buffer.subarray(offset, offset + len); + + let i = 0; + let j = 0; + + while (i < string.length) { + const code = string.codePointAt(i); + + if (code <= 0x7f) { + buffer[j++] = code; + i++; + continue + } + + let count = 0; + let bits = 0; + + if (code <= 0x7ff) { + count = 6; + bits = 0xc0; + } else if (code <= 0xffff) { + count = 12; + bits = 0xe0; + } else if (code <= 0x1fffff) { + count = 18; + bits = 0xf0; + } + + buffer[j++] = bits | (code >> count); + count -= 6; + + while (count >= 0) { + buffer[j++] = 0x80 | ((code >> count) & 0x3f); + count -= 6; + } + + i += code >= 0x10000 ? 2 : 1; + } + + return len + }; + } + + var utf8 = { + byteLength: byteLength$1, + toString: toString$3, + write: write$2 + }; + + function byteLength (string) { + return string.length * 2 + } + + function toString$2 (buffer) { + const len = buffer.byteLength; + + let result = ''; + + for (let i = 0; i < len - 1; i += 2) { + result += String.fromCharCode(buffer[i] + (buffer[i + 1] * 256)); + } + + return result + } + + function write$1 (buffer, string, offset = 0, length = byteLength(string)) { + const len = Math.min(length, buffer.byteLength - offset); + + let units = len; + + for (let i = 0; i < string.length; ++i) { + if ((units -= 2) < 0) break + + const c = string.charCodeAt(i); + const hi = c >> 8; + const lo = c % 256; + + buffer[offset + i * 2] = lo; + buffer[offset + i * 2 + 1] = hi; + } + + return len + } + + var utf16le = { + byteLength, + toString: toString$2, + write: write$1 + }; + + (function (module, exports) { + const ascii$1 = ascii; + const base64$1 = base64; + const hex$1 = hex; + const utf8$1 = utf8; + const utf16le$1 = utf16le; + + const LE = new Uint8Array(Uint16Array.of(0xff).buffer)[0] === 0xff; + + function codecFor (encoding) { + switch (encoding) { + case 'ascii': + return ascii$1 + case 'base64': + return base64$1 + case 'hex': + return hex$1 + case 'utf8': + case 'utf-8': + case undefined: + return utf8$1 + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16le$1 + default: + throw new Error(`Unknown encoding: ${encoding}`) + } + } + + function isBuffer (value) { + return value instanceof Uint8Array + } + + function isEncoding (encoding) { + try { + codecFor(encoding); + return true + } catch { + return false + } + } + + function alloc (size, fill, encoding) { + const buffer = new Uint8Array(size); + if (fill !== undefined) exports.fill(buffer, fill, 0, buffer.byteLength, encoding); + return buffer + } + + function allocUnsafe (size) { + return new Uint8Array(size) + } + + function allocUnsafeSlow (size) { + return new Uint8Array(size) + } + + function byteLength (string, encoding) { + return codecFor(encoding).byteLength(string) + } + + function compare (a, b) { + if (a === b) return 0 + + const len = Math.min(a.byteLength, b.byteLength); + + a = new DataView(a.buffer, a.byteOffset, a.byteLength); + b = new DataView(b.buffer, b.byteOffset, b.byteLength); + + let i = 0; + + for (let n = len - (len % 4); i < n; i += 4) { + const x = a.getUint32(i, LE); + const y = b.getUint32(i, LE); + if (x !== y) break + } + + for (; i < len; i++) { + const x = a.getUint8(i); + const y = b.getUint8(i); + if (x < y) return -1 + if (x > y) return 1 + } + + return a.byteLength > b.byteLength ? 1 : a.byteLength < b.byteLength ? -1 : 0 + } + + function concat (buffers, totalLength) { + if (totalLength === undefined) { + totalLength = buffers.reduce((len, buffer) => len + buffer.byteLength, 0); + } + + const result = new Uint8Array(totalLength); + + buffers.reduce( + (offset, buffer) => { + result.set(buffer, offset); + return offset + buffer.byteLength + }, + 0 + ); + + return result + } + + function copy (source, target, targetStart = 0, start = 0, end = source.byteLength) { + if (end > 0 && end < start) return 0 + if (end === start) return 0 + if (source.byteLength === 0 || target.byteLength === 0) return 0 + + if (targetStart < 0) throw new RangeError('targetStart is out of range') + if (start < 0 || start >= source.byteLength) throw new RangeError('sourceStart is out of range') + if (end < 0) throw new RangeError('sourceEnd is out of range') + + if (targetStart >= target.byteLength) targetStart = target.byteLength; + if (end > source.byteLength) end = source.byteLength; + if (target.byteLength - targetStart < end - start) { + end = target.length - targetStart + start; + } + + const len = end - start; + + if (source === target) { + target.copyWithin(targetStart, start, end); + } else { + target.set(source.subarray(start, end), targetStart); + } + + return len + } + + function equals (a, b) { + if (a === b) return true + if (a.byteLength !== b.byteLength) return false + + const len = a.byteLength; + + a = new DataView(a.buffer, a.byteOffset, a.byteLength); + b = new DataView(b.buffer, b.byteOffset, b.byteLength); + + let i = 0; + + for (let n = len - (len % 4); i < n; i += 4) { + if (a.getUint32(i, LE) !== b.getUint32(i, LE)) return false + } + + for (; i < len; i++) { + if (a.getUint8(i) !== b.getUint8(i)) return false + } + + return true + } + + function fill (buffer, value, offset, end, encoding) { + if (typeof value === 'string') { + // fill(buffer, string, encoding) + if (typeof offset === 'string') { + encoding = offset; + offset = 0; + end = buffer.byteLength; + + // fill(buffer, string, offset, encoding) + } else if (typeof end === 'string') { + encoding = end; + end = buffer.byteLength; + } + } else if (typeof val === 'number') { + value = value & 0xff; + } else if (typeof val === 'boolean') { + value = +value; + } + + if (offset < 0 || buffer.byteLength < offset || buffer.byteLength < end) { + throw new RangeError('Out of range index') + } + + if (offset === undefined) offset = 0; + if (end === undefined) end = buffer.byteLength; + + if (end <= offset) return buffer + + if (!value) value = 0; + + if (typeof value === 'number') { + for (let i = offset; i < end; ++i) { + buffer[i] = value; + } + } else { + value = isBuffer(value) ? value : from(value, encoding); + + const len = value.byteLength; + + for (let i = 0; i < end - offset; ++i) { + buffer[i + offset] = value[i % len]; + } + } + + return buffer + } + + function from (value, encodingOrOffset, length) { + // from(string, encoding) + if (typeof value === 'string') return fromString(value, encodingOrOffset) + + // from(array) + if (Array.isArray(value)) return fromArray(value) + + // from(buffer) + if (ArrayBuffer.isView(value)) return fromBuffer(value) + + // from(arrayBuffer[, byteOffset[, length]]) + return fromArrayBuffer(value, encodingOrOffset, length) + } + + function fromString (string, encoding) { + const codec = codecFor(encoding); + const buffer = new Uint8Array(codec.byteLength(string)); + codec.write(buffer, string, 0, buffer.byteLength); + return buffer + } + + function fromArray (array) { + const buffer = new Uint8Array(array.length); + buffer.set(array); + return buffer + } + + function fromBuffer (buffer) { + const copy = new Uint8Array(buffer.byteLength); + copy.set(buffer); + return copy + } + + function fromArrayBuffer (arrayBuffer, byteOffset, length) { + return new Uint8Array(arrayBuffer, byteOffset, length) + } + + function includes (buffer, value, byteOffset, encoding) { + return indexOf(buffer, value, byteOffset, encoding) !== -1 + } + + function bidirectionalIndexOf (buffer, value, byteOffset, encoding, first) { + if (buffer.byteLength === 0) return -1 + + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset === undefined) { + byteOffset = first ? 0 : (buffer.length - 1); + } else if (byteOffset < 0) { + byteOffset += buffer.byteLength; + } + + if (byteOffset >= buffer.byteLength) { + if (first) return -1 + else byteOffset = buffer.byteLength - 1; + } else if (byteOffset < 0) { + if (first) byteOffset = 0; + else return -1 + } + + if (typeof value === 'string') { + value = from(value, encoding); + } else if (typeof value === 'number') { + value = value & 0xff; + + if (first) { + return buffer.indexOf(value, byteOffset) + } else { + return buffer.lastIndexOf(value, byteOffset) + } + } + + if (value.byteLength === 0) return -1 + + if (first) { + let foundIndex = -1; + + for (let i = byteOffset; i < buffer.byteLength; i++) { + if (buffer[i] === value[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === value.byteLength) return foundIndex + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + value.byteLength > buffer.byteLength) { + byteOffset = buffer.byteLength - value.byteLength; + } + + for (let i = byteOffset; i >= 0; i--) { + let found = true; + + for (let j = 0; j < value.byteLength; j++) { + if (buffer[i + j] !== value[j]) { + found = false; + break + } + } + + if (found) return i + } + } + + return -1 + } + + function indexOf (buffer, value, byteOffset, encoding) { + return bidirectionalIndexOf(buffer, value, byteOffset, encoding, true /* first */) + } + + function lastIndexOf (buffer, value, byteOffset, encoding) { + return bidirectionalIndexOf(buffer, value, byteOffset, encoding, false /* last */) + } + + function swap (buffer, n, m) { + const i = buffer[n]; + buffer[n] = buffer[m]; + buffer[m] = i; + } + + function swap16 (buffer) { + const len = buffer.byteLength; + + if (len % 2 !== 0) throw new RangeError('Buffer size must be a multiple of 16-bits') + + for (let i = 0; i < len; i += 2) swap(buffer, i, i + 1); + + return buffer + } + + function swap32 (buffer) { + const len = buffer.byteLength; + + if (len % 4 !== 0) throw new RangeError('Buffer size must be a multiple of 32-bits') + + for (let i = 0; i < len; i += 4) { + swap(buffer, i, i + 3); + swap(buffer, i + 1, i + 2); + } + + return buffer + } + + function swap64 (buffer) { + const len = buffer.byteLength; + + if (len % 8 !== 0) throw new RangeError('Buffer size must be a multiple of 64-bits') + + for (let i = 0; i < len; i += 8) { + swap(buffer, i, i + 7); + swap(buffer, i + 1, i + 6); + swap(buffer, i + 2, i + 5); + swap(buffer, i + 3, i + 4); + } + + return buffer + } + + function toBuffer (buffer) { + return buffer + } + + function toString (buffer, encoding, start = 0, end = buffer.byteLength) { + const len = buffer.byteLength; + + if (start >= len) return '' + if (end <= start) return '' + if (start < 0) start = 0; + if (end > len) end = len; + + if (start !== 0 || end < len) buffer = buffer.subarray(start, end); + + return codecFor(encoding).toString(buffer) + } + + function write (buffer, string, offset, length, encoding) { + // write(buffer, string) + if (offset === undefined) { + encoding = 'utf8'; + + // write(buffer, string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + offset = undefined; + + // write(buffer, string, offset, encoding) + } else if (encoding === undefined && typeof length === 'string') { + encoding = length; + length = undefined; + } + + return codecFor(encoding).write(buffer, string, offset, length) + } + + function writeDoubleLE (buffer, value, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + view.setFloat64(offset, value, true); + + return offset + 8 + } + + function writeFloatLE (buffer, value, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + view.setFloat32(offset, value, true); + + return offset + 4 + } + + function writeUInt32LE (buffer, value, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + view.setUint32(offset, value, true); + + return offset + 4 + } + + function writeInt32LE (buffer, value, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + view.setInt32(offset, value, true); + + return offset + 4 + } + + function readDoubleLE (buffer, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + + return view.getFloat64(offset, true) + } + + function readFloatLE (buffer, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + + return view.getFloat32(offset, true) + } + + function readUInt32LE (buffer, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + + return view.getUint32(offset, true) + } + + function readInt32LE (buffer, offset) { + if (offset === undefined) offset = 0; + + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + + return view.getInt32(offset, true) + } + + module.exports = exports = { + isBuffer, + isEncoding, + alloc, + allocUnsafe, + allocUnsafeSlow, + byteLength, + compare, + concat, + copy, + equals, + fill, + from, + includes, + indexOf, + lastIndexOf, + swap16, + swap32, + swap64, + toBuffer, + toString, + write, + writeDoubleLE, + writeFloatLE, + writeUInt32LE, + writeInt32LE, + readDoubleLE, + readFloatLE, + readUInt32LE, + readInt32LE + }; + } (browser, browser.exports)); + + var blake2b; + var hasRequiredBlake2b; + + function requireBlake2b () { + if (hasRequiredBlake2b) return blake2b; + hasRequiredBlake2b = 1; + var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; + var __toBinary = /* @__PURE__ */ (() => { + var table = new Uint8Array(128); + for (var i = 0; i < 64; i++) + table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); + for (var i2 = 0, j = 0; i2 < n; ) { + var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes2[j++] = c0 << 2 | c1 >> 4; + bytes2[j++] = c1 << 4 | c2 >> 2; + bytes2[j++] = c2 << 6 | c3; + } + return bytes2; + }; + })(); + + // wasm-binary:./blake2b.wat + var require_blake2b = __commonJS({ + "wasm-binary:./blake2b.wat"(exports2, module2) { + module2.exports = __toBinary("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"); + } + }); + + // wasm-module:./blake2b.wat + var bytes = require_blake2b(); + var compiled = WebAssembly.compile(bytes); + blake2b = async (imports) => { + const instance = await WebAssembly.instantiate(await compiled, imports); + return instance.exports; + }; + return blake2b; + } + + var assert = nanoassert; + var b4a = browser.exports; + + var wasm = null; + var wasmPromise = typeof WebAssembly !== "undefined" && requireBlake2b()().then(mod => { + wasm = mod; + }); + + var head = 64; + var freeList = []; + + blake2bWasm.exports = Blake2b; + var BYTES_MIN = blake2bWasm.exports.BYTES_MIN = 16; + var BYTES_MAX = blake2bWasm.exports.BYTES_MAX = 64; + blake2bWasm.exports.BYTES = 32; + var KEYBYTES_MIN = blake2bWasm.exports.KEYBYTES_MIN = 16; + var KEYBYTES_MAX = blake2bWasm.exports.KEYBYTES_MAX = 64; + blake2bWasm.exports.KEYBYTES = 32; + var SALTBYTES = blake2bWasm.exports.SALTBYTES = 16; + var PERSONALBYTES = blake2bWasm.exports.PERSONALBYTES = 16; + + function Blake2b (digestLength, key, salt, personal, noAssert) { + if (!(this instanceof Blake2b)) return new Blake2b(digestLength, key, salt, personal, noAssert) + if (!wasm) throw new Error('WASM not loaded. Wait for Blake2b.ready(cb)') + if (!digestLength) digestLength = 32; + + if (noAssert !== true) { + assert(digestLength >= BYTES_MIN, 'digestLength must be at least ' + BYTES_MIN + ', was given ' + digestLength); + assert(digestLength <= BYTES_MAX, 'digestLength must be at most ' + BYTES_MAX + ', was given ' + digestLength); + if (key != null) { + assert(key instanceof Uint8Array, 'key must be Uint8Array or Buffer'); + assert(key.length >= KEYBYTES_MIN, 'key must be at least ' + KEYBYTES_MIN + ', was given ' + key.length); + assert(key.length <= KEYBYTES_MAX, 'key must be at least ' + KEYBYTES_MAX + ', was given ' + key.length); + } + if (salt != null) { + assert(salt instanceof Uint8Array, 'salt must be Uint8Array or Buffer'); + assert(salt.length === SALTBYTES, 'salt must be exactly ' + SALTBYTES + ', was given ' + salt.length); + } + if (personal != null) { + assert(personal instanceof Uint8Array, 'personal must be Uint8Array or Buffer'); + assert(personal.length === PERSONALBYTES, 'personal must be exactly ' + PERSONALBYTES + ', was given ' + personal.length); + } + } + + if (!freeList.length) { + freeList.push(head); + head += 216; + } + + this.digestLength = digestLength; + this.finalized = false; + this.pointer = freeList.pop(); + this._memory = new Uint8Array(wasm.memory.buffer); + + this._memory.fill(0, 0, 64); + this._memory[0] = this.digestLength; + this._memory[1] = key ? key.length : 0; + this._memory[2] = 1; // fanout + this._memory[3] = 1; // depth + + if (salt) this._memory.set(salt, 32); + if (personal) this._memory.set(personal, 48); + + if (this.pointer + 216 > this._memory.length) this._realloc(this.pointer + 216); // we need 216 bytes for the state + wasm.blake2b_init(this.pointer, this.digestLength); + + if (key) { + this.update(key); + this._memory.fill(0, head, head + key.length); // whiteout key + this._memory[this.pointer + 200] = 128; + } + } + + Blake2b.prototype._realloc = function (size) { + wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536))); + this._memory = new Uint8Array(wasm.memory.buffer); + }; + + Blake2b.prototype.update = function (input) { + assert(this.finalized === false, 'Hash instance finalized'); + assert(input instanceof Uint8Array, 'input must be Uint8Array or Buffer'); + + if (head + input.length > this._memory.length) this._realloc(head + input.length); + this._memory.set(input, head); + wasm.blake2b_update(this.pointer, head, head + input.length); + return this + }; + + Blake2b.prototype.digest = function (enc) { + assert(this.finalized === false, 'Hash instance finalized'); + this.finalized = true; + + freeList.push(this.pointer); + wasm.blake2b_final(this.pointer); + + if (!enc || enc === 'binary') { + return this._memory.slice(this.pointer + 128, this.pointer + 128 + this.digestLength) + } + + if (typeof enc === 'string') { + return b4a.toString(this._memory, enc, this.pointer + 128, this.pointer + 128 + this.digestLength) + } + + assert(enc instanceof Uint8Array && enc.length >= this.digestLength, 'input must be Uint8Array or Buffer'); + for (var i = 0; i < this.digestLength; i++) { + enc[i] = this._memory[this.pointer + 128 + i]; + } + + return enc + }; + + // libsodium compat + Blake2b.prototype.final = Blake2b.prototype.digest; + + Blake2b.WASM = wasm; + Blake2b.SUPPORTED = typeof WebAssembly !== 'undefined'; + + Blake2b.ready = function (cb) { + if (!cb) cb = noop; + if (!wasmPromise) return cb(new Error('WebAssembly not supported')) + return wasmPromise.then(() => cb(), cb) + }; + + Blake2b.prototype.ready = Blake2b.ready; + + Blake2b.prototype.getPartialHash = function () { + return this._memory.slice(this.pointer, this.pointer + 216); + }; + + Blake2b.prototype.setPartialHash = function (ph) { + this._memory.set(ph, this.pointer); + }; + + function noop () {} + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + + function log2$3( V ) + { + return( ( ( V & 0xFFFF0000 ) !== 0 ? ( V &= 0xFFFF0000, 16 ) : 0 ) | ( ( V & 0xFF00FF00 ) !== 0 ? ( V &= 0xFF00FF00, 8 ) : 0 ) | ( ( V & 0xF0F0F0F0 ) !== 0 ? ( V &= 0xF0F0F0F0, 4 ) : 0 ) | ( ( V & 0xCCCCCCCC ) !== 0 ? ( V &= 0xCCCCCCCC, 2 ) : 0 ) | ( ( V & 0xAAAAAAAA ) !== 0 ) ); + } + + + function formatHash(b, title) { + const a = new DataView(b.buffer, b.byteOffset, b.byteLength); + let S = ""; + for (let i=0; i<4; i++) { + if (i>0) S += "\n"; + S += "\t\t"; + for (let j=0; j<4; j++) { + if (j>0) S += " "; + S += a.getUint32(i*16+j*4).toString(16).padStart(8, "0"); + } + } + if (title) S = title + "\n" + S; + return S; + } + + function hashIsEqual(h1, h2) { + if (h1.byteLength != h2.byteLength) return false; + var dv1 = new Int8Array(h1); + var dv2 = new Int8Array(h2); + for (var i = 0 ; i != h1.byteLength ; i++) + { + if (dv1[i] != dv2[i]) return false; + } + return true; + } + + function cloneHasher(h) { + const ph = h.getPartialHash(); + const res = blake2bWasm.exports(64); + res.setPartialHash(ph); + return res; + } + + async function sameRatio$2(curve, g1s, g1sx, g2s, g2sx) { + if (curve.G1.isZero(g1s)) return false; + if (curve.G1.isZero(g1sx)) return false; + if (curve.G2.isZero(g2s)) return false; + if (curve.G2.isZero(g2sx)) return false; + // return curve.F12.eq(curve.pairing(g1s, g2sx), curve.pairing(g1sx, g2s)); + const res = await curve.pairingEq(g1s, g2sx, curve.G1.neg(g1sx), g2s); + return res; + } + + + function askEntropy() { + { + return window.prompt("Enter a random text. (Entropy): ", ""); + } + } + + function getRandomBytes$2(n) { + let array = new Uint8Array(n); + if (typeof globalThis.crypto !== "undefined") { // Supported + globalThis.crypto.getRandomValues(array); + } else { // NodeJS + crypto.randomFillSync(array); + } + return array; + } + + async function sha256digest(data) { + if (typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.subtle !== "undefined") { // Supported + const buffer = await globalThis.crypto.subtle.digest("SHA-256", data.buffer); + return new Uint8Array(buffer); + } else { // NodeJS + return crypto.createHash("sha256").update(data).digest(); + } + } + + /** + * @param {Uint8Array} data + * @param {number} offset + */ + function readUInt32BE(data, offset) { + return new DataView(data.buffer).getUint32(offset, false); + } + + async function getRandomRng(entropy) { + // Generate a random Rng + while (!entropy) { + entropy = await askEntropy(); + } + const hasher = blake2bWasm.exports(64); + hasher.update(getRandomBytes$2(64)); + const enc = new TextEncoder(); // always utf-8 + hasher.update(enc.encode(entropy)); + const hash = hasher.digest(); + + const seed = []; + for (let i=0;i<8;i++) { + seed[i] = readUInt32BE(hash, i*4); + } + const rng = new ChaCha$1(seed); + return rng; + } + + async function rngFromBeaconParams(beaconHash, numIterationsExp) { + let nIterationsInner; + let nIterationsOuter; + if (numIterationsExp<32) { + nIterationsInner = (1 << numIterationsExp) >>> 0; + nIterationsOuter = 1; + } else { + nIterationsInner = 0x100000000; + nIterationsOuter = (1 << (numIterationsExp-32)) >>> 0; + } + + let curHash = beaconHash; + for (let i=0; i { + res[k] = stringifyBigIntsWithField(Fr, o[k]); + }); + return res; + } else if ((typeof(o) == "bigint") || o.eq !== undefined) { + return o.toString(10); + } else { + return o; + } + } + + const HEADER_ZKEY_SECTION = 1; + + const GROTH16_PROTOCOL_ID = 1; + const PLONK_PROTOCOL_ID = 2; + const FFLONK_PROTOCOL_ID = 10; + + /* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + // FFlonk constants + const FF_T_POL_DEG_MIN = 3; + + // ZKEY constants + const ZKEY_FF_NSECTIONS = 17; + + const ZKEY_FF_HEADER_SECTION = 2; + const ZKEY_FF_ADDITIONS_SECTION = 3; + const ZKEY_FF_A_MAP_SECTION = 4; + const ZKEY_FF_B_MAP_SECTION = 5; + const ZKEY_FF_C_MAP_SECTION = 6; + const ZKEY_FF_QL_SECTION = 7; + const ZKEY_FF_QR_SECTION = 8; + const ZKEY_FF_QM_SECTION = 9; + const ZKEY_FF_QO_SECTION = 10; + const ZKEY_FF_QC_SECTION = 11; + const ZKEY_FF_SIGMA1_SECTION = 12; + const ZKEY_FF_SIGMA2_SECTION = 13; + const ZKEY_FF_SIGMA3_SECTION = 14; + const ZKEY_FF_LAGRANGE_SECTION = 15; + const ZKEY_FF_PTAU_SECTION = 16; + const ZKEY_FF_C0_SECTION = 17; + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + async function writeHeader(fd, zkey) { + + // Write the header + /////////// + await startWriteSection(fd, 1); + await fd.writeULE32(1); // Groth + await endWriteSection(fd); + + // Write the Groth header section + /////////// + + const curve = await getCurveFromQ(zkey.q); + + await startWriteSection(fd, 2); + const primeQ = curve.q; + const n8q = (Math.floor( (Scalar$1.bitLength(primeQ) - 1) / 64) +1)*8; + + const primeR = curve.r; + const n8r = (Math.floor( (Scalar$1.bitLength(primeR) - 1) / 64) +1)*8; + + await fd.writeULE32(n8q); + await writeBigInt(fd, primeQ, n8q); + await fd.writeULE32(n8r); + await writeBigInt(fd, primeR, n8r); + await fd.writeULE32(zkey.nVars); // Total number of bars + await fd.writeULE32(zkey.nPublic); // Total number of public vars (not including ONE) + await fd.writeULE32(zkey.domainSize); // domainSize + await writeG1(fd, curve, zkey.vk_alpha_1); + await writeG1(fd, curve, zkey.vk_beta_1); + await writeG2(fd, curve, zkey.vk_beta_2); + await writeG2(fd, curve, zkey.vk_gamma_2); + await writeG1(fd, curve, zkey.vk_delta_1); + await writeG2(fd, curve, zkey.vk_delta_2); + + await endWriteSection(fd); + + + } + + async function writeG1(fd, curve, p) { + const buff = new Uint8Array(curve.G1.F.n8*2); + curve.G1.toRprLEM(buff, 0, p); + await fd.write(buff); + } + + async function writeG2(fd, curve, p) { + const buff = new Uint8Array(curve.G2.F.n8*2); + curve.G2.toRprLEM(buff, 0, p); + await fd.write(buff); + } + + async function readG1(fd, curve, toObject) { + const buff = await fd.read(curve.G1.F.n8*2); + const res = curve.G1.fromRprLEM(buff, 0); + return toObject ? curve.G1.toObject(res) : res; + } + + async function readG2(fd, curve, toObject) { + const buff = await fd.read(curve.G2.F.n8*2); + const res = curve.G2.fromRprLEM(buff, 0); + return toObject ? curve.G2.toObject(res) : res; + } + + + async function readHeader$1(fd, sections, toObject) { + // Read Header + ///////////////////// + await startReadUniqueSection(fd, sections, 1); + const protocolId = await fd.readULE32(); + await endReadSection(fd); + + if (protocolId === GROTH16_PROTOCOL_ID) { + return await readHeaderGroth16(fd, sections, toObject); + } else if (protocolId === PLONK_PROTOCOL_ID) { + return await readHeaderPlonk(fd, sections, toObject); + } else if (protocolId === FFLONK_PROTOCOL_ID) { + return await readHeaderFFlonk(fd, sections, toObject); + } else { + throw new Error("Protocol not supported: "); + } + } + + + + + async function readHeaderGroth16(fd, sections, toObject) { + const zkey = {}; + + zkey.protocol = "groth16"; + + // Read Groth Header + ///////////////////// + await startReadUniqueSection(fd, sections, 2); + const n8q = await fd.readULE32(); + zkey.n8q = n8q; + zkey.q = await readBigInt(fd, n8q); + + const n8r = await fd.readULE32(); + zkey.n8r = n8r; + zkey.r = await readBigInt(fd, n8r); + zkey.curve = await getCurveFromQ(zkey.q); + zkey.nVars = await fd.readULE32(); + zkey.nPublic = await fd.readULE32(); + zkey.domainSize = await fd.readULE32(); + zkey.power = log2$3(zkey.domainSize); + zkey.vk_alpha_1 = await readG1(fd, zkey.curve, toObject); + zkey.vk_beta_1 = await readG1(fd, zkey.curve, toObject); + zkey.vk_beta_2 = await readG2(fd, zkey.curve, toObject); + zkey.vk_gamma_2 = await readG2(fd, zkey.curve, toObject); + zkey.vk_delta_1 = await readG1(fd, zkey.curve, toObject); + zkey.vk_delta_2 = await readG2(fd, zkey.curve, toObject); + await endReadSection(fd); + + return zkey; + + } + + async function readHeaderPlonk(fd, sections, toObject) { + const zkey = {}; + + zkey.protocol = "plonk"; + + // Read Plonk Header + ///////////////////// + await startReadUniqueSection(fd, sections, 2); + const n8q = await fd.readULE32(); + zkey.n8q = n8q; + zkey.q = await readBigInt(fd, n8q); + + const n8r = await fd.readULE32(); + zkey.n8r = n8r; + zkey.r = await readBigInt(fd, n8r); + zkey.curve = await getCurveFromQ(zkey.q); + zkey.nVars = await fd.readULE32(); + zkey.nPublic = await fd.readULE32(); + zkey.domainSize = await fd.readULE32(); + zkey.power = log2$3(zkey.domainSize); + zkey.nAdditions = await fd.readULE32(); + zkey.nConstraints = await fd.readULE32(); + zkey.k1 = await fd.read(n8r); + zkey.k2 = await fd.read(n8r); + + zkey.Qm = await readG1(fd, zkey.curve, toObject); + zkey.Ql = await readG1(fd, zkey.curve, toObject); + zkey.Qr = await readG1(fd, zkey.curve, toObject); + zkey.Qo = await readG1(fd, zkey.curve, toObject); + zkey.Qc = await readG1(fd, zkey.curve, toObject); + zkey.S1 = await readG1(fd, zkey.curve, toObject); + zkey.S2 = await readG1(fd, zkey.curve, toObject); + zkey.S3 = await readG1(fd, zkey.curve, toObject); + zkey.X_2 = await readG2(fd, zkey.curve, toObject); + + await endReadSection(fd); + + return zkey; + } + + async function readHeaderFFlonk(fd, sections, toObject) { + const zkey = {}; + + zkey.protocol = "fflonk"; + zkey.protocolId = FFLONK_PROTOCOL_ID; + + await startReadUniqueSection(fd, sections, ZKEY_FF_HEADER_SECTION); + const n8q = await fd.readULE32(); + zkey.n8q = n8q; + zkey.q = await readBigInt(fd, n8q); + zkey.curve = await getCurveFromQ(zkey.q); + + const n8r = await fd.readULE32(); + zkey.n8r = n8r; + zkey.r = await readBigInt(fd, n8r); + + zkey.nVars = await fd.readULE32(); + zkey.nPublic = await fd.readULE32(); + zkey.domainSize = await fd.readULE32(); + zkey.power = log2$3(zkey.domainSize); + zkey.nAdditions = await fd.readULE32(); + zkey.nConstraints = await fd.readULE32(); + + zkey.k1 = await fd.read(n8r); + zkey.k2 = await fd.read(n8r); + + zkey.w3 = await fd.read(n8r); + zkey.w4 = await fd.read(n8r); + zkey.w8 = await fd.read(n8r); + zkey.wr = await fd.read(n8r); + + zkey.X_2 = await readG2(fd, zkey.curve, toObject); + + zkey.C0 = await readG1(fd, zkey.curve, toObject); + + await endReadSection(fd); + + return zkey; + } + + async function readZKey(fileName, toObject) { + const {fd, sections} = await readBinFile(fileName, "zkey", 1); + + const zkey = await readHeader$1(fd, sections, toObject); + + const Fr = new ZqField$2(zkey.r); + const Rr = Scalar$1.mod(Scalar$1.shl(1, zkey.n8r*8), zkey.r); + const Rri = Fr.inv(Rr); + const Rri2 = Fr.mul(Rri, Rri); + + let curve = await getCurveFromQ(zkey.q); + + // Read IC Section + /////////// + await startReadUniqueSection(fd, sections, 3); + zkey.IC = []; + for (let i=0; i<= zkey.nPublic; i++) { + const P = await readG1(fd, curve, toObject); + zkey.IC.push(P); + } + await endReadSection(fd); + + + // Read Coefs + /////////// + await startReadUniqueSection(fd, sections, 4); + const nCCoefs = await fd.readULE32(); + zkey.ccoefs = []; + for (let i=0; i0) { + const paramsBuff = new Uint8Array(params); + await fd.writeULE32(paramsBuff.byteLength); + await fd.write(paramsBuff); + } else { + await fd.writeULE32(0); + } + + } + + async function writeMPCParams(fd, curve, mpcParams) { + await startWriteSection(fd, 10); + await fd.write(mpcParams.csHash); + await fd.writeULE32(mpcParams.contributions.length); + for (let i=0; i. + */ + + + async function write(fd, witness, prime) { + + await startWriteSection(fd, 1); + const n8 = (Math.floor( (Scalar$1.bitLength(prime) - 1) / 64) +1)*8; + await fd.writeULE32(n8); + await writeBigInt(fd, prime, n8); + await fd.writeULE32(witness.length); + await endWriteSection(fd); + + await startWriteSection(fd, 2); + for (let i=0; i. + */ + const {stringifyBigInts: stringifyBigInts$4} = utils$6; + + async function groth16Prove(zkeyFileName, witnessFileName, logger) { + const {fd: fdWtns, sections: sectionsWtns} = await readBinFile(witnessFileName, "wtns", 2); + + const wtns = await readHeader(fdWtns, sectionsWtns); + + const {fd: fdZKey, sections: sectionsZKey} = await readBinFile(zkeyFileName, "zkey", 2); + + const zkey = await readHeader$1(fdZKey, sectionsZKey); + + if (zkey.protocol != "groth16") { + throw new Error("zkey file is not groth16"); + } + + if (!Scalar$1.eq(zkey.r, wtns.q)) { + throw new Error("Curve of the witness does not match the curve of the proving key"); + } + + if (wtns.nWitness != zkey.nVars) { + throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}`); + } + + const curve = zkey.curve; + const Fr = curve.Fr; + const G1 = curve.G1; + const G2 = curve.G2; + + const power = log2$3(zkey.domainSize); + + if (logger) logger.debug("Reading Wtns"); + const buffWitness = await readSection(fdWtns, sectionsWtns, 2); + if (logger) logger.debug("Reading Coeffs"); + const buffCoeffs = await readSection(fdZKey, sectionsZKey, 4); + + if (logger) logger.debug("Building ABC"); + const [buffA_T, buffB_T, buffC_T] = await buildABC1(curve, zkey, buffWitness, buffCoeffs, logger); + + const inc = power == Fr.s ? curve.Fr.shift : curve.Fr.w[power+1]; + + const buffA = await Fr.ifft(buffA_T, "", "", logger, "IFFT_A"); + const buffAodd = await Fr.batchApplyKey(buffA, Fr.e(1), inc); + const buffAodd_T = await Fr.fft(buffAodd, "", "", logger, "FFT_A"); + + const buffB = await Fr.ifft(buffB_T, "", "", logger, "IFFT_B"); + const buffBodd = await Fr.batchApplyKey(buffB, Fr.e(1), inc); + const buffBodd_T = await Fr.fft(buffBodd, "", "", logger, "FFT_B"); + + const buffC = await Fr.ifft(buffC_T, "", "", logger, "IFFT_C"); + const buffCodd = await Fr.batchApplyKey(buffC, Fr.e(1), inc); + const buffCodd_T = await Fr.fft(buffCodd, "", "", logger, "FFT_C"); + + if (logger) logger.debug("Join ABC"); + const buffPodd_T = await joinABC(curve, zkey, buffAodd_T, buffBodd_T, buffCodd_T, logger); + + let proof = {}; + + if (logger) logger.debug("Reading A Points"); + const buffBasesA = await readSection(fdZKey, sectionsZKey, 5); + proof.pi_a = await curve.G1.multiExpAffine(buffBasesA, buffWitness, logger, "multiexp A"); + + if (logger) logger.debug("Reading B1 Points"); + const buffBasesB1 = await readSection(fdZKey, sectionsZKey, 6); + let pib1 = await curve.G1.multiExpAffine(buffBasesB1, buffWitness, logger, "multiexp B1"); + + if (logger) logger.debug("Reading B2 Points"); + const buffBasesB2 = await readSection(fdZKey, sectionsZKey, 7); + proof.pi_b = await curve.G2.multiExpAffine(buffBasesB2, buffWitness, logger, "multiexp B2"); + + if (logger) logger.debug("Reading C Points"); + const buffBasesC = await readSection(fdZKey, sectionsZKey, 8); + proof.pi_c = await curve.G1.multiExpAffine(buffBasesC, buffWitness.slice((zkey.nPublic+1)*curve.Fr.n8), logger, "multiexp C"); + + if (logger) logger.debug("Reading H Points"); + const buffBasesH = await readSection(fdZKey, sectionsZKey, 9); + const resH = await curve.G1.multiExpAffine(buffBasesH, buffPodd_T, logger, "multiexp H"); + + const r = curve.Fr.random(); + const s = curve.Fr.random(); + + proof.pi_a = G1.add( proof.pi_a, zkey.vk_alpha_1 ); + proof.pi_a = G1.add( proof.pi_a, G1.timesFr( zkey.vk_delta_1, r )); + + proof.pi_b = G2.add( proof.pi_b, zkey.vk_beta_2 ); + proof.pi_b = G2.add( proof.pi_b, G2.timesFr( zkey.vk_delta_2, s )); + + pib1 = G1.add( pib1, zkey.vk_beta_1 ); + pib1 = G1.add( pib1, G1.timesFr( zkey.vk_delta_1, s )); + + proof.pi_c = G1.add(proof.pi_c, resH); + + + proof.pi_c = G1.add( proof.pi_c, G1.timesFr( proof.pi_a, s )); + proof.pi_c = G1.add( proof.pi_c, G1.timesFr( pib1, r )); + proof.pi_c = G1.add( proof.pi_c, G1.timesFr( zkey.vk_delta_1, Fr.neg(Fr.mul(r,s) ))); + + + let publicSignals = []; + + for (let i=1; i<= zkey.nPublic; i++) { + const b = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); + publicSignals.push(Scalar$1.fromRprLE(b)); + } + + proof.pi_a = G1.toObject(G1.toAffine(proof.pi_a)); + proof.pi_b = G2.toObject(G2.toAffine(proof.pi_b)); + proof.pi_c = G1.toObject(G1.toAffine(proof.pi_c)); + + proof.protocol = "groth16"; + proof.curve = curve.name; + + await fdZKey.close(); + await fdWtns.close(); + + proof = stringifyBigInts$4(proof); + publicSignals = stringifyBigInts$4(publicSignals); + + return {proof, publicSignals}; + } + + + async function buildABC1(curve, zkey, witness, coeffs, logger) { + const n8 = curve.Fr.n8; + const sCoef = 4*3 + zkey.n8r; + const nCoef = (coeffs.byteLength-4) / sCoef; + + const outBuffA = new BigBuffer$1(zkey.domainSize * n8); + const outBuffB = new BigBuffer$1(zkey.domainSize * n8); + const outBuffC = new BigBuffer$1(zkey.domainSize * n8); + + const outBuf = [ outBuffA, outBuffB ]; + for (let i=0; i1) { + const promises2 = []; + for (let i=0; i v) { + n = k - 1; + } else if (va < v) { + m = k + 1; + } else { + n = k; + } + } + return 4 + m*sCoef; + } + } + */ + + async function joinABC(curve, zkey, a, b, c, logger) { + const MAX_CHUNK_SIZE = 1 << 22; + + const n8 = curve.Fr.n8; + const nElements = Math.floor(a.byteLength / curve.Fr.n8); + + const promises = []; + + for (let i=0; i0) { + res.unshift(0); + i--; + } + } + return res; + } + + /* global BigInt */ + const hexLen$1 = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4]; + + function fromString$1(s, radix) { + if ((!radix)||(radix==10)) { + return BigInt(s); + } else if (radix==16) { + if (s.slice(0,2) == "0x") { + return BigInt(s); + } else { + return BigInt("0x"+s); + } + } + } + + const e$1 = fromString$1; function fromArray(a, radix) { let acc =BigInt(0); @@ -29,7 +19955,7 @@ var snarkjs = (function (exports) { function bitLength$6(a) { const aS =a.toString(16); - return (aS.length-1)*4 +hexLen[parseInt(aS[0], 16)]; + return (aS.length-1)*4 +hexLen$1[parseInt(aS[0], 16)]; } function isNegative$4(a) { @@ -40,18 +19966,18 @@ var snarkjs = (function (exports) { return !a; } - function shiftLeft(a, n) { + function shiftLeft$1(a, n) { return BigInt(a) << BigInt(n); } - function shiftRight(a, n) { + function shiftRight$1(a, n) { return BigInt(a) >> BigInt(n); } - const shl = shiftLeft; - const shr = shiftRight; + const shl = shiftLeft$1; + const shr = shiftRight$1; - function isOdd$5(a) { + function isOdd$6(a) { return (BigInt(a) & BigInt(1)) == BigInt(1); } @@ -73,7 +19999,7 @@ var snarkjs = (function (exports) { } - function bits(n) { + function bits$1(n) { let E = BigInt(n); const res = []; while (E) { @@ -106,19 +20032,19 @@ var snarkjs = (function (exports) { } - function add(a, b) { + function add$1(a, b) { return BigInt(a) + BigInt(b); } - function sub(a, b) { + function sub$1(a, b) { return BigInt(a) - BigInt(b); } - function neg(a) { + function neg$1(a) { return -BigInt(a); } - function mul(a, b) { + function mul$1(a, b) { return BigInt(a) * BigInt(b); } @@ -126,11 +20052,11 @@ var snarkjs = (function (exports) { return BigInt(a) * BigInt(a); } - function pow(a, b) { + function pow$1(a, b) { return BigInt(a) ** BigInt(b); } - function exp$1(a, b) { + function exp$2(a, b) { return BigInt(a) ** BigInt(b); } @@ -138,15 +20064,15 @@ var snarkjs = (function (exports) { return BigInt(a) >= 0 ? BigInt(a) : -BigInt(a); } - function div(a, b) { + function div$1(a, b) { return BigInt(a) / BigInt(b); } - function mod(a, b) { + function mod$1(a, b) { return BigInt(a) % BigInt(b); } - function eq(a, b) { + function eq$1(a, b) { return BigInt(a) == BigInt(b); } @@ -158,7 +20084,7 @@ var snarkjs = (function (exports) { return BigInt(a) < BigInt(b); } - function gt(a, b) { + function gt$1(a, b) { return BigInt(a) > BigInt(b); } @@ -166,11 +20092,11 @@ var snarkjs = (function (exports) { return BigInt(a) <= BigInt(b); } - function geq(a, b) { + function geq$1(a, b) { return BigInt(a) >= BigInt(b); } - function band(a, b) { + function band$1(a, b) { return BigInt(a) & BigInt(b); } @@ -194,6 +20120,4220 @@ var snarkjs = (function (exports) { return !BigInt(a); } + // Returns a buffer with Little Endian Representation + function toRprLE$1(buff, o, e, n8) { + const s = "0000000" + e.toString(16); + const v = new Uint32Array(buff.buffer, o, n8/4); + const l = (((s.length-7)*4 - 1) >> 5)+1; // Number of 32bit words; + for (let i=0; i> 5)+1; // Number of 32bit words; + for (let i=0; i a[a.length-i-1] = ch.toString(16).padStart(8,"0") ); + return fromString$1(a.join(""), 16); + } + + // Pases a buffer with Big Endian Representation + function fromRprBE$1(buff, o, n8) { + n8 = n8 || buff.byteLength; + o = o || 0; + const v = new DataView(buff.buffer, buff.byteOffset + o, n8); + const a = new Array(n8/4); + for (let i=0; i. + */ + + + /* + exports.mulScalar = (F, base, e) =>{ + let res = F.zero; + let rem = bigInt(e); + let exp = base; + + while (! rem.eq(bigInt.zero)) { + if (rem.and(bigInt.one).eq(bigInt.one)) { + res = F.add(res, exp); + } + exp = F.double(exp); + rem = rem.shiftRight(1); + } + + return res; + }; + */ + + + function exp$1(F, base, e) { + + if (isZero$1(e)) return F.one; + + const n = bits$1(e); + + if (n.length==0) return F.one; + + let res = base; + + for (let i=n.length-2; i>=0; i--) { + + res = F.square(res); + + if (n[i]) { + res = F.mul(res, base); + } + } + + return res; + } + + // Check here: https://eprint.iacr.org/2012/685.pdf + + function buildSqrt$1 (F) { + if ((F.m % 2) == 1) { + if (eq$1(mod$1(F.p, 4), 1 )) { + if (eq$1(mod$1(F.p, 8), 1 )) { + if (eq$1(mod$1(F.p, 16), 1 )) { + // alg7_muller(F); + alg5_tonelliShanks$1(F); + } else if (eq$1(mod$1(F.p, 16), 9 )) { + alg4_kong$1(F); + } else { + throw new Error("Field withot sqrt"); + } + } else if (eq$1(mod$1(F.p, 8), 5 )) { + alg3_atkin$1(F); + } else { + throw new Error("Field withot sqrt"); + } + } else if (eq$1(mod$1(F.p, 4), 3 )) { + alg2_shanks$1(F); + } + } else { + const pm2mod4 = mod$1(pow$1(F.p, F.m/2), 4); + if (pm2mod4 == 1) { + alg10_adj$1(F); + } else if (pm2mod4 == 3) { + alg9_adj$1(F); + } else { + alg8_complex$1(F); + } + + } + } + + + function alg5_tonelliShanks$1(F) { + F.sqrt_q = pow$1(F.p, F.m); + + F.sqrt_s = 0; + F.sqrt_t = sub$1(F.sqrt_q, 1); + + while (!isOdd$6(F.sqrt_t)) { + F.sqrt_s = F.sqrt_s + 1; + F.sqrt_t = div$1(F.sqrt_t, 2); + } + + let c0 = F.one; + + while (F.eq(c0, F.one)) { + const c = F.random(); + F.sqrt_z = F.pow(c, F.sqrt_t); + c0 = F.pow(F.sqrt_z, 2 ** (F.sqrt_s-1) ); + } + + F.sqrt_tm1d2 = div$1(sub$1(F.sqrt_t, 1),2); + + F.sqrt = function(a) { + const F=this; + if (F.isZero(a)) return F.zero; + let w = F.pow(a, F.sqrt_tm1d2); + const a0 = F.pow( F.mul(F.square(w), a), 2 ** (F.sqrt_s-1) ); + if (F.eq(a0, F.negone)) return null; + + let v = F.sqrt_s; + let x = F.mul(a, w); + let b = F.mul(x, w); + let z = F.sqrt_z; + while (!F.eq(b, F.one)) { + let b2k = F.square(b); + let k=1; + while (!F.eq(b2k, F.one)) { + b2k = F.square(b2k); + k++; + } + + w = z; + for (let i=0; i>>0; + } + } + } + return array; + } + + /* + Copyright 2018 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + /* + This library does operations on polynomials with coefficients in a field F. + + A polynomial P(x) = p0 + p1 * x + p2 * x^2 + ... + pn * x^n is represented + by the array [ p0, p1, p2, ... , pn ]. + */ + + class FFT$1 { + constructor (G, F, opMulGF) { + this.F = F; + this.G = G; + this.opMulGF = opMulGF; + + let rem = F.sqrt_t || F.t; + let s = F.sqrt_s || F.s; + + let nqr = F.one; + while (F.eq(F.pow(nqr, F.half), F.one)) nqr = F.add(nqr, F.one); + + this.w = new Array(s+1); + this.wi = new Array(s+1); + this.w[s] = this.F.pow(nqr, rem); + this.wi[s] = this.F.inv(this.w[s]); + + let n=s-1; + while (n>=0) { + this.w[n] = this.F.square(this.w[n+1]); + this.wi[n] = this.F.square(this.wi[n+1]); + n--; + } + + + this.roots = []; + /* + for (let i=0; i<16; i++) { + let r = this.F.one; + n = 1 << i; + const rootsi = new Array(n); + for (let j=0; j=0) && (!this.roots[i]); i--) { + let r = this.F.one; + const nroots = 1 << i; + const rootsi = new Array(nroots); + for (let j=0; j> 1; + const p1 = __fft$1(PF, pall, bits-1, offset, step*2); + const p2 = __fft$1(PF, pall, bits-1, offset+step, step*2); + + const out = new Array(n); + + for (let i=0; i> this.one; + this.bitLength = bitLength$6(this.p); + this.mask = (this.one << BigInt(this.bitLength)) - this.one; + + this.n64 = Math.floor((this.bitLength - 1) / 64)+1; + this.n32 = this.n64*2; + this.n8 = this.n64*8; + this.R = this.e(this.one << BigInt(this.n64*64)); + this.Ri = this.inv(this.R); + + const e = this.negone >> this.one; + this.nqr = this.two; + let r = this.pow(this.nqr, e); + while (!this.eq(r, this.negone)) { + this.nqr = this.nqr + this.one; + r = this.pow(this.nqr, e); + } + + + this.s = 0; + this.t = this.negone; + + while ((this.t & this.one) == this.zero) { + this.s = this.s + 1; + this.t = this.t >> this.one; + } + + this.nqr_to_t = this.pow(this.nqr, this.t); + + buildSqrt$1(this); + + this.FFT = new FFT$1(this, this, this.mul.bind(this)); + + this.fft = this.FFT.fft.bind(this.FFT); + this.ifft = this.FFT.ifft.bind(this.FFT); + this.w = this.FFT.w; + this.wi = this.FFT.wi; + + this.shift = this.square(this.nqr); + this.k = this.exp(this.nqr, 2**this.s); + } + + e(a,b) { + let res; + if (!b) { + res = BigInt(a); + } else if (b==16) { + res = BigInt("0x"+a); + } + if (res < 0) { + let nres = -res; + if (nres >= this.p) nres = nres % this.p; + return this.p - nres; + } else { + return (res>= this.p) ? res%this.p : res; + } + + } + + add(a, b) { + const res = a + b; + return res >= this.p ? res-this.p : res; + } + + sub(a, b) { + return (a >= b) ? a-b : this.p-b+a; + } + + neg(a) { + return a ? this.p-a : a; + } + + mul(a, b) { + return (a*b)%this.p; + } + + mulScalar(base, s) { + return (base * this.e(s)) % this.p; + } + + square(a) { + return (a*a) % this.p; + } + + eq(a, b) { + return a==b; + } + + neq(a, b) { + return a!=b; + } + + lt(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa < bb; + } + + gt(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa > bb; + } + + leq(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa <= bb; + } + + geq(a, b) { + const aa = (a > this.half) ? a - this.p : a; + const bb = (b > this.half) ? b - this.p : b; + return aa >= bb; + } + + div(a, b) { + return this.mul(a, this.inv(b)); + } + + idiv(a, b) { + if (!b) throw new Error("Division by zero"); + return a / b; + } + + inv(a) { + if (!a) throw new Error("Division by zero"); + + let t = this.zero; + let r = this.p; + let newt = this.one; + let newr = a % this.p; + while (newr) { + let q = r/newr; + [t, newt] = [newt, t-q*newt]; + [r, newr] = [newr, r-q*newr]; + } + if (t= this.p ? res-this.p : res; + } + + bor(a, b) { + const res = ((a | b) & this.mask); + return res >= this.p ? res-this.p : res; + } + + bxor(a, b) { + const res = ((a ^ b) & this.mask); + return res >= this.p ? res-this.p : res; + } + + bnot(a) { + const res = a ^ this.mask; + return res >= this.p ? res-this.p : res; + } + + shl(a, b) { + if (Number(b) < this.bitLength) { + const res = (a << b) & this.mask; + return res >= this.p ? res-this.p : res; + } else { + const nb = this.p - b; + if (Number(nb) < this.bitLength) { + return a >> nb; + } else { + return this.zero; + } + } + } + + shr(a, b) { + if (Number(b) < this.bitLength) { + return a >> b; + } else { + const nb = this.p - b; + if (Number(nb) < this.bitLength) { + const res = (a << nb) & this.mask; + return res >= this.p ? res-this.p : res; + } else { + return 0; + } + } + } + + land(a, b) { + return (a && b) ? this.one : this.zero; + } + + lor(a, b) { + return (a || b) ? this.one : this.zero; + } + + lnot(a) { + return (a) ? this.zero : this.one; + } + + sqrt_old(n) { + + if (n == this.zero) return this.zero; + + // Test that have solution + const res = this.pow(n, this.negone >> this.one); + if ( res != this.one ) return null; + + let m = this.s; + let c = this.nqr_to_t; + let t = this.pow(n, this.t); + let r = this.pow(n, this.add(this.t, this.one) >> this.one ); + + while ( t != this.one ) { + let sq = this.square(t); + let i = 1; + while (sq != this.one ) { + i++; + sq = this.square(sq); + } + + // b = c ^ m-i-1 + let b = c; + for (let j=0; j< m-i-1; j ++) b = this.square(b); + + m = i; + c = this.square(b); + t = this.mul(t, c); + r = this.mul(r, b); + } + + if (r > (this.p >> this.one)) { + r = this.neg(r); + } + + return r; + } + + normalize(a, b) { + a = BigInt(a,b); + if (a < 0) { + let na = -a; + if (na >= this.p) na = na % this.p; + return this.p - na; + } else { + return (a>= this.p) ? a%this.p : a; + } + } + + random() { + const nBytes = (this.bitLength*2 / 8); + let res =this.zero; + for (let i=0; i this.half)&&(base == 10)) { + const v = this.p-a; + vs = "-"+v.toString(base); + } else { + vs = a.toString(base); + } + return vs; + } + + isZero(a) { + return a == this.zero; + } + + fromRng(rng) { + let v; + do { + v=this.zero; + for (let i=0; i= this.p); + v = (v * this.Ri) % this.p; // Convert from montgomery + return v; + } + + fft(a) { + return this.FFT.fft(a); + } + + ifft(a) { + return this.FFT.ifft(a); + } + + // Returns a buffer with Little Endian Representation + toRprLE(buff, o, e) { + toRprLE$1(buff, o, e, this.n64*8); + } + + // Returns a buffer with Big Endian Representation + toRprBE(buff, o, e) { + toRprBE$1(buff, o, e, this.n64*8); + } + + // Returns a buffer with Big Endian Montgomery Representation + toRprBEM(buff, o, e) { + return this.toRprBE(buff, o, this.mul(this.R, e)); + } + + toRprLEM(buff, o, e) { + return this.toRprLE(buff, o, this.mul(this.R, e)); + } + + + // Pases a buffer with Little Endian Representation + fromRprLE(buff, o) { + return fromRprLE$1(buff, o, this.n8); + } + + // Pases a buffer with Big Endian Representation + fromRprBE(buff, o) { + return fromRprBE$1(buff, o, this.n8); + } + + fromRprLEM(buff, o) { + return this.mul(this.fromRprLE(buff, o), this.Ri); + } + + fromRprBEM(buff, o) { + return this.mul(this.fromRprBE(buff, o), this.Ri); + } + + toObject(a) { + return a; + } + } + + /* global WebAssembly */ + + function thread$1(self) { + const MAXMEM = 32767; + let instance; + let memory; + + if (self) { + self.onmessage = function(e) { + let data; + if (e.data) { + data = e.data; + } else { + data = e; + } + + if (data[0].cmd == "INIT") { + init(data[0]).then(function() { + self.postMessage(data.result); + }); + } else if (data[0].cmd == "TERMINATE") { + self.close(); + } else { + const res = runTask(data); + self.postMessage(res); + } + }; + } + + async function init(data) { + const code = new Uint8Array(data.code); + const wasmModule = await WebAssembly.compile(code); + memory = new WebAssembly.Memory({initial:data.init, maximum: MAXMEM}); + + instance = await WebAssembly.instantiate(wasmModule, { + env: { + "memory": memory + } + }); + } + + + + function alloc(length) { + const u32 = new Uint32Array(memory.buffer, 0, 1); + while (u32[0] & 3) u32[0]++; // Return always aligned pointers + const res = u32[0]; + u32[0] += length; + if (u32[0] + length > memory.buffer.byteLength) { + const currentPages = memory.buffer.byteLength / 0x10000; + let requiredPages = Math.floor((u32[0] + length) / 0x10000)+1; + if (requiredPages>MAXMEM) requiredPages=MAXMEM; + memory.grow(requiredPages-currentPages); + } + return res; + } + + function allocBuffer(buffer) { + const p = alloc(buffer.byteLength); + setBuffer(p, buffer); + return p; + } + + function getBuffer(pointer, length) { + const u8 = new Uint8Array(memory.buffer); + return new Uint8Array(u8.buffer, u8.byteOffset + pointer, length); + } + + function setBuffer(pointer, buffer) { + const u8 = new Uint8Array(memory.buffer); + u8.set(new Uint8Array(buffer), pointer); + } + + function runTask(task) { + if (task[0].cmd == "INIT") { + return init(task[0]); + } + const ctx = { + vars: [], + out: [] + }; + const u32a = new Uint32Array(memory.buffer, 0, 1); + const oldAlloc = u32a[0]; + for (let i=0; i= 2 && (minorVersion >= 1 || patchVersion >= 7)) { + // If we've buffered other content, put a space in between the items + if (msgStr !== "") { + msgStr += " "; + } + // Then append the value to the message we are creating + const msg = (Scalar.fromArray(arr, 0x100000000).toString()); + msgStr += msg; + } else { + console.log(Scalar.fromArray(arr, 0x100000000)); + } + }, + error: function(code, pstr, a,b,c,d) { + let errStr; + if (code == 7) { + errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " != " + wc.getFr(c).toString() + " " +p2str(d); + } else if (code == 9) { + errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " " +p2str(c); + } else if ((code == 5)&&(options.sym)) { + errStr=p2str(pstr)+ " " + options.sym.labelIdx2Name[c]; + } else { + errStr=p2str(pstr)+ " " + a + " " + b + " " + c + " " + d; + } + console.log("ERROR: ", code, errStr); + throw new Error(errStr); + }, + log: function(a) { + console.log(wc.getFr(a).toString()); + }, + logGetSignal: function(signal, pVal) { + if (options.logGetSignal) { + options.logGetSignal(signal, wc.getFr(pVal) ); + } + }, + logSetSignal: function(signal, pVal) { + if (options.logSetSignal) { + options.logSetSignal(signal, wc.getFr(pVal) ); + } + }, + logStartComponent: function(cIdx) { + if (options.logStartComponent) { + options.logStartComponent(cIdx); + } + }, + logFinishComponent: function(cIdx) { + if (options.logFinishComponent) { + options.logFinishComponent(cIdx); + } + } + } + }); + + if (typeof instance.exports.getVersion == 'function') { + majorVersion = instance.exports.getVersion(); + } + if (typeof instance.exports.getMinorVersion == 'function') { + minorVersion = instance.exports.getMinorVersion(); + } + if (typeof instance.exports.getPatchVersion == 'function') { + patchVersion = instance.exports.getPatchVersion(); + } + + const sanityCheck = + options && + ( + options.sanityCheck || + options.logGetSignal || + options.logSetSignal || + options.logStartComponent || + options.logFinishComponent + ); + + // We explicitly check for major version 2 in case there's a circom v3 in the future + if (majorVersion === 2) { + wc = new WitnessCalculatorCircom2(instance, sanityCheck); + } else { + // TODO: Maybe we want to check for the explicit version 1 before choosing this? + wc = new WitnessCalculatorCircom1(memory, instance, sanityCheck); + } + return wc; + + function getMessage() { + var message = ""; + var c = instance.exports.getMessageChar(); + while ( c != 0 ) { + message += String.fromCharCode(c); + c = instance.exports.getMessageChar(); + } + return message; + } + + function p2str(p) { + const i8 = new Uint8Array(memory.buffer); + + const bytes = []; + + for (let i=0; i8[p+i]>0; i++) bytes.push(i8[p+i]); + + return String.fromCharCode.apply(null, bytes); + } + } + class WitnessCalculatorCircom1 { + constructor(memory, instance, sanityCheck) { + this.memory = memory; + this.i32 = new Uint32Array(memory.buffer); + this.instance = instance; + + this.n32 = (this.instance.exports.getFrLen() >> 2) - 2; + const pRawPrime = this.instance.exports.getPRawPrime(); + + const arr = new Array(this.n32); + for (let i=0; i> 2) + i]; + } + + this.prime = Scalar.fromArray(arr, 0x100000000); + + this.Fr = new ZqField$1(this.prime); + + this.mask32 = Scalar.fromString("FFFFFFFF", 16); + this.NVars = this.instance.exports.getNVars(); + this.n64 = Math.floor((this.Fr.bitLength - 1) / 64)+1; + this.R = this.Fr.e( Scalar.shiftLeft(1 , this.n64*64)); + this.RInv = this.Fr.inv(this.R); + this.sanityCheck = sanityCheck; + } + + circom_version() { + return 1; + } + + async _doCalculateWitness(input, sanityCheck) { + this.instance.exports.init((this.sanityCheck || sanityCheck) ? 1 : 0); + const pSigOffset = this.allocInt(); + const pFr = this.allocFr(); + const keys = Object.keys(input); + keys.forEach( (k) => { + const h = fnvHash(k); + const hMSB = parseInt(h.slice(0,8), 16); + const hLSB = parseInt(h.slice(8,16), 16); + try { + this.instance.exports.getSignalOffset32(pSigOffset, 0, hMSB, hLSB); + } catch (err) { + throw new Error(`Signal ${k} is not an input of the circuit.`); + } + const sigOffset = this.getInt(pSigOffset); + const fArr = flatArray(input[k]); + for (let i=0; i>2]; + } + + setInt(p, v) { + this.i32[p>>2] = v; + } + + getFr(p) { + const self = this; + const idx = (p>>2); + + if (self.i32[idx + 1] & 0x80000000) { + const arr = new Array(self.n32); + for (let i=0; i> 2)] = a; + self.i32[(p >> 2) + 1] = 0; + return; + } + + self.i32[(p >> 2)] = 0; + self.i32[(p >> 2) + 1] = 0x80000000; + const arr = Scalar.toArray(v, 0x100000000); + for (let i=0; i=0) { + self.i32[(p >> 2) + 2 + i] = arr[idx]; + } else { + self.i32[(p >> 2) + 2 + i] = 0; + } + } + } + } + + class WitnessCalculatorCircom2 { + constructor(instance, sanityCheck) { + this.instance = instance; + + this.version = this.instance.exports.getVersion(); + this.n32 = this.instance.exports.getFieldNumLen32(); + + this.instance.exports.getRawPrime(); + const arr = new Array(this.n32); + for (let i=0; i { + const h = fnvHash(k); + const hMSB = parseInt(h.slice(0,8), 16); + const hLSB = parseInt(h.slice(8,16), 16); + const fArr = flatArray(input[k]); + for (let i=0; i. + */ + const { unstringifyBigInts: unstringifyBigInts$b} = utils$6; + + async function wtnsCalculate(_input, wasmFileName, wtnsFileName, options) { + const input = unstringifyBigInts$b(_input); + + const fdWasm = await readExisting(wasmFileName); + const wasm = await fdWasm.read(fdWasm.totalSize); + await fdWasm.close(); + + const wc = await builder(wasm); + if (wc.circom_version() == 1) { + const w = await wc.calculateBinWitness(input); + + const fdWtns = await createBinFile(wtnsFileName, "wtns", 2, 2); + + await writeBin(fdWtns, w, wc.prime); + await fdWtns.close(); + } else { + const fdWtns = await createOverride(wtnsFileName); + + const w = await wc.calculateWTNSBin(input); + + await fdWtns.write(w); + await fdWtns.close(); + } + } + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + const {unstringifyBigInts: unstringifyBigInts$a} = utils$6; + + async function groth16FullProve(_input, wasmFile, zkeyFileName, logger) { + const input = unstringifyBigInts$a(_input); + + const wtns= { + type: "mem" + }; + await wtnsCalculate(input, wasmFile, wtns); + return await groth16Prove(zkeyFileName, wtns, logger); + } + + /* + Copyright 2018 0kims association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + const {unstringifyBigInts: unstringifyBigInts$9} = utils$6; + + async function groth16Verify(_vk_verifier, _publicSignals, _proof, logger) { + /* + let cpub = vk_verifier.IC[0]; + for (let s= 0; s< vk_verifier.nPublic; s++) { + cpub = G1.add( cpub, G1.timesScalar( vk_verifier.IC[s+1], publicSignals[s])); + } + */ + + const vk_verifier = unstringifyBigInts$9(_vk_verifier); + const proof = unstringifyBigInts$9(_proof); + const publicSignals = unstringifyBigInts$9(_publicSignals); + + const curve = await getCurveFromName(vk_verifier.curve); + + const IC0 = curve.G1.fromObject(vk_verifier.IC[0]); + const IC = new Uint8Array(curve.G1.F.n8*2 * publicSignals.length); + const w = new Uint8Array(curve.Fr.n8 * publicSignals.length); + + if (!publicInputsAreValid$1(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } + + for (let i=0; i. + */ + const { unstringifyBigInts: unstringifyBigInts$8} = utils$6; + + function p256$2(n) { + let nstr = n.toString(16); + while (nstr.length < 64) nstr = "0"+nstr; + nstr = `"0x${nstr}"`; + return nstr; + } + + async function groth16ExportSolidityCallData(_proof, _pub) { + const proof = unstringifyBigInts$8(_proof); + const pub = unstringifyBigInts$8(_pub); + + let inputs = ""; + for (let i=0; i. + */ + + var groth16 = /*#__PURE__*/Object.freeze({ + __proto__: null, + fullProve: groth16FullProve, + prove: groth16Prove, + verify: groth16Verify, + exportSolidityCallData: groth16ExportSolidityCallData + }); + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + function hashToG2(curve, hash) { + const hashV = new DataView(hash.buffer, hash.byteOffset, hash.byteLength); + const seed = []; + for (let i=0; i<8; i++) { + seed[i] = hashV.getUint32(i*4); + } + + const rng = new ChaCha$1(seed); + + const g2_sp = curve.G2.fromRng(rng); + + return g2_sp; + } + + function getG2sp(curve, persinalization, challenge, g1s, g1sx) { + + const h = blake2bWasm.exports(64); + const b1 = new Uint8Array([persinalization]); + h.update(b1); + h.update(challenge); + const b3 = curve.G1.toUncompressed(g1s); + h.update( b3); + const b4 = curve.G1.toUncompressed(g1sx); + h.update( b4); + const hash =h.digest(); + + return hashToG2(curve, hash); + } + + function calculatePubKey(k, curve, personalization, challengeHash, rng ) { + k.g1_s = curve.G1.toAffine(curve.G1.fromRng(rng)); + k.g1_sx = curve.G1.toAffine(curve.G1.timesFr(k.g1_s, k.prvKey)); + k.g2_sp = curve.G2.toAffine(getG2sp(curve, personalization, challengeHash, k.g1_s, k.g1_sx)); + k.g2_spx = curve.G2.toAffine(curve.G2.timesFr(k.g2_sp, k.prvKey)); + return k; + } + + function createPTauKey(curve, challengeHash, rng) { + const key = { + tau: {}, + alpha: {}, + beta: {} + }; + key.tau.prvKey = curve.Fr.fromRng(rng); + key.alpha.prvKey = curve.Fr.fromRng(rng); + key.beta.prvKey = curve.Fr.fromRng(rng); + calculatePubKey(key.tau, curve, 0, challengeHash, rng); + calculatePubKey(key.alpha, curve, 1, challengeHash, rng); + calculatePubKey(key.beta, curve, 2, challengeHash, rng); + return key; + } + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + async function writePTauHeader(fd, curve, power, ceremonyPower) { + // Write the header + /////////// + + if (! ceremonyPower) ceremonyPower = power; + await fd.writeULE32(1); // Header type + const pHeaderSize = fd.pos; + await fd.writeULE64(0); // Temporally set to 0 length + + await fd.writeULE32(curve.F1.n64*8); + + const buff = new Uint8Array(curve.F1.n8); + Scalar$1.toRprLE(buff, 0, curve.q, curve.F1.n8); + await fd.write(buff); + await fd.writeULE32(power); // power + await fd.writeULE32(ceremonyPower); // power + + const headerSize = fd.pos - pHeaderSize - 8; + + const oldPos = fd.pos; + + await fd.writeULE64(headerSize, pHeaderSize); + + fd.pos = oldPos; + } + + async function readPTauHeader(fd, sections) { + if (!sections[1]) throw new Error(fd.fileName + ": File has no header"); + if (sections[1].length>1) throw new Error(fd.fileName +": File has more than one header"); + + fd.pos = sections[1][0].p; + const n8 = await fd.readULE32(); + const buff = await fd.read(n8); + const q = Scalar$1.fromRprLE(buff); + + const curve = await getCurveFromQ(q); + + if (curve.F1.n64*8 != n8) throw new Error(fd.fileName +": Invalid size"); + + const power = await fd.readULE32(); + const ceremonyPower = await fd.readULE32(); + + if (fd.pos-sections[1][0].p != sections[1][0].size) throw new Error("Invalid PTau header size"); + + return {curve, power, ceremonyPower}; + } + + + async function readPtauPubKey(fd, curve, montgomery) { + + const buff = await fd.read(curve.F1.n8*2*6 + curve.F2.n8*2*3); + + return fromPtauPubKeyRpr(buff, 0, curve, montgomery); + } + + function fromPtauPubKeyRpr(buff, pos, curve, montgomery) { + + const key = { + tau: {}, + alpha: {}, + beta: {} + }; + + key.tau.g1_s = readG1(); + key.tau.g1_sx = readG1(); + key.alpha.g1_s = readG1(); + key.alpha.g1_sx = readG1(); + key.beta.g1_s = readG1(); + key.beta.g1_sx = readG1(); + key.tau.g2_spx = readG2(); + key.alpha.g2_spx = readG2(); + key.beta.g2_spx = readG2(); + + return key; + + function readG1() { + let p; + if (montgomery) { + p = curve.G1.fromRprLEM( buff, pos ); + } else { + p = curve.G1.fromRprUncompressed( buff, pos ); + } + pos += curve.G1.F.n8*2; + return p; + } + + function readG2() { + let p; + if (montgomery) { + p = curve.G2.fromRprLEM( buff, pos ); + } else { + p = curve.G2.fromRprUncompressed( buff, pos ); + } + pos += curve.G2.F.n8*2; + return p; + } + } + + function toPtauPubKeyRpr(buff, pos, curve, key, montgomery) { + + writeG1(key.tau.g1_s); + writeG1(key.tau.g1_sx); + writeG1(key.alpha.g1_s); + writeG1(key.alpha.g1_sx); + writeG1(key.beta.g1_s); + writeG1(key.beta.g1_sx); + writeG2(key.tau.g2_spx); + writeG2(key.alpha.g2_spx); + writeG2(key.beta.g2_spx); + + async function writeG1(p) { + if (montgomery) { + curve.G1.toRprLEM(buff, pos, p); + } else { + curve.G1.toRprUncompressed(buff, pos, p); + } + pos += curve.F1.n8*2; + } + + async function writeG2(p) { + if (montgomery) { + curve.G2.toRprLEM(buff, pos, p); + } else { + curve.G2.toRprUncompressed(buff, pos, p); + } + pos += curve.F2.n8*2; + } + + return buff; + } + + async function writePtauPubKey(fd, curve, key, montgomery) { + const buff = new Uint8Array(curve.F1.n8*2*6 + curve.F2.n8*2*3); + toPtauPubKeyRpr(buff, 0, curve, key, montgomery); + await fd.write(buff); + } + + async function readContribution(fd, curve) { + const c = {}; + + c.tauG1 = await readG1(); + c.tauG2 = await readG2(); + c.alphaG1 = await readG1(); + c.betaG1 = await readG1(); + c.betaG2 = await readG2(); + c.key = await readPtauPubKey(fd, curve, true); + c.partialHash = await fd.read(216); + c.nextChallenge = await fd.read(64); + c.type = await fd.readULE32(); + + const buffV = new Uint8Array(curve.G1.F.n8*2*6+curve.G2.F.n8*2*3); + toPtauPubKeyRpr(buffV, 0, curve, c.key, false); + + const responseHasher = blake2bWasm.exports(64); + responseHasher.setPartialHash(c.partialHash); + responseHasher.update(buffV); + c.responseHash = responseHasher.digest(); + + const paramLength = await fd.readULE32(); + const curPos = fd.pos; + let lastType =0; + while (fd.pos-curPos < paramLength) { + const buffType = await readDV(1); + if (buffType[0]<= lastType) throw new Error("Parameters in the contribution must be sorted"); + lastType = buffType[0]; + if (buffType[0]==1) { // Name + const buffLen = await readDV(1); + const buffStr = await readDV(buffLen[0]); + c.name = new TextDecoder().decode(buffStr); + } else if (buffType[0]==2) { + const buffExp = await readDV(1); + c.numIterationsExp = buffExp[0]; + } else if (buffType[0]==3) { + const buffLen = await readDV(1); + c.beaconHash = await readDV(buffLen[0]); + } else { + throw new Error("Parameter not recognized"); + } + } + if (fd.pos != curPos + paramLength) { + throw new Error("Parametes do not match"); + } + + return c; + + async function readG1() { + const pBuff = await fd.read(curve.G1.F.n8*2); + return curve.G1.fromRprLEM( pBuff ); + } + + async function readG2() { + const pBuff = await fd.read(curve.G2.F.n8*2); + return curve.G2.fromRprLEM( pBuff ); + } + + async function readDV(n) { + const b = await fd.read(n); + return new Uint8Array(b); + } + } + + async function readContributions(fd, curve, sections) { + if (!sections[7]) throw new Error(fd.fileName + ": File has no contributions"); + if (sections[7][0].length>1) throw new Error(fd.fileName +": File has more than one contributions section"); + + fd.pos = sections[7][0].p; + const nContributions = await fd.readULE32(); + const contributions = []; + for (let i=0; i0) { + const paramsBuff = new Uint8Array(params); + await fd.writeULE32(paramsBuff.byteLength); + await fd.write(paramsBuff); + } else { + await fd.writeULE32(0); + } + + + async function writeG1(p) { + curve.G1.toRprLEM(buffG1, 0, p); + await fd.write(buffG1); + } + + async function writeG2(p) { + curve.G2.toRprLEM(buffG2, 0, p); + await fd.write(buffG2); + } + + } + + async function writeContributions(fd, curve, contributions) { + + await fd.writeULE32(7); // Header type + const pContributionsSize = fd.pos; + await fd.writeULE64(0); // Temporally set to 0 length + + await fd.writeULE32(contributions.length); + for (let i=0; i< contributions.length; i++) { + await writeContribution(fd, curve, contributions[i]); + } + const contributionsSize = fd.pos - pContributionsSize - 8; + + const oldPos = fd.pos; + + await fd.writeULE64(contributionsSize, pContributionsSize); + fd.pos = oldPos; + } + + function calculateFirstChallengeHash(curve, power, logger) { + if (logger) logger.debug("Calculating First Challenge Hash"); + + const hasher = new blake2bWasm.exports(64); + + const vG1 = new Uint8Array(curve.G1.F.n8*2); + const vG2 = new Uint8Array(curve.G2.F.n8*2); + curve.G1.toRprUncompressed(vG1, 0, curve.G1.g); + curve.G2.toRprUncompressed(vG2, 0, curve.G2.g); + + hasher.update(blake2bWasm.exports(64).digest()); + + let n; + + n=(2 ** power)*2 -1; + if (logger) logger.debug("Calculate Initial Hash: tauG1"); + hashBlock(vG1, n); + n= 2 ** power; + if (logger) logger.debug("Calculate Initial Hash: tauG2"); + hashBlock(vG2, n); + if (logger) logger.debug("Calculate Initial Hash: alphaTauG1"); + hashBlock(vG1, n); + if (logger) logger.debug("Calculate Initial Hash: betaTauG1"); + hashBlock(vG1, n); + hasher.update(vG2); + + return hasher.digest(); + + function hashBlock(buff, n) { + // this block size is a good compromise between speed and the maximum + // input size of the Blake2b update method (65,535,720 bytes). + const blockSize = 341000; + const nBlocks = Math.floor(n / blockSize); + const rem = n % blockSize; + const bigBuff = new Uint8Array(blockSize * buff.byteLength); + for (let i=0; i. + */ + + async function newAccumulator(curve, power, fileName, logger) { + + await blake2bWasm.exports.ready(); + + const fd = await createBinFile(fileName, "ptau", 1, 7); + + await writePTauHeader(fd, curve, power, 0); + + const buffG1 = curve.G1.oneAffine; + const buffG2 = curve.G2.oneAffine; + + // Write tauG1 + /////////// + await startWriteSection(fd, 2); + const nTauG1 = (2 ** power) * 2 -1; + for (let i=0; i< nTauG1; i++) { + await fd.write(buffG1); + if ((logger)&&((i%100000) == 0)&&i) logger.log("tauG1: " + i); + } + await endWriteSection(fd); + + // Write tauG2 + /////////// + await startWriteSection(fd, 3); + const nTauG2 = (2 ** power); + for (let i=0; i< nTauG2; i++) { + await fd.write(buffG2); + if ((logger)&&((i%100000) == 0)&&i) logger.log("tauG2: " + i); + } + await endWriteSection(fd); + + // Write alphaTauG1 + /////////// + await startWriteSection(fd, 4); + const nAlfaTauG1 = (2 ** power); + for (let i=0; i< nAlfaTauG1; i++) { + await fd.write(buffG1); + if ((logger)&&((i%100000) == 0)&&i) logger.log("alphaTauG1: " + i); + } + await endWriteSection(fd); + + // Write betaTauG1 + /////////// + await startWriteSection(fd, 5); + const nBetaTauG1 = (2 ** power); + for (let i=0; i< nBetaTauG1; i++) { + await fd.write(buffG1); + if ((logger)&&((i%100000) == 0)&&i) logger.log("betaTauG1: " + i); + } + await endWriteSection(fd); + + // Write betaG2 + /////////// + await startWriteSection(fd, 6); + await fd.write(buffG2); + await endWriteSection(fd); + + // Contributions + /////////// + await startWriteSection(fd, 7); + await fd.writeULE32(0); // 0 Contributions + await endWriteSection(fd); + + await fd.close(); + + const firstChallengeHash = calculateFirstChallengeHash(curve, power, logger); + + if (logger) logger.debug(formatHash(blake2bWasm.exports(64).digest(), "Blank Contribution Hash:")); + + if (logger) logger.info(formatHash(firstChallengeHash, "First Contribution Hash:")); + + return firstChallengeHash; + + } + + // Format of the outpu + + async function exportChallenge(pTauFilename, challengeFilename, logger) { + await blake2bWasm.exports.ready(); + const {fd: fdFrom, sections} = await readBinFile(pTauFilename, "ptau", 1); + + const {curve, power} = await readPTauHeader(fdFrom, sections); + + const contributions = await readContributions(fdFrom, curve, sections); + let lastResponseHash, curChallengeHash; + if (contributions.length == 0) { + lastResponseHash = blake2bWasm.exports(64).digest(); + curChallengeHash = calculateFirstChallengeHash(curve, power); + } else { + lastResponseHash = contributions[contributions.length-1].responseHash; + curChallengeHash = contributions[contributions.length-1].nextChallenge; + } + + if (logger) logger.info(formatHash(lastResponseHash, "Last Response Hash: ")); + + if (logger) logger.info(formatHash(curChallengeHash, "New Challenge Hash: ")); + + + const fdTo = await createOverride(challengeFilename); + + const toHash = blake2bWasm.exports(64); + await fdTo.write(lastResponseHash); + toHash.update(lastResponseHash); + + await exportSection(2, "G1", (2 ** power) * 2 -1, "tauG1"); + await exportSection(3, "G2", (2 ** power) , "tauG2"); + await exportSection(4, "G1", (2 ** power) , "alphaTauG1"); + await exportSection(5, "G1", (2 ** power) , "betaTauG1"); + await exportSection(6, "G2", 1 , "betaG2"); + + await fdFrom.close(); + await fdTo.close(); + + const calcCurChallengeHash = toHash.digest(); + + if (!hashIsEqual (curChallengeHash, calcCurChallengeHash)) { + if (logger) logger.info(formatHash(calcCurChallengeHash, "Calc Curret Challenge Hash: ")); + + if (logger) logger.error("PTau file is corrupted. Calculated new challenge hash does not match with the eclared one"); + throw new Error("PTau file is corrupted. Calculated new challenge hash does not match with the eclared one"); + } + + return curChallengeHash; + + async function exportSection(sectionId, groupName, nPoints, sectionName) { + const G = curve[groupName]; + const sG = G.F.n8*2; + const nPointsChunk = Math.floor((1<<24)/sG); + + await startReadUniqueSection(fdFrom, sections, sectionId); + for (let i=0; i< nPoints; i+= nPointsChunk) { + if (logger) logger.debug(`Exporting ${sectionName}: ${i}/${nPoints}`); + const n = Math.min(nPoints-i, nPointsChunk); + let buff; + buff = await fdFrom.read(n*sG); + buff = await G.batchLEMtoU(buff); + await fdTo.write(buff); + toHash.update(buff); + } + await endReadSection(fdFrom); + } + + + } + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + async function importResponse(oldPtauFilename, contributionFilename, newPTauFilename, name, importPoints, logger) { + + await blake2bWasm.exports.ready(); + + const noHash = new Uint8Array(64); + for (let i=0; i<64; i++) noHash[i] = 0xFF; + + const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); + const {curve, power} = await readPTauHeader(fdOld, sections); + const contributions = await readContributions(fdOld, curve, sections); + const currentContribution = {}; + + if (name) currentContribution.name = name; + + const sG1 = curve.F1.n8*2; + const scG1 = curve.F1.n8; // Compresed size + const sG2 = curve.F2.n8*2; + const scG2 = curve.F2.n8; // Compresed size + + const fdResponse = await readExisting(contributionFilename); + + if (fdResponse.totalSize != + 64 + // Old Hash + ((2 ** power)*2-1)*scG1 + + (2 ** power)*scG2 + + (2 ** power)*scG1 + + (2 ** power)*scG1 + + scG2 + + sG1*6 + sG2*3) + throw new Error("Size of the contribution is invalid"); + + let lastChallengeHash; + + if (contributions.length>0) { + lastChallengeHash = contributions[contributions.length-1].nextChallenge; + } else { + lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); + } + + const fdNew = await createBinFile(newPTauFilename, "ptau", 1, importPoints ? 7: 2); + await writePTauHeader(fdNew, curve, power); + + const contributionPreviousHash = await fdResponse.read(64); + + if (hashIsEqual(noHash,lastChallengeHash)) { + lastChallengeHash = contributionPreviousHash; + contributions[contributions.length-1].nextChallenge = lastChallengeHash; + } + + if(!hashIsEqual(contributionPreviousHash,lastChallengeHash)) + throw new Error("Wrong contribution. this contribution is not based on the previus hash"); + + const hasherResponse = new blake2bWasm.exports(64); + hasherResponse.update(contributionPreviousHash); + + const startSections = []; + let res; + res = await processSection(fdResponse, fdNew, "G1", 2, (2 ** power) * 2 -1, [1], "tauG1"); + currentContribution.tauG1 = res[0]; + res = await processSection(fdResponse, fdNew, "G2", 3, (2 ** power) , [1], "tauG2"); + currentContribution.tauG2 = res[0]; + res = await processSection(fdResponse, fdNew, "G1", 4, (2 ** power) , [0], "alphaG1"); + currentContribution.alphaG1 = res[0]; + res = await processSection(fdResponse, fdNew, "G1", 5, (2 ** power) , [0], "betaG1"); + currentContribution.betaG1 = res[0]; + res = await processSection(fdResponse, fdNew, "G2", 6, 1 , [0], "betaG2"); + currentContribution.betaG2 = res[0]; + + currentContribution.partialHash = hasherResponse.getPartialHash(); + + + const buffKey = await fdResponse.read(curve.F1.n8*2*6+curve.F2.n8*2*3); + + currentContribution.key = fromPtauPubKeyRpr(buffKey, 0, curve, false); + + hasherResponse.update(new Uint8Array(buffKey)); + const hashResponse = hasherResponse.digest(); + + if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); + + if (importPoints) { + const nextChallengeHasher = new blake2bWasm.exports(64); + nextChallengeHasher.update(hashResponse); + + await hashSection(nextChallengeHasher, fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1", logger); + await hashSection(nextChallengeHasher, fdNew, "G2", 3, (2 ** power) , "tauG2", logger); + await hashSection(nextChallengeHasher, fdNew, "G1", 4, (2 ** power) , "alphaTauG1", logger); + await hashSection(nextChallengeHasher, fdNew, "G1", 5, (2 ** power) , "betaTauG1", logger); + await hashSection(nextChallengeHasher, fdNew, "G2", 6, 1 , "betaG2", logger); + + currentContribution.nextChallenge = nextChallengeHasher.digest(); + + if (logger) logger.info(formatHash(currentContribution.nextChallenge, "Next Challenge Hash: ")); + } else { + currentContribution.nextChallenge = noHash; + } + + contributions.push(currentContribution); + + await writeContributions(fdNew, curve, contributions); + + await fdResponse.close(); + await fdNew.close(); + await fdOld.close(); + + return currentContribution.nextChallenge; + + async function processSection(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { + if (importPoints) { + return await processSectionImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName); + } else { + return await processSectionNoImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName); + } + } + + async function processSectionImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { + + const G = curve[groupName]; + const scG = G.F.n8; + const sG = G.F.n8*2; + + const singularPoints = []; + + await startWriteSection(fdTo, sectionId); + const nPointsChunk = Math.floor((1<<24)/sG); + + startSections[sectionId] = fdTo.pos; + + for (let i=0; i< nPoints; i += nPointsChunk) { + if (logger) logger.debug(`Importing ${sectionName}: ${i}/${nPoints}`); + const n = Math.min(nPoints-i, nPointsChunk); + + const buffC = await fdFrom.read(n * scG); + hasherResponse.update(buffC); + + const buffLEM = await G.batchCtoLEM(buffC); + + await fdTo.write(buffLEM); + for (let j=0; j=i) && (sp < i+n)) { + const P = G.fromRprLEM(buffLEM, (sp-i)*sG); + singularPoints.push(P); + } + } + } + + await endWriteSection(fdTo); + + return singularPoints; + } + + + async function processSectionNoImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { + + const G = curve[groupName]; + const scG = G.F.n8; + + const singularPoints = []; + + const nPointsChunk = Math.floor((1<<24)/scG); + + for (let i=0; i< nPoints; i += nPointsChunk) { + if (logger) logger.debug(`Importing ${sectionName}: ${i}/${nPoints}`); + const n = Math.min(nPoints-i, nPointsChunk); + + const buffC = await fdFrom.read(n * scG); + hasherResponse.update(buffC); + + for (let j=0; j=i) && (sp < i+n)) { + const P = G.fromRprCompressed(buffC, (sp-i)*scG); + singularPoints.push(P); + } + } + } + + return singularPoints; + } + + + async function hashSection(nextChallengeHasher, fdTo, groupName, sectionId, nPoints, sectionName, logger) { + + const G = curve[groupName]; + const sG = G.F.n8*2; + const nPointsChunk = Math.floor((1<<24)/sG); + + const oldPos = fdTo.pos; + fdTo.pos = startSections[sectionId]; + + for (let i=0; i< nPoints; i += nPointsChunk) { + if (logger) logger.debug(`Hashing ${sectionName}: ${i}/${nPoints}`); + const n = Math.min(nPoints-i, nPointsChunk); + + const buffLEM = await fdTo.read(n * sG); + + const buffU = await G.batchLEMtoU(buffLEM); + + nextChallengeHasher.update(buffU); + } + + fdTo.pos = oldPos; + } + + } + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + const sameRatio$1 = sameRatio$2; + + async function verifyContribution(curve, cur, prev, logger) { + let sr; + if (cur.type == 1) { // Verify the beacon. + const beaconKey = await keyFromBeacon(curve, prev.nextChallenge, cur.beaconHash, cur.numIterationsExp); + + if (!curve.G1.eq(cur.key.tau.g1_s, beaconKey.tau.g1_s)) { + if (logger) logger.error(`BEACON key (tauG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G1.eq(cur.key.tau.g1_sx, beaconKey.tau.g1_sx)) { + if (logger) logger.error(`BEACON key (tauG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G2.eq(cur.key.tau.g2_spx, beaconKey.tau.g2_spx)) { + if (logger) logger.error(`BEACON key (tauG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + + if (!curve.G1.eq(cur.key.alpha.g1_s, beaconKey.alpha.g1_s)) { + if (logger) logger.error(`BEACON key (alphaG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G1.eq(cur.key.alpha.g1_sx, beaconKey.alpha.g1_sx)) { + if (logger) logger.error(`BEACON key (alphaG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G2.eq(cur.key.alpha.g2_spx, beaconKey.alpha.g2_spx)) { + if (logger) logger.error(`BEACON key (alphaG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + + if (!curve.G1.eq(cur.key.beta.g1_s, beaconKey.beta.g1_s)) { + if (logger) logger.error(`BEACON key (betaG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G1.eq(cur.key.beta.g1_sx, beaconKey.beta.g1_sx)) { + if (logger) logger.error(`BEACON key (betaG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + if (!curve.G2.eq(cur.key.beta.g2_spx, beaconKey.beta.g2_spx)) { + if (logger) logger.error(`BEACON key (betaG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); + return false; + } + } + + cur.key.tau.g2_sp = curve.G2.toAffine(getG2sp(curve, 0, prev.nextChallenge, cur.key.tau.g1_s, cur.key.tau.g1_sx)); + cur.key.alpha.g2_sp = curve.G2.toAffine(getG2sp(curve, 1, prev.nextChallenge, cur.key.alpha.g1_s, cur.key.alpha.g1_sx)); + cur.key.beta.g2_sp = curve.G2.toAffine(getG2sp(curve, 2, prev.nextChallenge, cur.key.beta.g1_s, cur.key.beta.g1_sx)); + + sr = await sameRatio$1(curve, cur.key.tau.g1_s, cur.key.tau.g1_sx, cur.key.tau.g2_sp, cur.key.tau.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID key (tau) in challenge #"+cur.id); + return false; + } + + sr = await sameRatio$1(curve, cur.key.alpha.g1_s, cur.key.alpha.g1_sx, cur.key.alpha.g2_sp, cur.key.alpha.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID key (alpha) in challenge #"+cur.id); + return false; + } + + sr = await sameRatio$1(curve, cur.key.beta.g1_s, cur.key.beta.g1_sx, cur.key.beta.g2_sp, cur.key.beta.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID key (beta) in challenge #"+cur.id); + return false; + } + + sr = await sameRatio$1(curve, prev.tauG1, cur.tauG1, cur.key.tau.g2_sp, cur.key.tau.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID tau*G1. challenge #"+cur.id+" It does not follow the previous contribution"); + return false; + } + + sr = await sameRatio$1(curve, cur.key.tau.g1_s, cur.key.tau.g1_sx, prev.tauG2, cur.tauG2); + if (sr !== true) { + if (logger) logger.error("INVALID tau*G2. challenge #"+cur.id+" It does not follow the previous contribution"); + return false; + } + + sr = await sameRatio$1(curve, prev.alphaG1, cur.alphaG1, cur.key.alpha.g2_sp, cur.key.alpha.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID alpha*G1. challenge #"+cur.id+" It does not follow the previous contribution"); + return false; + } + + sr = await sameRatio$1(curve, prev.betaG1, cur.betaG1, cur.key.beta.g2_sp, cur.key.beta.g2_spx); + if (sr !== true) { + if (logger) logger.error("INVALID beta*G1. challenge #"+cur.id+" It does not follow the previous contribution"); + return false; + } + + sr = await sameRatio$1(curve, cur.key.beta.g1_s, cur.key.beta.g1_sx, prev.betaG2, cur.betaG2); + if (sr !== true) { + if (logger) logger.error("INVALID beta*G2. challenge #"+cur.id+"It does not follow the previous contribution"); + return false; + } + + if (logger) logger.info("Powers Of tau file OK!"); + return true; + } + + async function verify(tauFilename, logger) { + let sr; + await blake2bWasm.exports.ready(); + + const {fd, sections} = await readBinFile(tauFilename, "ptau", 1); + const {curve, power, ceremonyPower} = await readPTauHeader(fd, sections); + const contrs = await readContributions(fd, curve, sections); + + if (logger) logger.debug("power: 2**" + power); + // Verify Last contribution + + if (logger) logger.debug("Computing initial contribution hash"); + const initialContribution = { + tauG1: curve.G1.g, + tauG2: curve.G2.g, + alphaG1: curve.G1.g, + betaG1: curve.G1.g, + betaG2: curve.G2.g, + nextChallenge: calculateFirstChallengeHash(curve, ceremonyPower, logger), + responseHash: blake2bWasm.exports(64).digest() + }; + + if (contrs.length == 0) { + if (logger) logger.error("This file has no contribution! It cannot be used in production"); + return false; + } + + let prevContr; + if (contrs.length>1) { + prevContr = contrs[contrs.length-2]; + } else { + prevContr = initialContribution; + } + const curContr = contrs[contrs.length-1]; + if (logger) logger.debug("Validating contribution #"+contrs[contrs.length-1].id); + const res = await verifyContribution(curve, curContr, prevContr, logger); + if (!res) return false; + + + const nextContributionHasher = blake2bWasm.exports(64); + nextContributionHasher.update(curContr.responseHash); + + // Verify powers and compute nextChallengeHash + + // await test(); + + // Verify Section tau*G1 + if (logger) logger.debug("Verifying powers in tau*G1 section"); + const rTau1 = await processSection(2, "G1", "tauG1", (2 ** power)*2-1, [0, 1], logger); + sr = await sameRatio$1(curve, rTau1.R1, rTau1.R2, curve.G2.g, curContr.tauG2); + if (sr !== true) { + if (logger) logger.error("tauG1 section. Powers do not match"); + return false; + } + if (!curve.G1.eq(curve.G1.g, rTau1.singularPoints[0])) { + if (logger) logger.error("First element of tau*G1 section must be the generator"); + return false; + } + if (!curve.G1.eq(curContr.tauG1, rTau1.singularPoints[1])) { + if (logger) logger.error("Second element of tau*G1 section does not match the one in the contribution section"); + return false; + } + + // await test(); + + // Verify Section tau*G2 + if (logger) logger.debug("Verifying powers in tau*G2 section"); + const rTau2 = await processSection(3, "G2", "tauG2", 2 ** power, [0, 1], logger); + sr = await sameRatio$1(curve, curve.G1.g, curContr.tauG1, rTau2.R1, rTau2.R2); + if (sr !== true) { + if (logger) logger.error("tauG2 section. Powers do not match"); + return false; + } + if (!curve.G2.eq(curve.G2.g, rTau2.singularPoints[0])) { + if (logger) logger.error("First element of tau*G2 section must be the generator"); + return false; + } + if (!curve.G2.eq(curContr.tauG2, rTau2.singularPoints[1])) { + if (logger) logger.error("Second element of tau*G2 section does not match the one in the contribution section"); + return false; + } + + // Verify Section alpha*tau*G1 + if (logger) logger.debug("Verifying powers in alpha*tau*G1 section"); + const rAlphaTauG1 = await processSection(4, "G1", "alphatauG1", 2 ** power, [0], logger); + sr = await sameRatio$1(curve, rAlphaTauG1.R1, rAlphaTauG1.R2, curve.G2.g, curContr.tauG2); + if (sr !== true) { + if (logger) logger.error("alphaTauG1 section. Powers do not match"); + return false; + } + if (!curve.G1.eq(curContr.alphaG1, rAlphaTauG1.singularPoints[0])) { + if (logger) logger.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"); + return false; + } + + // Verify Section beta*tau*G1 + if (logger) logger.debug("Verifying powers in beta*tau*G1 section"); + const rBetaTauG1 = await processSection(5, "G1", "betatauG1", 2 ** power, [0], logger); + sr = await sameRatio$1(curve, rBetaTauG1.R1, rBetaTauG1.R2, curve.G2.g, curContr.tauG2); + if (sr !== true) { + if (logger) logger.error("betaTauG1 section. Powers do not match"); + return false; + } + if (!curve.G1.eq(curContr.betaG1, rBetaTauG1.singularPoints[0])) { + if (logger) logger.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"); + return false; + } + + //Verify Beta G2 + const betaG2 = await processSectionBetaG2(logger); + if (!curve.G2.eq(curContr.betaG2, betaG2)) { + if (logger) logger.error("betaG2 element in betaG2 section does not match the one in the contribution section"); + return false; + } + + + const nextContributionHash = nextContributionHasher.digest(); + + // Check the nextChallengeHash + if (power == ceremonyPower) { + if (!hashIsEqual(nextContributionHash,curContr.nextChallenge)) { + if (logger) logger.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"); + return false; + } + } + + if (logger) logger.info(formatHash(nextContributionHash, "Next challenge hash: ")); + + // Verify Previous contributions + + printContribution(curContr, prevContr); + for (let i = contrs.length-2; i>=0; i--) { + const curContr = contrs[i]; + const prevContr = (i>0) ? contrs[i-1] : initialContribution; + const res = await verifyContribution(curve, curContr, prevContr, logger); + if (!res) return false; + printContribution(curContr, prevContr); + } + if (logger) logger.info("-----------------------------------------------------"); + + if ((!sections[12]) || (!sections[13]) || (!sections[14]) || (!sections[15])) { + if (logger) logger.warn( + "this file does not contain phase2 precalculated values. Please run: \n" + + " snarkjs \"powersoftau preparephase2\" to prepare this file to be used in the phase2 ceremony." + ); + } else { + let res; + res = await verifyLagrangeEvaluations("G1", 2, 12, "tauG1", logger); + if (!res) return false; + res = await verifyLagrangeEvaluations("G2", 3, 13, "tauG2", logger); + if (!res) return false; + res = await verifyLagrangeEvaluations("G1", 4, 14, "alphaTauG1", logger); + if (!res) return false; + res = await verifyLagrangeEvaluations("G1", 5, 15, "betaTauG1", logger); + if (!res) return false; + } + + await fd.close(); + + if (logger) logger.info("Powers of Tau Ok!"); + + return true; + + function printContribution(curContr, prevContr) { + if (!logger) return; + logger.info("-----------------------------------------------------"); + logger.info(`Contribution #${curContr.id}: ${curContr.name ||""}`); + + logger.info(formatHash(curContr.nextChallenge, "Next Challenge: ")); + + const buffV = new Uint8Array(curve.G1.F.n8*2*6+curve.G2.F.n8*2*3); + toPtauPubKeyRpr(buffV, 0, curve, curContr.key, false); + + const responseHasher = blake2bWasm.exports(64); + responseHasher.setPartialHash(curContr.partialHash); + responseHasher.update(buffV); + const responseHash = responseHasher.digest(); + + logger.info(formatHash(responseHash, "Response Hash:")); + + logger.info(formatHash(prevContr.nextChallenge, "Response Hash:")); + + if (curContr.type == 1) { + logger.info(`Beacon generator: ${byteArray2hex(curContr.beaconHash)}`); + logger.info(`Beacon iterations Exp: ${curContr.numIterationsExp}`); + } + + } + + async function processSectionBetaG2(logger) { + const G = curve.G2; + const sG = G.F.n8*2; + const buffUv = new Uint8Array(sG); + + if (!sections[6]) { + logger.error("File has no BetaG2 section"); + throw new Error("File has no BetaG2 section"); + } + if (sections[6].length>1) { + logger.error("File has no BetaG2 section"); + throw new Error("File has more than one GetaG2 section"); + } + fd.pos = sections[6][0].p; + + const buff = await fd.read(sG); + const P = G.fromRprLEM(buff); + + G.toRprUncompressed(buffUv, 0, P); + nextContributionHasher.update(buffUv); + + return P; + } + + async function processSection(idSection, groupName, sectionName, nPoints, singularPointIndexes, logger) { + const MAX_CHUNK_SIZE = 1<<16; + const G = curve[groupName]; + const sG = G.F.n8*2; + await startReadUniqueSection(fd, sections, idSection); + + const singularPoints = []; + + let R1 = G.zero; + let R2 = G.zero; + + let lastBase = G.zero; + + for (let i=0; i0) { + const firstBase = G.fromRprLEM(bases, 0); + const r = readUInt32BE(getRandomBytes$2(4), 0); + + R1 = G.add(R1, G.timesScalar(lastBase, r)); + R2 = G.add(R2, G.timesScalar(firstBase, r)); + } + + const r1 = await G.multiExpAffine(bases.slice(0, (n-1)*sG), scalars); + const r2 = await G.multiExpAffine(bases.slice(sG), scalars); + + R1 = G.add(R1, r1); + R2 = G.add(R2, r2); + + lastBase = G.fromRprLEM( bases, (n-1)*sG); + + for (let j=0; j=i) && (sp < i+n)) { + const P = G.fromRprLEM(bases, (sp-i)*sG); + singularPoints.push(P); + } + } + + } + await endReadSection(fd); + + return { + R1: R1, + R2: R2, + singularPoints: singularPoints + }; + + } + + async function verifyLagrangeEvaluations(gName, tauSection, lagrangeSection, sectionName, logger) { + + if (logger) logger.debug(`Verifying phase2 calculated values ${sectionName}...`); + const G = curve[gName]; + const sG = G.F.n8*2; + + const seed= new Array(8); + for (let i=0; i<8; i++) { + seed[i] = readUInt32BE(getRandomBytes$2(4), 0); + } + + for (let p=0; p<= power; p ++) { + const res = await verifyPower(p); + if (!res) return false; + } + + if (tauSection == 2) { + const res = await verifyPower(power+1); + if (!res) return false; + } + + return true; + + async function verifyPower(p) { + if (logger) logger.debug(`Power ${p}...`); + const n8r = curve.Fr.n8; + const nPoints = 2 ** p; + let buff_r = new Uint32Array(nPoints); + let buffG; + + let rng = new ChaCha$1(seed); + + if (logger) logger.debug(`Creating random numbers Powers${p}...`); + for (let i=0; i. + */ + + /* + This function creates a new section in the fdTo file with id idSection. + It multiplies the pooints in fdFrom by first, first*inc, first*inc^2, .... + nPoint Times. + It also updates the newChallengeHasher with the new points + */ + + async function applyKeyToSection(fdOld, sections, fdNew, idSection, curve, groupName, first, inc, sectionName, logger) { + const MAX_CHUNK_SIZE = 1 << 16; + const G = curve[groupName]; + const sG = G.F.n8*2; + const nPoints = sections[idSection][0].size / sG; + + await startReadUniqueSection(fdOld, sections,idSection ); + await startWriteSection(fdNew, idSection); + + let t = first; + for (let i=0; i. + */ + + async function challengeContribute(curve, challengeFilename, responesFileName, entropy, logger) { + await blake2bWasm.exports.ready(); + + const fdFrom = await readExisting(challengeFilename); + + + const sG1 = curve.F1.n64*8*2; + const sG2 = curve.F2.n64*8*2; + const domainSize = (fdFrom.totalSize + sG1 - 64 - sG2) / (4*sG1 + sG2); + let e = domainSize; + let power = 0; + while (e>1) { + e = e /2; + power += 1; + } + + if (2 ** power != domainSize) throw new Error("Invalid file size"); + if (logger) logger.debug("Power to tau size: "+power); + + const rng = await getRandomRng(entropy); + + const fdTo = await createOverride(responesFileName); + + // Calculate the hash + const challengeHasher = blake2bWasm.exports(64); + for (let i=0; i { + logger.debug(k + ".g1_s: " + curve.G1.toString(key[k].g1_s, 16)); + logger.debug(k + ".g1_sx: " + curve.G1.toString(key[k].g1_sx, 16)); + logger.debug(k + ".g2_sp: " + curve.G2.toString(key[k].g2_sp, 16)); + logger.debug(k + ".g2_spx: " + curve.G2.toString(key[k].g2_spx, 16)); + logger.debug(""); + }); + } + + const responseHasher = blake2bWasm.exports(64); + + await fdTo.write(challengeHash); + responseHasher.update(challengeHash); + + await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power)*2-1, curve.Fr.one , key.tau.prvKey, "COMPRESSED", "tauG1" , logger ); + await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G2", (2 ** power) , curve.Fr.one , key.tau.prvKey, "COMPRESSED", "tauG2" , logger ); + await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power) , key.alpha.prvKey, key.tau.prvKey, "COMPRESSED", "alphaTauG1", logger ); + await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power) , key.beta.prvKey , key.tau.prvKey, "COMPRESSED", "betaTauG1" , logger ); + await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G2", 1 , key.beta.prvKey , key.tau.prvKey, "COMPRESSED", "betaTauG2" , logger ); + + // Write and hash key + const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); + toPtauPubKeyRpr(buffKey, 0, curve, key, false); + await fdTo.write(buffKey); + responseHasher.update(buffKey); + const responseHash = responseHasher.digest(); + if (logger) logger.info(formatHash(responseHash, "Contribution Response Hash: ")); + + await fdTo.close(); + await fdFrom.close(); + } + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + async function beacon$1(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) { + const beaconHash = hex2ByteArray(beaconHashStr); + if ( (beaconHash.byteLength == 0) + || (beaconHash.byteLength*2 !=beaconHashStr.length)) + { + if (logger) logger.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"); + return false; + } + if (beaconHash.length>=256) { + if (logger) logger.error("Maximum lenght of beacon hash is 255 bytes"); + return false; + } + + numIterationsExp = parseInt(numIterationsExp); + if ((numIterationsExp<10)||(numIterationsExp>63)) { + if (logger) logger.error("Invalid numIterationsExp. (Must be between 10 and 63)"); + return false; + } + + + await blake2bWasm.exports.ready(); + + const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); + const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); + if (power != ceremonyPower) { + if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file."); + return false; + } + if (sections[12]) { + if (logger) logger.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again."); + } + const contributions = await readContributions(fdOld, curve, sections); + const curContribution = { + name: name, + type: 1, // Beacon + numIterationsExp: numIterationsExp, + beaconHash: beaconHash + }; + + let lastChallengeHash; + + if (contributions.length>0) { + lastChallengeHash = contributions[contributions.length-1].nextChallenge; + } else { + lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); + } + + curContribution.key = await keyFromBeacon(curve, lastChallengeHash, beaconHash, numIterationsExp); + + const responseHasher = new blake2bWasm.exports(64); + responseHasher.update(lastChallengeHash); + + const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 7); + await writePTauHeader(fdNew, curve, power); + + const startSections = []; + + let firstPoints; + firstPoints = await processSection(2, "G1", (2 ** power) * 2 -1, curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG1", logger ); + curContribution.tauG1 = firstPoints[1]; + firstPoints = await processSection(3, "G2", (2 ** power) , curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG2", logger ); + curContribution.tauG2 = firstPoints[1]; + firstPoints = await processSection(4, "G1", (2 ** power) , curContribution.key.alpha.prvKey, curContribution.key.tau.prvKey, "alphaTauG1", logger ); + curContribution.alphaG1 = firstPoints[0]; + firstPoints = await processSection(5, "G1", (2 ** power) , curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG1", logger ); + curContribution.betaG1 = firstPoints[0]; + firstPoints = await processSection(6, "G2", 1, curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG2", logger ); + curContribution.betaG2 = firstPoints[0]; + + curContribution.partialHash = responseHasher.getPartialHash(); + + const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); + + toPtauPubKeyRpr(buffKey, 0, curve, curContribution.key, false); + + responseHasher.update(new Uint8Array(buffKey)); + const hashResponse = responseHasher.digest(); + + if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); + + const nextChallengeHasher = new blake2bWasm.exports(64); + nextChallengeHasher.update(hashResponse); + + await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1", logger); + await hashSection(fdNew, "G2", 3, (2 ** power) , "tauG2", logger); + await hashSection(fdNew, "G1", 4, (2 ** power) , "alphaTauG1", logger); + await hashSection(fdNew, "G1", 5, (2 ** power) , "betaTauG1", logger); + await hashSection(fdNew, "G2", 6, 1 , "betaG2", logger); + + curContribution.nextChallenge = nextChallengeHasher.digest(); + + if (logger) logger.info(formatHash(curContribution.nextChallenge, "Next Challenge Hash: ")); + + contributions.push(curContribution); + + await writeContributions(fdNew, curve, contributions); + + await fdOld.close(); + await fdNew.close(); + + return hashResponse; + + async function processSection(sectionId, groupName, NPoints, first, inc, sectionName, logger) { + const res = []; + fdOld.pos = sections[sectionId][0].p; + + await startWriteSection(fdNew, sectionId); + + startSections[sectionId] = fdNew.pos; + + const G = curve[groupName]; + const sG = G.F.n8*2; + const chunkSize = Math.floor((1<<20) / sG); // 128Mb chunks + let t = first; + for (let i=0 ; i. + */ + + async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logger) { + await blake2bWasm.exports.ready(); + + const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); + const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); + if (power != ceremonyPower) { + if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file."); + throw new Error("This file has been reduced. You cannot contribute into a reduced file."); + } + if (sections[12]) { + if (logger) logger.warn("WARNING: Contributing into a file that has phase2 calculated. You will have to prepare phase2 again."); + } + const contributions = await readContributions(fdOld, curve, sections); + const curContribution = { + name: name, + type: 0, // Beacon + }; + + let lastChallengeHash; + + const rng = await getRandomRng(entropy); + + if (contributions.length>0) { + lastChallengeHash = contributions[contributions.length-1].nextChallenge; + } else { + lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); + } + + // Generate a random key + + + curContribution.key = createPTauKey(curve, lastChallengeHash, rng); + + + const responseHasher = new blake2bWasm.exports(64); + responseHasher.update(lastChallengeHash); + + const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 7); + await writePTauHeader(fdNew, curve, power); + + const startSections = []; + + let firstPoints; + firstPoints = await processSection(2, "G1", (2 ** power) * 2 -1, curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG1" ); + curContribution.tauG1 = firstPoints[1]; + firstPoints = await processSection(3, "G2", (2 ** power) , curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG2" ); + curContribution.tauG2 = firstPoints[1]; + firstPoints = await processSection(4, "G1", (2 ** power) , curContribution.key.alpha.prvKey, curContribution.key.tau.prvKey, "alphaTauG1" ); + curContribution.alphaG1 = firstPoints[0]; + firstPoints = await processSection(5, "G1", (2 ** power) , curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG1" ); + curContribution.betaG1 = firstPoints[0]; + firstPoints = await processSection(6, "G2", 1, curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG2" ); + curContribution.betaG2 = firstPoints[0]; + + curContribution.partialHash = responseHasher.getPartialHash(); + + const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); + + toPtauPubKeyRpr(buffKey, 0, curve, curContribution.key, false); + + responseHasher.update(new Uint8Array(buffKey)); + const hashResponse = responseHasher.digest(); + + if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); + + const nextChallengeHasher = new blake2bWasm.exports(64); + nextChallengeHasher.update(hashResponse); + + await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1"); + await hashSection(fdNew, "G2", 3, (2 ** power) , "tauG2"); + await hashSection(fdNew, "G1", 4, (2 ** power) , "alphaTauG1"); + await hashSection(fdNew, "G1", 5, (2 ** power) , "betaTauG1"); + await hashSection(fdNew, "G2", 6, 1 , "betaG2"); + + curContribution.nextChallenge = nextChallengeHasher.digest(); + + if (logger) logger.info(formatHash(curContribution.nextChallenge, "Next Challenge Hash: ")); + + contributions.push(curContribution); + + await writeContributions(fdNew, curve, contributions); + + await fdOld.close(); + await fdNew.close(); + + return hashResponse; + + async function processSection(sectionId, groupName, NPoints, first, inc, sectionName) { + const res = []; + fdOld.pos = sections[sectionId][0].p; + + await startWriteSection(fdNew, sectionId); + + startSections[sectionId] = fdNew.pos; + + const G = curve[groupName]; + const sG = G.F.n8*2; + const chunkSize = Math.floor((1<<20) / sG); // 128Mb chunks + let t = first; + for (let i=0 ; i. + */ + + async function preparePhase2(oldPtauFilename, newPTauFilename, logger) { + + const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); + const {curve, power} = await readPTauHeader(fdOld, sections); + + const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 11); + await writePTauHeader(fdNew, curve, power); + + await copySection(fdOld, sections, fdNew, 2); + await copySection(fdOld, sections, fdNew, 3); + await copySection(fdOld, sections, fdNew, 4); + await copySection(fdOld, sections, fdNew, 5); + await copySection(fdOld, sections, fdNew, 6); + await copySection(fdOld, sections, fdNew, 7); + + await processSection(2, 12, "G1", "tauG1" ); + await processSection(3, 13, "G2", "tauG2" ); + await processSection(4, 14, "G1", "alphaTauG1" ); + await processSection(5, 15, "G1", "betaTauG1" ); + + await fdOld.close(); + await fdNew.close(); + + // await fs.promises.unlink(newPTauFilename+ ".tmp"); + + return; + + async function processSection(oldSectionId, newSectionId, Gstr, sectionName) { + if (logger) logger.debug("Starting section: "+sectionName); + + await startWriteSection(fdNew, newSectionId); + + for (let p=0; p<=power; p++) { + await processSectionPower(p); + } + + if (oldSectionId == 2) { + await processSectionPower(power+1); + } + + await endWriteSection(fdNew); + + + async function processSectionPower(p) { + const nPoints = 2 ** p; + const G = curve[Gstr]; + curve.Fr; + const sGin = G.F.n8*2; + G.F.n8*3; + + let buff; + buff = new BigBuffer$1(nPoints*sGin); + + await startReadUniqueSection(fdOld, sections, oldSectionId); + if ((oldSectionId == 2)&&(p==power+1)) { + await fdOld.readToBuffer(buff, 0,(nPoints-1)*sGin ); + buff.set(curve.G1.zeroAffine, (nPoints-1)*sGin ); + } else { + await fdOld.readToBuffer(buff, 0,nPoints*sGin ); + } + await endReadSection(fdOld, true); + + + buff = await G.lagrangeEvaluations(buff, "affine", "affine", logger, sectionName); + await fdNew.write(buff); + + /* + if (p <= curve.Fr.s) { + buff = await G.ifft(buff, "affine", "affine", logger, sectionName); + await fdNew.write(buff); + } else if (p == curve.Fr.s+1) { + const smallM = 1<. + */ + + async function truncate(ptauFilename, template, logger) { + + const {fd: fdOld, sections} = await readBinFile(ptauFilename, "ptau", 1); + const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); + + const sG1 = curve.G1.F.n8*2; + const sG2 = curve.G2.F.n8*2; + + for (let p=1; p. + */ + + async function convert(oldPtauFilename, newPTauFilename, logger) { + + const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); + const {curve, power} = await readPTauHeader(fdOld, sections); + + const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 11); + await writePTauHeader(fdNew, curve, power); + + // const fdTmp = await fastFile.createOverride(newPTauFilename+ ".tmp"); + + await copySection(fdOld, sections, fdNew, 2); + await copySection(fdOld, sections, fdNew, 3); + await copySection(fdOld, sections, fdNew, 4); + await copySection(fdOld, sections, fdNew, 5); + await copySection(fdOld, sections, fdNew, 6); + await copySection(fdOld, sections, fdNew, 7); + + await processSection(2, 12, "G1", "tauG1" ); + await copySection(fdOld, sections, fdNew, 13); + await copySection(fdOld, sections, fdNew, 14); + await copySection(fdOld, sections, fdNew, 15); + + await fdOld.close(); + await fdNew.close(); + + // await fs.promises.unlink(newPTauFilename+ ".tmp"); + + return; + + async function processSection(oldSectionId, newSectionId, Gstr, sectionName) { + if (logger) logger.debug("Starting section: "+sectionName); + + await startWriteSection(fdNew, newSectionId); + + const size = sections[newSectionId][0].size; + const chunkSize = fdOld.pageSize; + await startReadUniqueSection(fdOld, sections, newSectionId); + for (let p=0; p. + */ + + async function exportJson(pTauFilename, verbose) { + const {fd, sections} = await readBinFile(pTauFilename, "ptau", 1); + + const {curve, power} = await readPTauHeader(fd, sections); + + const pTau = {}; + pTau.q = curve.q; + pTau.power = power; + pTau.contributions = await readContributions(fd, curve, sections); + + pTau.tauG1 = await exportSection(2, "G1", (2 ** power)*2 -1, "tauG1"); + pTau.tauG2 = await exportSection(3, "G2", (2 ** power), "tauG2"); + pTau.alphaTauG1 = await exportSection(4, "G1", (2 ** power), "alphaTauG1"); + pTau.betaTauG1 = await exportSection(5, "G1", (2 ** power), "betaTauG1"); + pTau.betaG2 = await exportSection(6, "G2", 1, "betaG2"); + + pTau.lTauG1 = await exportLagrange(12, "G1", "lTauG1"); + pTau.lTauG2 = await exportLagrange(13, "G2", "lTauG2"); + pTau.lAlphaTauG1 = await exportLagrange(14, "G1", "lAlphaTauG2"); + pTau.lBetaTauG1 = await exportLagrange(15, "G1", "lBetaTauG2"); + + await fd.close(); + + return stringifyBigIntsWithField(curve.Fr, pTau); + + + + async function exportSection(sectionId, groupName, nPoints, sectionName) { + const G = curve[groupName]; + const sG = G.F.n8*2; + + const res = []; + await startReadUniqueSection(fd, sections, sectionId); + for (let i=0; i< nPoints; i++) { + if ((verbose)&&i&&(i%10000 == 0)) console.log(`${sectionName}: ` + i); + const buff = await fd.read(sG); + res.push(G.fromRprLEM(buff, 0)); + } + await endReadSection(fd); + + return res; + } + + async function exportLagrange(sectionId, groupName, sectionName) { + const G = curve[groupName]; + const sG = G.F.n8*2; + + const res = []; + await startReadUniqueSection(fd, sections, sectionId); + for (let p=0; p<=power; p++) { + if (verbose) console.log(`${sectionName}: Power: ${p}`); + res[p] = []; + const nPoints = (2 ** p); + for (let i=0; i. + */ + + var powersoftau = /*#__PURE__*/Object.freeze({ + __proto__: null, + newAccumulator: newAccumulator, + exportChallenge: exportChallenge, + importResponse: importResponse, + verify: verify, + challengeContribute: challengeContribute, + beacon: beacon$1, + contribute: contribute, + preparePhase2: preparePhase2, + truncate: truncate, + convert: convert, + exportJson: exportJson + }); + + /* + Copyright 2018 0KIMS association. + + This file is part of snarkJS. + + snarkJS is a free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + snarkJS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with snarkJS. If not, see . + */ + + function r1csPrint(r1cs, syms, logger) { + for (let i=0; i { + let S = ""; + const keys = Object.keys(lc); + keys.forEach( (k) => { + let name = syms.varIdx2Name[k]; + if (name == "one") name = "1"; + + let vs = r1cs.curve.Fr.toString(lc[k]); + if (vs == "1") vs = ""; // Do not show ones + if (vs == "-1") vs = "-"; // Do not show ones + if ((S!="")&&(vs[0]!="-")) vs = "+"+vs; + if (S!="") vs = " "+vs; + S= S + vs + name; + }); + return S; + }; + const S = `[ ${lc2str(c[0])} ] * [ ${lc2str(c[1])} ] - [ ${lc2str(c[2])} ] = 0`; + if (logger) logger.info(S); + } + + } + + /* global BigInt */ + const hexLen = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4]; + + function fromString(s, radix) { + if ((!radix)||(radix==10)) { + return BigInt(s); + } else if (radix==16) { + if (s.slice(0,2) == "0x") { + return BigInt(s); + } else { + return BigInt("0x"+s); + } + } + } + + const e = fromString; + + function bitLength$5(a) { + const aS =a.toString(16); + return (aS.length-1)*4 +hexLen[parseInt(aS[0], 16)]; + } + + function isNegative$3(a) { + return BigInt(a) < BigInt(0); + } + + function isZero(a) { + return !a; + } + + function shiftLeft(a, n) { + return BigInt(a) << BigInt(n); + } + + function shiftRight(a, n) { + return BigInt(a) >> BigInt(n); + } + + function isOdd$5(a) { + return (BigInt(a) & BigInt(1)) == BigInt(1); + } + + + function bits(n) { + let E = BigInt(n); + const res = []; + while (E) { + if (E & BigInt(1)) { + res.push(1); + } else { + res.push( 0 ); + } + E = E >> BigInt(1); + } + return res; + } + + function toNumber(s) { + if (s>BigInt(Number.MAX_SAFE_INTEGER )) { + throw new Error("Number too big"); + } + return Number(s); + } + + + function add(a, b) { + return BigInt(a) + BigInt(b); + } + + function sub(a, b) { + return BigInt(a) - BigInt(b); + } + + function neg(a) { + return -BigInt(a); + } + + function mul(a, b) { + return BigInt(a) * BigInt(b); + } + + function pow(a, b) { + return BigInt(a) ** BigInt(b); + } + + function div(a, b) { + return BigInt(a) / BigInt(b); + } + + function mod(a, b) { + return BigInt(a) % BigInt(b); + } + + function eq(a, b) { + return BigInt(a) == BigInt(b); + } + + function gt(a, b) { + return BigInt(a) > BigInt(b); + } + + function geq(a, b) { + return BigInt(a) >= BigInt(b); + } + + function band(a, b) { + return BigInt(a) & BigInt(b); + } + // Returns a buffer with Little Endian Representation function toRprLE(buff, o, e, n8) { const s = "0000000" + e.toString(16); @@ -201,7 +24341,7 @@ var snarkjs = (function (exports) { const l = (((s.length-7)*4 - 1) >> 5)+1; // Number of 32bit words; for (let i=0; i> this.one; - this.bitLength = bitLength$6(this.p); + this.bitLength = bitLength$5(this.p); this.mask = (this.one << BigInt(this.bitLength)) - this.one; this.n64 = Math.floor((this.bitLength - 1) / 64)+1; @@ -1075,7 +25164,7 @@ var snarkjs = (function (exports) { const nBytes = (this.bitLength*2 / 8); let res =this.zero; for (let i=0; i. */ - utils$6.bigInt2BytesLE = function bigInt2BytesLE(_a, len) { + utils$5.bigInt2BytesLE = function bigInt2BytesLE(_a, len) { const b = Array(len); let v = BigInt(_a); for (let i=0; i 0n; } - function bitLength$5(n) { - if (isNegative$3(n)) { + function bitLength$4(n) { + if (isNegative$2(n)) { return n.toString(2).length - 1; // discard the - sign } else { return n.toString(2).length; @@ -2759,7 +26846,7 @@ var snarkjs = (function (exports) { if (compare(t, 0n) === -1) { t = t + n; } - if (isNegative$3(a)) { + if (isNegative$2(a)) { return -t; } return t; @@ -2769,7 +26856,7 @@ var snarkjs = (function (exports) { if (mod === 0n) throw new Error("Cannot take modPow with modulus 0"); var r = 1n, base = n % mod; - if (isNegative$3(exp)) { + if (isNegative$2(exp)) { exp = exp * -1n; base = modInv$3(base, mod); } @@ -2832,7 +26919,7 @@ var snarkjs = (function (exports) { var isPrime = isBasicPrime(p); if (isPrime !== undefined) return isPrime; var n = abs(p); - var bits = bitLength$5(n); + var bits = bitLength$4(n); if (bits <= 64) return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]); var logN = Math.log(2) * Number(bits); @@ -2843,9 +26930,9 @@ var snarkjs = (function (exports) { return millerRabinTest(n, a); } - bigint.bitLength = bitLength$5; + bigint.bitLength = bitLength$4; bigint.isOdd = isOdd$4; - bigint.isNegative = isNegative$3; + bigint.isNegative = isNegative$2; bigint.abs = abs; bigint.isUnit = isUnit; bigint.compare = compare; @@ -2874,16 +26961,16 @@ var snarkjs = (function (exports) { */ const buildInt = build_int; - const utils$5 = utils$6; + const utils$4 = utils$5; const buildExp$2 = build_timesscalar; const buildBatchInverse$2 = build_batchinverse; const buildBatchConvertion$1 = build_batchconvertion; const buildBatchOp = build_batchop; - const { bitLength: bitLength$4, modInv: modInv$2, modPow: modPow$1, isPrime, isOdd: isOdd$3, square } = bigint; + const { bitLength: bitLength$3, modInv: modInv$2, modPow: modPow$1, isPrime, isOdd: isOdd$3, square } = bigint; var build_f1m = function buildF1m(module, _q, _prefix, _intPrefix) { const q = BigInt(_q); - const n64 = Math.floor((bitLength$4(q - 1n) - 1)/64) +1; + const n64 = Math.floor((bitLength$3(q - 1n) - 1)/64) +1; const n32 = n64*2; const n8 = n64*8; @@ -2891,17 +26978,17 @@ var snarkjs = (function (exports) { if (module.modules[prefix]) return prefix; // already builded const intPrefix = buildInt(module, n64, _intPrefix); - const pq = module.alloc(n8, utils$5.bigInt2BytesLE(q, n8)); + const pq = module.alloc(n8, utils$4.bigInt2BytesLE(q, n8)); - const pR2 = module.alloc(utils$5.bigInt2BytesLE(square(1n << BigInt(n64*64)) % q, n8)); - const pOne = module.alloc(utils$5.bigInt2BytesLE((1n << BigInt(n64*64)) % q, n8)); - const pZero = module.alloc(utils$5.bigInt2BytesLE(0n, n8)); + const pR2 = module.alloc(utils$4.bigInt2BytesLE(square(1n << BigInt(n64*64)) % q, n8)); + const pOne = module.alloc(utils$4.bigInt2BytesLE((1n << BigInt(n64*64)) % q, n8)); + const pZero = module.alloc(utils$4.bigInt2BytesLE(0n, n8)); const _minusOne = q - 1n; const _e = _minusOne >> 1n; // e = (p-1)/2 - const pe = module.alloc(n8, utils$5.bigInt2BytesLE(_e, n8)); + const pe = module.alloc(n8, utils$4.bigInt2BytesLE(_e, n8)); const _ePlusOne = _e + 1n; // e = (p-1)/2 - const pePlusOne = module.alloc(n8, utils$5.bigInt2BytesLE(_ePlusOne, n8)); + const pePlusOne = module.alloc(n8, utils$4.bigInt2BytesLE(_ePlusOne, n8)); module.modules[prefix] = { pq: pq, @@ -3656,13 +27743,13 @@ var snarkjs = (function (exports) { s2++; _t = _t >> 1n; } - const pt = module.alloc(n8, utils$5.bigInt2BytesLE(_t, n8)); + const pt = module.alloc(n8, utils$4.bigInt2BytesLE(_t, n8)); const _nqrToT = modPow$1(_nqr, _t, q); - const pNqrToT = module.alloc(utils$5.bigInt2BytesLE((_nqrToT << BigInt(n64*64)) % q, n8)); + const pNqrToT = module.alloc(utils$4.bigInt2BytesLE((_nqrToT << BigInt(n64*64)) % q, n8)); const _tPlusOneOver2 = (_t + 1n) >> 1n; - const ptPlusOneOver2 = module.alloc(n8, utils$5.bigInt2BytesLE(_tPlusOneOver2, n8)); + const ptPlusOneOver2 = module.alloc(n8, utils$4.bigInt2BytesLE(_tPlusOneOver2, n8)); function buildSqrt() { @@ -3936,12 +28023,12 @@ var snarkjs = (function (exports) { */ const buildF1m$2 =build_f1m; - const { bitLength: bitLength$3 } = bigint; + const { bitLength: bitLength$2 } = bigint; var build_f1 = function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) { const q = BigInt(_q); - const n64 = Math.floor((bitLength$3(q - 1n) - 1)/64) +1; + const n64 = Math.floor((bitLength$2(q - 1n) - 1)/64) +1; const n8 = n64*8; const prefix = _prefix || "f1"; @@ -4046,7 +28133,7 @@ var snarkjs = (function (exports) { const buildExp$1 = build_timesscalar; const buildBatchInverse$1 = build_batchinverse; - const utils$4 = utils$6; + const utils$3 = utils$5; var build_f2m = function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) { @@ -4487,9 +28574,9 @@ var snarkjs = (function (exports) { const c = f.getCodeBuilder(); // BigInt can't take `undefined` so we use `|| 0` - const e34 = c.i32_const(module.alloc(utils$4.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); + const e34 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); // BigInt can't take `undefined` so we use `|| 0` - const e12 = c.i32_const(module.alloc(utils$4.bigInt2BytesLE((BigInt(q || 0) - 1n) / 2n, f1n8 ))); + const e12 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE((BigInt(q || 0) - 1n) / 2n, f1n8 ))); const a = c.getLocal("a"); const a1 = c.i32_const(module.alloc(f1n8*2)); @@ -4557,7 +28644,7 @@ var snarkjs = (function (exports) { const c = f.getCodeBuilder(); // BigInt can't take `undefined` so we use `|| 0` - const e34 = c.i32_const(module.alloc(utils$4.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); + const e34 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE((BigInt(q || 0) - 3n) / 4n, f1n8 ))); const a = c.getLocal("a"); const a1 = c.i32_const(module.alloc(f1n8*2)); @@ -7477,7 +31564,7 @@ var snarkjs = (function (exports) { */ const { isOdd: isOdd$2, modInv: modInv$1, modPow } = bigint; - const utils$3 = utils$6; + const utils$2 = utils$5; var build_fft = function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) { @@ -7516,7 +31603,7 @@ var snarkjs = (function (exports) { for (let i=0; i { - res[k] = stringifyBigInts$5(o[k]); - }); - return res; - } else { - return o; - } - } - - function unstringifyBigInts$c(o) { - if (typeof o == "string" && /^[0-9]+$/.test(o)) { - return BigInt(o); - } else if (typeof o == "string" && /^0x[0-9a-fA-F]+$/.test(o)) { - return BigInt(o); - } else if (Array.isArray(o)) { - return o.map(unstringifyBigInts$c); - } else if (typeof o == "object") { - if (o === null) return null; - const res = {}; - const keys = Object.keys(o); - keys.forEach((k) => { - res[k] = unstringifyBigInts$c(o[k]); - }); - return res; - } else { - return o; - } - } - - function beBuff2int(buff) { - let res = BigInt(0); - let i = buff.length; - let offset = 0; - const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); - while (i > 0) { - if (i >= 4) { - i -= 4; - res += BigInt(buffV.getUint32(i)) << BigInt(offset * 8); - offset += 4; - } else if (i >= 2) { - i -= 2; - res += BigInt(buffV.getUint16(i)) << BigInt(offset * 8); - offset += 2; - } else { - i -= 1; - res += BigInt(buffV.getUint8(i)) << BigInt(offset * 8); - offset += 1; - } - } - return res; - } - - function beInt2Buff(n, len) { - let r = n; - const buff = new Uint8Array(len); - const buffV = new DataView(buff.buffer); - let o = len; - while (o > 0) { - if (o - 4 >= 0) { - o -= 4; - buffV.setUint32(o, Number(r & BigInt(0xffffffff))); - r = r >> BigInt(32); - } else if (o - 2 >= 0) { - o -= 2; - buffV.setUint16(o, Number(r & BigInt(0xffff))); - r = r >> BigInt(16); - } else { - o -= 1; - buffV.setUint8(o, Number(r & BigInt(0xff))); - r = r >> BigInt(8); - } - } - if (r) { - throw new Error("Number does not fit in this length"); - } - return buff; - } - - function leBuff2int(buff) { - let res = BigInt(0); - let i = 0; - const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength); - while (i < buff.length) { - if (i + 4 <= buff.length) { - res += BigInt(buffV.getUint32(i, true)) << BigInt(i * 8); - i += 4; - } else if (i + 2 <= buff.length) { - res += BigInt(buffV.getUint16(i, true)) << BigInt(i * 8); - i += 2; - } else { - res += BigInt(buffV.getUint8(i, true)) << BigInt(i * 8); - i += 1; - } - } - return res; - } - function leInt2Buff(n, len) { let r = n; if (typeof len === "undefined") { - len = Math.floor((bitLength$6(n) - 1) / 8) + 1; + len = Math.floor((bitLength$5(n) - 1) / 8) + 1; if (len == 0) len = 1; } const buff = new Uint8Array(len); @@ -12589,45 +36569,6 @@ var snarkjs = (function (exports) { return buff; } - function stringifyFElements(F, o) { - if (typeof o == "bigint" || o.eq !== undefined) { - return o.toString(10); - } else if (o instanceof Uint8Array) { - return F.toString(F.e(o)); - } else if (Array.isArray(o)) { - return o.map(stringifyFElements.bind(this, F)); - } else if (typeof o == "object") { - const res = {}; - const keys = Object.keys(o); - keys.forEach((k) => { - res[k] = stringifyFElements(F, o[k]); - }); - return res; - } else { - return o; - } - } - - function unstringifyFElements(F, o) { - if (typeof o == "string" && /^[0-9]+$/.test(o)) { - return F.e(o); - } else if (typeof o == "string" && /^0x[0-9a-fA-F]+$/.test(o)) { - return F.e(o); - } else if (Array.isArray(o)) { - return o.map(unstringifyFElements.bind(this, F)); - } else if (typeof o == "object") { - if (o === null) return null; - const res = {}; - const keys = Object.keys(o); - keys.forEach((k) => { - res[k] = unstringifyFElements(F, o[k]); - }); - return res; - } else { - return o; - } - } - const _revTable = []; for (let i = 0; i < 256; i++) { _revTable[i] = _revSlow(i, 8); @@ -12654,7 +36595,7 @@ var snarkjs = (function (exports) { ); } - function log2$1(V) { + function log2(V) { return ( ((V & 0xffff0000) !== 0 ? ((V &= 0xffff0000), 16) : 0) | ((V & 0xff00ff00) !== 0 ? ((V &= 0xff00ff00), 8) : 0) | @@ -12666,7 +36607,7 @@ var snarkjs = (function (exports) { function buffReverseBits(buff, eSize) { const n = buff.byteLength / eSize; - const bits = log2$1(n); + const bits = log2(n); if (n != 1 << bits) { throw new Error("Invalid number of pointers"); } @@ -12699,32 +36640,15 @@ var snarkjs = (function (exports) { return arr; } - var _utils = /*#__PURE__*/Object.freeze({ - __proto__: null, - stringifyBigInts: stringifyBigInts$5, - unstringifyBigInts: unstringifyBigInts$c, - beBuff2int: beBuff2int, - beInt2Buff: beInt2Buff, - leBuff2int: leBuff2int, - leInt2Buff: leInt2Buff, - stringifyFElements: stringifyFElements, - unstringifyFElements: unstringifyFElements, - bitReverse: bitReverse, - log2: log2$1, - buffReverseBits: buffReverseBits, - array2buffer: array2buffer, - buffer2array: buffer2array - }); - - const PAGE_SIZE$1 = 1<<30; + const PAGE_SIZE = 1<<30; class BigBuffer { constructor(size) { this.buffers = []; this.byteLength = size; - for (let i=0; i0) { // bytes to copy from this page - const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r; + const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r; const srcView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset+o, l); if (l == len) return srcView.slice(); if (!buff) { - if (len <= PAGE_SIZE$1) { + if (len <= PAGE_SIZE) { buff = new Uint8Array(len); } else { buff = new BigBuffer(len); @@ -12775,24 +36699,24 @@ var snarkjs = (function (exports) { if (len==0) return; - const firstPage = Math.floor(offset / PAGE_SIZE$1); - const lastPage = Math.floor((offset+len-1) / PAGE_SIZE$1); + const firstPage = Math.floor(offset / PAGE_SIZE); + const lastPage = Math.floor((offset+len-1) / PAGE_SIZE); if (firstPage == lastPage) { if ((buff instanceof BigBuffer)&&(buff.buffers.length==1)) { - return this.buffers[firstPage].set(buff.buffers[0], offset % PAGE_SIZE$1); + return this.buffers[firstPage].set(buff.buffers[0], offset % PAGE_SIZE); } else { - return this.buffers[firstPage].set(buff, offset % PAGE_SIZE$1); + return this.buffers[firstPage].set(buff, offset % PAGE_SIZE); } } let p = firstPage; - let o = offset % PAGE_SIZE$1; + let o = offset % PAGE_SIZE; let r = len; while (r>0) { - const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r; + const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r; const srcView = buff.slice( len -r, len -r+l); const dstView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset + o, l); dstView.set(srcView); @@ -12868,7 +36792,7 @@ var snarkjs = (function (exports) { this.m = 1; this.half = shiftRight(p, one); - this.bitLength = bitLength$6(p); + this.bitLength = bitLength$5(p); this.mask = sub(shiftLeft(one, this.bitLength), one); this.pOp1 = tm.alloc(n8); @@ -13022,7 +36946,7 @@ var snarkjs = (function (exports) { e(a, b) { if (a instanceof Uint8Array) return a; let ra = e(a, b); - if (isNegative$4(ra)) { + if (isNegative$3(ra)) { ra = neg(ra); if (gt(ra, this.p)) { ra = mod(ra, this.p); @@ -13040,7 +36964,7 @@ var snarkjs = (function (exports) { toString(a, radix) { const an = this.fromMontgomery(a); const s = fromRprLE(an, 0); - return toString$5(s, radix); + return toString(s, radix); } fromRng(rng) { @@ -14051,26 +37975,6 @@ var snarkjs = (function (exports) { return runTask; } - var os = {}; - - /** - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - var browser$1 = Worker; - /* global navigator, WebAssembly */ /* Copyright 2019 0KIMS association. @@ -14606,7 +38510,7 @@ var snarkjs = (function (exports) { throw new Error("Scalar size does not match"); } - const bitChunkSize = pTSizes[log2$1(nPoints)]; + const bitChunkSize = pTSizes[log2(nPoints)]; const nChunks = Math.floor((sScalar*8 - 1) / bitChunkSize) +1; const opPromises = []; @@ -14671,7 +38575,7 @@ var snarkjs = (function (exports) { throw new Error("Scalar size does not match"); } - const bitChunkSize = pTSizes[log2$1(nPoints)]; + const bitChunkSize = pTSizes[log2(nPoints)]; const nChunks = Math.floor((sScalar*8 - 1) / bitChunkSize) +1; let chunkSize; @@ -14781,7 +38685,7 @@ var snarkjs = (function (exports) { } const nPoints = buff.byteLength / sIn; - const bits = log2$1(nPoints); + const bits = log2(nPoints); if ((1 << bits) != nPoints) { throw new Error("fft must be multiple of 2" ); @@ -14821,7 +38725,7 @@ var snarkjs = (function (exports) { pointsInChunk /= 2; } - const l2Chunk = log2$1(pointsInChunk); + const l2Chunk = log2(pointsInChunk); const promises = []; for (let i = 0; i< nChunks; i++) { @@ -15064,7 +38968,7 @@ var snarkjs = (function (exports) { throw new Error("Invalid buffer size"); } const nPoints = Math.floor(buff1.byteLength / sIn); - if (nPoints != 1 << log2$1(nPoints)) { + if (nPoints != 1 << log2(nPoints)) { throw new Error("Invalid number of points"); } @@ -15171,7 +39075,7 @@ var snarkjs = (function (exports) { } const nPoints = buff.byteLength /sIn; - const bits = log2$1(nPoints); + const bits = log2(nPoints); if ((2 ** bits)*sIn != buff.byteLength) { if (logger) logger.error("lagrangeEvaluations iinvalid input size"); @@ -15233,15 +39137,15 @@ var snarkjs = (function (exports) { } const nPoints = Math.floor(buff.byteLength / sG); - const power = log2$1(nPoints); + const power = log2(nPoints); - let nChunks = 1 << log2$1(tm.concurrency); + let nChunks = 1 << log2(tm.concurrency); if (nPoints <= nChunks*2) nChunks = 1; const pointsPerChunk = nPoints / nChunks; - const powerChunk = log2$1(pointsPerChunk); + const powerChunk = log2(pointsPerChunk); const opPromises = []; for (let i=0; i. - */ - - function toNumber(n) { - return BigInt(n); - } - - function isNegative(n) { - return n < 0n; - } - - function isZero(n) { - return n === 0n; - } - - function bitLength(n) { - if (isNegative(n)) { - return n.toString(2).length - 1; // discard the - sign - } else { - return n.toString(2).length; - } - } - - function u32(n) { - const b = []; - const v = toNumber(n); - b.push(Number(v & 0xFFn)); - b.push(Number(v >> 8n & 0xFFn)); - b.push(Number(v >> 16n & 0xFFn)); - b.push(Number(v >> 24n & 0xFFn)); - return b; - } - - function toUTF8Array(str) { - var utf8 = []; - for (var i=0; i < str.length; i++) { - var charcode = str.charCodeAt(i); - if (charcode < 0x80) utf8.push(charcode); - else if (charcode < 0x800) { - utf8.push(0xc0 | (charcode >> 6), - 0x80 | (charcode & 0x3f)); - } - else if (charcode < 0xd800 || charcode >= 0xe000) { - utf8.push(0xe0 | (charcode >> 12), - 0x80 | ((charcode>>6) & 0x3f), - 0x80 | (charcode & 0x3f)); - } - // surrogate pair - else { - i++; - // UTF-16 encodes 0x10000-0x10FFFF by - // subtracting 0x10000 and splitting the - // 20 bits of 0x0-0xFFFFF into two halves - charcode = 0x10000 + (((charcode & 0x3ff)<<10) - | (str.charCodeAt(i) & 0x3ff)); - utf8.push(0xf0 | (charcode >>18), - 0x80 | ((charcode>>12) & 0x3f), - 0x80 | ((charcode>>6) & 0x3f), - 0x80 | (charcode & 0x3f)); - } - } - return utf8; - } - - function string(str) { - const bytes = toUTF8Array(str); - return [ ...varuint32(bytes.length), ...bytes ]; - } - - function varuint(n) { - const code = []; - let v = toNumber(n); - if (isNegative(v)) throw new Error("Number cannot be negative"); - while (!isZero(v)) { - code.push(Number(v & 0x7Fn)); - v = v >> 7n; - } - if (code.length==0) code.push(0); - for (let i=0; i 0xFFFFFFFFn) throw new Error("Number too big"); - if (v > 0x7FFFFFFFn) v = v - 0x100000000n; - // bigInt("-80000000", 16) as base10 - if (v < -2147483648n) throw new Error("Number too small"); - return varint(v); - } - - function varint64(n) { - let v = toNumber(n); - if (v > 0xFFFFFFFFFFFFFFFFn) throw new Error("Number too big"); - if (v > 0x7FFFFFFFFFFFFFFFn) v = v - 0x10000000000000000n; - // bigInt("-8000000000000000", 16) as base10 - if (v < -9223372036854775808n) throw new Error("Number too small"); - return varint(v); - } - - function varuint32(n) { - let v = toNumber(n); - if (v > 0xFFFFFFFFn) throw new Error("Number too big"); - return varuint(v); - } - - function toHexString(byteArray) { - return Array.from(byteArray, function(byte) { - return ("0" + (byte & 0xFF).toString(16)).slice(-2); - }).join(""); - } - - /* - Copyright 2019 0KIMS association. - - This file is part of wasmbuilder - - wasmbuilder is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - wasmbuilder is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with wasmbuilder. If not, see . - */ - - class CodeBuilder { - constructor(func) { - this.func = func; - this.functionName = func.functionName; - this.module = func.module; - } - - setLocal(localName, valCode) { - const idx = this.func.localIdxByName[localName]; - if (idx === undefined) - throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); - return [...valCode, 0x21, ...varuint32( idx )]; - } - - teeLocal(localName, valCode) { - const idx = this.func.localIdxByName[localName]; - if (idx === undefined) - throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); - return [...valCode, 0x22, ...varuint32( idx )]; - } - - getLocal(localName) { - const idx = this.func.localIdxByName[localName]; - if (idx === undefined) - throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `); - return [0x20, ...varuint32( idx )]; - } - - i64_load8_s(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default - return [...idxCode, 0x30, align, ...varuint32(offset)]; - } - - i64_load8_u(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default - return [...idxCode, 0x31, align, ...varuint32(offset)]; - } - - i64_load16_s(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default - return [...idxCode, 0x32, align, ...varuint32(offset)]; - } - - i64_load16_u(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default - return [...idxCode, 0x33, align, ...varuint32(offset)]; - } - - i64_load32_s(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default - return [...idxCode, 0x34, align, ...varuint32(offset)]; - } - - i64_load32_u(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default - return [...idxCode, 0x35, align, ...varuint32(offset)]; - } - - i64_load(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 3 : _align; // 64 bits alignment by default - return [...idxCode, 0x29, align, ...varuint32(offset)]; - } - - - i64_store(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 3; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 3; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x37, align, ...varuint32(offset)]; - } - - i64_store32(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 2; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 2; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x3e, align, ...varuint32(offset)]; - } - - - i64_store16(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 1; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 1; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x3d, align, ...varuint32(offset)]; - } - - - i64_store8(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 0; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 0; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x3c, align, ...varuint32(offset)]; - } - - i32_load8_s(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default - return [...idxCode, 0x2c, align, ...varuint32(offset)]; - } - - i32_load8_u(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default - return [...idxCode, 0x2d, align, ...varuint32(offset)]; - } - - i32_load16_s(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default - return [...idxCode, 0x2e, align, ...varuint32(offset)]; - } - - i32_load16_u(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default - return [...idxCode, 0x2f, align, ...varuint32(offset)]; - } - - i32_load(idxCode, _offset, _align) { - const offset = _offset || 0; - const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default - return [...idxCode, 0x28, align, ...varuint32(offset)]; - } - - i32_store(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 2; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 2; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x36, align, ...varuint32(offset)]; - } - - - i32_store16(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 1; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 1; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x3b, align, ...varuint32(offset)]; - } - - i32_store8(idxCode, _offset, _align, _codeVal) { - let offset, align, codeVal; - if (Array.isArray(_offset)) { - offset = 0; - align = 0; - codeVal = _offset; - } else if (Array.isArray(_align)) { - offset = _offset; - align = 0; - codeVal = _align; - } else if (Array.isArray(_codeVal)) { - offset = _offset; - align = _align; - codeVal = _codeVal; - } - return [...idxCode, ...codeVal, 0x3a, align, ...varuint32(offset)]; - } - - call(fnName, ...args) { - const idx = this.module.functionIdxByName[fnName]; - if (idx === undefined) - throw new Error(`Function not defined: Function: ${fnName}`); - return [...[].concat(...args), 0x10, ...varuint32(idx)]; - } - - call_indirect(fnIdx, ...args) { - return [...[].concat(...args), ...fnIdx, 0x11, 0, 0]; - } - - if(condCode, thenCode, elseCode) { - if (elseCode) { - return [...condCode, 0x04, 0x40, ...thenCode, 0x05, ...elseCode, 0x0b]; - } else { - return [...condCode, 0x04, 0x40, ...thenCode, 0x0b]; - } - } - - block(bCode) { return [0x02, 0x40, ...bCode, 0x0b]; } - loop(...args) { - return [0x03, 0x40, ...[].concat(...[...args]), 0x0b]; - } - br_if(relPath, condCode) { return [...condCode, 0x0d, ...varuint32(relPath)]; } - br(relPath) { return [0x0c, ...varuint32(relPath)]; } - ret(rCode) { return [...rCode, 0x0f]; } - drop(dCode) { return [...dCode, 0x1a]; } - - i64_const(num) { return [0x42, ...varint64(num)]; } - i32_const(num) { return [0x41, ...varint32(num)]; } - - - i64_eqz(opcode) { return [...opcode, 0x50]; } - i64_eq(op1code, op2code) { return [...op1code, ...op2code, 0x51]; } - i64_ne(op1code, op2code) { return [...op1code, ...op2code, 0x52]; } - i64_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x53]; } - i64_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x54]; } - i64_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x55]; } - i64_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x56]; } - i64_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x57]; } - i64_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x58]; } - i64_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x59]; } - i64_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x5a]; } - i64_add(op1code, op2code) { return [...op1code, ...op2code, 0x7c]; } - i64_sub(op1code, op2code) { return [...op1code, ...op2code, 0x7d]; } - i64_mul(op1code, op2code) { return [...op1code, ...op2code, 0x7e]; } - i64_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x7f]; } - i64_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x80]; } - i64_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x81]; } - i64_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x82]; } - i64_and(op1code, op2code) { return [...op1code, ...op2code, 0x83]; } - i64_or(op1code, op2code) { return [...op1code, ...op2code, 0x84]; } - i64_xor(op1code, op2code) { return [...op1code, ...op2code, 0x85]; } - i64_shl(op1code, op2code) { return [...op1code, ...op2code, 0x86]; } - i64_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x87]; } - i64_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x88]; } - i64_extend_i32_s(op1code) { return [...op1code, 0xac]; } - i64_extend_i32_u(op1code) { return [...op1code, 0xad]; } - i64_clz(op1code) { return [...op1code, 0x79]; } - i64_ctz(op1code) { return [...op1code, 0x7a]; } - - i32_eqz(op1code) { return [...op1code, 0x45]; } - i32_eq(op1code, op2code) { return [...op1code, ...op2code, 0x46]; } - i32_ne(op1code, op2code) { return [...op1code, ...op2code, 0x47]; } - i32_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x48]; } - i32_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x49]; } - i32_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x4a]; } - i32_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x4b]; } - i32_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x4c]; } - i32_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x4d]; } - i32_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x4e]; } - i32_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x4f]; } - i32_add(op1code, op2code) { return [...op1code, ...op2code, 0x6a]; } - i32_sub(op1code, op2code) { return [...op1code, ...op2code, 0x6b]; } - i32_mul(op1code, op2code) { return [...op1code, ...op2code, 0x6c]; } - i32_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x6d]; } - i32_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x6e]; } - i32_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x6f]; } - i32_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x70]; } - i32_and(op1code, op2code) { return [...op1code, ...op2code, 0x71]; } - i32_or(op1code, op2code) { return [...op1code, ...op2code, 0x72]; } - i32_xor(op1code, op2code) { return [...op1code, ...op2code, 0x73]; } - i32_shl(op1code, op2code) { return [...op1code, ...op2code, 0x74]; } - i32_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x75]; } - i32_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x76]; } - i32_rotl(op1code, op2code) { return [...op1code, ...op2code, 0x77]; } - i32_rotr(op1code, op2code) { return [...op1code, ...op2code, 0x78]; } - i32_wrap_i64(op1code) { return [...op1code, 0xa7]; } - i32_clz(op1code) { return [...op1code, 0x67]; } - i32_ctz(op1code) { return [...op1code, 0x68]; } - - unreachable() { return [ 0x0 ]; } - - current_memory() { return [ 0x3f, 0]; } - - comment() { return []; } - } - - /* - Copyright 2019 0KIMS association. - - This file is part of wasmbuilder - - wasmbuilder is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - wasmbuilder is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with wasmbuilder. If not, see . - */ - - const typeCodes = { - "i32": 0x7f, - "i64": 0x7e, - "f32": 0x7d, - "f64": 0x7c, - "anyfunc": 0x70, - "func": 0x60, - "emptyblock": 0x40 - }; - - - class FunctionBuilder { - - constructor (module, fnName, fnType, moduleName, fieldName) { - if (fnType == "import") { - this.fnType = "import"; - this.moduleName = moduleName; - this.fieldName = fieldName; - } else if (fnType == "internal") { - this.fnType = "internal"; - } else { - throw new Error("Invalid function fnType: " + fnType); - } - this.module = module; - this.fnName = fnName; - this.params = []; - this.locals = []; - this.localIdxByName = {}; - this.code = []; - this.returnType = null; - this.nextLocal =0; - } - - addParam(paramName, paramType) { - if (this.localIdxByName[paramName]) - throw new Error(`param already exists. Function: ${this.fnName}, Param: ${paramName} `); - const idx = this.nextLocal++; - this.localIdxByName[paramName] = idx; - this.params.push({ - type: paramType - }); - } - - addLocal(localName, localType, _length) { - const length = _length || 1; - if (this.localIdxByName[localName]) - throw new Error(`local already exists. Function: ${this.fnName}, Param: ${localName} `); - const idx = this.nextLocal++; - this.localIdxByName[localName] = idx; - this.locals.push({ - type: localType, - length: length - }); - } - - setReturnType(returnType) { - if (this.returnType) - throw new Error(`returnType already defined. Function: ${this.fnName}`); - this.returnType = returnType; - } - - getSignature() { - const params = [...varuint32(this.params.length), ...this.params.map((p) => typeCodes[p.type])]; - const returns = this.returnType ? [0x01, typeCodes[this.returnType]] : [0]; - return [0x60, ...params, ...returns]; - } - - getBody() { - const locals = this.locals.map((l) => [ - ...varuint32(l.length), - typeCodes[l.type] - ]); - - const body = [ - ...varuint32(this.locals.length), - ...[].concat(...locals), - ...this.code, - 0x0b - ]; - return [ - ...varuint32(body.length), - ...body - ]; - } - - addCode(...code) { - this.code.push(...[].concat(...[...code])); - } - - getCodeBuilder() { - return new CodeBuilder(this); - } - } - - /* - Copyright 2019 0KIMS association. - - This file is part of wasmbuilder - - wasmbuilder is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - wasmbuilder is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with wasmbuilder. If not, see . - */ - - class ModuleBuilder { - - constructor() { - this.functions = []; - this.functionIdxByName = {}; - this.nImportFunctions = 0; - this.nInternalFunctions =0; - this.memory = { - pagesSize: 1, - moduleName: "env", - fieldName: "memory" - }; - this.free = 8; - this.datas = []; - this.modules = {}; - this.exports = []; - this.functionsTable = []; - } - - build() { - this._setSignatures(); - return new Uint8Array([ - ...u32(0x6d736100), - ...u32(1), - ...this._buildType(), - ...this._buildImport(), - ...this._buildFunctionDeclarations(), - ...this._buildFunctionsTable(), - ...this._buildExports(), - ...this._buildElements(), - ...this._buildCode(), - ...this._buildData() - ]); - } - - addFunction(fnName) { - if (typeof(this.functionIdxByName[fnName]) !== "undefined") - throw new Error(`Function already defined: ${fnName}`); - - const idx = this.functions.length; - this.functionIdxByName[fnName] = idx; - - this.functions.push(new FunctionBuilder(this, fnName, "internal")); - - this.nInternalFunctions++; - return this.functions[idx]; - } - - addIimportFunction(fnName, moduleName, _fieldName) { - if (typeof(this.functionIdxByName[fnName]) !== "undefined") - throw new Error(`Function already defined: ${fnName}`); - - if ( (this.functions.length>0) - &&(this.functions[this.functions.length-1].type == "internal")) - throw new Error(`Import functions must be declared before internal: ${fnName}`); - - let fieldName = _fieldName || fnName; - - const idx = this.functions.length; - this.functionIdxByName[fnName] = idx; - - this.functions.push(new FunctionBuilder(this, fnName, "import", moduleName, fieldName)); - - this.nImportFunctions ++; - return this.functions[idx]; - } - - setMemory(pagesSize, moduleName, fieldName) { - this.memory = { - pagesSize: pagesSize, - moduleName: moduleName || "env", - fieldName: fieldName || "memory" - }; - } - - exportFunction(fnName, _exportName) { - const exportName = _exportName || fnName; - if (typeof(this.functionIdxByName[fnName]) === "undefined") - throw new Error(`Function not defined: ${fnName}`); - const idx = this.functionIdxByName[fnName]; - if (exportName != fnName) { - this.functionIdxByName[exportName] = idx; - } - this.exports.push({ - exportName: exportName, - idx: idx - }); - } - - addFunctionToTable(fnName) { - const idx = this.functionIdxByName[fnName]; - this.functionsTable.push(idx); - } - - addData(offset, bytes) { - this.datas.push({ - offset: offset, - bytes: bytes - }); - } - - alloc(a, b) { - let size; - let bytes; - if ((Array.isArray(a) || ArrayBuffer.isView(a)) && (typeof(b) === "undefined")) { - size = a.length; - bytes = a; - } else { - size = a; - bytes = b; - } - size = (((size-1)>>3) +1)<<3; // Align to 64 bits. - const p = this.free; - this.free += size; - if (bytes) { - this.addData(p, bytes); - } - return p; - } - - allocString(s) { - const encoder = new globalThis.TextEncoder(); - const uint8array = encoder.encode(s); - return this.alloc([...uint8array, 0]); - } - - _setSignatures() { - this.signatures = []; - const signatureIdxByName = {}; - if (this.functionsTable.length>0) { - const signature = this.functions[this.functionsTable[0]].getSignature(); - const signatureName = "s_"+toHexString(signature); - signatureIdxByName[signatureName] = 0; - this.signatures.push(signature); - } - for (let i=0; i { - self.pendingLoads.push({ - page: p, - resolve: resolve, - reject: reject - }); - }); - self.__statusPage("After Load request: ", p); - return P; - } - - __statusPage(s, p) { - const logEntry = []; - const self=this; - if (!self.logHistory) return; - logEntry.push("==" + s+ " " +p); - let S = ""; - for (let i=0; i " + self.history[p][i][j]); - } - } - } - - - - _triggerLoad() { - const self = this; - - if (self.reading) return; - if (self.pendingLoads.length==0) return; - - const pageIdxs = Object.keys(self.pages); - - const deletablePages = []; - for (let i=0; i0) && - ( (typeof self.pages[self.pendingLoads[0].page] != "undefined" ) - ||( (freePages>0) - ||(deletablePages.length>0)))) { - const load = self.pendingLoads.shift(); - if (typeof self.pages[load.page] != "undefined") { - self.pages[load.page].pendingOps ++; - const idx = deletablePages.indexOf(load.page); - if (idx>=0) deletablePages.splice(idx, 1); - if (self.pages[load.page].loading) { - self.pages[load.page].loading.push(load); - } else { - load.resolve(); - } - self.__statusPage("After Load (cached): ", load.page); - - } else { - if (freePages) { - freePages--; - } else { - const fp = deletablePages.shift(); - self.__statusPage("Before Unload: ", fp); - self.avBuffs.unshift(self.pages[fp]); - delete self.pages[fp]; - self.__statusPage("After Unload: ", fp); - } - - if (load.page>=self.totalPages) { - self.pages[load.page] = getNewPage(); - load.resolve(); - self.__statusPage("After Load (new): ", load.page); - } else { - self.reading = true; - self.pages[load.page] = getNewPage(); - self.pages[load.page].loading = [load]; - ops.push(self.fd.read(self.pages[load.page].buff, 0, self.pageSize, load.page*self.pageSize).then((res)=> { - self.pages[load.page].size = res.bytesRead; - const loading = self.pages[load.page].loading; - delete self.pages[load.page].loading; - for (let i=0; i { - load.reject(err); - })); - self.__statusPage("After Load (loading): ", load.page); - } - } - } - // if (ops.length>1) console.log(ops.length); - - Promise.all(ops).then( () => { - self.reading = false; - if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); - self._tryClose(); - }); - - function getNewPage() { - if (self.avBuffs.length>0) { - const p = self.avBuffs.shift(); - p.dirty = false; - p.pendingOps = 1; - p.size =0; - return p; - } else { - return { - dirty: false, - buff: new Uint8Array(self.pageSize), - pendingOps: 1, - size: 0 - }; - } - } - - } - - - _triggerWrite() { - const self = this; - if (self.writing) return; - - const pageIdxs = Object.keys(self.pages); - - const ops = []; - - for (let i=0; i { - page.writing = false; - return; - }, (err) => { - console.log("ERROR Writing: "+err); - self.error = err; - self._tryClose(); - })); - } - } - - if (self.writing) { - Promise.all(ops).then( () => { - self.writing = false; - setImmediate(self._triggerWrite.bind(self)); - self._tryClose(); - if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); - }); - } - } - - _getDirtyPage() { - for (let p in this.pages) { - if (this.pages[p].dirty) return p; - } - return -1; - } - - async write(buff, pos) { - if (buff.byteLength == 0) return; - const self = this; - /* - if (buff.byteLength > self.pageSize*self.maxPagesLoaded*0.8) { - const cacheSize = Math.floor(buff.byteLength * 1.1); - this.maxPagesLoaded = Math.floor( cacheSize / self.pageSize)+1; - } - */ - if (typeof pos == "undefined") pos = self.pos; - self.pos = pos+buff.byteLength; - if (self.totalSize < pos + buff.byteLength) self.totalSize = pos + buff.byteLength; - if (self.pendingClose) - throw new Error("Writing a closing file"); - const firstPage = Math.floor(pos / self.pageSize); - const lastPage = Math.floor((pos + buff.byteLength -1) / self.pageSize); - - const pagePromises = []; - for (let i=firstPage; i<=lastPage; i++) pagePromises.push(self._loadPage(i)); - self._triggerLoad(); - - let p = firstPage; - let o = pos % self.pageSize; - let r = buff.byteLength; - while (r>0) { - await pagePromises[p-firstPage]; - const l = (o+r > self.pageSize) ? (self.pageSize -o) : r; - const srcView = buff.slice( buff.byteLength - r, buff.byteLength - r + l); - const dstView = new Uint8Array(self.pages[p].buff.buffer, o, l); - dstView.set(srcView); - self.pages[p].dirty = true; - self.pages[p].pendingOps --; - self.pages[p].size = Math.max(o+l, self.pages[p].size); - if (p>=self.totalPages) { - self.totalPages = p+1; - } - r = r-l; - p ++; - o = 0; - if (!self.writing) setImmediate(self._triggerWrite.bind(self)); - } - } - - async read(len, pos) { - const self = this; - let buff = new Uint8Array(len); - await self.readToBuffer(buff, 0, len, pos); - - return buff; - } - - async readToBuffer(buffDst, offset, len, pos) { - if (len == 0) { - return; - } - const self = this; - if (len > self.pageSize*self.maxPagesLoaded*0.8) { - const cacheSize = Math.floor(len * 1.1); - this.maxPagesLoaded = Math.floor( cacheSize / self.pageSize)+1; - } - if (typeof pos == "undefined") pos = self.pos; - self.pos = pos+len; - if (self.pendingClose) - throw new Error("Reading a closing file"); - const firstPage = Math.floor(pos / self.pageSize); - const lastPage = Math.floor((pos + len -1) / self.pageSize); - - const pagePromises = []; - for (let i=firstPage; i<=lastPage; i++) pagePromises.push(self._loadPage(i)); - - self._triggerLoad(); - - let p = firstPage; - let o = pos % self.pageSize; - // Remaining bytes to read - let r = pos + len > self.totalSize ? len - (pos + len - self.totalSize): len; - while (r>0) { - await pagePromises[p - firstPage]; - self.__statusPage("After Await (read): ", p); - - // bytes to copy from this page - const l = (o+r > self.pageSize) ? (self.pageSize -o) : r; - const srcView = new Uint8Array(self.pages[p].buff.buffer, self.pages[p].buff.byteOffset + o, l); - buffDst.set(srcView, offset+len-r); - self.pages[p].pendingOps --; - - self.__statusPage("After Op done: ", p); - - r = r-l; - p ++; - o = 0; - if (self.pendingLoads.length>0) setImmediate(self._triggerLoad.bind(self)); - } - - this.pos = pos + len; - - } - - - _tryClose() { - const self = this; - if (!self.pendingClose) return; - if (self.error) { - self.pendingCloseReject(self.error); - } - const p = self._getDirtyPage(); - if ((p>=0) || (self.writing) || (self.reading) || (self.pendingLoads.length>0)) return; - self.pendingClose(); - } - - close() { - const self = this; - if (self.pendingClose) - throw new Error("Closing the file twice"); - return new Promise((resolve, reject) => { - self.pendingClose = resolve; - self.pendingCloseReject = reject; - self._tryClose(); - }).then(()=> { - self.fd.close(); - }, (err) => { - self.fd.close(); - throw (err); - }); - } - - async discard() { - const self = this; - await self.close(); - await fs.promises.unlink(this.fileName); - } - - async writeULE32(v, pos) { - const self = this; - const tmpBuff32 = new Uint8Array(4); - const tmpBuff32v = new DataView(tmpBuff32.buffer); - - tmpBuff32v.setUint32(0, v, true); - - await self.write(tmpBuff32, pos); - } - - async writeUBE32(v, pos) { - const self = this; - - const tmpBuff32 = new Uint8Array(4); - const tmpBuff32v = new DataView(tmpBuff32.buffer); - - tmpBuff32v.setUint32(0, v, false); - - await self.write(tmpBuff32, pos); - } - - - async writeULE64(v, pos) { - const self = this; - - const tmpBuff64 = new Uint8Array(8); - const tmpBuff64v = new DataView(tmpBuff64.buffer); - - tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true); - tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true); - - await self.write(tmpBuff64, pos); - } - - async readULE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new Uint32Array(b.buffer); - - return view[0]; - } - - async readUBE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new DataView(b.buffer); - - return view.getUint32(0, false); - } - - async readULE64(pos) { - const self = this; - const b = await self.read(8, pos); - - const view = new Uint32Array(b.buffer); - - return view[1] * 0x100000000 + view[0]; - } - - async readString(pos) { - const self = this; - - if (self.pendingClose) { - throw new Error("Reading a closing file"); - } - - let currentPosition = typeof pos == "undefined" ? self.pos : pos; - let currentPage = Math.floor(currentPosition / self.pageSize); - - let endOfStringFound = false; - let str = ""; - - while (!endOfStringFound) { - //Read page - let pagePromise = self._loadPage(currentPage); - self._triggerLoad(); - await pagePromise; - self.__statusPage("After Await (read): ", currentPage); - - let offsetOnPage = currentPosition % self.pageSize; - - const dataArray = new Uint8Array( - self.pages[currentPage].buff.buffer, - self.pages[currentPage].buff.byteOffset + offsetOnPage, - self.pageSize - offsetOnPage - ); - - let indexEndOfString = dataArray.findIndex(element => element === 0); - endOfStringFound = indexEndOfString !== -1; - - if (endOfStringFound) { - str += new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); - self.pos = currentPage * this.pageSize + offsetOnPage + indexEndOfString + 1; - } else { - str += new TextDecoder().decode(dataArray); - self.pos = currentPage * this.pageSize + offsetOnPage + dataArray.length; - } - - self.pages[currentPage].pendingOps--; - self.__statusPage("After Op done: ", currentPage); - - currentPosition = self.pos; - currentPage++; - - if (self.pendingLoads.length > 0) setImmediate(self._triggerLoad.bind(self)); - } - - return str; - } - } - - function createNew$1(o) { - const initialSize = o.initialSize || 1<<20; - const fd = new MemFile(); - fd.o = o; - fd.o.data = new Uint8Array(initialSize); - fd.allocSize = initialSize; - fd.totalSize = 0; - fd.readOnly = false; - fd.pos = 0; - return fd; - } - - function readExisting$2(o) { - const fd = new MemFile(); - fd.o = o; - fd.allocSize = o.data.byteLength; - fd.totalSize = o.data.byteLength; - fd.readOnly = true; - fd.pos = 0; - return fd; - } - - const tmpBuff32$1 = new Uint8Array(4); - const tmpBuff32v$1 = new DataView(tmpBuff32$1.buffer); - const tmpBuff64$1 = new Uint8Array(8); - const tmpBuff64v$1 = new DataView(tmpBuff64$1.buffer); - - class MemFile { - - constructor() { - this.pageSize = 1 << 14; // for compatibility - } - - _resizeIfNeeded(newLen) { - if (newLen > this.allocSize) { - const newAllocSize = Math.max( - this.allocSize + (1 << 20), - Math.floor(this.allocSize * 1.1), - newLen - ); - const newData = new Uint8Array(newAllocSize); - newData.set(this.o.data); - this.o.data = newData; - this.allocSize = newAllocSize; - } - } - - async write(buff, pos) { - const self =this; - if (typeof pos == "undefined") pos = self.pos; - if (this.readOnly) throw new Error("Writing a read only file"); - - this._resizeIfNeeded(pos + buff.byteLength); - - this.o.data.set(buff.slice(), pos); - - if (pos + buff.byteLength > this.totalSize) this.totalSize = pos + buff.byteLength; - - this.pos = pos + buff.byteLength; - } - - async readToBuffer(buffDest, offset, len, pos) { - const self = this; - if (typeof pos == "undefined") pos = self.pos; - if (this.readOnly) { - if (pos + len > this.totalSize) throw new Error("Reading out of bounds"); - } - this._resizeIfNeeded(pos + len); - - const buffSrc = new Uint8Array(this.o.data.buffer, this.o.data.byteOffset + pos, len); - - buffDest.set(buffSrc, offset); - - this.pos = pos + len; - } - - async read(len, pos) { - const self = this; - - const buff = new Uint8Array(len); - await self.readToBuffer(buff, 0, len, pos); - - return buff; - } - - close() { - if (this.o.data.byteLength != this.totalSize) { - this.o.data = this.o.data.slice(0, this.totalSize); - } - } - - async discard() { - } - - - async writeULE32(v, pos) { - const self = this; - - tmpBuff32v$1.setUint32(0, v, true); - - await self.write(tmpBuff32$1, pos); - } - - async writeUBE32(v, pos) { - const self = this; - - tmpBuff32v$1.setUint32(0, v, false); - - await self.write(tmpBuff32$1, pos); - } - - - async writeULE64(v, pos) { - const self = this; - - tmpBuff64v$1.setUint32(0, v & 0xFFFFFFFF, true); - tmpBuff64v$1.setUint32(4, Math.floor(v / 0x100000000) , true); - - await self.write(tmpBuff64$1, pos); - } - - - async readULE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new Uint32Array(b.buffer); - - return view[0]; - } - - async readUBE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new DataView(b.buffer); - - return view.getUint32(0, false); - } - - async readULE64(pos) { - const self = this; - const b = await self.read(8, pos); - - const view = new Uint32Array(b.buffer); - - return view[1] * 0x100000000 + view[0]; - } - - async readString(pos) { - const self = this; - - let currentPosition = typeof pos == "undefined" ? self.pos : pos; - - if (currentPosition > this.totalSize) { - if (this.readOnly) { - throw new Error("Reading out of bounds"); - } - this._resizeIfNeeded(pos); - } - const dataArray = new Uint8Array( - self.o.data.buffer, - currentPosition, - this.totalSize - currentPosition - ); - - let indexEndOfString = dataArray.findIndex(element => element === 0); - let endOfStringFound = indexEndOfString !== -1; - - let str = ""; - if (endOfStringFound) { - str = new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); - self.pos = currentPosition + indexEndOfString + 1; - } else { - self.pos = currentPosition; - } - return str; - } - } - - const PAGE_SIZE = 1<<22; - - function createNew(o) { - const initialSize = o.initialSize || 0; - const fd = new BigMemFile(); - fd.o = o; - const nPages = initialSize ? Math.floor((initialSize - 1) / PAGE_SIZE)+1 : 0; - fd.o.data = []; - for (let i=0; i0) { - const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r; - const srcView = buff.slice(buff.byteLength - r, buff.byteLength - r + l); - const dstView = new Uint8Array(self.o.data[p].buffer, o, l); - dstView.set(srcView); - r = r-l; - p ++; - o = 0; - } - - this.pos = pos + buff.byteLength; - } - - async readToBuffer(buffDst, offset, len, pos) { - const self = this; - if (typeof pos == "undefined") pos = self.pos; - if (this.readOnly) { - if (pos + len > this.totalSize) throw new Error("Reading out of bounds"); - } - this._resizeIfNeeded(pos + len); - - const firstPage = Math.floor(pos / PAGE_SIZE); - - let p = firstPage; - let o = pos % PAGE_SIZE; - // Remaining bytes to read - let r = len; - while (r>0) { - // bytes to copy from this page - const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r; - const srcView = new Uint8Array(self.o.data[p].buffer, o, l); - buffDst.set(srcView, offset+len-r); - r = r-l; - p ++; - o = 0; - } - - this.pos = pos + len; - } - - async read(len, pos) { - const self = this; - const buff = new Uint8Array(len); - - await self.readToBuffer(buff, 0, len, pos); - - return buff; - } - - close() { - } - - async discard() { - } - - - async writeULE32(v, pos) { - const self = this; - - tmpBuff32v.setUint32(0, v, true); - - await self.write(tmpBuff32, pos); - } - - async writeUBE32(v, pos) { - const self = this; - - tmpBuff32v.setUint32(0, v, false); - - await self.write(tmpBuff32, pos); - } - - - async writeULE64(v, pos) { - const self = this; - - tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true); - tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true); - - await self.write(tmpBuff64, pos); - } - - - async readULE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new Uint32Array(b.buffer); - - return view[0]; - } - - async readUBE32(pos) { - const self = this; - const b = await self.read(4, pos); - - const view = new DataView(b.buffer); - - return view.getUint32(0, false); - } - - async readULE64(pos) { - const self = this; - const b = await self.read(8, pos); - - const view = new Uint32Array(b.buffer); - - return view[1] * 0x100000000 + view[0]; - } - - async readString(pos) { - const self = this; - const fixedSize = 2048; - - let currentPosition = typeof pos == "undefined" ? self.pos : pos; - - if (currentPosition > this.totalSize) { - if (this.readOnly) { - throw new Error("Reading out of bounds"); - } - this._resizeIfNeeded(pos); - } - - let endOfStringFound = false; - let str = ""; - - while (!endOfStringFound) { - let currentPage = Math.floor(currentPosition / PAGE_SIZE); - let offsetOnPage = currentPosition % PAGE_SIZE; - - if (self.o.data[currentPage] === undefined) { - throw new Error("ERROR"); - } - - let readLength = Math.min(fixedSize, self.o.data[currentPage].length - offsetOnPage); - const dataArray = new Uint8Array(self.o.data[currentPage].buffer, offsetOnPage, readLength); - - let indexEndOfString = dataArray.findIndex(element => element === 0); - endOfStringFound = indexEndOfString !== -1; - - if (endOfStringFound) { - str += new TextDecoder().decode(dataArray.slice(0, indexEndOfString)); - self.pos = currentPage * PAGE_SIZE + offsetOnPage + indexEndOfString + 1; - } else { - str += new TextDecoder().decode(dataArray); - self.pos = currentPage * PAGE_SIZE + offsetOnPage + dataArray.length; - } - - currentPosition = self.pos; - } - return str; - } - } - - const O_TRUNC = 1024; - const O_CREAT = 512; - const O_RDWR = 2; - const O_RDONLY = 0; - - /* global fetch */ - - const DEFAULT_CACHE_SIZE = (1 << 16); - const DEFAULT_PAGE_SIZE = (1 << 13); - - - async function createOverride(o, b, c) { - if (typeof o === "string") { - o = { - type: "file", - fileName: o, - cacheSize: b || DEFAULT_CACHE_SIZE, - pageSize: c || DEFAULT_PAGE_SIZE - }; - } - if (o.type == "file") { - return await open(o.fileName, O_TRUNC | O_CREAT | O_RDWR, o.cacheSize, o.pageSize); - } else if (o.type == "mem") { - return createNew$1(o); - } else if (o.type == "bigMem") { - return createNew(o); - } else { - throw new Error("Invalid FastFile type: "+o.type); - } - } - - async function readExisting(o, b, c) { - if (o instanceof Uint8Array) { - o = { - type: "mem", - data: o - }; - } - { - if (typeof o === "string") { - const buff = await fetch(o).then( function(res) { - return res.arrayBuffer(); - }).then(function (ab) { - return new Uint8Array(ab); - }); - o = { - type: "mem", - data: buff - }; - } - } - if (o.type == "file") { - return await open(o.fileName, O_RDONLY, o.cacheSize, o.pageSize); - } else if (o.type == "mem") { - return await readExisting$2(o); - } else if (o.type == "bigMem") { - return await readExisting$1(o); - } else { - throw new Error("Invalid FastFile type: "+o.type); - } - } - - async function readBinFile(fileName, type, maxVersion, cacheSize, pageSize) { - - const fd = await readExisting(fileName); - - const b = await fd.read(4); - let readedType = ""; - for (let i=0; i<4; i++) readedType += String.fromCharCode(b[i]); - - if (readedType != type) throw new Error(fileName + ": Invalid File format"); - - let v = await fd.readULE32(); - - if (v>maxVersion) throw new Error("Version not supported"); - - const nSections = await fd.readULE32(); - - // Scan sections - let sections = []; - for (let i=0; i1) throw new Error(fd.fileName +": Section Duplicated " +idSection); - - fd.pos = sections[idSection][0].p; - - fd.readingSection = sections[idSection][0]; - } - - async function endReadSection(fd, noCheck) { - if (typeof fd.readingSection === "undefined") throw new Error("Not reading a section"); - if (!noCheck) { - if (fd.pos-fd.readingSection.p != fd.readingSection.size) throw new Error("Invalid section size reading"); - } - delete fd.readingSection; - } - - async function writeBigInt(fd, n, n8, pos) { - const buff = new Uint8Array(n8); - Scalar.toRprLE(buff, 0, n, n8); - await fd.write(buff, pos); - } - - async function readBigInt(fd, n8, pos) { - const buff = await fd.read(n8, pos); - return Scalar.fromRprLE(buff, 0, n8); - } - - async function copySection(fdFrom, sections, fdTo, sectionId, size) { - if (typeof size === "undefined") { - size = sections[sectionId][0].size; - } - const chunkSize = fdFrom.pageSize; - await startReadUniqueSection(fdFrom, sections, sectionId); - await startWriteSection(fdTo, sectionId); - for (let p=0; p sections[idSection][0].size) { - throw new Error("Reading out of the range of the section"); - } - - let buff; - if (length < (1 << 30) ) { - buff = new Uint8Array(length); - } else { - buff = new BigBuffer(length); - } - - await fd.readToBuffer(buff, 0, length, sections[idSection][0].p + offset); - return buff; - } - - async function sectionIsEqual(fd1, sections1, fd2, sections2, idSection) { - const MAX_BUFF_SIZE = fd1.pageSize * 16; - await startReadUniqueSection(fd1, sections1, idSection); - await startReadUniqueSection(fd2, sections2, idSection); - if (sections1[idSection][0].size != sections2[idSection][0].size) return false; - const totalBytes=sections1[idSection][0].size; - for (let i=0; i= 0) { - curve = await buildBn128(); - } else if (["BLS12381"].indexOf(normName) >= 0) { - curve = await buildBls12381(); - } else { - throw new Error(`Curve not supported: ${name}`); - } - return curve; - - function normalizeName(n) { - return n.toUpperCase().match(/[A-Za-z0-9]+/g).join(""); - } - - } - - var blake2bWasm = {exports: {}}; - - var nanoassert = assert$1; - - class AssertionError extends Error {} - AssertionError.prototype.name = 'AssertionError'; - - /** - * Minimal assert function - * @param {any} t Value to check if falsy - * @param {string=} m Optional assertion error message - * @throws {AssertionError} - */ - function assert$1 (t, m) { - if (!t) { - var err = new AssertionError(m); - if (Error.captureStackTrace) Error.captureStackTrace(err, assert$1); - throw err - } - } - - var browser = {exports: {}}; - - function byteLength$4 (string) { - return string.length - } - - function toString$4 (buffer) { - const len = buffer.byteLength; - - let result = ''; - - for (let i = 0; i < len; i++) { - result += String.fromCharCode(buffer[i]); - } - - return result - } - - function write$5 (buffer, string, offset = 0, length = byteLength$4(string)) { - const len = Math.min(length, buffer.byteLength - offset); - - for (let i = 0; i < len; i++) { - buffer[offset + i] = string.charCodeAt(i); - } - - return len - } - - var ascii = { - byteLength: byteLength$4, - toString: toString$4, - write: write$5 - }; - - const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - - const codes = new Uint8Array(256); - - for (let i = 0; i < alphabet.length; i++) { - codes[alphabet.charCodeAt(i)] = i; - } - - codes[/* - */ 0x2d] = 62; - codes[/* _ */ 0x5f] = 63; - - function byteLength$3 (string) { - let len = string.length; - - if (string.charCodeAt(len - 1) === 0x3d) len--; - if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--; - - return (len * 3) >>> 2 - } - - function toString$3 (buffer) { - const len = buffer.byteLength; - - let result = ''; - - for (let i = 0; i < len; i += 3) { - result += ( - alphabet[buffer[i] >> 2] + - alphabet[((buffer[i] & 3) << 4) | (buffer[i + 1] >> 4)] + - alphabet[((buffer[i + 1] & 15) << 2) | (buffer[i + 2] >> 6)] + - alphabet[buffer[i + 2] & 63] - ); - } - - if (len % 3 === 2) { - result = result.substring(0, result.length - 1) + '='; - } else if (len % 3 === 1) { - result = result.substring(0, result.length - 2) + '=='; - } - - return result - } - function write$4 (buffer, string, offset = 0, length = byteLength$3(string)) { - const len = Math.min(length, buffer.byteLength - offset); - - for (let i = 0, j = 0; j < len; i += 4) { - const a = codes[string.charCodeAt(i)]; - const b = codes[string.charCodeAt(i + 1)]; - const c = codes[string.charCodeAt(i + 2)]; - const d = codes[string.charCodeAt(i + 3)]; - - buffer[j++] = (a << 2) | (b >> 4); - buffer[j++] = ((b & 15) << 4) | (c >> 2); - buffer[j++] = ((c & 3) << 6) | (d & 63); - } - - return len - } - var base64 = { - byteLength: byteLength$3, - toString: toString$3, - write: write$4 - }; - - function byteLength$2 (string) { - return string.length >>> 1 - } - - function toString$2 (buffer) { - const len = buffer.byteLength; - - buffer = new DataView(buffer.buffer, buffer.byteOffset, len); - - let result = ''; - let i = 0; - - for (let n = len - (len % 4); i < n; i += 4) { - result += buffer.getUint32(i).toString(16).padStart(8, '0'); - } - - for (; i < len; i++) { - result += buffer.getUint8(i).toString(16).padStart(2, '0'); - } - - return result - } - - function write$3 (buffer, string, offset = 0, length = byteLength$2(string)) { - const len = Math.min(length, buffer.byteLength - offset); - - for (let i = 0; i < len; i++) { - const a = hexValue(string.charCodeAt(i * 2)); - const b = hexValue(string.charCodeAt(i * 2 + 1)); - - if (a === undefined || b === undefined) { - return buffer.subarray(0, i) - } - - buffer[offset + i] = (a << 4) | b; - } - - return len - } - - var hex = { - byteLength: byteLength$2, - toString: toString$2, - write: write$3 - }; - - function hexValue (char) { - if (char >= 0x30 && char <= 0x39) return char - 0x30 - if (char >= 0x41 && char <= 0x46) return char - 0x41 + 10 - if (char >= 0x61 && char <= 0x66) return char - 0x61 + 10 - } - - function byteLength$1 (string) { - let length = 0; - - for (let i = 0, n = string.length; i < n; i++) { - const code = string.charCodeAt(i); - - if (code >= 0xd800 && code <= 0xdbff && i + 1 < n) { - const code = string.charCodeAt(i + 1); - - if (code >= 0xdc00 && code <= 0xdfff) { - length += 4; - i++; - continue - } - } - - if (code <= 0x7f) length += 1; - else if (code <= 0x7ff) length += 2; - else length += 3; - } - - return length - } - - let toString$1; - - if (typeof TextDecoder !== 'undefined') { - const decoder = new TextDecoder(); - - toString$1 = function toString (buffer) { - return decoder.decode(buffer) - }; - } else { - toString$1 = function toString (buffer) { - const len = buffer.byteLength; - - let output = ''; - let i = 0; - - while (i < len) { - let byte = buffer[i]; - - if (byte <= 0x7f) { - output += String.fromCharCode(byte); - i++; - continue - } - - let bytesNeeded = 0; - let codePoint = 0; - - if (byte <= 0xdf) { - bytesNeeded = 1; - codePoint = byte & 0x1f; - } else if (byte <= 0xef) { - bytesNeeded = 2; - codePoint = byte & 0x0f; - } else if (byte <= 0xf4) { - bytesNeeded = 3; - codePoint = byte & 0x07; - } - - if (len - i - bytesNeeded > 0) { - let k = 0; - - while (k < bytesNeeded) { - byte = buffer[i + k + 1]; - codePoint = (codePoint << 6) | (byte & 0x3f); - k += 1; - } - } else { - codePoint = 0xfffd; - bytesNeeded = len - i; - } - - output += String.fromCodePoint(codePoint); - i += bytesNeeded + 1; - } - - return output - }; - } - - let write$2; - - if (typeof TextEncoder !== 'undefined') { - const encoder = new TextEncoder(); - - write$2 = function write (buffer, string, offset = 0, length = byteLength$1(string)) { - const len = Math.min(length, buffer.byteLength - offset); - encoder.encodeInto(string, buffer.subarray(offset, offset + len)); - return len - }; - } else { - write$2 = function write (buffer, string, offset = 0, length = byteLength$1(string)) { - const len = Math.min(length, buffer.byteLength - offset); - - buffer = buffer.subarray(offset, offset + len); - - let i = 0; - let j = 0; - - while (i < string.length) { - const code = string.codePointAt(i); - - if (code <= 0x7f) { - buffer[j++] = code; - i++; - continue - } - - let count = 0; - let bits = 0; - - if (code <= 0x7ff) { - count = 6; - bits = 0xc0; - } else if (code <= 0xffff) { - count = 12; - bits = 0xe0; - } else if (code <= 0x1fffff) { - count = 18; - bits = 0xf0; - } - - buffer[j++] = bits | (code >> count); - count -= 6; - - while (count >= 0) { - buffer[j++] = 0x80 | ((code >> count) & 0x3f); - count -= 6; - } - - i += code >= 0x10000 ? 2 : 1; - } - - return len - }; - } - - var utf8 = { - byteLength: byteLength$1, - toString: toString$1, - write: write$2 - }; - - function byteLength (string) { - return string.length * 2 - } - - function toString (buffer) { - const len = buffer.byteLength; - - let result = ''; - - for (let i = 0; i < len - 1; i += 2) { - result += String.fromCharCode(buffer[i] + (buffer[i + 1] * 256)); - } - - return result - } - - function write$1 (buffer, string, offset = 0, length = byteLength(string)) { - const len = Math.min(length, buffer.byteLength - offset); - - let units = len; - - for (let i = 0; i < string.length; ++i) { - if ((units -= 2) < 0) break - - const c = string.charCodeAt(i); - const hi = c >> 8; - const lo = c % 256; - - buffer[offset + i * 2] = lo; - buffer[offset + i * 2 + 1] = hi; - } - - return len - } - - var utf16le = { - byteLength, - toString, - write: write$1 - }; - - (function (module, exports) { - const ascii$1 = ascii; - const base64$1 = base64; - const hex$1 = hex; - const utf8$1 = utf8; - const utf16le$1 = utf16le; - - const LE = new Uint8Array(Uint16Array.of(0xff).buffer)[0] === 0xff; - - function codecFor (encoding) { - switch (encoding) { - case 'ascii': - return ascii$1 - case 'base64': - return base64$1 - case 'hex': - return hex$1 - case 'utf8': - case 'utf-8': - case undefined: - return utf8$1 - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16le$1 - default: - throw new Error(`Unknown encoding: ${encoding}`) - } - } - - function isBuffer (value) { - return value instanceof Uint8Array - } - - function isEncoding (encoding) { - try { - codecFor(encoding); - return true - } catch { - return false - } - } - - function alloc (size, fill, encoding) { - const buffer = new Uint8Array(size); - if (fill !== undefined) exports.fill(buffer, fill, 0, buffer.byteLength, encoding); - return buffer - } - - function allocUnsafe (size) { - return new Uint8Array(size) - } - - function allocUnsafeSlow (size) { - return new Uint8Array(size) - } - - function byteLength (string, encoding) { - return codecFor(encoding).byteLength(string) - } - - function compare (a, b) { - if (a === b) return 0 - - const len = Math.min(a.byteLength, b.byteLength); - - a = new DataView(a.buffer, a.byteOffset, a.byteLength); - b = new DataView(b.buffer, b.byteOffset, b.byteLength); - - let i = 0; - - for (let n = len - (len % 4); i < n; i += 4) { - const x = a.getUint32(i, LE); - const y = b.getUint32(i, LE); - if (x !== y) break - } - - for (; i < len; i++) { - const x = a.getUint8(i); - const y = b.getUint8(i); - if (x < y) return -1 - if (x > y) return 1 - } - - return a.byteLength > b.byteLength ? 1 : a.byteLength < b.byteLength ? -1 : 0 - } - - function concat (buffers, totalLength) { - if (totalLength === undefined) { - totalLength = buffers.reduce((len, buffer) => len + buffer.byteLength, 0); - } - - const result = new Uint8Array(totalLength); - - buffers.reduce( - (offset, buffer) => { - result.set(buffer, offset); - return offset + buffer.byteLength - }, - 0 - ); - - return result - } - - function copy (source, target, targetStart = 0, start = 0, end = source.byteLength) { - if (end > 0 && end < start) return 0 - if (end === start) return 0 - if (source.byteLength === 0 || target.byteLength === 0) return 0 - - if (targetStart < 0) throw new RangeError('targetStart is out of range') - if (start < 0 || start >= source.byteLength) throw new RangeError('sourceStart is out of range') - if (end < 0) throw new RangeError('sourceEnd is out of range') - - if (targetStart >= target.byteLength) targetStart = target.byteLength; - if (end > source.byteLength) end = source.byteLength; - if (target.byteLength - targetStart < end - start) { - end = target.length - targetStart + start; - } - - const len = end - start; - - if (source === target) { - target.copyWithin(targetStart, start, end); - } else { - target.set(source.subarray(start, end), targetStart); - } - - return len - } - - function equals (a, b) { - if (a === b) return true - if (a.byteLength !== b.byteLength) return false - - const len = a.byteLength; - - a = new DataView(a.buffer, a.byteOffset, a.byteLength); - b = new DataView(b.buffer, b.byteOffset, b.byteLength); - - let i = 0; - - for (let n = len - (len % 4); i < n; i += 4) { - if (a.getUint32(i, LE) !== b.getUint32(i, LE)) return false - } - - for (; i < len; i++) { - if (a.getUint8(i) !== b.getUint8(i)) return false - } - - return true - } - - function fill (buffer, value, offset, end, encoding) { - if (typeof value === 'string') { - // fill(buffer, string, encoding) - if (typeof offset === 'string') { - encoding = offset; - offset = 0; - end = buffer.byteLength; - - // fill(buffer, string, offset, encoding) - } else if (typeof end === 'string') { - encoding = end; - end = buffer.byteLength; - } - } else if (typeof val === 'number') { - value = value & 0xff; - } else if (typeof val === 'boolean') { - value = +value; - } - - if (offset < 0 || buffer.byteLength < offset || buffer.byteLength < end) { - throw new RangeError('Out of range index') - } - - if (offset === undefined) offset = 0; - if (end === undefined) end = buffer.byteLength; - - if (end <= offset) return buffer - - if (!value) value = 0; - - if (typeof value === 'number') { - for (let i = offset; i < end; ++i) { - buffer[i] = value; - } - } else { - value = isBuffer(value) ? value : from(value, encoding); - - const len = value.byteLength; - - for (let i = 0; i < end - offset; ++i) { - buffer[i + offset] = value[i % len]; - } - } - - return buffer - } - - function from (value, encodingOrOffset, length) { - // from(string, encoding) - if (typeof value === 'string') return fromString(value, encodingOrOffset) - - // from(array) - if (Array.isArray(value)) return fromArray(value) - - // from(buffer) - if (ArrayBuffer.isView(value)) return fromBuffer(value) - - // from(arrayBuffer[, byteOffset[, length]]) - return fromArrayBuffer(value, encodingOrOffset, length) - } - - function fromString (string, encoding) { - const codec = codecFor(encoding); - const buffer = new Uint8Array(codec.byteLength(string)); - codec.write(buffer, string, 0, buffer.byteLength); - return buffer - } - - function fromArray (array) { - const buffer = new Uint8Array(array.length); - buffer.set(array); - return buffer - } - - function fromBuffer (buffer) { - const copy = new Uint8Array(buffer.byteLength); - copy.set(buffer); - return copy - } - - function fromArrayBuffer (arrayBuffer, byteOffset, length) { - return new Uint8Array(arrayBuffer, byteOffset, length) - } - - function includes (buffer, value, byteOffset, encoding) { - return indexOf(buffer, value, byteOffset, encoding) !== -1 - } - - function bidirectionalIndexOf (buffer, value, byteOffset, encoding, first) { - if (buffer.byteLength === 0) return -1 - - if (typeof byteOffset === 'string') { - encoding = byteOffset; - byteOffset = 0; - } else if (byteOffset === undefined) { - byteOffset = first ? 0 : (buffer.length - 1); - } else if (byteOffset < 0) { - byteOffset += buffer.byteLength; - } - - if (byteOffset >= buffer.byteLength) { - if (first) return -1 - else byteOffset = buffer.byteLength - 1; - } else if (byteOffset < 0) { - if (first) byteOffset = 0; - else return -1 - } - - if (typeof value === 'string') { - value = from(value, encoding); - } else if (typeof value === 'number') { - value = value & 0xff; - - if (first) { - return buffer.indexOf(value, byteOffset) - } else { - return buffer.lastIndexOf(value, byteOffset) - } - } - - if (value.byteLength === 0) return -1 - - if (first) { - let foundIndex = -1; - - for (let i = byteOffset; i < buffer.byteLength; i++) { - if (buffer[i] === value[foundIndex === -1 ? 0 : i - foundIndex]) { - if (foundIndex === -1) foundIndex = i; - if (i - foundIndex + 1 === value.byteLength) return foundIndex - } else { - if (foundIndex !== -1) i -= i - foundIndex; - foundIndex = -1; - } - } - } else { - if (byteOffset + value.byteLength > buffer.byteLength) { - byteOffset = buffer.byteLength - value.byteLength; - } - - for (let i = byteOffset; i >= 0; i--) { - let found = true; - - for (let j = 0; j < value.byteLength; j++) { - if (buffer[i + j] !== value[j]) { - found = false; - break - } - } - - if (found) return i - } - } - - return -1 - } - - function indexOf (buffer, value, byteOffset, encoding) { - return bidirectionalIndexOf(buffer, value, byteOffset, encoding, true /* first */) - } - - function lastIndexOf (buffer, value, byteOffset, encoding) { - return bidirectionalIndexOf(buffer, value, byteOffset, encoding, false /* last */) - } - - function swap (buffer, n, m) { - const i = buffer[n]; - buffer[n] = buffer[m]; - buffer[m] = i; - } - - function swap16 (buffer) { - const len = buffer.byteLength; - - if (len % 2 !== 0) throw new RangeError('Buffer size must be a multiple of 16-bits') - - for (let i = 0; i < len; i += 2) swap(buffer, i, i + 1); - - return buffer - } - - function swap32 (buffer) { - const len = buffer.byteLength; - - if (len % 4 !== 0) throw new RangeError('Buffer size must be a multiple of 32-bits') - - for (let i = 0; i < len; i += 4) { - swap(buffer, i, i + 3); - swap(buffer, i + 1, i + 2); - } - - return buffer - } - - function swap64 (buffer) { - const len = buffer.byteLength; - - if (len % 8 !== 0) throw new RangeError('Buffer size must be a multiple of 64-bits') - - for (let i = 0; i < len; i += 8) { - swap(buffer, i, i + 7); - swap(buffer, i + 1, i + 6); - swap(buffer, i + 2, i + 5); - swap(buffer, i + 3, i + 4); - } - - return buffer - } - - function toBuffer (buffer) { - return buffer - } - - function toString (buffer, encoding, start = 0, end = buffer.byteLength) { - const len = buffer.byteLength; - - if (start >= len) return '' - if (end <= start) return '' - if (start < 0) start = 0; - if (end > len) end = len; - - if (start !== 0 || end < len) buffer = buffer.subarray(start, end); - - return codecFor(encoding).toString(buffer) - } - - function write (buffer, string, offset, length, encoding) { - // write(buffer, string) - if (offset === undefined) { - encoding = 'utf8'; - - // write(buffer, string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset; - offset = undefined; - - // write(buffer, string, offset, encoding) - } else if (encoding === undefined && typeof length === 'string') { - encoding = length; - length = undefined; - } - - return codecFor(encoding).write(buffer, string, offset, length) - } - - function writeDoubleLE (buffer, value, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - view.setFloat64(offset, value, true); - - return offset + 8 - } - - function writeFloatLE (buffer, value, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - view.setFloat32(offset, value, true); - - return offset + 4 - } - - function writeUInt32LE (buffer, value, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - view.setUint32(offset, value, true); - - return offset + 4 - } - - function writeInt32LE (buffer, value, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - view.setInt32(offset, value, true); - - return offset + 4 - } - - function readDoubleLE (buffer, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - - return view.getFloat64(offset, true) - } - - function readFloatLE (buffer, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - - return view.getFloat32(offset, true) - } - - function readUInt32LE (buffer, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - - return view.getUint32(offset, true) - } - - function readInt32LE (buffer, offset) { - if (offset === undefined) offset = 0; - - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - - return view.getInt32(offset, true) - } - - module.exports = exports = { - isBuffer, - isEncoding, - alloc, - allocUnsafe, - allocUnsafeSlow, - byteLength, - compare, - concat, - copy, - equals, - fill, - from, - includes, - indexOf, - lastIndexOf, - swap16, - swap32, - swap64, - toBuffer, - toString, - write, - writeDoubleLE, - writeFloatLE, - writeUInt32LE, - writeInt32LE, - readDoubleLE, - readFloatLE, - readUInt32LE, - readInt32LE - }; - } (browser, browser.exports)); - - var blake2b; - var hasRequiredBlake2b; - - function requireBlake2b () { - if (hasRequiredBlake2b) return blake2b; - hasRequiredBlake2b = 1; - var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __toBinary = /* @__PURE__ */ (() => { - var table = new Uint8Array(128); - for (var i = 0; i < 64; i++) - table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; - return (base64) => { - var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); - for (var i2 = 0, j = 0; i2 < n; ) { - var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; - var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; - bytes2[j++] = c0 << 2 | c1 >> 4; - bytes2[j++] = c1 << 4 | c2 >> 2; - bytes2[j++] = c2 << 6 | c3; - } - return bytes2; - }; - })(); - - // wasm-binary:./blake2b.wat - var require_blake2b = __commonJS({ - "wasm-binary:./blake2b.wat"(exports2, module2) { - module2.exports = __toBinary("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"); - } - }); - - // wasm-module:./blake2b.wat - var bytes = require_blake2b(); - var compiled = WebAssembly.compile(bytes); - blake2b = async (imports) => { - const instance = await WebAssembly.instantiate(await compiled, imports); - return instance.exports; - }; - return blake2b; - } - - var assert = nanoassert; - var b4a = browser.exports; - - var wasm = null; - var wasmPromise = typeof WebAssembly !== "undefined" && requireBlake2b()().then(mod => { - wasm = mod; - }); - - var head = 64; - var freeList = []; - - blake2bWasm.exports = Blake2b; - var BYTES_MIN = blake2bWasm.exports.BYTES_MIN = 16; - var BYTES_MAX = blake2bWasm.exports.BYTES_MAX = 64; - blake2bWasm.exports.BYTES = 32; - var KEYBYTES_MIN = blake2bWasm.exports.KEYBYTES_MIN = 16; - var KEYBYTES_MAX = blake2bWasm.exports.KEYBYTES_MAX = 64; - blake2bWasm.exports.KEYBYTES = 32; - var SALTBYTES = blake2bWasm.exports.SALTBYTES = 16; - var PERSONALBYTES = blake2bWasm.exports.PERSONALBYTES = 16; - - function Blake2b (digestLength, key, salt, personal, noAssert) { - if (!(this instanceof Blake2b)) return new Blake2b(digestLength, key, salt, personal, noAssert) - if (!wasm) throw new Error('WASM not loaded. Wait for Blake2b.ready(cb)') - if (!digestLength) digestLength = 32; - - if (noAssert !== true) { - assert(digestLength >= BYTES_MIN, 'digestLength must be at least ' + BYTES_MIN + ', was given ' + digestLength); - assert(digestLength <= BYTES_MAX, 'digestLength must be at most ' + BYTES_MAX + ', was given ' + digestLength); - if (key != null) { - assert(key instanceof Uint8Array, 'key must be Uint8Array or Buffer'); - assert(key.length >= KEYBYTES_MIN, 'key must be at least ' + KEYBYTES_MIN + ', was given ' + key.length); - assert(key.length <= KEYBYTES_MAX, 'key must be at least ' + KEYBYTES_MAX + ', was given ' + key.length); - } - if (salt != null) { - assert(salt instanceof Uint8Array, 'salt must be Uint8Array or Buffer'); - assert(salt.length === SALTBYTES, 'salt must be exactly ' + SALTBYTES + ', was given ' + salt.length); - } - if (personal != null) { - assert(personal instanceof Uint8Array, 'personal must be Uint8Array or Buffer'); - assert(personal.length === PERSONALBYTES, 'personal must be exactly ' + PERSONALBYTES + ', was given ' + personal.length); - } - } - - if (!freeList.length) { - freeList.push(head); - head += 216; - } - - this.digestLength = digestLength; - this.finalized = false; - this.pointer = freeList.pop(); - this._memory = new Uint8Array(wasm.memory.buffer); - - this._memory.fill(0, 0, 64); - this._memory[0] = this.digestLength; - this._memory[1] = key ? key.length : 0; - this._memory[2] = 1; // fanout - this._memory[3] = 1; // depth - - if (salt) this._memory.set(salt, 32); - if (personal) this._memory.set(personal, 48); - - if (this.pointer + 216 > this._memory.length) this._realloc(this.pointer + 216); // we need 216 bytes for the state - wasm.blake2b_init(this.pointer, this.digestLength); - - if (key) { - this.update(key); - this._memory.fill(0, head, head + key.length); // whiteout key - this._memory[this.pointer + 200] = 128; - } - } - - Blake2b.prototype._realloc = function (size) { - wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536))); - this._memory = new Uint8Array(wasm.memory.buffer); - }; - - Blake2b.prototype.update = function (input) { - assert(this.finalized === false, 'Hash instance finalized'); - assert(input instanceof Uint8Array, 'input must be Uint8Array or Buffer'); - - if (head + input.length > this._memory.length) this._realloc(head + input.length); - this._memory.set(input, head); - wasm.blake2b_update(this.pointer, head, head + input.length); - return this - }; - - Blake2b.prototype.digest = function (enc) { - assert(this.finalized === false, 'Hash instance finalized'); - this.finalized = true; - - freeList.push(this.pointer); - wasm.blake2b_final(this.pointer); - - if (!enc || enc === 'binary') { - return this._memory.slice(this.pointer + 128, this.pointer + 128 + this.digestLength) - } - - if (typeof enc === 'string') { - return b4a.toString(this._memory, enc, this.pointer + 128, this.pointer + 128 + this.digestLength) - } - - assert(enc instanceof Uint8Array && enc.length >= this.digestLength, 'input must be Uint8Array or Buffer'); - for (var i = 0; i < this.digestLength; i++) { - enc[i] = this._memory[this.pointer + 128 + i]; - } - - return enc - }; - - // libsodium compat - Blake2b.prototype.final = Blake2b.prototype.digest; - - Blake2b.WASM = wasm; - Blake2b.SUPPORTED = typeof WebAssembly !== 'undefined'; - - Blake2b.ready = function (cb) { - if (!cb) cb = noop; - if (!wasmPromise) return cb(new Error('WebAssembly not supported')) - return wasmPromise.then(() => cb(), cb) - }; - - Blake2b.prototype.ready = Blake2b.ready; - - Blake2b.prototype.getPartialHash = function () { - return this._memory.slice(this.pointer, this.pointer + 216); - }; - - Blake2b.prototype.setPartialHash = function (ph) { - this._memory.set(ph, this.pointer); - }; - - function noop () {} - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - - function log2( V ) - { - return( ( ( V & 0xFFFF0000 ) !== 0 ? ( V &= 0xFFFF0000, 16 ) : 0 ) | ( ( V & 0xFF00FF00 ) !== 0 ? ( V &= 0xFF00FF00, 8 ) : 0 ) | ( ( V & 0xF0F0F0F0 ) !== 0 ? ( V &= 0xF0F0F0F0, 4 ) : 0 ) | ( ( V & 0xCCCCCCCC ) !== 0 ? ( V &= 0xCCCCCCCC, 2 ) : 0 ) | ( ( V & 0xAAAAAAAA ) !== 0 ) ); - } - - - function formatHash(b, title) { - const a = new DataView(b.buffer, b.byteOffset, b.byteLength); - let S = ""; - for (let i=0; i<4; i++) { - if (i>0) S += "\n"; - S += "\t\t"; - for (let j=0; j<4; j++) { - if (j>0) S += " "; - S += a.getUint32(i*16+j*4).toString(16).padStart(8, "0"); - } - } - if (title) S = title + "\n" + S; - return S; - } - - function hashIsEqual(h1, h2) { - if (h1.byteLength != h2.byteLength) return false; - var dv1 = new Int8Array(h1); - var dv2 = new Int8Array(h2); - for (var i = 0 ; i != h1.byteLength ; i++) - { - if (dv1[i] != dv2[i]) return false; - } - return true; - } - - function cloneHasher(h) { - const ph = h.getPartialHash(); - const res = blake2bWasm.exports(64); - res.setPartialHash(ph); - return res; - } - - async function sameRatio$2(curve, g1s, g1sx, g2s, g2sx) { - if (curve.G1.isZero(g1s)) return false; - if (curve.G1.isZero(g1sx)) return false; - if (curve.G2.isZero(g2s)) return false; - if (curve.G2.isZero(g2sx)) return false; - // return curve.F12.eq(curve.pairing(g1s, g2sx), curve.pairing(g1sx, g2s)); - const res = await curve.pairingEq(g1s, g2sx, curve.G1.neg(g1sx), g2s); - return res; - } - - - function askEntropy() { - { - return window.prompt("Enter a random text. (Entropy): ", ""); - } - } - - function getRandomBytes(n) { - let array = new Uint8Array(n); - if (typeof globalThis.crypto !== "undefined") { // Supported - globalThis.crypto.getRandomValues(array); - } else { // NodeJS - crypto.randomFillSync(array); - } - return array; - } - - async function sha256digest(data) { - if (typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.subtle !== "undefined") { // Supported - const buffer = await globalThis.crypto.subtle.digest("SHA-256", data.buffer); - return new Uint8Array(buffer); - } else { // NodeJS - return crypto.createHash("sha256").update(data).digest(); - } - } - - /** - * @param {Uint8Array} data - * @param {number} offset - */ - function readUInt32BE(data, offset) { - return new DataView(data.buffer).getUint32(offset, false); - } - - async function getRandomRng(entropy) { - // Generate a random Rng - while (!entropy) { - entropy = await askEntropy(); - } - const hasher = blake2bWasm.exports(64); - hasher.update(getRandomBytes(64)); - const enc = new TextEncoder(); // always utf-8 - hasher.update(enc.encode(entropy)); - const hash = hasher.digest(); - - const seed = []; - for (let i=0;i<8;i++) { - seed[i] = readUInt32BE(hash, i*4); - } - const rng = new ChaCha(seed); - return rng; - } - - async function rngFromBeaconParams(beaconHash, numIterationsExp) { - let nIterationsInner; - let nIterationsOuter; - if (numIterationsExp<32) { - nIterationsInner = (1 << numIterationsExp) >>> 0; - nIterationsOuter = 1; - } else { - nIterationsInner = 0x100000000; - nIterationsOuter = (1 << (numIterationsExp-32)) >>> 0; - } - - let curHash = beaconHash; - for (let i=0; i { - res[k] = stringifyBigIntsWithField(Fr, o[k]); - }); - return res; - } else if ((typeof(o) == "bigint") || o.eq !== undefined) { - return o.toString(10); - } else { - return o; - } - } - - const HEADER_ZKEY_SECTION = 1; - - const GROTH16_PROTOCOL_ID = 1; - const PLONK_PROTOCOL_ID = 2; - const FFLONK_PROTOCOL_ID = 10; - - /* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - - // FFlonk constants - const FF_T_POL_DEG_MIN = 3; - - // ZKEY constants - const ZKEY_FF_NSECTIONS = 17; - - const ZKEY_FF_HEADER_SECTION = 2; - const ZKEY_FF_ADDITIONS_SECTION = 3; - const ZKEY_FF_A_MAP_SECTION = 4; - const ZKEY_FF_B_MAP_SECTION = 5; - const ZKEY_FF_C_MAP_SECTION = 6; - const ZKEY_FF_QL_SECTION = 7; - const ZKEY_FF_QR_SECTION = 8; - const ZKEY_FF_QM_SECTION = 9; - const ZKEY_FF_QO_SECTION = 10; - const ZKEY_FF_QC_SECTION = 11; - const ZKEY_FF_SIGMA1_SECTION = 12; - const ZKEY_FF_SIGMA2_SECTION = 13; - const ZKEY_FF_SIGMA3_SECTION = 14; - const ZKEY_FF_LAGRANGE_SECTION = 15; - const ZKEY_FF_PTAU_SECTION = 16; - const ZKEY_FF_C0_SECTION = 17; - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - async function writeHeader(fd, zkey) { - - // Write the header - /////////// - await startWriteSection(fd, 1); - await fd.writeULE32(1); // Groth - await endWriteSection(fd); - - // Write the Groth header section - /////////// - - const curve = await getCurveFromQ(zkey.q); - - await startWriteSection(fd, 2); - const primeQ = curve.q; - const n8q = (Math.floor( (Scalar.bitLength(primeQ) - 1) / 64) +1)*8; - - const primeR = curve.r; - const n8r = (Math.floor( (Scalar.bitLength(primeR) - 1) / 64) +1)*8; - - await fd.writeULE32(n8q); - await writeBigInt(fd, primeQ, n8q); - await fd.writeULE32(n8r); - await writeBigInt(fd, primeR, n8r); - await fd.writeULE32(zkey.nVars); // Total number of bars - await fd.writeULE32(zkey.nPublic); // Total number of public vars (not including ONE) - await fd.writeULE32(zkey.domainSize); // domainSize - await writeG1(fd, curve, zkey.vk_alpha_1); - await writeG1(fd, curve, zkey.vk_beta_1); - await writeG2(fd, curve, zkey.vk_beta_2); - await writeG2(fd, curve, zkey.vk_gamma_2); - await writeG1(fd, curve, zkey.vk_delta_1); - await writeG2(fd, curve, zkey.vk_delta_2); - - await endWriteSection(fd); - - - } - - async function writeG1(fd, curve, p) { - const buff = new Uint8Array(curve.G1.F.n8*2); - curve.G1.toRprLEM(buff, 0, p); - await fd.write(buff); - } - - async function writeG2(fd, curve, p) { - const buff = new Uint8Array(curve.G2.F.n8*2); - curve.G2.toRprLEM(buff, 0, p); - await fd.write(buff); - } - - async function readG1(fd, curve, toObject) { - const buff = await fd.read(curve.G1.F.n8*2); - const res = curve.G1.fromRprLEM(buff, 0); - return toObject ? curve.G1.toObject(res) : res; - } - - async function readG2(fd, curve, toObject) { - const buff = await fd.read(curve.G2.F.n8*2); - const res = curve.G2.fromRprLEM(buff, 0); - return toObject ? curve.G2.toObject(res) : res; - } - - - async function readHeader$1(fd, sections, toObject) { - // Read Header - ///////////////////// - await startReadUniqueSection(fd, sections, 1); - const protocolId = await fd.readULE32(); - await endReadSection(fd); - - if (protocolId === GROTH16_PROTOCOL_ID) { - return await readHeaderGroth16(fd, sections, toObject); - } else if (protocolId === PLONK_PROTOCOL_ID) { - return await readHeaderPlonk(fd, sections, toObject); - } else if (protocolId === FFLONK_PROTOCOL_ID) { - return await readHeaderFFlonk(fd, sections, toObject); - } else { - throw new Error("Protocol not supported: "); - } - } - - - - - async function readHeaderGroth16(fd, sections, toObject) { - const zkey = {}; - - zkey.protocol = "groth16"; - - // Read Groth Header - ///////////////////// - await startReadUniqueSection(fd, sections, 2); - const n8q = await fd.readULE32(); - zkey.n8q = n8q; - zkey.q = await readBigInt(fd, n8q); - - const n8r = await fd.readULE32(); - zkey.n8r = n8r; - zkey.r = await readBigInt(fd, n8r); - zkey.curve = await getCurveFromQ(zkey.q); - zkey.nVars = await fd.readULE32(); - zkey.nPublic = await fd.readULE32(); - zkey.domainSize = await fd.readULE32(); - zkey.power = log2(zkey.domainSize); - zkey.vk_alpha_1 = await readG1(fd, zkey.curve, toObject); - zkey.vk_beta_1 = await readG1(fd, zkey.curve, toObject); - zkey.vk_beta_2 = await readG2(fd, zkey.curve, toObject); - zkey.vk_gamma_2 = await readG2(fd, zkey.curve, toObject); - zkey.vk_delta_1 = await readG1(fd, zkey.curve, toObject); - zkey.vk_delta_2 = await readG2(fd, zkey.curve, toObject); - await endReadSection(fd); - - return zkey; - - } - - async function readHeaderPlonk(fd, sections, toObject) { - const zkey = {}; - - zkey.protocol = "plonk"; - - // Read Plonk Header - ///////////////////// - await startReadUniqueSection(fd, sections, 2); - const n8q = await fd.readULE32(); - zkey.n8q = n8q; - zkey.q = await readBigInt(fd, n8q); - - const n8r = await fd.readULE32(); - zkey.n8r = n8r; - zkey.r = await readBigInt(fd, n8r); - zkey.curve = await getCurveFromQ(zkey.q); - zkey.nVars = await fd.readULE32(); - zkey.nPublic = await fd.readULE32(); - zkey.domainSize = await fd.readULE32(); - zkey.power = log2(zkey.domainSize); - zkey.nAdditions = await fd.readULE32(); - zkey.nConstrains = await fd.readULE32(); - zkey.k1 = await fd.read(n8r); - zkey.k2 = await fd.read(n8r); - - zkey.Qm = await readG1(fd, zkey.curve, toObject); - zkey.Ql = await readG1(fd, zkey.curve, toObject); - zkey.Qr = await readG1(fd, zkey.curve, toObject); - zkey.Qo = await readG1(fd, zkey.curve, toObject); - zkey.Qc = await readG1(fd, zkey.curve, toObject); - zkey.S1 = await readG1(fd, zkey.curve, toObject); - zkey.S2 = await readG1(fd, zkey.curve, toObject); - zkey.S3 = await readG1(fd, zkey.curve, toObject); - zkey.X_2 = await readG2(fd, zkey.curve, toObject); - - await endReadSection(fd); - - return zkey; - } - - async function readHeaderFFlonk(fd, sections, toObject) { - const zkey = {}; - - zkey.protocol = "fflonk"; - zkey.protocolId = FFLONK_PROTOCOL_ID; - - await startReadUniqueSection(fd, sections, ZKEY_FF_HEADER_SECTION); - const n8q = await fd.readULE32(); - zkey.n8q = n8q; - zkey.q = await readBigInt(fd, n8q); - zkey.curve = await getCurveFromQ(zkey.q); - - const n8r = await fd.readULE32(); - zkey.n8r = n8r; - zkey.r = await readBigInt(fd, n8r); - - zkey.nVars = await fd.readULE32(); - zkey.nPublic = await fd.readULE32(); - zkey.domainSize = await fd.readULE32(); - zkey.power = log2(zkey.domainSize); - zkey.nAdditions = await fd.readULE32(); - zkey.nConstraints = await fd.readULE32(); - - zkey.k1 = await fd.read(n8r); - zkey.k2 = await fd.read(n8r); - - zkey.w3 = await fd.read(n8r); - zkey.w4 = await fd.read(n8r); - zkey.w8 = await fd.read(n8r); - zkey.wr = await fd.read(n8r); - - zkey.X_2 = await readG2(fd, zkey.curve, toObject); - - zkey.C0 = await readG1(fd, zkey.curve, toObject); - - await endReadSection(fd); - - return zkey; - } - - async function readZKey(fileName, toObject) { - const {fd, sections} = await readBinFile(fileName, "zkey", 1); - - const zkey = await readHeader$1(fd, sections, toObject); - - const Fr = new ZqField(zkey.r); - const Rr = Scalar.mod(Scalar.shl(1, zkey.n8r*8), zkey.r); - const Rri = Fr.inv(Rr); - const Rri2 = Fr.mul(Rri, Rri); - - let curve = await getCurveFromQ(zkey.q); - - // Read IC Section - /////////// - await startReadUniqueSection(fd, sections, 3); - zkey.IC = []; - for (let i=0; i<= zkey.nPublic; i++) { - const P = await readG1(fd, curve, toObject); - zkey.IC.push(P); - } - await endReadSection(fd); - - - // Read Coefs - /////////// - await startReadUniqueSection(fd, sections, 4); - const nCCoefs = await fd.readULE32(); - zkey.ccoefs = []; - for (let i=0; i0) { - const paramsBuff = new Uint8Array(params); - await fd.writeULE32(paramsBuff.byteLength); - await fd.write(paramsBuff); - } else { - await fd.writeULE32(0); - } - - } - - async function writeMPCParams(fd, curve, mpcParams) { - await startWriteSection(fd, 10); - await fd.write(mpcParams.csHash); - await fd.writeULE32(mpcParams.contributions.length); - for (let i=0; i. - */ - - - async function write(fd, witness, prime) { - - await startWriteSection(fd, 1); - const n8 = (Math.floor( (Scalar.bitLength(prime) - 1) / 64) +1)*8; - await fd.writeULE32(n8); - await writeBigInt(fd, prime, n8); - await fd.writeULE32(witness.length); - await endWriteSection(fd); - - await startWriteSection(fd, 2); - for (let i=0; i. - */ - const {stringifyBigInts: stringifyBigInts$4} = utils; - - async function groth16Prove(zkeyFileName, witnessFileName, logger) { - const {fd: fdWtns, sections: sectionsWtns} = await readBinFile(witnessFileName, "wtns", 2); - - const wtns = await readHeader(fdWtns, sectionsWtns); - - const {fd: fdZKey, sections: sectionsZKey} = await readBinFile(zkeyFileName, "zkey", 2); - - const zkey = await readHeader$1(fdZKey, sectionsZKey); - - if (zkey.protocol != "groth16") { - throw new Error("zkey file is not groth16"); - } - - if (!Scalar.eq(zkey.r, wtns.q)) { - throw new Error("Curve of the witness does not match the curve of the proving key"); - } - - if (wtns.nWitness != zkey.nVars) { - throw new Error(`Invalid witness length. Circuit: ${zkey.nVars}, witness: ${wtns.nWitness}`); - } - - const curve = zkey.curve; - const Fr = curve.Fr; - const G1 = curve.G1; - const G2 = curve.G2; - - const power = log2(zkey.domainSize); - - if (logger) logger.debug("Reading Wtns"); - const buffWitness = await readSection(fdWtns, sectionsWtns, 2); - if (logger) logger.debug("Reading Coeffs"); - const buffCoeffs = await readSection(fdZKey, sectionsZKey, 4); - - if (logger) logger.debug("Building ABC"); - const [buffA_T, buffB_T, buffC_T] = await buildABC1(curve, zkey, buffWitness, buffCoeffs, logger); - - const inc = power == Fr.s ? curve.Fr.shift : curve.Fr.w[power+1]; - - const buffA = await Fr.ifft(buffA_T, "", "", logger, "IFFT_A"); - const buffAodd = await Fr.batchApplyKey(buffA, Fr.e(1), inc); - const buffAodd_T = await Fr.fft(buffAodd, "", "", logger, "FFT_A"); - - const buffB = await Fr.ifft(buffB_T, "", "", logger, "IFFT_B"); - const buffBodd = await Fr.batchApplyKey(buffB, Fr.e(1), inc); - const buffBodd_T = await Fr.fft(buffBodd, "", "", logger, "FFT_B"); - - const buffC = await Fr.ifft(buffC_T, "", "", logger, "IFFT_C"); - const buffCodd = await Fr.batchApplyKey(buffC, Fr.e(1), inc); - const buffCodd_T = await Fr.fft(buffCodd, "", "", logger, "FFT_C"); - - if (logger) logger.debug("Join ABC"); - const buffPodd_T = await joinABC(curve, zkey, buffAodd_T, buffBodd_T, buffCodd_T, logger); - - let proof = {}; - - if (logger) logger.debug("Reading A Points"); - const buffBasesA = await readSection(fdZKey, sectionsZKey, 5); - proof.pi_a = await curve.G1.multiExpAffine(buffBasesA, buffWitness, logger, "multiexp A"); - - if (logger) logger.debug("Reading B1 Points"); - const buffBasesB1 = await readSection(fdZKey, sectionsZKey, 6); - let pib1 = await curve.G1.multiExpAffine(buffBasesB1, buffWitness, logger, "multiexp B1"); - - if (logger) logger.debug("Reading B2 Points"); - const buffBasesB2 = await readSection(fdZKey, sectionsZKey, 7); - proof.pi_b = await curve.G2.multiExpAffine(buffBasesB2, buffWitness, logger, "multiexp B2"); - - if (logger) logger.debug("Reading C Points"); - const buffBasesC = await readSection(fdZKey, sectionsZKey, 8); - proof.pi_c = await curve.G1.multiExpAffine(buffBasesC, buffWitness.slice((zkey.nPublic+1)*curve.Fr.n8), logger, "multiexp C"); - - if (logger) logger.debug("Reading H Points"); - const buffBasesH = await readSection(fdZKey, sectionsZKey, 9); - const resH = await curve.G1.multiExpAffine(buffBasesH, buffPodd_T, logger, "multiexp H"); - - const r = curve.Fr.random(); - const s = curve.Fr.random(); - - proof.pi_a = G1.add( proof.pi_a, zkey.vk_alpha_1 ); - proof.pi_a = G1.add( proof.pi_a, G1.timesFr( zkey.vk_delta_1, r )); - - proof.pi_b = G2.add( proof.pi_b, zkey.vk_beta_2 ); - proof.pi_b = G2.add( proof.pi_b, G2.timesFr( zkey.vk_delta_2, s )); - - pib1 = G1.add( pib1, zkey.vk_beta_1 ); - pib1 = G1.add( pib1, G1.timesFr( zkey.vk_delta_1, s )); - - proof.pi_c = G1.add(proof.pi_c, resH); - - - proof.pi_c = G1.add( proof.pi_c, G1.timesFr( proof.pi_a, s )); - proof.pi_c = G1.add( proof.pi_c, G1.timesFr( pib1, r )); - proof.pi_c = G1.add( proof.pi_c, G1.timesFr( zkey.vk_delta_1, Fr.neg(Fr.mul(r,s) ))); - - - let publicSignals = []; - - for (let i=1; i<= zkey.nPublic; i++) { - const b = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); - publicSignals.push(Scalar.fromRprLE(b)); - } - - proof.pi_a = G1.toObject(G1.toAffine(proof.pi_a)); - proof.pi_b = G2.toObject(G2.toAffine(proof.pi_b)); - proof.pi_c = G1.toObject(G1.toAffine(proof.pi_c)); - - proof.protocol = "groth16"; - proof.curve = curve.name; - - await fdZKey.close(); - await fdWtns.close(); - - proof = stringifyBigInts$4(proof); - publicSignals = stringifyBigInts$4(publicSignals); - - return {proof, publicSignals}; - } - - - async function buildABC1(curve, zkey, witness, coeffs, logger) { - const n8 = curve.Fr.n8; - const sCoef = 4*3 + zkey.n8r; - const nCoef = (coeffs.byteLength-4) / sCoef; - - const outBuffA = new BigBuffer(zkey.domainSize * n8); - const outBuffB = new BigBuffer(zkey.domainSize * n8); - const outBuffC = new BigBuffer(zkey.domainSize * n8); - - const outBuf = [ outBuffA, outBuffB ]; - for (let i=0; i1) { - const promises2 = []; - for (let i=0; i v) { - n = k - 1; - } else if (va < v) { - m = k + 1; - } else { - n = k; - } - } - return 4 + m*sCoef; - } - } - */ - - async function joinABC(curve, zkey, a, b, c, logger) { - const MAX_CHUNK_SIZE = 1 << 22; - - const n8 = curve.Fr.n8; - const nElements = Math.floor(a.byteLength / curve.Fr.n8); - - const promises = []; - - for (let i=0; i0) { - res.unshift(0); - i--; - } - } - return res; - } - - /* globals WebAssembly */ - - async function builder(code, options) { - - options = options || {}; - - let memorySize = 32767; - let memory; - let memoryAllocated = false; - while (!memoryAllocated){ - try{ - memory = new WebAssembly.Memory({initial:memorySize}); - memoryAllocated = true; - } catch(err){ - if(memorySize === 1){ - throw err; - } - console.warn("Could not allocate " + memorySize * 1024 * 64 + " bytes. This may cause severe instability. Trying with " + memorySize * 1024 * 64 / 2 + " bytes"); - memorySize = Math.floor(memorySize/2); - } - } - - const wasmModule = await WebAssembly.compile(code); - - let wc; - - let errStr = ""; - let msgStr = ""; - - // Only circom 2 implements version lookup through exports in the WASM - // We default to `1` and update if we see the `getVersion` export (major version) - // These are updated after the instance is instantiated, assuming the functions are available - let majorVersion = 1; - // After Circom 2.0.7, Blaine added exported functions for getting minor and patch versions - let minorVersion = 0; - // If we can't lookup the patch version, assume the lowest - let patchVersion = 0; - - const instance = await WebAssembly.instantiate(wasmModule, { - env: { - "memory": memory - }, - runtime: { - exceptionHandler: function(code) { - let err; - if (code == 1) { - err = "Signal not found. "; - } else if (code == 2) { - err = "Too many signals set. "; - } else if (code == 3) { - err = "Signal already set. "; - } else if (code == 4) { - err = "Assert Failed. "; - } else if (code == 5) { - err = "Not enough memory. "; - } else if (code == 6) { - err = "Input signal array access exceeds the size. "; - } else { - err = "Unknown error. "; - } - console.error("ERROR: ", code, errStr); - throw new Error(err + errStr); - }, - // A new way of logging messages was added in Circom 2.0.7 that requires 2 new imports - // `printErrorMessage` and `writeBufferMessage`. - printErrorMessage: function() { - errStr += getMessage() + "\n"; - }, - writeBufferMessage: function() { - const msg = getMessage(); - // Any calls to `log()` will always end with a `\n`, so that's when we print and reset - if (msg === "\n") { - console.log(msgStr); - msgStr = ""; - } else { - // If we've buffered other content, put a space in between the items - if (msgStr !== "") { - msgStr += " "; - } - // Then append the message to the message we are creating - msgStr += msg; - } - }, - showSharedRWMemory: function() { - const shared_rw_memory_size = instance.exports.getFieldNumLen32(); - const arr = new Uint32Array(shared_rw_memory_size); - for (let j=0; j= 2 && (minorVersion >= 1 || patchVersion >= 7)) { - // If we've buffered other content, put a space in between the items - if (msgStr !== "") { - msgStr += " "; - } - // Then append the value to the message we are creating - const msg = (Scalar.fromArray(arr, 0x100000000).toString()); - msgStr += msg; - } else { - console.log(Scalar.fromArray(arr, 0x100000000)); - } - }, - error: function(code, pstr, a,b,c,d) { - let errStr; - if (code == 7) { - errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " != " + wc.getFr(c).toString() + " " +p2str(d); - } else if (code == 9) { - errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " " +p2str(c); - } else if ((code == 5)&&(options.sym)) { - errStr=p2str(pstr)+ " " + options.sym.labelIdx2Name[c]; - } else { - errStr=p2str(pstr)+ " " + a + " " + b + " " + c + " " + d; - } - console.log("ERROR: ", code, errStr); - throw new Error(errStr); - }, - log: function(a) { - console.log(wc.getFr(a).toString()); - }, - logGetSignal: function(signal, pVal) { - if (options.logGetSignal) { - options.logGetSignal(signal, wc.getFr(pVal) ); - } - }, - logSetSignal: function(signal, pVal) { - if (options.logSetSignal) { - options.logSetSignal(signal, wc.getFr(pVal) ); - } - }, - logStartComponent: function(cIdx) { - if (options.logStartComponent) { - options.logStartComponent(cIdx); - } - }, - logFinishComponent: function(cIdx) { - if (options.logFinishComponent) { - options.logFinishComponent(cIdx); - } - } - } - }); - - if (typeof instance.exports.getVersion == 'function') { - majorVersion = instance.exports.getVersion(); - } - if (typeof instance.exports.getMinorVersion == 'function') { - minorVersion = instance.exports.getMinorVersion(); - } - if (typeof instance.exports.getPatchVersion == 'function') { - patchVersion = instance.exports.getPatchVersion(); - } - - const sanityCheck = - options && - ( - options.sanityCheck || - options.logGetSignal || - options.logSetSignal || - options.logStartComponent || - options.logFinishComponent - ); - - // We explicitly check for major version 2 in case there's a circom v3 in the future - if (majorVersion === 2) { - wc = new WitnessCalculatorCircom2(instance, sanityCheck); - } else { - // TODO: Maybe we want to check for the explicit version 1 before choosing this? - wc = new WitnessCalculatorCircom1(memory, instance, sanityCheck); - } - return wc; - - function getMessage() { - var message = ""; - var c = instance.exports.getMessageChar(); - while ( c != 0 ) { - message += String.fromCharCode(c); - c = instance.exports.getMessageChar(); - } - return message; - } - - function p2str(p) { - const i8 = new Uint8Array(memory.buffer); - - const bytes = []; - - for (let i=0; i8[p+i]>0; i++) bytes.push(i8[p+i]); - - return String.fromCharCode.apply(null, bytes); - } - } - class WitnessCalculatorCircom1 { - constructor(memory, instance, sanityCheck) { - this.memory = memory; - this.i32 = new Uint32Array(memory.buffer); - this.instance = instance; - - this.n32 = (this.instance.exports.getFrLen() >> 2) - 2; - const pRawPrime = this.instance.exports.getPRawPrime(); - - const arr = new Array(this.n32); - for (let i=0; i> 2) + i]; - } - - this.prime = Scalar.fromArray(arr, 0x100000000); - - this.Fr = new ZqField(this.prime); - - this.mask32 = Scalar.fromString("FFFFFFFF", 16); - this.NVars = this.instance.exports.getNVars(); - this.n64 = Math.floor((this.Fr.bitLength - 1) / 64)+1; - this.R = this.Fr.e( Scalar.shiftLeft(1 , this.n64*64)); - this.RInv = this.Fr.inv(this.R); - this.sanityCheck = sanityCheck; - } - - circom_version() { - return 1; - } - - async _doCalculateWitness(input, sanityCheck) { - this.instance.exports.init((this.sanityCheck || sanityCheck) ? 1 : 0); - const pSigOffset = this.allocInt(); - const pFr = this.allocFr(); - const keys = Object.keys(input); - keys.forEach( (k) => { - const h = fnvHash(k); - const hMSB = parseInt(h.slice(0,8), 16); - const hLSB = parseInt(h.slice(8,16), 16); - try { - this.instance.exports.getSignalOffset32(pSigOffset, 0, hMSB, hLSB); - } catch (err) { - throw new Error(`Signal ${k} is not an input of the circuit.`); - } - const sigOffset = this.getInt(pSigOffset); - const fArr = flatArray(input[k]); - for (let i=0; i>2]; - } - - setInt(p, v) { - this.i32[p>>2] = v; - } - - getFr(p) { - const self = this; - const idx = (p>>2); - - if (self.i32[idx + 1] & 0x80000000) { - const arr = new Array(self.n32); - for (let i=0; i> 2)] = a; - self.i32[(p >> 2) + 1] = 0; - return; - } - - self.i32[(p >> 2)] = 0; - self.i32[(p >> 2) + 1] = 0x80000000; - const arr = Scalar.toArray(v, 0x100000000); - for (let i=0; i=0) { - self.i32[(p >> 2) + 2 + i] = arr[idx]; - } else { - self.i32[(p >> 2) + 2 + i] = 0; - } - } - } - } - - class WitnessCalculatorCircom2 { - constructor(instance, sanityCheck) { - this.instance = instance; - - this.version = this.instance.exports.getVersion(); - this.n32 = this.instance.exports.getFieldNumLen32(); - - this.instance.exports.getRawPrime(); - const arr = new Array(this.n32); - for (let i=0; i { - const h = fnvHash(k); - const hMSB = parseInt(h.slice(0,8), 16); - const hLSB = parseInt(h.slice(8,16), 16); - const fArr = flatArray(input[k]); - for (let i=0; i. - */ - const { unstringifyBigInts: unstringifyBigInts$b} = utils; - - async function wtnsCalculate(_input, wasmFileName, wtnsFileName, options) { - const input = unstringifyBigInts$b(_input); - - const fdWasm = await readExisting(wasmFileName); - const wasm = await fdWasm.read(fdWasm.totalSize); - await fdWasm.close(); - - const wc = await builder(wasm); - if (wc.circom_version() == 1) { - const w = await wc.calculateBinWitness(input); - - const fdWtns = await createBinFile(wtnsFileName, "wtns", 2, 2); - - await writeBin(fdWtns, w, wc.prime); - await fdWtns.close(); - } else { - const fdWtns = await createOverride(wtnsFileName); - - const w = await wc.calculateWTNSBin(input); - - await fdWtns.write(w); - await fdWtns.close(); - } - } - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - const {unstringifyBigInts: unstringifyBigInts$a} = utils; - - async function groth16FullProve(_input, wasmFile, zkeyFileName, logger) { - const input = unstringifyBigInts$a(_input); - - const wtns= { - type: "mem" - }; - await wtnsCalculate(input, wasmFile, wtns); - return await groth16Prove(zkeyFileName, wtns, logger); - } - - /* - Copyright 2018 0kims association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - const {unstringifyBigInts: unstringifyBigInts$9} = utils; - - async function groth16Verify(_vk_verifier, _publicSignals, _proof, logger) { - /* - let cpub = vk_verifier.IC[0]; - for (let s= 0; s< vk_verifier.nPublic; s++) { - cpub = G1.add( cpub, G1.timesScalar( vk_verifier.IC[s+1], publicSignals[s])); - } - */ - - const vk_verifier = unstringifyBigInts$9(_vk_verifier); - const proof = unstringifyBigInts$9(_proof); - const publicSignals = unstringifyBigInts$9(_publicSignals); - - const curve = await getCurveFromName(vk_verifier.curve); - - const IC0 = curve.G1.fromObject(vk_verifier.IC[0]); - const IC = new Uint8Array(curve.G1.F.n8*2 * publicSignals.length); - const w = new Uint8Array(curve.Fr.n8 * publicSignals.length); - - for (let i=0; i. - */ - const { unstringifyBigInts: unstringifyBigInts$8} = utils; - - function p256$2(n) { - let nstr = n.toString(16); - while (nstr.length < 64) nstr = "0"+nstr; - nstr = `"0x${nstr}"`; - return nstr; - } - - async function groth16ExportSolidityCallData(_proof, _pub) { - const proof = unstringifyBigInts$8(_proof); - const pub = unstringifyBigInts$8(_pub); - - let inputs = ""; - for (let i=0; i. - */ - - var groth16 = /*#__PURE__*/Object.freeze({ - __proto__: null, - fullProve: groth16FullProve, - prove: groth16Prove, - verify: groth16Verify, - exportSolidityCallData: groth16ExportSolidityCallData - }); - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - function hashToG2(curve, hash) { - const hashV = new DataView(hash.buffer, hash.byteOffset, hash.byteLength); - const seed = []; - for (let i=0; i<8; i++) { - seed[i] = hashV.getUint32(i*4); - } - - const rng = new ChaCha(seed); - - const g2_sp = curve.G2.fromRng(rng); - - return g2_sp; - } - - function getG2sp(curve, persinalization, challenge, g1s, g1sx) { - - const h = blake2bWasm.exports(64); - const b1 = new Uint8Array([persinalization]); - h.update(b1); - h.update(challenge); - const b3 = curve.G1.toUncompressed(g1s); - h.update( b3); - const b4 = curve.G1.toUncompressed(g1sx); - h.update( b4); - const hash =h.digest(); - - return hashToG2(curve, hash); - } - - function calculatePubKey(k, curve, personalization, challengeHash, rng ) { - k.g1_s = curve.G1.toAffine(curve.G1.fromRng(rng)); - k.g1_sx = curve.G1.toAffine(curve.G1.timesFr(k.g1_s, k.prvKey)); - k.g2_sp = curve.G2.toAffine(getG2sp(curve, personalization, challengeHash, k.g1_s, k.g1_sx)); - k.g2_spx = curve.G2.toAffine(curve.G2.timesFr(k.g2_sp, k.prvKey)); - return k; - } - - function createPTauKey(curve, challengeHash, rng) { - const key = { - tau: {}, - alpha: {}, - beta: {} - }; - key.tau.prvKey = curve.Fr.fromRng(rng); - key.alpha.prvKey = curve.Fr.fromRng(rng); - key.beta.prvKey = curve.Fr.fromRng(rng); - calculatePubKey(key.tau, curve, 0, challengeHash, rng); - calculatePubKey(key.alpha, curve, 1, challengeHash, rng); - calculatePubKey(key.beta, curve, 2, challengeHash, rng); - return key; - } - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - async function writePTauHeader(fd, curve, power, ceremonyPower) { - // Write the header - /////////// - - if (! ceremonyPower) ceremonyPower = power; - await fd.writeULE32(1); // Header type - const pHeaderSize = fd.pos; - await fd.writeULE64(0); // Temporally set to 0 length - - await fd.writeULE32(curve.F1.n64*8); - - const buff = new Uint8Array(curve.F1.n8); - Scalar.toRprLE(buff, 0, curve.q, curve.F1.n8); - await fd.write(buff); - await fd.writeULE32(power); // power - await fd.writeULE32(ceremonyPower); // power - - const headerSize = fd.pos - pHeaderSize - 8; - - const oldPos = fd.pos; - - await fd.writeULE64(headerSize, pHeaderSize); - - fd.pos = oldPos; - } - - async function readPTauHeader(fd, sections) { - if (!sections[1]) throw new Error(fd.fileName + ": File has no header"); - if (sections[1].length>1) throw new Error(fd.fileName +": File has more than one header"); - - fd.pos = sections[1][0].p; - const n8 = await fd.readULE32(); - const buff = await fd.read(n8); - const q = Scalar.fromRprLE(buff); - - const curve = await getCurveFromQ(q); - - if (curve.F1.n64*8 != n8) throw new Error(fd.fileName +": Invalid size"); - - const power = await fd.readULE32(); - const ceremonyPower = await fd.readULE32(); - - if (fd.pos-sections[1][0].p != sections[1][0].size) throw new Error("Invalid PTau header size"); - - return {curve, power, ceremonyPower}; - } - - - async function readPtauPubKey(fd, curve, montgomery) { - - const buff = await fd.read(curve.F1.n8*2*6 + curve.F2.n8*2*3); - - return fromPtauPubKeyRpr(buff, 0, curve, montgomery); - } - - function fromPtauPubKeyRpr(buff, pos, curve, montgomery) { - - const key = { - tau: {}, - alpha: {}, - beta: {} - }; - - key.tau.g1_s = readG1(); - key.tau.g1_sx = readG1(); - key.alpha.g1_s = readG1(); - key.alpha.g1_sx = readG1(); - key.beta.g1_s = readG1(); - key.beta.g1_sx = readG1(); - key.tau.g2_spx = readG2(); - key.alpha.g2_spx = readG2(); - key.beta.g2_spx = readG2(); - - return key; - - function readG1() { - let p; - if (montgomery) { - p = curve.G1.fromRprLEM( buff, pos ); - } else { - p = curve.G1.fromRprUncompressed( buff, pos ); - } - pos += curve.G1.F.n8*2; - return p; - } - - function readG2() { - let p; - if (montgomery) { - p = curve.G2.fromRprLEM( buff, pos ); - } else { - p = curve.G2.fromRprUncompressed( buff, pos ); - } - pos += curve.G2.F.n8*2; - return p; - } - } - - function toPtauPubKeyRpr(buff, pos, curve, key, montgomery) { - - writeG1(key.tau.g1_s); - writeG1(key.tau.g1_sx); - writeG1(key.alpha.g1_s); - writeG1(key.alpha.g1_sx); - writeG1(key.beta.g1_s); - writeG1(key.beta.g1_sx); - writeG2(key.tau.g2_spx); - writeG2(key.alpha.g2_spx); - writeG2(key.beta.g2_spx); - - async function writeG1(p) { - if (montgomery) { - curve.G1.toRprLEM(buff, pos, p); - } else { - curve.G1.toRprUncompressed(buff, pos, p); - } - pos += curve.F1.n8*2; - } - - async function writeG2(p) { - if (montgomery) { - curve.G2.toRprLEM(buff, pos, p); - } else { - curve.G2.toRprUncompressed(buff, pos, p); - } - pos += curve.F2.n8*2; - } - - return buff; - } - - async function writePtauPubKey(fd, curve, key, montgomery) { - const buff = new Uint8Array(curve.F1.n8*2*6 + curve.F2.n8*2*3); - toPtauPubKeyRpr(buff, 0, curve, key, montgomery); - await fd.write(buff); - } - - async function readContribution(fd, curve) { - const c = {}; - - c.tauG1 = await readG1(); - c.tauG2 = await readG2(); - c.alphaG1 = await readG1(); - c.betaG1 = await readG1(); - c.betaG2 = await readG2(); - c.key = await readPtauPubKey(fd, curve, true); - c.partialHash = await fd.read(216); - c.nextChallenge = await fd.read(64); - c.type = await fd.readULE32(); - - const buffV = new Uint8Array(curve.G1.F.n8*2*6+curve.G2.F.n8*2*3); - toPtauPubKeyRpr(buffV, 0, curve, c.key, false); - - const responseHasher = blake2bWasm.exports(64); - responseHasher.setPartialHash(c.partialHash); - responseHasher.update(buffV); - c.responseHash = responseHasher.digest(); - - const paramLength = await fd.readULE32(); - const curPos = fd.pos; - let lastType =0; - while (fd.pos-curPos < paramLength) { - const buffType = await readDV(1); - if (buffType[0]<= lastType) throw new Error("Parameters in the contribution must be sorted"); - lastType = buffType[0]; - if (buffType[0]==1) { // Name - const buffLen = await readDV(1); - const buffStr = await readDV(buffLen[0]); - c.name = new TextDecoder().decode(buffStr); - } else if (buffType[0]==2) { - const buffExp = await readDV(1); - c.numIterationsExp = buffExp[0]; - } else if (buffType[0]==3) { - const buffLen = await readDV(1); - c.beaconHash = await readDV(buffLen[0]); - } else { - throw new Error("Parameter not recognized"); - } - } - if (fd.pos != curPos + paramLength) { - throw new Error("Parametes do not match"); - } - - return c; - - async function readG1() { - const pBuff = await fd.read(curve.G1.F.n8*2); - return curve.G1.fromRprLEM( pBuff ); - } - - async function readG2() { - const pBuff = await fd.read(curve.G2.F.n8*2); - return curve.G2.fromRprLEM( pBuff ); - } - - async function readDV(n) { - const b = await fd.read(n); - return new Uint8Array(b); - } - } - - async function readContributions(fd, curve, sections) { - if (!sections[7]) throw new Error(fd.fileName + ": File has no contributions"); - if (sections[7][0].length>1) throw new Error(fd.fileName +": File has more than one contributions section"); - - fd.pos = sections[7][0].p; - const nContributions = await fd.readULE32(); - const contributions = []; - for (let i=0; i0) { - const paramsBuff = new Uint8Array(params); - await fd.writeULE32(paramsBuff.byteLength); - await fd.write(paramsBuff); - } else { - await fd.writeULE32(0); - } - - - async function writeG1(p) { - curve.G1.toRprLEM(buffG1, 0, p); - await fd.write(buffG1); - } - - async function writeG2(p) { - curve.G2.toRprLEM(buffG2, 0, p); - await fd.write(buffG2); - } - - } - - async function writeContributions(fd, curve, contributions) { - - await fd.writeULE32(7); // Header type - const pContributionsSize = fd.pos; - await fd.writeULE64(0); // Temporally set to 0 length - - await fd.writeULE32(contributions.length); - for (let i=0; i< contributions.length; i++) { - await writeContribution(fd, curve, contributions[i]); - } - const contributionsSize = fd.pos - pContributionsSize - 8; - - const oldPos = fd.pos; - - await fd.writeULE64(contributionsSize, pContributionsSize); - fd.pos = oldPos; - } - - function calculateFirstChallengeHash(curve, power, logger) { - if (logger) logger.debug("Calculating First Challenge Hash"); - - const hasher = new blake2bWasm.exports(64); - - const vG1 = new Uint8Array(curve.G1.F.n8*2); - const vG2 = new Uint8Array(curve.G2.F.n8*2); - curve.G1.toRprUncompressed(vG1, 0, curve.G1.g); - curve.G2.toRprUncompressed(vG2, 0, curve.G2.g); - - hasher.update(blake2bWasm.exports(64).digest()); - - let n; - - n=(2 ** power)*2 -1; - if (logger) logger.debug("Calculate Initial Hash: tauG1"); - hashBlock(vG1, n); - n= 2 ** power; - if (logger) logger.debug("Calculate Initial Hash: tauG2"); - hashBlock(vG2, n); - if (logger) logger.debug("Calculate Initial Hash: alphaTauG1"); - hashBlock(vG1, n); - if (logger) logger.debug("Calculate Initial Hash: betaTauG1"); - hashBlock(vG1, n); - hasher.update(vG2); - - return hasher.digest(); - - function hashBlock(buff, n) { - // this block size is a good compromise between speed and the maximum - // input size of the Blake2b update method (65,535,720 bytes). - const blockSize = 341000; - const nBlocks = Math.floor(n / blockSize); - const rem = n % blockSize; - const bigBuff = new Uint8Array(blockSize * buff.byteLength); - for (let i=0; i. - */ - - async function newAccumulator(curve, power, fileName, logger) { - - await blake2bWasm.exports.ready(); - - const fd = await createBinFile(fileName, "ptau", 1, 7); - - await writePTauHeader(fd, curve, power, 0); - - const buffG1 = curve.G1.oneAffine; - const buffG2 = curve.G2.oneAffine; - - // Write tauG1 - /////////// - await startWriteSection(fd, 2); - const nTauG1 = (2 ** power) * 2 -1; - for (let i=0; i< nTauG1; i++) { - await fd.write(buffG1); - if ((logger)&&((i%100000) == 0)&&i) logger.log("tauG1: " + i); - } - await endWriteSection(fd); - - // Write tauG2 - /////////// - await startWriteSection(fd, 3); - const nTauG2 = (2 ** power); - for (let i=0; i< nTauG2; i++) { - await fd.write(buffG2); - if ((logger)&&((i%100000) == 0)&&i) logger.log("tauG2: " + i); - } - await endWriteSection(fd); - - // Write alphaTauG1 - /////////// - await startWriteSection(fd, 4); - const nAlfaTauG1 = (2 ** power); - for (let i=0; i< nAlfaTauG1; i++) { - await fd.write(buffG1); - if ((logger)&&((i%100000) == 0)&&i) logger.log("alphaTauG1: " + i); - } - await endWriteSection(fd); - - // Write betaTauG1 - /////////// - await startWriteSection(fd, 5); - const nBetaTauG1 = (2 ** power); - for (let i=0; i< nBetaTauG1; i++) { - await fd.write(buffG1); - if ((logger)&&((i%100000) == 0)&&i) logger.log("betaTauG1: " + i); - } - await endWriteSection(fd); - - // Write betaG2 - /////////// - await startWriteSection(fd, 6); - await fd.write(buffG2); - await endWriteSection(fd); - - // Contributions - /////////// - await startWriteSection(fd, 7); - await fd.writeULE32(0); // 0 Contributions - await endWriteSection(fd); - - await fd.close(); - - const firstChallengeHash = calculateFirstChallengeHash(curve, power, logger); - - if (logger) logger.debug(formatHash(blake2bWasm.exports(64).digest(), "Blank Contribution Hash:")); - - if (logger) logger.info(formatHash(firstChallengeHash, "First Contribution Hash:")); - - return firstChallengeHash; - - } - - // Format of the outpu - - async function exportChallenge(pTauFilename, challengeFilename, logger) { - await blake2bWasm.exports.ready(); - const {fd: fdFrom, sections} = await readBinFile(pTauFilename, "ptau", 1); - - const {curve, power} = await readPTauHeader(fdFrom, sections); - - const contributions = await readContributions(fdFrom, curve, sections); - let lastResponseHash, curChallengeHash; - if (contributions.length == 0) { - lastResponseHash = blake2bWasm.exports(64).digest(); - curChallengeHash = calculateFirstChallengeHash(curve, power); - } else { - lastResponseHash = contributions[contributions.length-1].responseHash; - curChallengeHash = contributions[contributions.length-1].nextChallenge; - } - - if (logger) logger.info(formatHash(lastResponseHash, "Last Response Hash: ")); - - if (logger) logger.info(formatHash(curChallengeHash, "New Challenge Hash: ")); - - - const fdTo = await createOverride(challengeFilename); - - const toHash = blake2bWasm.exports(64); - await fdTo.write(lastResponseHash); - toHash.update(lastResponseHash); - - await exportSection(2, "G1", (2 ** power) * 2 -1, "tauG1"); - await exportSection(3, "G2", (2 ** power) , "tauG2"); - await exportSection(4, "G1", (2 ** power) , "alphaTauG1"); - await exportSection(5, "G1", (2 ** power) , "betaTauG1"); - await exportSection(6, "G2", 1 , "betaG2"); - - await fdFrom.close(); - await fdTo.close(); - - const calcCurChallengeHash = toHash.digest(); - - if (!hashIsEqual (curChallengeHash, calcCurChallengeHash)) { - if (logger) logger.info(formatHash(calcCurChallengeHash, "Calc Curret Challenge Hash: ")); - - if (logger) logger.error("PTau file is corrupted. Calculated new challenge hash does not match with the eclared one"); - throw new Error("PTau file is corrupted. Calculated new challenge hash does not match with the eclared one"); - } - - return curChallengeHash; - - async function exportSection(sectionId, groupName, nPoints, sectionName) { - const G = curve[groupName]; - const sG = G.F.n8*2; - const nPointsChunk = Math.floor((1<<24)/sG); - - await startReadUniqueSection(fdFrom, sections, sectionId); - for (let i=0; i< nPoints; i+= nPointsChunk) { - if (logger) logger.debug(`Exporting ${sectionName}: ${i}/${nPoints}`); - const n = Math.min(nPoints-i, nPointsChunk); - let buff; - buff = await fdFrom.read(n*sG); - buff = await G.batchLEMtoU(buff); - await fdTo.write(buff); - toHash.update(buff); - } - await endReadSection(fdFrom); - } - - - } - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - async function importResponse(oldPtauFilename, contributionFilename, newPTauFilename, name, importPoints, logger) { - - await blake2bWasm.exports.ready(); - - const noHash = new Uint8Array(64); - for (let i=0; i<64; i++) noHash[i] = 0xFF; - - const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); - const {curve, power} = await readPTauHeader(fdOld, sections); - const contributions = await readContributions(fdOld, curve, sections); - const currentContribution = {}; - - if (name) currentContribution.name = name; - - const sG1 = curve.F1.n8*2; - const scG1 = curve.F1.n8; // Compresed size - const sG2 = curve.F2.n8*2; - const scG2 = curve.F2.n8; // Compresed size - - const fdResponse = await readExisting(contributionFilename); - - if (fdResponse.totalSize != - 64 + // Old Hash - ((2 ** power)*2-1)*scG1 + - (2 ** power)*scG2 + - (2 ** power)*scG1 + - (2 ** power)*scG1 + - scG2 + - sG1*6 + sG2*3) - throw new Error("Size of the contribution is invalid"); - - let lastChallengeHash; - - if (contributions.length>0) { - lastChallengeHash = contributions[contributions.length-1].nextChallenge; - } else { - lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); - } - - const fdNew = await createBinFile(newPTauFilename, "ptau", 1, importPoints ? 7: 2); - await writePTauHeader(fdNew, curve, power); - - const contributionPreviousHash = await fdResponse.read(64); - - if (hashIsEqual(noHash,lastChallengeHash)) { - lastChallengeHash = contributionPreviousHash; - contributions[contributions.length-1].nextChallenge = lastChallengeHash; - } - - if(!hashIsEqual(contributionPreviousHash,lastChallengeHash)) - throw new Error("Wrong contribution. this contribution is not based on the previus hash"); - - const hasherResponse = new blake2bWasm.exports(64); - hasherResponse.update(contributionPreviousHash); - - const startSections = []; - let res; - res = await processSection(fdResponse, fdNew, "G1", 2, (2 ** power) * 2 -1, [1], "tauG1"); - currentContribution.tauG1 = res[0]; - res = await processSection(fdResponse, fdNew, "G2", 3, (2 ** power) , [1], "tauG2"); - currentContribution.tauG2 = res[0]; - res = await processSection(fdResponse, fdNew, "G1", 4, (2 ** power) , [0], "alphaG1"); - currentContribution.alphaG1 = res[0]; - res = await processSection(fdResponse, fdNew, "G1", 5, (2 ** power) , [0], "betaG1"); - currentContribution.betaG1 = res[0]; - res = await processSection(fdResponse, fdNew, "G2", 6, 1 , [0], "betaG2"); - currentContribution.betaG2 = res[0]; - - currentContribution.partialHash = hasherResponse.getPartialHash(); - - - const buffKey = await fdResponse.read(curve.F1.n8*2*6+curve.F2.n8*2*3); - - currentContribution.key = fromPtauPubKeyRpr(buffKey, 0, curve, false); - - hasherResponse.update(new Uint8Array(buffKey)); - const hashResponse = hasherResponse.digest(); - - if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); - - if (importPoints) { - const nextChallengeHasher = new blake2bWasm.exports(64); - nextChallengeHasher.update(hashResponse); - - await hashSection(nextChallengeHasher, fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1", logger); - await hashSection(nextChallengeHasher, fdNew, "G2", 3, (2 ** power) , "tauG2", logger); - await hashSection(nextChallengeHasher, fdNew, "G1", 4, (2 ** power) , "alphaTauG1", logger); - await hashSection(nextChallengeHasher, fdNew, "G1", 5, (2 ** power) , "betaTauG1", logger); - await hashSection(nextChallengeHasher, fdNew, "G2", 6, 1 , "betaG2", logger); - - currentContribution.nextChallenge = nextChallengeHasher.digest(); - - if (logger) logger.info(formatHash(currentContribution.nextChallenge, "Next Challenge Hash: ")); - } else { - currentContribution.nextChallenge = noHash; - } - - contributions.push(currentContribution); - - await writeContributions(fdNew, curve, contributions); - - await fdResponse.close(); - await fdNew.close(); - await fdOld.close(); - - return currentContribution.nextChallenge; - - async function processSection(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { - if (importPoints) { - return await processSectionImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName); - } else { - return await processSectionNoImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName); - } - } - - async function processSectionImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { - - const G = curve[groupName]; - const scG = G.F.n8; - const sG = G.F.n8*2; - - const singularPoints = []; - - await startWriteSection(fdTo, sectionId); - const nPointsChunk = Math.floor((1<<24)/sG); - - startSections[sectionId] = fdTo.pos; - - for (let i=0; i< nPoints; i += nPointsChunk) { - if (logger) logger.debug(`Importing ${sectionName}: ${i}/${nPoints}`); - const n = Math.min(nPoints-i, nPointsChunk); - - const buffC = await fdFrom.read(n * scG); - hasherResponse.update(buffC); - - const buffLEM = await G.batchCtoLEM(buffC); - - await fdTo.write(buffLEM); - for (let j=0; j=i) && (sp < i+n)) { - const P = G.fromRprLEM(buffLEM, (sp-i)*sG); - singularPoints.push(P); - } - } - } - - await endWriteSection(fdTo); - - return singularPoints; - } - - - async function processSectionNoImportPoints(fdFrom, fdTo, groupName, sectionId, nPoints, singularPointIndexes, sectionName) { - - const G = curve[groupName]; - const scG = G.F.n8; - - const singularPoints = []; - - const nPointsChunk = Math.floor((1<<24)/scG); - - for (let i=0; i< nPoints; i += nPointsChunk) { - if (logger) logger.debug(`Importing ${sectionName}: ${i}/${nPoints}`); - const n = Math.min(nPoints-i, nPointsChunk); - - const buffC = await fdFrom.read(n * scG); - hasherResponse.update(buffC); - - for (let j=0; j=i) && (sp < i+n)) { - const P = G.fromRprCompressed(buffC, (sp-i)*scG); - singularPoints.push(P); - } - } - } - - return singularPoints; - } - - - async function hashSection(nextChallengeHasher, fdTo, groupName, sectionId, nPoints, sectionName, logger) { - - const G = curve[groupName]; - const sG = G.F.n8*2; - const nPointsChunk = Math.floor((1<<24)/sG); - - const oldPos = fdTo.pos; - fdTo.pos = startSections[sectionId]; - - for (let i=0; i< nPoints; i += nPointsChunk) { - if (logger) logger.debug(`Hashing ${sectionName}: ${i}/${nPoints}`); - const n = Math.min(nPoints-i, nPointsChunk); - - const buffLEM = await fdTo.read(n * sG); - - const buffU = await G.batchLEMtoU(buffLEM); - - nextChallengeHasher.update(buffU); - } - - fdTo.pos = oldPos; - } - - } - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - const sameRatio$1 = sameRatio$2; - - async function verifyContribution(curve, cur, prev, logger) { - let sr; - if (cur.type == 1) { // Verify the beacon. - const beaconKey = await keyFromBeacon(curve, prev.nextChallenge, cur.beaconHash, cur.numIterationsExp); - - if (!curve.G1.eq(cur.key.tau.g1_s, beaconKey.tau.g1_s)) { - if (logger) logger.error(`BEACON key (tauG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G1.eq(cur.key.tau.g1_sx, beaconKey.tau.g1_sx)) { - if (logger) logger.error(`BEACON key (tauG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G2.eq(cur.key.tau.g2_spx, beaconKey.tau.g2_spx)) { - if (logger) logger.error(`BEACON key (tauG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - - if (!curve.G1.eq(cur.key.alpha.g1_s, beaconKey.alpha.g1_s)) { - if (logger) logger.error(`BEACON key (alphaG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G1.eq(cur.key.alpha.g1_sx, beaconKey.alpha.g1_sx)) { - if (logger) logger.error(`BEACON key (alphaG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G2.eq(cur.key.alpha.g2_spx, beaconKey.alpha.g2_spx)) { - if (logger) logger.error(`BEACON key (alphaG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - - if (!curve.G1.eq(cur.key.beta.g1_s, beaconKey.beta.g1_s)) { - if (logger) logger.error(`BEACON key (betaG1_s) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G1.eq(cur.key.beta.g1_sx, beaconKey.beta.g1_sx)) { - if (logger) logger.error(`BEACON key (betaG1_sx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - if (!curve.G2.eq(cur.key.beta.g2_spx, beaconKey.beta.g2_spx)) { - if (logger) logger.error(`BEACON key (betaG2_spx) is not generated correctly in challenge #${cur.id} ${cur.name || ""}` ); - return false; - } - } - - cur.key.tau.g2_sp = curve.G2.toAffine(getG2sp(curve, 0, prev.nextChallenge, cur.key.tau.g1_s, cur.key.tau.g1_sx)); - cur.key.alpha.g2_sp = curve.G2.toAffine(getG2sp(curve, 1, prev.nextChallenge, cur.key.alpha.g1_s, cur.key.alpha.g1_sx)); - cur.key.beta.g2_sp = curve.G2.toAffine(getG2sp(curve, 2, prev.nextChallenge, cur.key.beta.g1_s, cur.key.beta.g1_sx)); - - sr = await sameRatio$1(curve, cur.key.tau.g1_s, cur.key.tau.g1_sx, cur.key.tau.g2_sp, cur.key.tau.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID key (tau) in challenge #"+cur.id); - return false; - } - - sr = await sameRatio$1(curve, cur.key.alpha.g1_s, cur.key.alpha.g1_sx, cur.key.alpha.g2_sp, cur.key.alpha.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID key (alpha) in challenge #"+cur.id); - return false; - } - - sr = await sameRatio$1(curve, cur.key.beta.g1_s, cur.key.beta.g1_sx, cur.key.beta.g2_sp, cur.key.beta.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID key (beta) in challenge #"+cur.id); - return false; - } - - sr = await sameRatio$1(curve, prev.tauG1, cur.tauG1, cur.key.tau.g2_sp, cur.key.tau.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID tau*G1. challenge #"+cur.id+" It does not follow the previous contribution"); - return false; - } - - sr = await sameRatio$1(curve, cur.key.tau.g1_s, cur.key.tau.g1_sx, prev.tauG2, cur.tauG2); - if (sr !== true) { - if (logger) logger.error("INVALID tau*G2. challenge #"+cur.id+" It does not follow the previous contribution"); - return false; - } - - sr = await sameRatio$1(curve, prev.alphaG1, cur.alphaG1, cur.key.alpha.g2_sp, cur.key.alpha.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID alpha*G1. challenge #"+cur.id+" It does not follow the previous contribution"); - return false; - } - - sr = await sameRatio$1(curve, prev.betaG1, cur.betaG1, cur.key.beta.g2_sp, cur.key.beta.g2_spx); - if (sr !== true) { - if (logger) logger.error("INVALID beta*G1. challenge #"+cur.id+" It does not follow the previous contribution"); - return false; - } - - sr = await sameRatio$1(curve, cur.key.beta.g1_s, cur.key.beta.g1_sx, prev.betaG2, cur.betaG2); - if (sr !== true) { - if (logger) logger.error("INVALID beta*G2. challenge #"+cur.id+"It does not follow the previous contribution"); - return false; - } - - if (logger) logger.info("Powers Of tau file OK!"); - return true; - } - - async function verify(tauFilename, logger) { - let sr; - await blake2bWasm.exports.ready(); - - const {fd, sections} = await readBinFile(tauFilename, "ptau", 1); - const {curve, power, ceremonyPower} = await readPTauHeader(fd, sections); - const contrs = await readContributions(fd, curve, sections); - - if (logger) logger.debug("power: 2**" + power); - // Verify Last contribution - - if (logger) logger.debug("Computing initial contribution hash"); - const initialContribution = { - tauG1: curve.G1.g, - tauG2: curve.G2.g, - alphaG1: curve.G1.g, - betaG1: curve.G1.g, - betaG2: curve.G2.g, - nextChallenge: calculateFirstChallengeHash(curve, ceremonyPower, logger), - responseHash: blake2bWasm.exports(64).digest() - }; - - if (contrs.length == 0) { - if (logger) logger.error("This file has no contribution! It cannot be used in production"); - return false; - } - - let prevContr; - if (contrs.length>1) { - prevContr = contrs[contrs.length-2]; - } else { - prevContr = initialContribution; - } - const curContr = contrs[contrs.length-1]; - if (logger) logger.debug("Validating contribution #"+contrs[contrs.length-1].id); - const res = await verifyContribution(curve, curContr, prevContr, logger); - if (!res) return false; - - - const nextContributionHasher = blake2bWasm.exports(64); - nextContributionHasher.update(curContr.responseHash); - - // Verify powers and compute nextChallengeHash - - // await test(); - - // Verify Section tau*G1 - if (logger) logger.debug("Verifying powers in tau*G1 section"); - const rTau1 = await processSection(2, "G1", "tauG1", (2 ** power)*2-1, [0, 1], logger); - sr = await sameRatio$1(curve, rTau1.R1, rTau1.R2, curve.G2.g, curContr.tauG2); - if (sr !== true) { - if (logger) logger.error("tauG1 section. Powers do not match"); - return false; - } - if (!curve.G1.eq(curve.G1.g, rTau1.singularPoints[0])) { - if (logger) logger.error("First element of tau*G1 section must be the generator"); - return false; - } - if (!curve.G1.eq(curContr.tauG1, rTau1.singularPoints[1])) { - if (logger) logger.error("Second element of tau*G1 section does not match the one in the contribution section"); - return false; - } - - // await test(); - - // Verify Section tau*G2 - if (logger) logger.debug("Verifying powers in tau*G2 section"); - const rTau2 = await processSection(3, "G2", "tauG2", 2 ** power, [0, 1], logger); - sr = await sameRatio$1(curve, curve.G1.g, curContr.tauG1, rTau2.R1, rTau2.R2); - if (sr !== true) { - if (logger) logger.error("tauG2 section. Powers do not match"); - return false; - } - if (!curve.G2.eq(curve.G2.g, rTau2.singularPoints[0])) { - if (logger) logger.error("First element of tau*G2 section must be the generator"); - return false; - } - if (!curve.G2.eq(curContr.tauG2, rTau2.singularPoints[1])) { - if (logger) logger.error("Second element of tau*G2 section does not match the one in the contribution section"); - return false; - } - - // Verify Section alpha*tau*G1 - if (logger) logger.debug("Verifying powers in alpha*tau*G1 section"); - const rAlphaTauG1 = await processSection(4, "G1", "alphatauG1", 2 ** power, [0], logger); - sr = await sameRatio$1(curve, rAlphaTauG1.R1, rAlphaTauG1.R2, curve.G2.g, curContr.tauG2); - if (sr !== true) { - if (logger) logger.error("alphaTauG1 section. Powers do not match"); - return false; - } - if (!curve.G1.eq(curContr.alphaG1, rAlphaTauG1.singularPoints[0])) { - if (logger) logger.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"); - return false; - } - - // Verify Section beta*tau*G1 - if (logger) logger.debug("Verifying powers in beta*tau*G1 section"); - const rBetaTauG1 = await processSection(5, "G1", "betatauG1", 2 ** power, [0], logger); - sr = await sameRatio$1(curve, rBetaTauG1.R1, rBetaTauG1.R2, curve.G2.g, curContr.tauG2); - if (sr !== true) { - if (logger) logger.error("betaTauG1 section. Powers do not match"); - return false; - } - if (!curve.G1.eq(curContr.betaG1, rBetaTauG1.singularPoints[0])) { - if (logger) logger.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"); - return false; - } - - //Verify Beta G2 - const betaG2 = await processSectionBetaG2(logger); - if (!curve.G2.eq(curContr.betaG2, betaG2)) { - if (logger) logger.error("betaG2 element in betaG2 section does not match the one in the contribution section"); - return false; - } - - - const nextContributionHash = nextContributionHasher.digest(); - - // Check the nextChallengeHash - if (power == ceremonyPower) { - if (!hashIsEqual(nextContributionHash,curContr.nextChallenge)) { - if (logger) logger.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"); - return false; - } - } - - if (logger) logger.info(formatHash(nextContributionHash, "Next challenge hash: ")); - - // Verify Previous contributions - - printContribution(curContr, prevContr); - for (let i = contrs.length-2; i>=0; i--) { - const curContr = contrs[i]; - const prevContr = (i>0) ? contrs[i-1] : initialContribution; - const res = await verifyContribution(curve, curContr, prevContr, logger); - if (!res) return false; - printContribution(curContr, prevContr); - } - if (logger) logger.info("-----------------------------------------------------"); - - if ((!sections[12]) || (!sections[13]) || (!sections[14]) || (!sections[15])) { - if (logger) logger.warn( - "this file does not contain phase2 precalculated values. Please run: \n" + - " snarkjs \"powersoftau preparephase2\" to prepare this file to be used in the phase2 ceremony." - ); - } else { - let res; - res = await verifyLagrangeEvaluations("G1", 2, 12, "tauG1", logger); - if (!res) return false; - res = await verifyLagrangeEvaluations("G2", 3, 13, "tauG2", logger); - if (!res) return false; - res = await verifyLagrangeEvaluations("G1", 4, 14, "alphaTauG1", logger); - if (!res) return false; - res = await verifyLagrangeEvaluations("G1", 5, 15, "betaTauG1", logger); - if (!res) return false; - } - - await fd.close(); - - if (logger) logger.info("Powers of Tau Ok!"); - - return true; - - function printContribution(curContr, prevContr) { - if (!logger) return; - logger.info("-----------------------------------------------------"); - logger.info(`Contribution #${curContr.id}: ${curContr.name ||""}`); - - logger.info(formatHash(curContr.nextChallenge, "Next Challenge: ")); - - const buffV = new Uint8Array(curve.G1.F.n8*2*6+curve.G2.F.n8*2*3); - toPtauPubKeyRpr(buffV, 0, curve, curContr.key, false); - - const responseHasher = blake2bWasm.exports(64); - responseHasher.setPartialHash(curContr.partialHash); - responseHasher.update(buffV); - const responseHash = responseHasher.digest(); - - logger.info(formatHash(responseHash, "Response Hash:")); - - logger.info(formatHash(prevContr.nextChallenge, "Response Hash:")); - - if (curContr.type == 1) { - logger.info(`Beacon generator: ${byteArray2hex(curContr.beaconHash)}`); - logger.info(`Beacon iterations Exp: ${curContr.numIterationsExp}`); - } - - } - - async function processSectionBetaG2(logger) { - const G = curve.G2; - const sG = G.F.n8*2; - const buffUv = new Uint8Array(sG); - - if (!sections[6]) { - logger.error("File has no BetaG2 section"); - throw new Error("File has no BetaG2 section"); - } - if (sections[6].length>1) { - logger.error("File has no BetaG2 section"); - throw new Error("File has more than one GetaG2 section"); - } - fd.pos = sections[6][0].p; - - const buff = await fd.read(sG); - const P = G.fromRprLEM(buff); - - G.toRprUncompressed(buffUv, 0, P); - nextContributionHasher.update(buffUv); - - return P; - } - - async function processSection(idSection, groupName, sectionName, nPoints, singularPointIndexes, logger) { - const MAX_CHUNK_SIZE = 1<<16; - const G = curve[groupName]; - const sG = G.F.n8*2; - await startReadUniqueSection(fd, sections, idSection); - - const singularPoints = []; - - let R1 = G.zero; - let R2 = G.zero; - - let lastBase = G.zero; - - for (let i=0; i0) { - const firstBase = G.fromRprLEM(bases, 0); - const r = readUInt32BE(getRandomBytes(4), 0); - - R1 = G.add(R1, G.timesScalar(lastBase, r)); - R2 = G.add(R2, G.timesScalar(firstBase, r)); - } - - const r1 = await G.multiExpAffine(bases.slice(0, (n-1)*sG), scalars); - const r2 = await G.multiExpAffine(bases.slice(sG), scalars); - - R1 = G.add(R1, r1); - R2 = G.add(R2, r2); - - lastBase = G.fromRprLEM( bases, (n-1)*sG); - - for (let j=0; j=i) && (sp < i+n)) { - const P = G.fromRprLEM(bases, (sp-i)*sG); - singularPoints.push(P); - } - } - - } - await endReadSection(fd); - - return { - R1: R1, - R2: R2, - singularPoints: singularPoints - }; - - } - - async function verifyLagrangeEvaluations(gName, tauSection, lagrangeSection, sectionName, logger) { - - if (logger) logger.debug(`Verifying phase2 calculated values ${sectionName}...`); - const G = curve[gName]; - const sG = G.F.n8*2; - - const seed= new Array(8); - for (let i=0; i<8; i++) { - seed[i] = readUInt32BE(getRandomBytes(4), 0); - } - - for (let p=0; p<= power; p ++) { - const res = await verifyPower(p); - if (!res) return false; - } - - if (tauSection == 2) { - const res = await verifyPower(power+1); - if (!res) return false; - } - - return true; - - async function verifyPower(p) { - if (logger) logger.debug(`Power ${p}...`); - const n8r = curve.Fr.n8; - const nPoints = 2 ** p; - let buff_r = new Uint32Array(nPoints); - let buffG; - - let rng = new ChaCha(seed); - - if (logger) logger.debug(`Creating random numbers Powers${p}...`); - for (let i=0; i. - */ - - /* - This function creates a new section in the fdTo file with id idSection. - It multiplies the pooints in fdFrom by first, first*inc, first*inc^2, .... - nPoint Times. - It also updates the newChallengeHasher with the new points - */ - - async function applyKeyToSection(fdOld, sections, fdNew, idSection, curve, groupName, first, inc, sectionName, logger) { - const MAX_CHUNK_SIZE = 1 << 16; - const G = curve[groupName]; - const sG = G.F.n8*2; - const nPoints = sections[idSection][0].size / sG; - - await startReadUniqueSection(fdOld, sections,idSection ); - await startWriteSection(fdNew, idSection); - - let t = first; - for (let i=0; i. - */ - - async function challengeContribute(curve, challengeFilename, responesFileName, entropy, logger) { - await blake2bWasm.exports.ready(); - - const fdFrom = await readExisting(challengeFilename); - - - const sG1 = curve.F1.n64*8*2; - const sG2 = curve.F2.n64*8*2; - const domainSize = (fdFrom.totalSize + sG1 - 64 - sG2) / (4*sG1 + sG2); - let e = domainSize; - let power = 0; - while (e>1) { - e = e /2; - power += 1; - } - - if (2 ** power != domainSize) throw new Error("Invalid file size"); - if (logger) logger.debug("Power to tau size: "+power); - - const rng = await getRandomRng(entropy); - - const fdTo = await createOverride(responesFileName); - - // Calculate the hash - const challengeHasher = blake2bWasm.exports(64); - for (let i=0; i { - logger.debug(k + ".g1_s: " + curve.G1.toString(key[k].g1_s, 16)); - logger.debug(k + ".g1_sx: " + curve.G1.toString(key[k].g1_sx, 16)); - logger.debug(k + ".g2_sp: " + curve.G2.toString(key[k].g2_sp, 16)); - logger.debug(k + ".g2_spx: " + curve.G2.toString(key[k].g2_spx, 16)); - logger.debug(""); - }); - } - - const responseHasher = blake2bWasm.exports(64); - - await fdTo.write(challengeHash); - responseHasher.update(challengeHash); - - await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power)*2-1, curve.Fr.one , key.tau.prvKey, "COMPRESSED", "tauG1" , logger ); - await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G2", (2 ** power) , curve.Fr.one , key.tau.prvKey, "COMPRESSED", "tauG2" , logger ); - await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power) , key.alpha.prvKey, key.tau.prvKey, "COMPRESSED", "alphaTauG1", logger ); - await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G1", (2 ** power) , key.beta.prvKey , key.tau.prvKey, "COMPRESSED", "betaTauG1" , logger ); - await applyKeyToChallengeSection(fdFrom, fdTo, responseHasher, curve, "G2", 1 , key.beta.prvKey , key.tau.prvKey, "COMPRESSED", "betaTauG2" , logger ); - - // Write and hash key - const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); - toPtauPubKeyRpr(buffKey, 0, curve, key, false); - await fdTo.write(buffKey); - responseHasher.update(buffKey); - const responseHash = responseHasher.digest(); - if (logger) logger.info(formatHash(responseHash, "Contribution Response Hash: ")); - - await fdTo.close(); - await fdFrom.close(); - } - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - async function beacon$1(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) { - const beaconHash = hex2ByteArray(beaconHashStr); - if ( (beaconHash.byteLength == 0) - || (beaconHash.byteLength*2 !=beaconHashStr.length)) - { - if (logger) logger.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"); - return false; - } - if (beaconHash.length>=256) { - if (logger) logger.error("Maximum lenght of beacon hash is 255 bytes"); - return false; - } - - numIterationsExp = parseInt(numIterationsExp); - if ((numIterationsExp<10)||(numIterationsExp>63)) { - if (logger) logger.error("Invalid numIterationsExp. (Must be between 10 and 63)"); - return false; - } - - - await blake2bWasm.exports.ready(); - - const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); - const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); - if (power != ceremonyPower) { - if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file."); - return false; - } - if (sections[12]) { - if (logger) logger.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again."); - } - const contributions = await readContributions(fdOld, curve, sections); - const curContribution = { - name: name, - type: 1, // Beacon - numIterationsExp: numIterationsExp, - beaconHash: beaconHash - }; - - let lastChallengeHash; - - if (contributions.length>0) { - lastChallengeHash = contributions[contributions.length-1].nextChallenge; - } else { - lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); - } - - curContribution.key = await keyFromBeacon(curve, lastChallengeHash, beaconHash, numIterationsExp); - - const responseHasher = new blake2bWasm.exports(64); - responseHasher.update(lastChallengeHash); - - const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 7); - await writePTauHeader(fdNew, curve, power); - - const startSections = []; - - let firstPoints; - firstPoints = await processSection(2, "G1", (2 ** power) * 2 -1, curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG1", logger ); - curContribution.tauG1 = firstPoints[1]; - firstPoints = await processSection(3, "G2", (2 ** power) , curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG2", logger ); - curContribution.tauG2 = firstPoints[1]; - firstPoints = await processSection(4, "G1", (2 ** power) , curContribution.key.alpha.prvKey, curContribution.key.tau.prvKey, "alphaTauG1", logger ); - curContribution.alphaG1 = firstPoints[0]; - firstPoints = await processSection(5, "G1", (2 ** power) , curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG1", logger ); - curContribution.betaG1 = firstPoints[0]; - firstPoints = await processSection(6, "G2", 1, curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG2", logger ); - curContribution.betaG2 = firstPoints[0]; - - curContribution.partialHash = responseHasher.getPartialHash(); - - const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); - - toPtauPubKeyRpr(buffKey, 0, curve, curContribution.key, false); - - responseHasher.update(new Uint8Array(buffKey)); - const hashResponse = responseHasher.digest(); - - if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); - - const nextChallengeHasher = new blake2bWasm.exports(64); - nextChallengeHasher.update(hashResponse); - - await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1", logger); - await hashSection(fdNew, "G2", 3, (2 ** power) , "tauG2", logger); - await hashSection(fdNew, "G1", 4, (2 ** power) , "alphaTauG1", logger); - await hashSection(fdNew, "G1", 5, (2 ** power) , "betaTauG1", logger); - await hashSection(fdNew, "G2", 6, 1 , "betaG2", logger); - - curContribution.nextChallenge = nextChallengeHasher.digest(); - - if (logger) logger.info(formatHash(curContribution.nextChallenge, "Next Challenge Hash: ")); - - contributions.push(curContribution); - - await writeContributions(fdNew, curve, contributions); - - await fdOld.close(); - await fdNew.close(); - - return hashResponse; - - async function processSection(sectionId, groupName, NPoints, first, inc, sectionName, logger) { - const res = []; - fdOld.pos = sections[sectionId][0].p; - - await startWriteSection(fdNew, sectionId); - - startSections[sectionId] = fdNew.pos; - - const G = curve[groupName]; - const sG = G.F.n8*2; - const chunkSize = Math.floor((1<<20) / sG); // 128Mb chunks - let t = first; - for (let i=0 ; i. - */ - - async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logger) { - await blake2bWasm.exports.ready(); - - const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); - const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); - if (power != ceremonyPower) { - if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file."); - throw new Error("This file has been reduced. You cannot contribute into a reduced file."); - } - if (sections[12]) { - if (logger) logger.warn("WARNING: Contributing into a file that has phase2 calculated. You will have to prepare phase2 again."); - } - const contributions = await readContributions(fdOld, curve, sections); - const curContribution = { - name: name, - type: 0, // Beacon - }; - - let lastChallengeHash; - - const rng = await getRandomRng(entropy); - - if (contributions.length>0) { - lastChallengeHash = contributions[contributions.length-1].nextChallenge; - } else { - lastChallengeHash = calculateFirstChallengeHash(curve, power, logger); - } - - // Generate a random key - - - curContribution.key = createPTauKey(curve, lastChallengeHash, rng); - - - const responseHasher = new blake2bWasm.exports(64); - responseHasher.update(lastChallengeHash); - - const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 7); - await writePTauHeader(fdNew, curve, power); - - const startSections = []; - - let firstPoints; - firstPoints = await processSection(2, "G1", (2 ** power) * 2 -1, curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG1" ); - curContribution.tauG1 = firstPoints[1]; - firstPoints = await processSection(3, "G2", (2 ** power) , curve.Fr.e(1), curContribution.key.tau.prvKey, "tauG2" ); - curContribution.tauG2 = firstPoints[1]; - firstPoints = await processSection(4, "G1", (2 ** power) , curContribution.key.alpha.prvKey, curContribution.key.tau.prvKey, "alphaTauG1" ); - curContribution.alphaG1 = firstPoints[0]; - firstPoints = await processSection(5, "G1", (2 ** power) , curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG1" ); - curContribution.betaG1 = firstPoints[0]; - firstPoints = await processSection(6, "G2", 1, curContribution.key.beta.prvKey, curContribution.key.tau.prvKey, "betaTauG2" ); - curContribution.betaG2 = firstPoints[0]; - - curContribution.partialHash = responseHasher.getPartialHash(); - - const buffKey = new Uint8Array(curve.F1.n8*2*6+curve.F2.n8*2*3); - - toPtauPubKeyRpr(buffKey, 0, curve, curContribution.key, false); - - responseHasher.update(new Uint8Array(buffKey)); - const hashResponse = responseHasher.digest(); - - if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: ")); - - const nextChallengeHasher = new blake2bWasm.exports(64); - nextChallengeHasher.update(hashResponse); - - await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1"); - await hashSection(fdNew, "G2", 3, (2 ** power) , "tauG2"); - await hashSection(fdNew, "G1", 4, (2 ** power) , "alphaTauG1"); - await hashSection(fdNew, "G1", 5, (2 ** power) , "betaTauG1"); - await hashSection(fdNew, "G2", 6, 1 , "betaG2"); - - curContribution.nextChallenge = nextChallengeHasher.digest(); - - if (logger) logger.info(formatHash(curContribution.nextChallenge, "Next Challenge Hash: ")); - - contributions.push(curContribution); - - await writeContributions(fdNew, curve, contributions); - - await fdOld.close(); - await fdNew.close(); - - return hashResponse; - - async function processSection(sectionId, groupName, NPoints, first, inc, sectionName) { - const res = []; - fdOld.pos = sections[sectionId][0].p; - - await startWriteSection(fdNew, sectionId); - - startSections[sectionId] = fdNew.pos; - - const G = curve[groupName]; - const sG = G.F.n8*2; - const chunkSize = Math.floor((1<<20) / sG); // 128Mb chunks - let t = first; - for (let i=0 ; i. - */ - - async function preparePhase2(oldPtauFilename, newPTauFilename, logger) { - - const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); - const {curve, power} = await readPTauHeader(fdOld, sections); - - const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 11); - await writePTauHeader(fdNew, curve, power); - - await copySection(fdOld, sections, fdNew, 2); - await copySection(fdOld, sections, fdNew, 3); - await copySection(fdOld, sections, fdNew, 4); - await copySection(fdOld, sections, fdNew, 5); - await copySection(fdOld, sections, fdNew, 6); - await copySection(fdOld, sections, fdNew, 7); - - await processSection(2, 12, "G1", "tauG1" ); - await processSection(3, 13, "G2", "tauG2" ); - await processSection(4, 14, "G1", "alphaTauG1" ); - await processSection(5, 15, "G1", "betaTauG1" ); - - await fdOld.close(); - await fdNew.close(); - - // await fs.promises.unlink(newPTauFilename+ ".tmp"); - - return; - - async function processSection(oldSectionId, newSectionId, Gstr, sectionName) { - if (logger) logger.debug("Starting section: "+sectionName); - - await startWriteSection(fdNew, newSectionId); - - for (let p=0; p<=power; p++) { - await processSectionPower(p); - } - - if (oldSectionId == 2) { - await processSectionPower(power+1); - } - - await endWriteSection(fdNew); - - - async function processSectionPower(p) { - const nPoints = 2 ** p; - const G = curve[Gstr]; - curve.Fr; - const sGin = G.F.n8*2; - G.F.n8*3; - - let buff; - buff = new BigBuffer(nPoints*sGin); - - await startReadUniqueSection(fdOld, sections, oldSectionId); - if ((oldSectionId == 2)&&(p==power+1)) { - await fdOld.readToBuffer(buff, 0,(nPoints-1)*sGin ); - buff.set(curve.G1.zeroAffine, (nPoints-1)*sGin ); - } else { - await fdOld.readToBuffer(buff, 0,nPoints*sGin ); - } - await endReadSection(fdOld, true); - - - buff = await G.lagrangeEvaluations(buff, "affine", "affine", logger, sectionName); - await fdNew.write(buff); - - /* - if (p <= curve.Fr.s) { - buff = await G.ifft(buff, "affine", "affine", logger, sectionName); - await fdNew.write(buff); - } else if (p == curve.Fr.s+1) { - const smallM = 1<. - */ - - async function truncate(ptauFilename, template, logger) { - - const {fd: fdOld, sections} = await readBinFile(ptauFilename, "ptau", 1); - const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections); - - const sG1 = curve.G1.F.n8*2; - const sG2 = curve.G2.F.n8*2; - - for (let p=1; p. - */ - - async function convert(oldPtauFilename, newPTauFilename, logger) { - - const {fd: fdOld, sections} = await readBinFile(oldPtauFilename, "ptau", 1); - const {curve, power} = await readPTauHeader(fdOld, sections); - - const fdNew = await createBinFile(newPTauFilename, "ptau", 1, 11); - await writePTauHeader(fdNew, curve, power); - - // const fdTmp = await fastFile.createOverride(newPTauFilename+ ".tmp"); - - await copySection(fdOld, sections, fdNew, 2); - await copySection(fdOld, sections, fdNew, 3); - await copySection(fdOld, sections, fdNew, 4); - await copySection(fdOld, sections, fdNew, 5); - await copySection(fdOld, sections, fdNew, 6); - await copySection(fdOld, sections, fdNew, 7); - - await processSection(2, 12, "G1", "tauG1" ); - await copySection(fdOld, sections, fdNew, 13); - await copySection(fdOld, sections, fdNew, 14); - await copySection(fdOld, sections, fdNew, 15); - - await fdOld.close(); - await fdNew.close(); - - // await fs.promises.unlink(newPTauFilename+ ".tmp"); - - return; - - async function processSection(oldSectionId, newSectionId, Gstr, sectionName) { - if (logger) logger.debug("Starting section: "+sectionName); - - await startWriteSection(fdNew, newSectionId); - - const size = sections[newSectionId][0].size; - const chunkSize = fdOld.pageSize; - await startReadUniqueSection(fdOld, sections, newSectionId); - for (let p=0; p. - */ - - async function exportJson(pTauFilename, verbose) { - const {fd, sections} = await readBinFile(pTauFilename, "ptau", 1); - - const {curve, power} = await readPTauHeader(fd, sections); - - const pTau = {}; - pTau.q = curve.q; - pTau.power = power; - pTau.contributions = await readContributions(fd, curve, sections); - - pTau.tauG1 = await exportSection(2, "G1", (2 ** power)*2 -1, "tauG1"); - pTau.tauG2 = await exportSection(3, "G2", (2 ** power), "tauG2"); - pTau.alphaTauG1 = await exportSection(4, "G1", (2 ** power), "alphaTauG1"); - pTau.betaTauG1 = await exportSection(5, "G1", (2 ** power), "betaTauG1"); - pTau.betaG2 = await exportSection(6, "G2", 1, "betaG2"); - - pTau.lTauG1 = await exportLagrange(12, "G1", "lTauG1"); - pTau.lTauG2 = await exportLagrange(13, "G2", "lTauG2"); - pTau.lAlphaTauG1 = await exportLagrange(14, "G1", "lAlphaTauG2"); - pTau.lBetaTauG1 = await exportLagrange(15, "G1", "lBetaTauG2"); - - await fd.close(); - - return stringifyBigIntsWithField(curve.Fr, pTau); - - - - async function exportSection(sectionId, groupName, nPoints, sectionName) { - const G = curve[groupName]; - const sG = G.F.n8*2; - - const res = []; - await startReadUniqueSection(fd, sections, sectionId); - for (let i=0; i< nPoints; i++) { - if ((verbose)&&i&&(i%10000 == 0)) console.log(`${sectionName}: ` + i); - const buff = await fd.read(sG); - res.push(G.fromRprLEM(buff, 0)); - } - await endReadSection(fd); - - return res; - } - - async function exportLagrange(sectionId, groupName, sectionName) { - const G = curve[groupName]; - const sG = G.F.n8*2; - - const res = []; - await startReadUniqueSection(fd, sections, sectionId); - for (let p=0; p<=power; p++) { - if (verbose) console.log(`${sectionName}: Power: ${p}`); - res[p] = []; - const nPoints = (2 ** p); - for (let i=0; i. - */ - - var powersoftau = /*#__PURE__*/Object.freeze({ - __proto__: null, - newAccumulator: newAccumulator, - exportChallenge: exportChallenge, - importResponse: importResponse, - verify: verify, - challengeContribute: challengeContribute, - beacon: beacon$1, - contribute: contribute, - preparePhase2: preparePhase2, - truncate: truncate, - convert: convert, - exportJson: exportJson - }); - - /* - Copyright 2018 0KIMS association. - - This file is part of snarkJS. - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . - */ - - function r1csPrint(r1cs, syms, logger) { - for (let i=0; i { - let S = ""; - const keys = Object.keys(lc); - keys.forEach( (k) => { - let name = syms.varIdx2Name[k]; - if (name == "one") name = "1"; - - let vs = r1cs.curve.Fr.toString(lc[k]); - if (vs == "1") vs = ""; // Do not show ones - if (vs == "-1") vs = "-"; // Do not show ones - if ((S!="")&&(vs[0]!="-")) vs = "+"+vs; - if (S!="") vs = " "+vs; - S= S + vs + name; - }); - return S; - }; - const S = `[ ${lc2str(c[0])} ] * [ ${lc2str(c[1])} ] - [ ${lc2str(c[2])} ] = 0`; - if (logger) logger.info(S); - } - - } - const SUBARRAY_SIZE$1 = 0x40000; const BigArrayHandler$1 = { @@ -23133,7 +39677,7 @@ var snarkjs = (function (exports) { res.F = res.curve.Fr; } else { try { - res.curve = await getCurveFromR$1(res.prime, options.singleThread); + res.curve = await getCurveFromR(res.prime, options.singleThread); res.F = res.curve.Fr; } catch (err) { res.F = new ZqField(res.prime); @@ -23390,19 +39934,19 @@ var snarkjs = (function (exports) { along with snarkJS. If not, see . */ - const bls12381r = Scalar.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16); - const bn128r = Scalar.e("21888242871839275222246405745257275088548364400416034343698204186575808495617"); + const bls12381r = Scalar$1.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16); + const bn128r = Scalar$1.e("21888242871839275222246405745257275088548364400416034343698204186575808495617"); async function r1csInfo(r1csName, logger) { const cir = await readR1cs(r1csName); - if (Scalar.eq(cir.prime, bn128r)) { + if (Scalar$1.eq(cir.prime, bn128r)) { if (logger) logger.info("Curve: bn-128"); - } else if (Scalar.eq(cir.prime, bls12381r)) { + } else if (Scalar$1.eq(cir.prime, bls12381r)) { if (logger) logger.info("Curve: bls12-381"); } else { - if (logger) logger.info(`Unknown Curve. Prime: ${Scalar.toString(cir.prime)}`); + if (logger) logger.info(`Unknown Curve. Prime: ${Scalar$1.toString(cir.prime)}`); } if (logger) logger.info(`# of Wires: ${cir.nVars}`); if (logger) logger.info(`# of Constraints: ${cir.nConstraints}`); @@ -23542,7 +40086,7 @@ var snarkjs = (function (exports) { You should have received a copy of the GNU General Public License along with snarkJS. If not, see . */ - const {unstringifyBigInts: unstringifyBigInts$7} = utils; + const {unstringifyBigInts: unstringifyBigInts$7} = utils$6; async function wtnsDebug(_input, wasmFileName, wtnsFileName, symName, options, logger) { @@ -23658,14 +40202,14 @@ var snarkjs = (function (exports) { } = await readBinFile(wtnsFilename, "wtns", 2); const wtnsHeader = await readHeader(fdWtns, wtnsSections); - if (!Scalar.eq(r1cs.prime, wtnsHeader.q)) { + if (!Scalar$1.eq(r1cs.prime, wtnsHeader.q)) { throw new Error("Curve of the witness does not match the curve of the proving key"); } const buffWitness = await readSection(fdWtns, wtnsSections, 2); await fdWtns.close(); - const curve = await getCurveFromR(r1cs.prime); + const curve = await getCurveFromR$1(r1cs.prime); const Fr = curve.Fr; const sFr = Fr.n8; @@ -23933,7 +40477,7 @@ var snarkjs = (function (exports) { return -1; } - const cirPower = log2(r1cs.nConstraints + r1cs.nPubInputs + r1cs.nOutputs +1 -1) +1; + const cirPower = log2$3(r1cs.nConstraints + r1cs.nPubInputs + r1cs.nOutputs +1 -1) +1; if (cirPower > power) { if (logger) logger.error(`circuit too big for this power of tau ceremony. ${r1cs.nConstraints}*2 > 2**${power}`); @@ -23959,12 +40503,12 @@ var snarkjs = (function (exports) { await startWriteSection(fdZKey, 2); const primeQ = curve.q; - const n8q = (Math.floor( (Scalar.bitLength(primeQ) - 1) / 64) +1)*8; + const n8q = (Math.floor( (Scalar$1.bitLength(primeQ) - 1) / 64) +1)*8; const primeR = curve.r; - const n8r = (Math.floor( (Scalar.bitLength(primeR) - 1) / 64) +1)*8; - const Rr = Scalar.mod(Scalar.shl(1, n8r*8), primeR); - const R2r = curve.Fr.e(Scalar.mod(Scalar.mul(Rr,Rr), primeR)); + const n8r = (Math.floor( (Scalar$1.bitLength(primeR) - 1) / 64) +1)*8; + const Rr = Scalar$1.mod(Scalar$1.shl(1, n8r*8), primeR); + const R2r = curve.Fr.e(Scalar$1.mod(Scalar$1.mul(Rr,Rr), primeR)); await fdZKey.writeULE32(n8q); await writeBigInt(fdZKey, primeQ, n8q); @@ -24058,7 +40602,7 @@ var snarkjs = (function (exports) { async function writeHs() { await startWriteSection(fdZKey, 9); - const buffOut = new BigBuffer(domainSize*sG1); + const buffOut = new BigBuffer$1(domainSize*sG1); if (cirPower < curve.Fr.s) { let sTauG1 = await readSection(fdPTau, sectionsPTau, 12, (domainSize*2-1)*sG1, domainSize*2*sG1); for (let i=0; i< domainSize; i++) { @@ -24179,7 +40723,7 @@ var snarkjs = (function (exports) { await startWriteSection(fdZKey, 4); - const buffSection = new BigBuffer(coefs.length*(12+curve.Fr.n8) + 4); + const buffSection = new BigBuffer$1(coefs.length*(12+curve.Fr.n8) + 4); const buff4 = new Uint8Array(4); const buff4V = new DataView(buff4.buffer); @@ -24280,8 +40824,8 @@ var snarkjs = (function (exports) { for (let i=0; i 2<<14) { - bBases = new BigBuffer(acc*sGin); - bScalars = new BigBuffer(acc*curve.Fr.n8); + bBases = new BigBuffer$1(acc*sGin); + bScalars = new BigBuffer$1(acc*curve.Fr.n8); } else { bBases = new Uint8Array(acc*sGin); bScalars = new Uint8Array(acc*curve.Fr.n8); @@ -24911,8 +41455,8 @@ var snarkjs = (function (exports) { throw new Error("zkeyinit file is not groth16"); } - if ( (!Scalar.eq(zkeyInit.q, zkey.q)) - ||(!Scalar.eq(zkeyInit.r, zkey.r)) + if ( (!Scalar$1.eq(zkeyInit.q, zkey.q)) + ||(!Scalar$1.eq(zkeyInit.r, zkey.r)) ||(zkeyInit.n8q != zkey.n8q) ||(zkeyInit.n8r != zkey.n8r)) { @@ -25055,7 +41599,7 @@ var snarkjs = (function (exports) { const bases1 = await fd1.read(n*sG); const bases2 = await fd2.read(n*sG); - const scalars = getRandomBytes(4*n); + const scalars = getRandomBytes$2(4*n); const r1 = await G.multiExpAffine(bases1, scalars); const r2 = await G.multiExpAffine(bases2, scalars); @@ -25082,13 +41626,13 @@ var snarkjs = (function (exports) { const {fd: fdPTau, sections: sectionsPTau} = await readBinFile(pTauFileName, "ptau", 1); - let buff_r = new BigBuffer(zkey.domainSize * zkey.n8r); + let buff_r = new BigBuffer$1(zkey.domainSize * zkey.n8r); const seed= new Array(8); for (let i=0; i<8; i++) { - seed[i] = readUInt32BE(getRandomBytes(4), 0); + seed[i] = readUInt32BE(getRandomBytes$2(4), 0); } - const rng = new ChaCha(seed); + const rng = new ChaCha$1(seed); for (let i=0; i. */ - const {stringifyBigInts: stringifyBigInts$3} = utils; + const {stringifyBigInts: stringifyBigInts$3} = utils$6; async function zkeyExportVerificationKey(zkeyName, logger) { if (logger) logger.info("EXPORT VERIFICATION KEY STARTED"); @@ -25824,7 +42368,7 @@ var snarkjs = (function (exports) { along with snarkJS. If not, see . */ - const {unstringifyBigInts: unstringifyBigInts$6, stringifyBigInts: stringifyBigInts$2} = utils; + const {unstringifyBigInts: unstringifyBigInts$6, stringifyBigInts: stringifyBigInts$2} = utils$6; async function fflonkExportSolidityVerifier(vk, templates, logger) { if (logger) logger.info("FFLONK EXPORT SOLIDITY VERIFIER STARTED"); @@ -25973,7 +42517,7 @@ var snarkjs = (function (exports) { return -1; } - let cirPower = log2(plonkConstraints.length -1) +1; + let cirPower = log2$3(plonkConstraints.length -1) +1; if (cirPower < 3) cirPower = 3; // As the t polinomal is n+5 whe need at least a power of 4 const domainSize = 2 ** cirPower; @@ -25989,7 +42533,7 @@ var snarkjs = (function (exports) { } - const LPoints = new BigBuffer(domainSize*sG1); + const LPoints = new BigBuffer$1(domainSize*sG1); const o = sectionsPTau[12][0].p + ((2 ** (cirPower)) -1)*sG1; await fdPTau.readToBuffer(LPoints, 0, domainSize*sG1, o); @@ -26025,7 +42569,7 @@ var snarkjs = (function (exports) { //////////// await startWriteSection(fdZKey, 14); - const buffOut = new BigBuffer((domainSize+6)*sG1); + const buffOut = new BigBuffer$1((domainSize+6)*sG1); await fdPTau.readToBuffer(buffOut, 0, (domainSize+6)*sG1, sectionsPTau[2][0].p); await fdZKey.write(buffOut); await endWriteSection(fdZKey); @@ -26212,7 +42756,7 @@ var snarkjs = (function (exports) { } async function writeQMap(sectionNum, posConstraint, name) { - let Q = new BigBuffer(domainSize*n8r); + let Q = new BigBuffer$1(domainSize*n8r); for (let i=0; i. + */ + + class Proof { + constructor(curve, logger) { + this.curve = curve; + this.logger = logger; + + this.resetProof(); + } + + resetProof() { + this.polynomials = {}; + this.evaluations = {}; + } + + addPolynomial(key, polynomial) { + if (key in this.polynomials) { + this.logger.warn(`proof: polynomial.${key} already exist in proof`); + } + this.polynomials[key] = polynomial; + } + + getPolynomial(key) { + if (!(key in this.polynomials)) { + this.logger.warn(`proof: polynomial ${key} does not exist in proof`); + } + return this.polynomials[key]; + } + + addEvaluation(key, evaluation) { + if (key in this.evaluations) { + this.logger.warn(`proof: evaluations.${key} already exist in proof`); + } + this.evaluations[key] = evaluation; + } + + getEvaluation(key) { + if (!(key in this.evaluations)) { + this.logger.warn(`proof: evaluation ${key} does not exist in proof`); + } + return this.evaluations[key]; + } + + toObjectProof(splitFields = true) { + let res = splitFields ? {polynomials: {}, evaluations: {}} : {}; + + Object.keys(this.polynomials).forEach(key => { + const value = this.curve.G1.toObject(this.polynomials[key]); + if(splitFields) { + res.polynomials[key] = value; + } else { + res[key] = value; + } + }); + + Object.keys(this.evaluations).forEach(key => { + const value = this.curve.Fr.toObject(this.evaluations[key]); + if(splitFields) { + res.evaluations[key] = value; + } else { + res[key] = value; + } + }); + + return res; + } + + fromObjectProof(objectProof) { + this.resetProof(); + + Object.keys(objectProof.polynomials).forEach(key => { + this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); + }); + + Object.keys(objectProof.evaluations).forEach(key => { + this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); + }); + } + } + var sha3 = {exports: {}}; /** @@ -27062,6 +43703,1272 @@ var snarkjs = (function (exports) { var jsSha3 = sha3.exports; + /* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + const { keccak256 } = jsSha3; + + const POLYNOMIAL = 0; + const SCALAR = 1; + + class Keccak256Transcript { + constructor(curve) { + this.G1 = curve.G1; + this.Fr = curve.Fr; + + this.reset(); + } + + reset() { + this.data = []; + } + + addPolCommitment(polynomialCommitment) { + this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); + } + + addScalar(scalar) { + this.data.push({type: SCALAR, data: scalar}); + } + + getChallenge() { + if(0 === this.data.length) { + throw new Error("Keccak256Transcript: No data to generate a transcript"); + } + + let nPolynomials = 0; + let nScalars = 0; + + this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); + + let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); + let offset = 0; + + for (let i = 0; i < this.data.length; i++) { + if (POLYNOMIAL === this.data[i].type) { + this.G1.toRprUncompressed(buffer, offset, this.data[i].data); + offset += this.G1.F.n8 * 2; + } else { + this.Fr.toRprBE(buffer, offset, this.data[i].data); + offset += this.Fr.n8; + } + } + + const value = Scalar$1.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); + return this.Fr.e(value); + } + } + + /* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + class MulZ { + static getZ1(Fr) { + return [ + Fr.zero, + Fr.add(Fr.e(-1), Fr.w[2]), + Fr.e(-2), + Fr.sub(Fr.e(-1), Fr.w[2]), + ]; + } + + static getZ2(Fr) { + return [ + Fr.zero, + Fr.add(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), + Fr.e(4), + Fr.sub(Fr.zero, Fr.mul(Fr.e(-2), Fr.w[2])), + ]; + } + + static getZ3(Fr) { + return [ + Fr.zero, + Fr.add(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), + Fr.e(-8), + Fr.sub(Fr.e(2), Fr.mul(Fr.e(2), Fr.w[2])), + ]; + + } + + static mul2(a, b, ap, bp, p, Fr) { + const Z1 = this.getZ1(Fr); + let r, rz; + + const a_b = Fr.mul(a, b); + const a_bp = Fr.mul(a, bp); + const ap_b = Fr.mul(ap, b); + const ap_bp = Fr.mul(ap, bp); + + r = a_b; + + let a0 = Fr.add(a_bp, ap_b); + + let a1 = ap_bp; + + rz = a0; + if (p) { + rz = Fr.add(rz, Fr.mul(Z1[p], a1)); + } + + return [r, rz]; + } + + static mul3(a, b, c, ap, bp, cp, p, Fr) { + const Z1 = this.getZ1(Fr); + const Z2 = this.getZ2(Fr); + let r, rz; + + const a_b = Fr.mul(a, b); + const a_bp = Fr.mul(a, bp); + const ap_b = Fr.mul(ap, b); + const ap_bp = Fr.mul(ap, bp); + + r = Fr.mul(a_b, c); + + let a0 = Fr.mul(ap_b, c); + a0 = Fr.add(a0, Fr.mul(a_bp, c)); + a0 = Fr.add(a0, Fr.mul(a_b, cp)); + + let a1 = Fr.mul(ap_bp, c); + a1 = Fr.add(a1, Fr.mul(a_bp, cp)); + a1 = Fr.add(a1, Fr.mul(ap_b, cp)); + + rz = a0; + if (p) { + const a2 = Fr.mul(ap_bp, cp); + rz = Fr.add(rz, Fr.mul(Z1[p], a1)); + rz = Fr.add(rz, Fr.mul(Z2[p], a2)); + } + + return [r, rz]; + } + + static mul4(a, b, c, d, ap, bp, cp, dp, p, Fr) { + const Z1 = this.getZ1(Fr); + const Z2 = this.getZ2(Fr); + const Z3 = this.getZ3(Fr); + + let r, rz; + + const a_b = Fr.mul(a, b); + const a_bp = Fr.mul(a, bp); + const ap_b = Fr.mul(ap, b); + const ap_bp = Fr.mul(ap, bp); + + const c_d = Fr.mul(c, d); + const c_dp = Fr.mul(c, dp); + const cp_d = Fr.mul(cp, d); + const cp_dp = Fr.mul(cp, dp); + + r = Fr.mul(a_b, c_d); + + let a0 = Fr.mul(ap_b, c_d); + a0 = Fr.add(a0, Fr.mul(a_bp, c_d)); + a0 = Fr.add(a0, Fr.mul(a_b, cp_d)); + a0 = Fr.add(a0, Fr.mul(a_b, c_dp)); + + let a1 = Fr.mul(ap_bp, c_d); + a1 = Fr.add(a1, Fr.mul(ap_b, cp_d)); + a1 = Fr.add(a1, Fr.mul(ap_b, c_dp)); + a1 = Fr.add(a1, Fr.mul(a_bp, cp_d)); + a1 = Fr.add(a1, Fr.mul(a_bp, c_dp)); + a1 = Fr.add(a1, Fr.mul(a_b, cp_dp)); + + let a2 = Fr.mul(a_bp, cp_dp); + a2 = Fr.add(a2, Fr.mul(ap_b, cp_dp)); + a2 = Fr.add(a2, Fr.mul(ap_bp, c_dp)); + a2 = Fr.add(a2, Fr.mul(ap_bp, cp_d)); + + let a3 = Fr.mul(ap_bp, cp_dp); + + rz = a0; + if (p) { + rz = Fr.add(rz, Fr.mul(Z1[p], a1)); + rz = Fr.add(rz, Fr.mul(Z2[p], a2)); + rz = Fr.add(rz, Fr.mul(Z3[p], a3)); + } + + return [r, rz]; + } + } + + const ZKEY_PL_ADDITIONS_SECTION = 3; + const ZKEY_PL_A_MAP_SECTION = 4; + const ZKEY_PL_B_MAP_SECTION = 5; + const ZKEY_PL_C_MAP_SECTION = 6; + const ZKEY_PL_QM_SECTION = 7; + const ZKEY_PL_QL_SECTION = 8; + const ZKEY_PL_QR_SECTION = 9; + const ZKEY_PL_QO_SECTION = 10; + const ZKEY_PL_QC_SECTION = 11; + const ZKEY_PL_SIGMA_SECTION = 12; + const ZKEY_PL_LAGRANGE_SECTION = 13; + const ZKEY_PL_PTAU_SECTION = 14; + + /* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + class Polynomial { + constructor(coefficients, curve, logger) { + this.coef = coefficients; + this.curve = curve; + this.Fr = curve.Fr; + this.G1 = curve.G1; + this.logger = logger; + } + + static async fromEvaluations(buffer, curve, logger) { + let coefficients = await curve.Fr.ifft(buffer); + + return new Polynomial(coefficients, curve, logger); + } + + static fromCoefficientsArray(array, curve, logger) { + const Fr = curve.Fr; + let buff = array.length > 2 << 14 ? + new BigBuffer$1(array.length * Fr.n8) : new Uint8Array(array.length * Fr.n8); + for (let i = 0; i < array.length; i++) buff.set(array[i], i * Fr.n8); + + return new Polynomial(buff, curve, logger); + } + + static fromPolynomial(polynomial, curve, logger) { + let length = polynomial.length(); + let Fr = curve.Fr; + + let buff = length > 2 << 14 ? + new BigBuffer$1(length * Fr.n8) : new Uint8Array(length * Fr.n8); + buff.set(polynomial.coef.slice(), 0); + + return new Polynomial(buff, curve, logger); + } + + isEqual(polynomial) { + const degree = this.degree(); + if (degree !== polynomial.degree()) return false; + + for (let i = 0; i < degree + 1; i++) { + if (!this.Fr.eq(this.getCoef(i), polynomial.getCoef(i))) return false; + } + + return true; + } + + blindCoefficients(blindingFactors) { + blindingFactors = blindingFactors || []; + + const blindedCoefficients = (this.length() + blindingFactors.length) > 2 << 14 ? + new BigBuffer$1((this.length() + blindingFactors.length) * this.Fr.n8) : + new Uint8Array((this.length() + blindingFactors.length) * this.Fr.n8); + + blindedCoefficients.set(this.coef, 0); + for (let i = 0; i < blindingFactors.length; i++) { + blindedCoefficients.set( + this.Fr.add( + blindedCoefficients.slice((this.length() + i) * this.Fr.n8, (this.length() + i + 1) * this.Fr.n8), + blindingFactors[i] + ), + (this.length() + i) * this.Fr.n8 + ); + blindedCoefficients.set( + this.Fr.sub( + blindedCoefficients.slice(i * this.Fr.n8, (i + 1) * this.Fr.n8), + blindingFactors[i] + ), + i * this.Fr.n8 + ); + } + this.coef = blindedCoefficients; + } + + getCoef(index) { + const i_n8 = index * this.Fr.n8; + + if (i_n8 + this.Fr.n8 > this.coef.byteLength) return this.Fr.zero; + + return this.coef.slice(i_n8, i_n8 + this.Fr.n8); + } + + setCoef(index, value) { + if (index > (this.length() - 1)) { + throw new Error("Coef index is not available"); + } + + this.coef.set(value, index * this.Fr.n8); + } + + static async to4T(buffer, domainSize, blindingFactors, Fr) { + blindingFactors = blindingFactors || []; + let a = await Fr.ifft(buffer); + + const a4 = (domainSize * 4) > 2 << 14 ? + new BigBuffer$1(domainSize * 4 * Fr.n8) : new Uint8Array(domainSize * 4 * Fr.n8); + a4.set(a, 0); + + const A4 = await Fr.fft(a4); + + if (blindingFactors.length === 0) { + return [a, A4]; + } + + const a1 = domainSize + blindingFactors.length > 2 << 14 ? + new BigBuffer$1((domainSize + blindingFactors.length) * Fr.n8) : + new Uint8Array((domainSize + blindingFactors.length) * Fr.n8); + + a1.set(a, 0); + for (let i = 0; i < blindingFactors.length; i++) { + a1.set( + Fr.add( + a1.slice((domainSize + i) * Fr.n8, (domainSize + i + 1) * Fr.n8), + blindingFactors[i] + ), + (domainSize + i) * Fr.n8 + ); + a1.set( + Fr.sub( + a1.slice(i * Fr.n8, (i + 1) * Fr.n8), + blindingFactors[i] + ), + i * Fr.n8 + ); + } + + return [a1, A4]; + } + + length() { + let length = this.coef.byteLength / this.Fr.n8; + if (length !== Math.floor(this.coef.byteLength / this.Fr.n8)) { + throw new Error("Polynomial coefficients buffer has incorrect size"); + } + if (0 === length) { + if (this.logger) { + this.logger.warn("Polynomial has length zero"); + } + } + return length; + } + + degree() { + for (let i = this.length() - 1; i > 0; i--) { + const i_n8 = i * this.Fr.n8; + if (!this.Fr.eq(this.Fr.zero, this.coef.slice(i_n8, i_n8 + this.Fr.n8))) { + return i; + } + } + + return 0; + } + + evaluate(point) { + let res = this.Fr.zero; + + for (let i = this.degree() + 1; i > 0; i--) { + let i_n8 = i * this.Fr.n8; + const currentCoefficient = this.coef.slice(i_n8 - this.Fr.n8, i_n8); + res = this.Fr.add(currentCoefficient, this.Fr.mul(res, point)); + } + + return res; + } + + fastEvaluate(point) { + const Fr = this.Fr; + let nThreads = 3; + + let nCoefs = this.degree() + 1; + let coefsThread = parseInt(nCoefs / nThreads); + let residualCoefs = nCoefs - coefsThread * nThreads; + + let res = []; + let xN = []; + + xN[0] = Fr.one; + + for (let i = 0; i < nThreads; i++) { + res[i] = Fr.zero; + + let nCoefs = i === (nThreads - 1) ? coefsThread + residualCoefs : coefsThread; + for (let j = nCoefs; j > 0; j--) { + res[i] = Fr.add(this.getCoef((i * coefsThread) + j - 1), Fr.mul(res[i], point)); + + if (i === 0) xN[0] = Fr.mul(xN[0], point); + } + } + + for (let i = 1; i < nThreads; i++) { + res[0] = Fr.add(res[0], Fr.mul(xN[i - 1], res[i])); + xN[i] = Fr.mul(xN[i - 1], xN[0]); + } + + return res[0]; + } + + add(polynomial, blindingValue) { + let other = false; + + if (polynomial.length() > this.length()) { + other = true; + } + + const thisLength = this.length(); + const polyLength = polynomial.length(); + for (let i = 0; i < Math.max(thisLength, polyLength); i++) { + const i_n8 = i * this.Fr.n8; + + const a = i < thisLength ? this.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; + let b = i < polyLength ? polynomial.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; + + if (blindingValue !== undefined) { + b = this.Fr.mul(b, blindingValue); + } + if (other) { + polynomial.coef.set(this.Fr.add(a, b), i_n8); + } else { + this.coef.set(this.Fr.add(a, b), i_n8); + } + } + if (other) { + delete this.coef; + this.coef = polynomial.coef; + } + } + + sub(polynomial, blindingValue) { + let other = false; + + if (polynomial.length() > this.length()) { + other = true; + } + + const thisLength = this.length(); + const polyLength = polynomial.length(); + for (let i = 0; i < Math.max(thisLength, polyLength); i++) { + const i_n8 = i * this.Fr.n8; + + const a = i < thisLength ? this.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; + let b = i < polyLength ? polynomial.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; + + if (blindingValue !== undefined) { + b = this.Fr.mul(b, blindingValue); + } + if (other) { + polynomial.coef.set(this.Fr.sub(a, b), i_n8); + } else { + this.coef.set(this.Fr.sub(a, b), i_n8); + } + } + if (other) { + delete this.coef; + this.coef = polynomial.coef; + } + } + + mulScalar(value) { + for (let i = 0; i < this.length(); i++) { + const i_n8 = i * this.Fr.n8; + + this.coef.set(this.Fr.mul(this.coef.slice(i_n8, i_n8 + this.Fr.n8), value), i_n8); + } + } + + addScalar(value) { + const currentValue = 0 === this.length() ? this.Fr.zero : this.coef.slice(0, this.Fr.n8); + this.coef.set(this.Fr.add(currentValue, value), 0); + } + + subScalar(value) { + const currentValue = 0 === this.length() ? this.Fr.zero : this.coef.slice(0, this.Fr.n8); + this.coef.set(this.Fr.sub(currentValue, value), 0); + } + + // Multiply current polynomial by the polynomial (X - value) + byXSubValue(value) { + const Fr = this.Fr; + const resize = !Fr.eq(Fr.zero, this.getCoef(this.length() - 1)); + + const length = resize ? this.length() + 1 : this.length(); + const buff = length > 2 << 14 ? new BigBuffer$1(length * Fr.n8) : new Uint8Array(length * Fr.n8); + let pol = new Polynomial(buff, this.curve, this.logger); + + // Step 0: Set current coefficients to the new buffer shifted one position + pol.coef.set(this.coef.slice(0, (length - 1) * Fr.n8), 32); + + // Step 1: multiply each coefficient by (-value) + this.mulScalar(Fr.neg(value)); + + // Step 2: Add current polynomial to destination polynomial + pol.add(this); + + // Swap buffers + this.coef = pol.coef; + } + + // Multiply current polynomial by the polynomial (X^n + value) + byXNSubValue(n, value) { + const Fr = this.Fr; + const resize = !(this.length() - n - 1 >= this.degree()); + + const length = resize ? this.length() + n : this.length(); + const buff = length > 2 << 14 ? new BigBuffer$1(length * Fr.n8) : new Uint8Array(length * Fr.n8); + let pol = new Polynomial(buff, this.curve, this.logger); + + // Step 0: Set current coefficients to the new buffer shifted one position + pol.coef.set(this.coef.slice(0, (this.degree() + 1) * 32, ), n * 32); + + // Step 1: multiply each coefficient by (- value) + this.mulScalar(value); + + // Step 2: Add current polynomial to destination polynomial + pol.add(this); + + // Swap buffers + this.coef = pol.coef; + } + + // Euclidean division + divBy(polynomial) { + const Fr = this.Fr; + const degreeA = this.degree(); + const degreeB = polynomial.degree(); + + let polR = new Polynomial(this.coef, this.curve, this.logger); + + this.coef = this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); + + for (let i = degreeA - degreeB; i >= 0; i--) { + this.setCoef(i, Fr.div(polR.getCoef(i + degreeB), polynomial.getCoef(degreeB))); + for (let j = 0; j <= degreeB; j++) { + polR.setCoef(i + j, Fr.sub(polR.getCoef(i + j), Fr.mul(this.getCoef(i), polynomial.getCoef(j)))); + } + } + + return polR; + } + + // Division by a Polynomial of the form (x^m - beta) + divByMonic(m, beta) { + const Fr = this.Fr; + + let d = this.degree(); + + let buffer = this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); + let quotient = new Polynomial(buffer, this.curve, this.logger); + + let bArr = []; + + // Add the m leading coefficients of this to quotient + for (let i = 0; i < m; i++) { + quotient.setCoef((d - i) - m, this.getCoef(d - i)); + bArr[i] = this.getCoef(d - i); + } + + let nThreads = m; + for (let k = 0; k < nThreads; k++) { + for (let i = d - 2 * m - k; i >= 0; i = i - nThreads) { + if (i < 0) break; + let idx = k; + bArr[idx] = Fr.add(this.getCoef(i + m), Fr.mul(bArr[idx], beta)); + + quotient.setCoef(i, bArr[idx]); + } + } + + this.coef = quotient.coef; + } + + divByVanishing(n, beta) { + if (this.degree() < n) { + throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); + } + + const Fr = this.Fr; + + let polR = new Polynomial(this.coef, this.curve, this.logger); + + this.coef = this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); + + for (let i = this.length() - 1; i >= n; i--) { + let leadingCoef = polR.getCoef(i); + if (Fr.eq(Fr.zero, leadingCoef)) continue; + + polR.setCoef(i, Fr.zero); + polR.setCoef(i - n, Fr.add(polR.getCoef(i - n), Fr.mul(beta, leadingCoef))); + this.setCoef(i - n, Fr.add(this.getCoef(i - n), leadingCoef)); + } + + return polR; + } + + divByVanishing2(m, beta) { + if (this.degree() < m) { + throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); + } + + const Fr = this.Fr; + + let polR = new Polynomial(this.coef, this.curve, this.logger); + + this.coef = this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); + + let nThreads = 3; + let nTotal = this.length() - m; + let nElementsChunk = Math.floor(nTotal / nThreads); + let nElementsLast = nTotal - (nThreads - 1) * nElementsChunk; + + console.log(nTotal); + console.log(nElementsChunk + " " + nElementsLast); + for (let k = 0; k < nThreads; k++) { + console.log("> Thread " + k); + for (let i = (k === 0 ? nElementsLast : nElementsChunk); i > 0; i--) { + let idxDst = i - 1; + if (k !== 0) idxDst += (k - 1) * nElementsChunk + nElementsLast; + let idxSrc = idxDst + m; + + let leadingCoef = polR.getCoef(idxSrc); + if (Fr.eq(Fr.zero, leadingCoef)) continue; + + polR.setCoef(idxSrc, Fr.zero); + polR.setCoef(idxDst, Fr.add(polR.getCoef(idxDst), Fr.mul(beta, leadingCoef))); + this.setCoef(idxDst, Fr.add(this.getCoef(idxDst), leadingCoef)); + console.log(idxDst + " <-- " + idxSrc); + } + } + + this.print(); + return polR; + } + + fastDivByVanishing(data) { + const Fr = this.Fr; + + for (let i = 0; i < data.length; i++) { + + let m = data[i][0]; + let beta = data[i][1]; + + if (this.degree() < m) { + throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); + } + + let nThreads = 5; + let nElements = this.length() - m; + let nElementsBucket = Math.floor(nElements / nThreads / m); + let nElementsChunk = nElementsBucket * m; + let nElementsLast = nElements - nThreads * nElementsChunk; + + //In C++ implementation this buffer will be allocated only once outside the loop + let polTmp = new Polynomial(this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8), this.curve, this.logger); + + let ptr = this.coef; + this.coef = polTmp.coef; + polTmp.coef = ptr; + + // STEP 1: Setejar els m valors del següent bucket al chunk actual, PARALEL·LITZAR + for (let k = 0; k < nThreads; k++) { + let idx0 = (k + 1) * nElementsChunk + nElementsLast; + for (let i = 0; i < m; i++) { + this.setCoef(idx0 + i - m, polTmp.getCoef(idx0 + i)); + } + + for (let i = 0; i < nElementsChunk - m; i++) { + let offset = idx0 - i - 1; + let val = Fr.add(polTmp.getCoef(offset), Fr.mul(beta, this.getCoef(offset))); + this.setCoef(offset - m, val); + } + } + + //STEP 2: Setejar els valors del elements last NO PARAL·LELITZAR + let idx0 = nElementsLast; + let pending = nElementsLast; + for (let i = 0; i < m && pending; i++) { + this.setCoef(idx0 - i - 1, polTmp.getCoef(idx0 + m - i - 1)); + pending--; + } + + for (let i = 0; i < pending; i++) { + let offset = idx0 - i - 1; + let val = Fr.add(polTmp.getCoef(offset), Fr.mul(beta, this.getCoef(offset))); + this.setCoef(offset - m, val); + } + + //Step 3: calcular acumulats NO PARALEL·LITZAR + + let acc = []; + let betaPow = Fr.one; + for (let i = 0; i < nElementsBucket; i++) { + betaPow = Fr.mul(betaPow, beta); + } + let currentBeta = Fr.one; + + for (let k = nThreads; k > 0; k--) { + let idThread = k - 1; + let idx0 = idThread * nElementsChunk + nElementsLast; + acc[idThread] = []; + + for (let i = 0; i < m; i++) { + acc[idThread][i] = this.getCoef(idx0 + i); + + if (k !== nThreads) { + acc[idThread][i] = Fr.add(acc[idThread][i], Fr.mul(betaPow, acc[idThread + 1][i])); + } + } + currentBeta = Fr.mul(currentBeta, betaPow); + } + + //STEP 4 recalcular PARALEL·LITZAR + for (let k = 0; k < nThreads; k++) { + + let idx0 = k * nElementsChunk + nElementsLast; + let currentBeta = beta; //Quan hopassem a C++ i ho paralelitzem aquesta variable ha de ser privada + let currentM = m - 1; + + let limit = k === 0 ? nElementsLast : nElementsChunk; + for (let i = 0; i < limit; i++) { + let offset = idx0 - i - 1; + let val = Fr.add(this.getCoef(offset), Fr.mul(currentBeta, acc[k][currentM])); + + this.setCoef(offset, val); + + // To avoid modular operations in each loop... + if (currentM === 0) { + currentM = m - 1; + currentBeta = Fr.mul(currentBeta, beta); + } else { + currentM--; + } + } + } + } + } + + + // Divide polynomial by X - value + divByXSubValue(value) { + const coefs = this.length() > 2 << 14 ? + new BigBuffer$1(this.length() * this.Fr.n8) : new Uint8Array(this.length() * this.Fr.n8); + + coefs.set(this.Fr.zero, (this.length() - 1) * this.Fr.n8); + coefs.set(this.coef.slice((this.length() - 1) * this.Fr.n8, this.length() * this.Fr.n8), (this.length() - 2) * this.Fr.n8); + for (let i = this.length() - 3; i >= 0; i--) { + let i_n8 = i * this.Fr.n8; + coefs.set( + this.Fr.add( + this.coef.slice(i_n8 + this.Fr.n8, i_n8 + 2 * this.Fr.n8), + this.Fr.mul(value, coefs.slice(i_n8 + this.Fr.n8, i_n8 + 2 * this.Fr.n8)) + ), + i * this.Fr.n8 + ); + } + if (!this.Fr.eq( + this.coef.slice(0, this.Fr.n8), + this.Fr.mul(this.Fr.neg(value), coefs.slice(0, this.Fr.n8)) + )) { + throw new Error("Polynomial does not divide"); + } + + this.coef = coefs; + } + + divZh(domainSize, extensions = 4) { + for (let i = 0; i < domainSize; i++) { + const i_n8 = i * this.Fr.n8; + this.coef.set(this.Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)), i_n8); + } + + const upperBound = this.coef.byteLength / this.Fr.n8; + for (let i = domainSize; i < upperBound; i++) { + const i_n8 = i * this.Fr.n8; + + const a = this.Fr.sub( + this.coef.slice((i - domainSize) * this.Fr.n8, (i - domainSize) * this.Fr.n8 + this.Fr.n8), + this.coef.slice(i_n8, i_n8 + this.Fr.n8) + ); + this.coef.set(a, i_n8); + if (i > (domainSize * (extensions-1) - extensions)) { + if (!this.Fr.isZero(a)) { + throw new Error("Polynomial is not divisible"); + } + } + } + + return this; + } + + divByZerofier(n, beta) { + let Fr = this.Fr; + const invBeta = Fr.inv(beta); + const invBetaNeg = Fr.neg(invBeta); + + let isOne = Fr.eq(Fr.one, invBetaNeg); + let isNegOne = Fr.eq(Fr.negone, invBetaNeg); + + if (!isOne) { + for (let i = 0; i < n; i++) { + const i_n8 = i * this.Fr.n8; + let element; + + // If invBetaNeg === -1 we'll save a multiplication changing it by a neg function call + if (isNegOne) { + element = Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)); + } else { + element = Fr.mul(invBetaNeg, this.coef.slice(i_n8, i_n8 + this.Fr.n8)); + } + + this.coef.set(element, i_n8); + } + } + + isOne = Fr.eq(Fr.one, invBeta); + isNegOne = Fr.eq(Fr.negone, invBeta); + + for (let i = n; i < this.length(); i++) { + const i_n8 = i * this.Fr.n8; + const i_prev_n8 = (i - n) * this.Fr.n8; + + let element = this.Fr.sub( + this.coef.slice(i_prev_n8, i_prev_n8 + this.Fr.n8), + this.coef.slice(i_n8, i_n8 + this.Fr.n8) + ); + + // If invBeta === 1 we'll not do anything + if(!isOne) { + // If invBeta === -1 we'll save a multiplication changing it by a neg function call + if(isNegOne) { + element = Fr.neg(element); + } else { + element = Fr.mul(invBeta, element); + } + } + + this.coef.set(element, i_n8); + + // Check if polynomial is divisible by checking if n high coefficients are zero + if (i > this.length() - n - 1) { + if (!this.Fr.isZero(element)) { + throw new Error("Polynomial is not divisible"); + } + } + } + + return this; + } + + // function divideByVanishing(f, n, p) { + // // polynomial division f(X) / (X^n - 1) with remainder + // // very cheap, 0 multiplications + // // strategy: + // // start with q(X) = 0, r(X) = f(X) + // // then start changing q, r while preserving the identity: + // // f(X) = q(X) * (X^n - 1) + r(X) + // // in every step, move highest-degree term of r into the product + // // => r eventually has degree < n and we're done + // let q = Array(f.length).fill(0n); + // let r = [...f]; + // for (let i = f.length - 1; i >= n; i--) { + // let leadingCoeff = r[i]; + // if (leadingCoeff === 0n) continue; + // r[i] = 0n; + // r[i - n] = mod(r[i - n] + leadingCoeff, p); + // q[i - n] = mod(q[i - n] + leadingCoeff, p); + // } + // return [q, r]; + // } + + byX() { + const coefs = (this.length() + 1) > 2 << 14 ? + new BigBuffer$1(this.coef.byteLength + this.Fr.n8) : new Uint8Array(this.coef.byteLength + this.Fr.n8); + coefs.set(this.Fr.zero, 0); + coefs.set(this.coef, this.Fr.n8); + + this.coef = coefs; + } + + // Compute a new polynomial f(x^n) from f(x) + // f(x) = a_0 + a_1·x + a_2·x^2 + ... + a_j·x^j + // f(x^n) = a_0 + a_1·x^n + a_2·x^2n + ... + a_j·x^jn + static + async expX(polynomial, n, truncate = false) { + const Fr = polynomial.Fr; + + if (n < 1) { + // n == 0 not allowed because it has no sense, but if it's necessary we have to return + // a zero degree polynomial with a constant coefficient equals to the sum of all the original coefficients + throw new Error("Compute a new polynomial to a zero or negative number is not allowed"); + } else if (1 === n) { + return await Polynomial.fromEvaluations(polynomial.coef, curve, polynomial.logger); + } + + // length is the length of non-constant coefficients + // if truncate === true, the highest zero coefficients (if exist) will be removed + const length = truncate ? polynomial.degree() : (polynomial.length() - 1); + const bufferDst = (length * n + 1) > 2 << 14 ? + new BigBuffer$1((length * n + 1) * Fr.n8) : new Uint8Array((length * n + 1) * Fr.n8); + + // Copy constant coefficient as is because is not related to x + bufferDst.set(polynomial.getCoef(0), 0); + + for (let i = 1; i <= length; i++) { + const i_sFr = i * Fr.n8; + + const coef = polynomial.getCoef(i); + bufferDst.set(coef, i_sFr * n); + } + + return new Polynomial(bufferDst, polynomial.curve, polynomial.logger); + } + + split(numPols, degPols, blindingFactors) { + if (numPols < 1) { + throw new Error(`Polynomials can't be split in ${numPols} parts`); + } else if (1 === numPols) { + return [this]; + } + + //blinding factors can be void or must have a length of numPols - 1 + if (0 !== blindingFactors.length && blindingFactors.length < numPols - 1) { + throw new Error(`Blinding factors length must be ${numPols - 1}`); + } + + const chunkByteLength = (degPols + 1) * this.Fr.n8; + let res = []; + + // Check polynomial can be split in numChunks parts of chunkSize bytes... + const numRealPols = Math.ceil((this.degree() + 1) * this.Fr.n8 / chunkByteLength); + if (numRealPols < numPols) { + //throw new Error(`Polynomial is short to be split in ${numPols} parts of ${degPols} coefficients each.`); + for (let i = numRealPols; i < numPols; i++) { + res[i] = new Polynomial(new Uint8Array(this.Fr.n8), this.curve, this.logger); + } + } + + numPols = Math.min(numPols, numRealPols); + for (let i = 0; i < numPols; i++) { + const isLast = (numPols - 1) === i; + const byteLength = isLast ? this.coef.byteLength - ((numPols - 1) * chunkByteLength) : chunkByteLength + this.Fr.n8; + + let buff = (byteLength / this.Fr.n8) > 2 << 14 ? new BigBuffer$1(byteLength) : new Uint8Array(byteLength); + res[i] = new Polynomial(buff, this.curve, this.logger); + + const fr = i * chunkByteLength; + const to = isLast ? this.coef.byteLength : (i + 1) * chunkByteLength; + res[i].coef.set(this.coef.slice(fr, to), 0); + + // Add a blinding factor as higher degree + if (!isLast) { + res[i].coef.set(blindingFactors[i], chunkByteLength); + } + + // Sub blinding factor to the lowest degree + if (0 !== i) { + const lowestDegree = this.Fr.sub(res[i].coef.slice(0, this.Fr.n8), blindingFactors[i - 1]); + res[i].coef.set(lowestDegree, 0); + } + + if (isLast) { + res[i].truncate(); + } + } + + return res; + + // // compute t_low(X) + // let polTLow = new BigBuffer((chunkSize + 1) * n8r); + // polTLow.set(t.slice(0, zkey.domainSize * n8r), 0); + // // Add blinding scalar b_10 as a new coefficient n + // polTLow.set(ch.b[10], zkey.domainSize * n8r); + // + // // compute t_mid(X) + // let polTMid = new BigBuffer((zkey.domainSize + 1) * n8r); + // polTMid.set(t.slice(zkey.domainSize * n8r, zkey.domainSize * 2 * n8r), 0); + // // Subtract blinding scalar b_10 to the lowest coefficient of t_mid + // const lowestMid = Fr.sub(polTMid.slice(0, n8r), ch.b[10]); + // polTMid.set(lowestMid, 0); + // // Add blinding scalar b_11 as a new coefficient n + // polTMid.set(ch.b[11], zkey.domainSize * n8r); + // + // // compute t_high(X) + // let polTHigh = new BigBuffer((zkey.domainSize + 6) * n8r); + // polTHigh.set(t.slice(zkey.domainSize * 2 * n8r, (zkey.domainSize * 3 + 6) * n8r), 0); + // //Subtract blinding scalar b_11 to the lowest coefficient of t_high + // const lowestHigh = Fr.sub(polTHigh.slice(0, n8r), ch.b[11]); + // polTHigh.set(lowestHigh, 0); + // + // proof.T1 = await expTau(polTLow, "multiexp T1"); + // proof.T2 = await expTau(polTMid, "multiexp T2"); + // proof.T3 = await expTau(polTHigh, "multiexp T3"); + } + + // split2(degPols, blindingFactors) { + // let currentDegree = this.degree(); + // const numFilledPols = Math.ceil((currentDegree + 1) / (degPols + 1)); + // + // //blinding factors can be void or must have a length of numPols - 1 + // if (0 !== blindingFactors.length && blindingFactors.length < numFilledPols - 1) { + // throw new Error(`Blinding factors length must be ${numFilledPols - 1}`); + // } + // + // const chunkByteLength = (degPols + 1) * this.Fr.n8; + // + // // Check polynomial can be split in numChunks parts of chunkSize bytes... + // if (this.coef.byteLength / chunkByteLength <= numFilledPols - 1) { + // throw new Error(`Polynomial is short to be split in ${numFilledPols} parts of ${degPols} coefficients each.`); + // } + // + // let res = []; + // for (let i = 0; i < numFilledPols; i++) { + // const isLast = (numFilledPols - 1) === i; + // const byteLength = isLast ? (currentDegree + 1) * this.Fr.n8 - ((numFilledPols - 1) * chunkByteLength) : chunkByteLength + this.Fr.n8; + // + // res[i] = new Polynomial(new BigBuffer(byteLength), this.Fr, this.logger); + // const fr = i * chunkByteLength; + // const to = isLast ? (currentDegree + 1) * this.Fr.n8 : (i + 1) * chunkByteLength; + // res[i].coef.set(this.coef.slice(fr, to), 0); + // + // // Add a blinding factor as higher degree + // if (!isLast) { + // res[i].coef.set(blindingFactors[i], chunkByteLength); + // } + // + // // Sub blinding factor to the lowest degree + // if (0 !== i) { + // const lowestDegree = this.Fr.sub(res[i].coef.slice(0, this.Fr.n8), blindingFactors[i - 1]); + // res[i].coef.set(lowestDegree, 0); + // } + // } + // + // return res; + // } + + // merge(pols, overlap = true) { + // let length = 0; + // for (let i = 0; i < pols.length; i++) { + // length += pols[i].length(); + // } + // + // if (overlap) { + // length -= pols.length - 1; + // } + // + // let res = new Polynomial(new BigBuffer(length * this.Fr.n8)); + // for (let i = 0; i < pols.length; i++) { + // const byteLength = pols[i].coef.byteLength; + // if (0 === i) { + // res.coef.set(pols[i].coef, 0); + // } else { + // + // } + // } + // + // return res; + // } + + truncate() { + const deg = this.degree(); + if (deg + 1 < this.coef.byteLength / this.Fr.n8) { + const newCoefs = (deg + 1) > 2 << 14 ? + new BigBuffer$1((deg + 1) * this.Fr.n8) : new Uint8Array((deg + 1) * this.Fr.n8); + + newCoefs.set(this.coef.slice(0, (deg + 1) * this.Fr.n8), 0); + this.coef = newCoefs; + } + } + + static lagrangePolynomialInterpolation(xArr, yArr, curve) { + const Fr = curve.Fr; + let polynomial = computeLagrangePolynomial(0); + for (let i = 1; i < xArr.length; i++) { + polynomial.add(computeLagrangePolynomial(i)); + } + + return polynomial; + + function computeLagrangePolynomial(i) { + let polynomial; + + for (let j = 0; j < xArr.length; j++) { + if (j === i) continue; + + if (polynomial === undefined) { + let buff = (xArr.length) > 2 << 14 ? + new BigBuffer$1((xArr.length) * Fr.n8) : new Uint8Array((xArr.length) * Fr.n8); + polynomial = new Polynomial(buff, curve); + polynomial.setCoef(0, Fr.neg(xArr[j])); + polynomial.setCoef(1, Fr.one); + } else { + polynomial.byXSubValue(xArr[j]); + } + } + + let denominator = polynomial.evaluate(xArr[i]); + denominator = Fr.inv(denominator); + const mulFactor = Fr.mul(yArr[i], denominator); + + polynomial.mulScalar(mulFactor); + + return polynomial; + } + } + + static zerofierPolynomial(xArr, curve) { + const Fr = curve.Fr; + let buff = (xArr.length + 1) > 2 << 14 ? + new BigBuffer$1((xArr.length + 1) * Fr.n8) : new Uint8Array((xArr.length + 1) * Fr.n8); + let polynomial = new Polynomial(buff, curve); + + // Build a zerofier polynomial with the following form: + // zerofier(X) = (X-xArr[0])(X-xArr[1])...(X-xArr[n]) + polynomial.setCoef(0, Fr.neg(xArr[0])); + polynomial.setCoef(1, Fr.one); + + for (let i = 1; i < xArr.length; i++) { + polynomial.byXSubValue(xArr[i]); + } + + return polynomial; + } + + print() { + const Fr = this.Fr; + let res = ""; + for (let i = this.degree(); i >= 0; i--) { + const coef = this.getCoef(i); + if (!Fr.eq(Fr.zero, coef)) { + if (Fr.isNegative(coef)) { + res += " - "; + } else if (i !== this.degree()) { + res += " + "; + } + res += Fr.toString(coef); + if (i > 0) { + res += i > 1 ? "x^" + i : "x"; + } + } + } + console.log(res); + } + + async multiExponentiation(PTau, name) { + const n = this.coef.byteLength / this.Fr.n8; + const PTauN = PTau.slice(0, n * this.G1.F.n8 * 2); + const bm = await this.Fr.batchFromMontgomery(this.coef); + let res = await this.G1.multiExpAffine(PTauN, bm, this.logger, name); + res = this.G1.toAffine(res); + return res; + } + } + + /* + Copyright 2022 iden3 association. + + This file is part of snarkjs. + + snarkjs is a free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your option) + any later version. + + snarkjs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + snarkjs. If not, see . + */ + + class Evaluations { + constructor(evaluations, curve, logger) { + this.eval = evaluations; + this.curve = curve; + this.Fr = curve.Fr; + this.logger = logger; + } + + static async fromPolynomial(polynomial, extension, curve, logger) { + const coefficientsN = new BigBuffer$1(polynomial.length() * extension * curve.Fr.n8); + coefficientsN.set(polynomial.coef, 0); + + const evaluations = await curve.Fr.fft(coefficientsN); + + return new Evaluations(evaluations, curve, logger); + } + + getEvaluation(index) { + const i_n8 = index * this.Fr.n8; + + if (i_n8 + this.Fr.n8 > this.eval.byteLength) { + throw new Error("Evaluations.getEvaluation() out of bounds"); + } + + return this.eval.slice(i_n8, i_n8 + this.Fr.n8); + } + + length() { + let length = this.eval.byteLength / this.Fr.n8; + if (length !== Math.floor(this.eval.byteLength / this.Fr.n8)) { + throw new Error("Polynomial evaluations buffer has incorrect size"); + } + if (0 === length) { + this.logger.warn("Polynomial has length zero"); + } + return length; + } + } + /* Copyright 2021 0kims association. @@ -27080,22 +44987,25 @@ var snarkjs = (function (exports) { You should have received a copy of the GNU General Public License along with snarkjs. If not, see . */ - const {stringifyBigInts: stringifyBigInts$1} = utils; - const { keccak256: keccak256$2 } = jsSha3; - + const {stringifyBigInts: stringifyBigInts$1} = utils$6; + async function plonk16Prove(zkeyFileName, witnessFileName, logger) { const {fd: fdWtns, sections: sectionsWtns} = await readBinFile(witnessFileName, "wtns", 2); + // Read witness file + if (logger) logger.debug("> Reading witness file"); const wtns = await readHeader(fdWtns, sectionsWtns); - const {fd: fdZKey, sections: sectionsZKey} = await readBinFile(zkeyFileName, "zkey", 2); + // Read zkey file + if (logger) logger.debug("> Reading zkey file"); + const {fd: fdZKey, sections: zkeySections} = await readBinFile(zkeyFileName, "zkey", 2); - const zkey = await readHeader$1(fdZKey, sectionsZKey); + const zkey = await readHeader$1(fdZKey, zkeySections); if (zkey.protocol != "plonk") { throw new Error("zkey file is not plonk"); } - if (!Scalar.eq(zkey.r, wtns.q)) { + if (!Scalar$1.eq(zkey.r, wtns.q)) { throw new Error("Curve of the witness does not match the curve of the proving key"); } @@ -27104,140 +45014,138 @@ var snarkjs = (function (exports) { } const curve = zkey.curve; - const Fr = curve.Fr; - const G1 = curve.G1; - const n8r = curve.Fr.n8; - if (logger) logger.debug("Reading Wtns"); + const Fr = curve.Fr; + const n8r = curve.Fr.n8; + const sDomain = zkey.domainSize * n8r; + + if (logger) { + logger.debug("----------------------------"); + logger.debug(" PLONK PROVE SETTINGS"); + logger.debug(` Curve: ${curve.name}`); + logger.debug(` Circuit power: ${zkey.power}`); + logger.debug(` Domain size: ${zkey.domainSize}`); + logger.debug(` Vars: ${zkey.nVars}`); + logger.debug(` Public vars: ${zkey.nPublic}`); + logger.debug(` Constraints: ${zkey.nConstraints}`); + logger.debug(` Additions: ${zkey.nAdditions}`); + logger.debug("----------------------------"); + } + + //Read witness data + if (logger) logger.debug("> Reading witness file data"); const buffWitness = await readSection(fdWtns, sectionsWtns, 2); + // First element in plonk is not used and can be any value. (But always the same). // We set it to zero to go faster in the exponentiations. buffWitness.set(Fr.zero, 0); - const buffInternalWitness = new BigBuffer(n8r*zkey.nAdditions); + const buffInternalWitness = new BigBuffer$1(n8r*zkey.nAdditions); + let buffers = {}; + let polynomials = {}; + let evaluations = {}; + + let challenges = {}; + let proof = new Proof(curve, logger); + const transcript = new Keccak256Transcript(curve); + + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_ADDITIONS_SECTION}. Additions`); await calculateAdditions(); - let A,B,C,Z; - let A4, B4, C4, Z4; - let pol_a,pol_b,pol_c, pol_z, pol_t, pol_r; - let proof = {}; + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_SIGMA_SECTION}. Sigma1, Sigma2 & Sigma 3`); + if (logger) logger.debug("··· Reading Sigma polynomials "); + polynomials.Sigma1 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.Sigma2 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.Sigma3 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); - const sigmaBuff = new BigBuffer(zkey.domainSize*n8r*4*3); - let o = sectionsZKey[12][0].p + zkey.domainSize*n8r; - await fdZKey.readToBuffer(sigmaBuff, 0 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*4 , zkey.domainSize*n8r*4, o); - o += zkey.domainSize*n8r*5; - await fdZKey.readToBuffer(sigmaBuff, zkey.domainSize*n8r*8 , zkey.domainSize*n8r*4, o); + await fdZKey.readToBuffer(polynomials.Sigma1.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.Sigma2.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 5 * sDomain); + await fdZKey.readToBuffer(polynomials.Sigma3.coef, 0, sDomain, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 10 * sDomain); - const pol_s1 = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s1, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p); + if (logger) logger.debug("··· Reading Sigma evaluations"); + evaluations.Sigma1 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.Sigma2 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.Sigma3 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); - const pol_s2 = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s2, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 5*zkey.domainSize*n8r); + await fdZKey.readToBuffer(evaluations.Sigma1.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.Sigma2.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 6 * sDomain); + await fdZKey.readToBuffer(evaluations.Sigma3.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_SIGMA_SECTION][0].p + 11 * sDomain); - const PTau = await readSection(fdZKey, sectionsZKey, 14); - - - const ch = {}; - - await round1(); - await round2(); - await round3(); - await round4(); - await round5(); - - - /////////////////////// - // Final adjustments // - /////////////////////// - - proof.protocol = "plonk"; - proof.curve = curve.name; - - await fdZKey.close(); - await fdWtns.close(); + if (logger) logger.debug(`> Reading Section ${ZKEY_PL_PTAU_SECTION}. Powers of Tau`); + const PTau = await readSection(fdZKey, zkeySections, ZKEY_PL_PTAU_SECTION); let publicSignals = []; for (let i=1; i<= zkey.nPublic; i++) { const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8); - publicSignals.push(Scalar.fromRprLE(pub)); + publicSignals.push(Scalar$1.fromRprLE(pub)); } - proof.A = G1.toObject(proof.A); - proof.B = G1.toObject(proof.B); - proof.C = G1.toObject(proof.C); - proof.Z = G1.toObject(proof.Z); + if (logger) logger.debug(""); + if (logger) logger.debug("> ROUND 1"); + await round1(); - proof.T1 = G1.toObject(proof.T1); - proof.T2 = G1.toObject(proof.T2); - proof.T3 = G1.toObject(proof.T3); + if (logger) logger.debug("> ROUND 2"); + await round2(); - proof.eval_a = Fr.toObject(proof.eval_a); - proof.eval_b = Fr.toObject(proof.eval_b); - proof.eval_c = Fr.toObject(proof.eval_c); - proof.eval_s1 = Fr.toObject(proof.eval_s1); - proof.eval_s2 = Fr.toObject(proof.eval_s2); - proof.eval_zw = Fr.toObject(proof.eval_zw); - proof.eval_t = Fr.toObject(proof.eval_t); - proof.eval_r = Fr.toObject(proof.eval_r); + if (logger) logger.debug("> ROUND 3"); + await round3(); - proof.Wxi = G1.toObject(proof.Wxi); - proof.Wxiw = G1.toObject(proof.Wxiw); + if (logger) logger.debug("> ROUND 4"); + await round4(); - delete proof.eval_t; + if (logger) logger.debug("> ROUND 5"); + await round5(); - proof = stringifyBigInts$1(proof); - publicSignals = stringifyBigInts$1(publicSignals); + /////////////////////// + // Final adjustments // + /////////////////////// - return {proof, publicSignals}; + await fdZKey.close(); + await fdWtns.close(); + + // Prepare proof + let _proof = proof.toObjectProof(false); + _proof.protocol = "plonk"; + _proof.curve = curve.name; + + if (logger) logger.debug("PLONK PROVER FINISHED"); + + return { + proof: stringifyBigInts$1(_proof), + publicSignals: stringifyBigInts$1(publicSignals) + }; async function calculateAdditions() { - const additionsBuff = await readSection(fdZKey, sectionsZKey, 3); + if (logger) logger.debug("··· Computing additions"); + const additionsBuff = await readSection(fdZKey, zkeySections, ZKEY_PL_ADDITIONS_SECTION); - const sSum = 8+curve.Fr.n8*2; + // sizes: wireId_x = 4 bytes (32 bits), factor_x = field size bits + // Addition form: wireId_a wireId_b factor_a factor_b (size is 4 + 4 + sFr + sFr) + const sSum = 8 + n8r * 2; - for (let i=0; i Computing A, B, C wire polynomials"); + await computeWirePolynomials(); - - proof.A = await expTau(pol_a, "multiexp A"); - proof.B = await expTau(pol_b, "multiexp B"); - proof.C = await expTau(pol_c, "multiexp C"); + // STEP 1.3 - Compute [a]_1, [b]_1, [c]_1 + if (logger) logger.debug("> Computing A, B, C MSM"); + let commitA = await polynomials.A.multiExponentiation(PTau, "A"); + let commitB = await polynomials.B.multiExponentiation(PTau, "B"); + let commitC = await polynomials.C.multiExponentiation(PTau, "C"); + + // First output of the prover is ([A]_1, [B]_1, [C]_1) + proof.addPolynomial("A", commitA); + proof.addPolynomial("B", commitB); + proof.addPolynomial("C", commitC); + + return 0; + } + + async function computeWirePolynomials() { + if (logger) logger.debug("··· Reading data from zkey file"); + + // Build A, B and C evaluations buffer from zkey and witness files + buffers.A = new BigBuffer$1(sDomain); + buffers.B = new BigBuffer$1(sDomain); + buffers.C = new BigBuffer$1(sDomain); + + // Read zkey file to the buffers + const aMapBuff = await readSection(fdZKey, zkeySections, ZKEY_PL_A_MAP_SECTION); + const bMapBuff = await readSection(fdZKey, zkeySections, ZKEY_PL_B_MAP_SECTION); + const cMapBuff = await readSection(fdZKey, zkeySections, ZKEY_PL_C_MAP_SECTION); + + // Compute all witness from signal ids and set them to A,B & C buffers + for (let i = 0; i < zkey.nConstraints; i++) { + const i_sFr = i * n8r; + const offset = i * 4; + + // Compute A value from a signal id + const signalIdA = readUInt32(aMapBuff, offset); + buffers.A.set(getWitness(signalIdA), i_sFr); + + // Compute B value from a signal id + const signalIdB = readUInt32(bMapBuff, offset); + buffers.B.set(getWitness(signalIdB), i_sFr); + + // Compute C value from a signal id + const signalIdC = readUInt32(cMapBuff, offset); + buffers.C.set(getWitness(signalIdC), i_sFr); + } + + buffers.A = await Fr.batchToMontgomery(buffers.A); + buffers.B = await Fr.batchToMontgomery(buffers.B); + buffers.C = await Fr.batchToMontgomery(buffers.C); + + // Compute the coefficients of the wire polynomials a(X), b(X) and c(X) from A,B & C buffers + if (logger) logger.debug("··· Computing A ifft"); + polynomials.A = await Polynomial.fromEvaluations(buffers.A, curve, logger); + if (logger) logger.debug("··· Computing B ifft"); + polynomials.B = await Polynomial.fromEvaluations(buffers.B, curve, logger); + if (logger) logger.debug("··· Computing C ifft"); + polynomials.C = await Polynomial.fromEvaluations(buffers.C, curve, logger); + + // Compute extended evaluations of a(X), b(X) and c(X) polynomials + if (logger) logger.debug("··· Computing A fft"); + evaluations.A = await Evaluations.fromPolynomial(polynomials.A, 4, curve, logger); + if (logger) logger.debug("··· Computing B fft"); + evaluations.B = await Evaluations.fromPolynomial(polynomials.B, 4, curve, logger); + if (logger) logger.debug("··· Computing C fft"); + evaluations.C = await Evaluations.fromPolynomial(polynomials.C, 4, curve, logger); + + // Blind a(X), b(X) and c(X) polynomials coefficients with blinding scalars b + polynomials.A.blindCoefficients([challenges.b[2], challenges.b[1]]); + polynomials.B.blindCoefficients([challenges.b[4], challenges.b[3]]); + polynomials.C.blindCoefficients([challenges.b[6], challenges.b[5]]); + + // Check degrees + if (polynomials.A.degree() >= zkey.domainSize + 2) { + throw new Error("A Polynomial is not well calculated"); + } + if (polynomials.B.degree() >= zkey.domainSize + 2) { + throw new Error("B Polynomial is not well calculated"); + } + if (polynomials.C.degree() >= zkey.domainSize + 2) { + throw new Error("C Polynomial is not well calculated"); + } } async function round2() { + // STEP 2.1 - Compute permutation challenge beta and gamma ∈ F + // Compute permutation challenge beta + if (logger) logger.debug("> Computing challenges beta and gamma"); + transcript.reset(); - const transcript1 = new Uint8Array(zkey.nPublic*n8r + G1.F.n8*2*3); - for (let i=0; i Computing Z polynomial"); + await computeZ(); + + // STEP 2.3 - Compute permutation [z]_1 + if (logger) logger.debug("> Computing Z MSM"); + let commitZ = await polynomials.Z.multiExponentiation(PTau, "Z"); + + // Second output of the prover is ([Z]_1) + proof.addPolynomial("Z", commitZ); + } + + async function computeZ() { + if (logger) logger.debug("··· Computing Z evaluations"); + + let numArr = new BigBuffer$1(sDomain); + let denArr = new BigBuffer$1(sDomain); + + // Set the first values to 1 numArr.set(Fr.one, 0); denArr.set(Fr.one, 0); + // Set initial omega let w = Fr.one; - for (let i=0; i= zkey.domainSize + 3) { + throw new Error("Z Polynomial is not well calculated"); + } + + delete buffers.Z; } async function round3() { + if (logger) logger.debug("> Computing challenge alpha"); - /* - async function checkDegree(P) { - const p = await curve.Fr.ifft(P); - let deg = (P.byteLength/n8r)-1; - while ((deg>0)&&(Fr.isZero(p.slice(deg*n8r, deg*n8r+n8r)))) deg--; - return deg; + // STEP 3.1 - Compute evaluation challenge alpha ∈ F + transcript.reset(); + transcript.addScalar(challenges.beta); + transcript.addScalar(challenges.gamma); + transcript.addPolCommitment(proof.getPolynomial("Z")); + + challenges.alpha = transcript.getChallenge(); + challenges.alpha2 = Fr.square(challenges.alpha); + if (logger) logger.debug("··· challenges.alpha: " + Fr.toString(challenges.alpha, 16)); + + // Compute quotient polynomial T(X) + if (logger) logger.debug("> Computing T polynomial"); + await computeT(); + + // Compute [T1]_1, [T2]_1, [T3]_1 + if (logger) logger.debug("> Computing T MSM"); + let commitT1 = await polynomials.T1.multiExponentiation(PTau, "T1"); + let commitT2 = await polynomials.T2.multiExponentiation(PTau, "T2"); + let commitT3 = await polynomials.T3.multiExponentiation(PTau, "T3"); + + // Third output of the prover is ([T1]_1, [T2]_1, [T3]_1) + proof.addPolynomial("T1", commitT1); + proof.addPolynomial("T2", commitT2); + proof.addPolynomial("T3", commitT3); + } + + async function computeT() { + if (logger) + logger.debug(`··· Reading sections ${ZKEY_PL_QL_SECTION}, ${ZKEY_PL_QR_SECTION}` + + `, ${ZKEY_PL_QM_SECTION}, ${ZKEY_PL_QO_SECTION}, ${ZKEY_PL_QC_SECTION}. Q selectors`); + // Reserve memory for Q's evaluations + evaluations.QL = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QR = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QM = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QO = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QC = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(evaluations.QL.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QL_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QR.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QR_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QM.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QM_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QO.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QO_SECTION][0].p + sDomain); + await fdZKey.readToBuffer(evaluations.QC.eval, 0, sDomain * 4, zkeySections[ZKEY_PL_QC_SECTION][0].p + sDomain); + + // Read Lagrange polynomials & evaluations from zkey file + evaluations.Lagrange = new Evaluations(new BigBuffer$1(sDomain * 4 * zkey.nPublic), curve, logger); + + for (let i = 0; i < zkey.nPublic; i++) { + await fdZKey.readToBuffer(evaluations.Lagrange.eval, i * sDomain * 4, sDomain * 4, zkeySections[ZKEY_PL_LAGRANGE_SECTION][0].p + i * 5 * sDomain + sDomain); } - function printPol(P) { - const n=(P.byteLength/n8r); - console.log("["); - for (let i=0; i= zkey.domainSize * 3 + 6) { + throw new Error("T Polynomial is not well calculated"); } - for (let i=zkey.domainSize; i (zkey.domainSize*3 -4) ) { - if (!Fr.isZero(a)) { - throw new Error("T Polynomial is not divisible"); - } - } - } - - if (logger) logger.debug("ifft Tz"); - const tz = await Fr.ifft(Tz); - for (let i=0; i (zkey.domainSize*3 +5) ) { - if (!Fr.isZero(a)) { - throw new Error("Tz Polynomial is not well calculated"); - } - } else { - t.set( - Fr.add( - t.slice(i*n8r, (i+1)*n8r), - a - ), - i*n8r - ); - } - } - - pol_t = t.slice(0, (zkey.domainSize * 3 + 6) * n8r); - // t(x) has degree 3n + 5, we are going to split t(x) into three smaller polynomials: - // t'_low and t'_mid with a degree < n and t'_high with a degree n+5 - // such that t(x) = t'_low(X) + X^n t'_mid(X) + X^{2n} t'_hi(X) + // T1' and T2' with a degree < n and T3' with a degree n+5 + // such that t(x) = T1'(X) + X^n T2'(X) + X^{2n} T3'(X) // To randomize the parts we use blinding scalars b_10 and b_11 in a way that doesn't change t(X): - // t_low(X) = t'_low(X) + b_10 X^n - // t_mid(X) = t'_mid(X) - b_10 + b_11 X^n - // t_high(X) = t'_high(X) - b_11 + // T1(X) = T1'(X) + b_10 X^n + // T2(X) = T2'(X) - b_10 + b_11 X^n + // T3(X) = T3'(X) - b_11 // such that - // t(X) = t_low(X) + X^n t_mid(X) + X^2n t_high(X) + // t(X) = T1(X) + X^n T2(X) + X^2n T3(X) + if (logger) logger.debug("··· Computing T1, T2, T3 polynomials"); + polynomials.T1 = new Polynomial(new BigBuffer$1((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T2 = new Polynomial(new BigBuffer$1((zkey.domainSize + 1) * n8r), curve, logger); + polynomials.T3 = new Polynomial(new BigBuffer$1((zkey.domainSize + 6) * n8r), curve, logger); + + polynomials.T1.coef.set(polynomials.T.coef.slice(0, sDomain), 0); + polynomials.T2.coef.set(polynomials.T.coef.slice(sDomain, sDomain * 2), 0); + polynomials.T3.coef.set(polynomials.T.coef.slice(sDomain * 2, sDomain * 3 + 6 * n8r), 0); - // compute t_low(X) - let polTLow = new BigBuffer((zkey.domainSize + 1) * n8r); - polTLow.set(t.slice(0, zkey.domainSize * n8r), 0); // Add blinding scalar b_10 as a new coefficient n - polTLow.set(ch.b[10], zkey.domainSize * n8r); + polynomials.T1.setCoef(zkey.domainSize, challenges.b[10]); // compute t_mid(X) - let polTMid = new BigBuffer((zkey.domainSize + 1) * n8r); - polTMid.set(t.slice(zkey.domainSize * n8r, zkey.domainSize * 2 * n8r), 0); // Subtract blinding scalar b_10 to the lowest coefficient of t_mid - const lowestMid = Fr.sub(polTMid.slice(0, n8r), ch.b[10]); - polTMid.set(lowestMid, 0); - // Add blinding scalar b_11 as a new coefficient n - polTMid.set(ch.b[11], zkey.domainSize * n8r); + const lowestMid = Fr.sub(polynomials.T2.getCoef(0), challenges.b[10]); + polynomials.T2.setCoef(0, lowestMid); + polynomials.T2.setCoef(zkey.domainSize, challenges.b[11]); // compute t_high(X) - let polTHigh = new BigBuffer((zkey.domainSize + 6) * n8r); - polTHigh.set(t.slice(zkey.domainSize * 2 * n8r, (zkey.domainSize * 3 + 6) * n8r), 0); //Subtract blinding scalar b_11 to the lowest coefficient of t_high - const lowestHigh = Fr.sub(polTHigh.slice(0, n8r), ch.b[11]); - polTHigh.set(lowestHigh, 0); - - proof.T1 = await expTau(polTLow, "multiexp T1"); - proof.T2 = await expTau(polTMid, "multiexp T2"); - proof.T3 = await expTau(polTHigh, "multiexp T3"); - - function mul2(a,b, ap, bp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - r = a_b; - - let a0 = Fr.add(a_bp, ap_b); - - let a1 = ap_bp; - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - } - - return [r, rz]; - } - - function mul4(a,b,c,d, ap, bp, cp, dp, p) { - let r, rz; - - - const a_b = Fr.mul(a,b); - const a_bp = Fr.mul(a,bp); - const ap_b = Fr.mul(ap,b); - const ap_bp = Fr.mul(ap,bp); - - const c_d = Fr.mul(c,d); - const c_dp = Fr.mul(c,dp); - const cp_d = Fr.mul(cp,d); - const cp_dp = Fr.mul(cp,dp); - - r = Fr.mul(a_b, c_d); - - let a0 = Fr.mul(ap_b, c_d); - a0 = Fr.add(a0, Fr.mul(a_bp, c_d)); - a0 = Fr.add(a0, Fr.mul(a_b, cp_d)); - a0 = Fr.add(a0, Fr.mul(a_b, c_dp)); - - let a1 = Fr.mul(ap_bp, c_d); - a1 = Fr.add(a1, Fr.mul(ap_b, cp_d)); - a1 = Fr.add(a1, Fr.mul(ap_b, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_bp, cp_d)); - a1 = Fr.add(a1, Fr.mul(a_bp, c_dp)); - a1 = Fr.add(a1, Fr.mul(a_b, cp_dp)); - - let a2 = Fr.mul(a_bp, cp_dp); - a2 = Fr.add(a2, Fr.mul(ap_b, cp_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, c_dp)); - a2 = Fr.add(a2, Fr.mul(ap_bp, cp_d)); - - let a3 = Fr.mul(ap_bp, cp_dp); - - rz = a0; - if (p) { - rz = Fr.add(rz, Fr.mul(Z1[p], a1)); - rz = Fr.add(rz, Fr.mul(Z2[p], a2)); - rz = Fr.add(rz, Fr.mul(Z3[p], a3)); - } - - return [r, rz]; - } + const lowestHigh = Fr.sub(polynomials.T3.getCoef(0), challenges.b[11]); + polynomials.T3.setCoef(0, lowestHigh); } async function round4() { - const pol_qm = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qm, 0 , zkey.domainSize*n8r, sectionsZKey[7][0].p); + if (logger) logger.debug("> Computing challenge xi"); - const pol_ql = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_ql, 0 , zkey.domainSize*n8r, sectionsZKey[8][0].p); + // STEP 4.1 - Compute evaluation challenge xi ∈ F + transcript.reset(); + transcript.addScalar(challenges.alpha); + transcript.addPolCommitment(proof.getPolynomial("T1")); + transcript.addPolCommitment(proof.getPolynomial("T2")); + transcript.addPolCommitment(proof.getPolynomial("T3")); - const pol_qr = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qr, 0 , zkey.domainSize*n8r, sectionsZKey[9][0].p); - - const pol_qo = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qo, 0 , zkey.domainSize*n8r, sectionsZKey[10][0].p); - - const pol_qc = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_qc, 0 , zkey.domainSize*n8r, sectionsZKey[11][0].p); - - const pol_s3 = new BigBuffer(zkey.domainSize*n8r); - await fdZKey.readToBuffer(pol_s3, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 10*zkey.domainSize*n8r); - - const transcript4 = new Uint8Array(G1.F.n8*2*3); - G1.toRprUncompressed(transcript4, 0, proof.T1); - G1.toRprUncompressed(transcript4, G1.F.n8*2, proof.T2); - G1.toRprUncompressed(transcript4, G1.F.n8*4, proof.T3); - ch.xi = hashToFr(transcript4); - - if (logger) logger.debug("xi: " + Fr.toString(ch.xi)); - - proof.eval_a = evalPol(pol_a, ch.xi); - proof.eval_b = evalPol(pol_b, ch.xi); - proof.eval_c = evalPol(pol_c, ch.xi); - proof.eval_s1 = evalPol(pol_s1, ch.xi); - proof.eval_s2 = evalPol(pol_s2, ch.xi); - proof.eval_t = evalPol(pol_t, ch.xi); - proof.eval_zw = evalPol(pol_z, Fr.mul(ch.xi, Fr.w[zkey.power])); - - const coef_ab = Fr.mul(proof.eval_a, proof.eval_b); + challenges.xi = transcript.getChallenge(); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[zkey.power]); - let e2a = proof.eval_a; - const betaxi = Fr.mul(ch.beta, ch.xi); - e2a = Fr.add( e2a, betaxi); - e2a = Fr.add( e2a, ch.gamma); + if (logger) logger.debug("··· challenges.xi: " + Fr.toString(challenges.xi, 16)); - let e2b = proof.eval_b; - e2b = Fr.add( e2b, Fr.mul(betaxi, zkey.k1)); - e2b = Fr.add( e2b, ch.gamma); - - let e2c = proof.eval_c; - e2c = Fr.add( e2c, Fr.mul(betaxi, zkey.k2)); - e2c = Fr.add( e2c, ch.gamma); - - const e2 = Fr.mul(Fr.mul(Fr.mul(e2a, e2b), e2c), ch.alpha); - - let e3a = proof.eval_a; - e3a = Fr.add( e3a, Fr.mul(ch.beta, proof.eval_s1)); - e3a = Fr.add( e3a, ch.gamma); - - let e3b = proof.eval_b; - e3b = Fr.add( e3b, Fr.mul(ch.beta, proof.eval_s2)); - e3b = Fr.add( e3b, ch.gamma); - - let e3 = Fr.mul(e3a, e3b); - e3 = Fr.mul(e3, ch.beta); - e3 = Fr.mul(e3, proof.eval_zw); - e3 = Fr.mul(e3, ch.alpha); - - ch.xim= ch.xi; - for (let i=0; i Computing challenge v"); - let pol_wxi = new BigBuffer((zkey.domainSize+6)*n8r); + // STEP 5.1 - Compute evaluation challenge v ∈ F + transcript.reset(); + transcript.addScalar(challenges.xi); + transcript.addScalar(proof.getEvaluation("eval_a")); + transcript.addScalar(proof.getEvaluation("eval_b")); + transcript.addScalar(proof.getEvaluation("eval_c")); + transcript.addScalar(proof.getEvaluation("eval_s1")); + transcript.addScalar(proof.getEvaluation("eval_s2")); + transcript.addScalar(proof.getEvaluation("eval_zw")); - const xi2m = Fr.mul(ch.xim, ch.xim); + challenges.v = []; + challenges.v[1] = transcript.getChallenge(); + if (logger) logger.debug("··· challenges.v: " + Fr.toString(challenges.v[1], 16)); - for (let i = 0; i < zkey.domainSize + 6; i++) { - let w = Fr.zero; + for (let i = 2; i < 6; i++) { + challenges.v[i] = Fr.mul(challenges.v[i - 1], challenges.v[1]); + } - const polTHigh = pol_t.slice((zkey.domainSize * 2 + i) * n8r, (zkey.domainSize * 2 + i + 1) * n8r); - w = Fr.add(w, Fr.mul(xi2m, polTHigh)); + // STEP 5.2 Compute linearisation polynomial r(X) + if (logger) logger.debug("> Computing linearisation polynomial R(X)"); + await computeR(); - if (i < zkey.domainSize + 3) { - w = Fr.add(w, Fr.mul(ch.v[1], pol_r.slice(i * n8r, (i + 1) * n8r))); + //STEP 5.3 Compute opening proof polynomial Wxi(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxi(X) polynomial"); + computeWxi(); + + //STEP 5.4 Compute opening proof polynomial Wxiw(X) + if (logger) logger.debug("> Computing opening proof polynomial Wxiw(X) polynomial"); + computeWxiw(); + + if (logger) logger.debug("> Computing Wxi, Wxiw MSM"); + let commitWxi = await polynomials.Wxi.multiExponentiation(PTau, "Wxi"); + let commitWxiw = await polynomials.Wxiw.multiExponentiation(PTau, "Wxiw"); + + // Fifth output of the prover is ([Wxi]_1, [Wxiw]_1) + proof.addPolynomial("Wxi", commitWxi); + proof.addPolynomial("Wxiw", commitWxiw); + } + + async function computeR() { + const Fr = curve.Fr; + + // Reserve memory for Q's polynomials + polynomials.QL = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QR = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QM = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QO = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QC = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + + // Read Q's evaluations from zkey file + await fdZKey.readToBuffer(polynomials.QL.coef, 0, sDomain, zkeySections[ZKEY_PL_QL_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QR.coef, 0, sDomain, zkeySections[ZKEY_PL_QR_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QM.coef, 0, sDomain, zkeySections[ZKEY_PL_QM_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QO.coef, 0, sDomain, zkeySections[ZKEY_PL_QO_SECTION][0].p); + await fdZKey.readToBuffer(polynomials.QC.coef, 0, sDomain, zkeySections[ZKEY_PL_QC_SECTION][0].p); + + challenges.xin = challenges.xi; + for (let i = 0; i < zkey.power; i++) { + challenges.xin = Fr.square(challenges.xin); + } + + challenges.zh = Fr.sub(challenges.xin, Fr.one); + + const L = []; + + const n = Fr.e(zkey.domainSize); + let w = Fr.one; + for (let i = 1; i <= Math.max(1, zkey.nPublic); i++) { + L[i] = Fr.div(Fr.mul(w, challenges.zh), Fr.mul(n, Fr.sub(challenges.xi, w))); + w = Fr.mul(w, Fr.w[zkey.power]); + } + + const eval_l1 = Fr.div( + Fr.sub(challenges.xin, Fr.one), + Fr.mul(n, Fr.sub(challenges.xi, Fr.one)) + ); + + if (logger) { + logger.debug("Lagrange Evaluations: "); + for (let i=1; i=0; i--) { - res = Fr.add(Fr.mul(res, x), P.slice(i*n8r, (i+1)*n8r)); - } - return res; + polynomials.Wxiw.divByZerofier(1, challenges.xiw); } - - function divPol1(P, d) { - const n = P.byteLength/n8r; - const res = new BigBuffer(n*n8r); - res.set(Fr.zero, (n-1) *n8r); - res.set(P.slice((n-1)*n8r, n*n8r), (n-2)*n8r); - for (let i=n-3; i>=0; i--) { - res.set( - Fr.add( - P.slice((i+1)*n8r, (i+2)*n8r), - Fr.mul( - d, - res.slice((i+1)*n8r, (i+2)*n8r) - ) - ), - i*n8r - ); - } - if (!Fr.eq( - P.slice(0, n8r), - Fr.mul( - Fr.neg(d), - res.slice(0, n8r) - ) - )) { - throw new Error("Polinomial does not divide"); - } - return res; - } - - async function expTau(b, name) { - const n = b.byteLength/n8r; - const PTauN = PTau.slice(0, n*curve.G1.F.n8*2); - const bm = await curve.Fr.batchFromMontgomery(b); - let res = await curve.G1.multiExpAffine(PTauN, bm, logger, name); - res = curve.G1.toAffine(res); - return res; - } - - - async function to4T(A, pz) { - pz = pz || []; - let a = await Fr.ifft(A); - const a4 = new BigBuffer(n8r*zkey.domainSize*4); - a4.set(a, 0); - - const a1 = new BigBuffer(n8r*(zkey.domainSize + pz.length)); - a1.set(a, 0); - for (let i= 0; i. */ - const {unstringifyBigInts: unstringifyBigInts$5} = utils; + const {unstringifyBigInts: unstringifyBigInts$5} = utils$6; async function plonkFullProve(_input, wasmFile, zkeyFileName, logger) { const input = unstringifyBigInts$5(_input); @@ -28007,13 +45881,13 @@ var snarkjs = (function (exports) { You should have received a copy of the GNU General Public License along with snarkjs. If not, see . */ - const {unstringifyBigInts: unstringifyBigInts$4} = utils; - const { keccak256: keccak256$1 } = jsSha3; + const {unstringifyBigInts: unstringifyBigInts$4} = utils$6; + async function plonkVerify(_vk_verifier, _publicSignals, _proof, logger) { let vk_verifier = unstringifyBigInts$4(_vk_verifier); - let proof = unstringifyBigInts$4(_proof); + _proof = unstringifyBigInts$4(_proof); let publicSignals = unstringifyBigInts$4(_publicSignals); const curve = await getCurveFromName(vk_verifier.curve); @@ -28021,31 +45895,36 @@ var snarkjs = (function (exports) { const Fr = curve.Fr; const G1 = curve.G1; - proof = fromObjectProof(curve,proof); + if (logger) logger.info("PLONK VERIFIER STARTED"); + + let proof = fromObjectProof(curve,_proof); vk_verifier = fromObjectVk$1(curve, vk_verifier); + if (!isWellConstructed(curve, proof)) { logger.error("Proof is not well constructed"); return false; } + if (publicSignals.length != vk_verifier.nPublic) { logger.error("Invalid number of public inputs"); return false; } - const challanges = calculateChallanges(curve, proof, publicSignals); + const challenges = calculatechallenges(curve, proof, publicSignals, vk_verifier); + if (logger) { - logger.debug("beta: " + Fr.toString(challanges.beta, 16)); - logger.debug("gamma: " + Fr.toString(challanges.gamma, 16)); - logger.debug("alpha: " + Fr.toString(challanges.alpha, 16)); - logger.debug("xi: " + Fr.toString(challanges.xi, 16)); - logger.debug("v1: " + Fr.toString(challanges.v[1], 16)); - logger.debug("v6: " + Fr.toString(challanges.v[6], 16)); - logger.debug("u: " + Fr.toString(challanges.u, 16)); + logger.debug("beta: " + Fr.toString(challenges.beta, 16)); + logger.debug("gamma: " + Fr.toString(challenges.gamma, 16)); + logger.debug("alpha: " + Fr.toString(challenges.alpha, 16)); + logger.debug("xi: " + Fr.toString(challenges.xi, 16)); + for(let i=1;i<6;i++) { + if (logger) logger.debug("v: " + Fr.toString(challenges.v[i], 16)); + } + logger.debug("u: " + Fr.toString(challenges.u, 16)); } - const L = calculateLagrangeEvaluations(curve, challanges, vk_verifier); + const L = calculateLagrangeEvaluations(curve, challenges, vk_verifier); if (logger) { - logger.debug("Lagrange Evaluations: "); for (let i=1; i. */ - const { unstringifyBigInts: unstringifyBigInts$3} = utils; - - function i2hex$1(i) { - return ("0" + i.toString(16)).slice(-2); - } + const { unstringifyBigInts: unstringifyBigInts$3} = utils$6; function p256$1(n) { let nstr = n.toString(16); @@ -28426,8 +46275,8 @@ var snarkjs = (function (exports) { const pub = unstringifyBigInts$3(_pub); const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; + curve.G1; + curve.Fr; let inputs = ""; for (let i=0; i. */ - class Polynomial { - constructor(coefficients, curve, logger) { - this.coef = coefficients; - this.curve = curve; - this.Fr = curve.Fr; - this.G1 = curve.G1; - this.logger = logger; - } - - static async fromEvaluations(buffer, curve, logger) { - let coefficients = await curve.Fr.ifft(buffer); - - return new Polynomial(coefficients, curve, logger); - } - - static fromCoefficientsArray(array, curve, logger) { - const Fr = curve.Fr; - let buff = array.length > 2 << 14 ? - new BigBuffer(array.length * Fr.n8) : new Uint8Array(array.length * Fr.n8); - for (let i = 0; i < array.length; i++) buff.set(array[i], i * Fr.n8); - - return new Polynomial(buff, curve, logger); - } - - static fromPolynomial(polynomial, curve, logger) { - let length = polynomial.length(); - let Fr = curve.Fr; - - let buff = length > 2 << 14 ? - new BigBuffer(length * Fr.n8) : new Uint8Array(length * Fr.n8); - buff.set(polynomial.coef.slice(), 0); - - return new Polynomial(buff, curve, logger); - } - - isEqual(polynomial) { - const degree = this.degree(); - if (degree !== polynomial.degree()) return false; - - for (let i = 0; i < degree + 1; i++) { - if (!this.Fr.eq(this.getCoef(i), polynomial.getCoef(i))) return false; - } - - return true; - } - - blindCoefficients(blindingFactors) { - blindingFactors = blindingFactors || []; - - const blindedCoefficients = (this.length() + blindingFactors.length) > 2 << 14 ? - new BigBuffer((this.length() + blindingFactors.length) * this.Fr.n8) : - new Uint8Array((this.length() + blindingFactors.length) * this.Fr.n8); - - blindedCoefficients.set(this.coef, 0); - for (let i = 0; i < blindingFactors.length; i++) { - blindedCoefficients.set( - this.Fr.add( - blindedCoefficients.slice((this.length() + i) * this.Fr.n8, (this.length() + i + 1) * this.Fr.n8), - blindingFactors[i] - ), - (this.length() + i) * this.Fr.n8 - ); - blindedCoefficients.set( - this.Fr.sub( - blindedCoefficients.slice(i * this.Fr.n8, (i + 1) * this.Fr.n8), - blindingFactors[i] - ), - i * this.Fr.n8 - ); - } - this.coef = blindedCoefficients; - } - - getCoef(index) { - const i_n8 = index * this.Fr.n8; - - if (i_n8 + this.Fr.n8 > this.coef.byteLength) return this.Fr.zero; - - return this.coef.slice(i_n8, i_n8 + this.Fr.n8); - } - - setCoef(index, value) { - if (index > (this.length() - 1)) { - throw new Error("Coef index is not available"); - } - - this.coef.set(value, index * this.Fr.n8); - } - - static async to4T(buffer, domainSize, blindingFactors, Fr) { - blindingFactors = blindingFactors || []; - let a = await Fr.ifft(buffer); - - const a4 = (domainSize * 4) > 2 << 14 ? - new BigBuffer(domainSize * 4 * Fr.n8) : new Uint8Array(domainSize * 4 * Fr.n8); - a4.set(a, 0); - - const A4 = await Fr.fft(a4); - - if (blindingFactors.length === 0) { - return [a, A4]; - } - - const a1 = domainSize + blindingFactors.length > 2 << 14 ? - new BigBuffer((domainSize + blindingFactors.length) * Fr.n8) : - new Uint8Array((domainSize + blindingFactors.length) * Fr.n8); - - a1.set(a, 0); - for (let i = 0; i < blindingFactors.length; i++) { - a1.set( - Fr.add( - a1.slice((domainSize + i) * Fr.n8, (domainSize + i + 1) * Fr.n8), - blindingFactors[i] - ), - (domainSize + i) * Fr.n8 - ); - a1.set( - Fr.sub( - a1.slice(i * Fr.n8, (i + 1) * Fr.n8), - blindingFactors[i] - ), - i * Fr.n8 - ); - } - - return [a1, A4]; - } - - length() { - let length = this.coef.byteLength / this.Fr.n8; - if (length !== Math.floor(this.coef.byteLength / this.Fr.n8)) { - throw new Error("Polynomial coefficients buffer has incorrect size"); - } - if (0 === length) { - if (this.logger) { - this.logger.warn("Polynomial has length zero"); - } - } - return length; - } - - degree() { - for (let i = this.length() - 1; i > 0; i--) { - const i_n8 = i * this.Fr.n8; - if (!this.Fr.eq(this.Fr.zero, this.coef.slice(i_n8, i_n8 + this.Fr.n8))) { - return i; - } - } - - return 0; - } - - evaluate(point) { - let res = this.Fr.zero; - - for (let i = this.degree() + 1; i > 0; i--) { - let i_n8 = i * this.Fr.n8; - const currentCoefficient = this.coef.slice(i_n8 - this.Fr.n8, i_n8); - res = this.Fr.add(currentCoefficient, this.Fr.mul(res, point)); - } - - return res; - } - - fastEvaluate(point) { - const Fr = this.Fr; - let nThreads = 3; - - let nCoefs = this.degree() + 1; - let coefsThread = parseInt(nCoefs / nThreads); - let residualCoefs = nCoefs - coefsThread * nThreads; - - let res = []; - let xN = []; - - xN[0] = Fr.one; - - for (let i = 0; i < nThreads; i++) { - res[i] = Fr.zero; - - let nCoefs = i === (nThreads - 1) ? coefsThread + residualCoefs : coefsThread; - for (let j = nCoefs; j > 0; j--) { - res[i] = Fr.add(this.getCoef((i * coefsThread) + j - 1), Fr.mul(res[i], point)); - - if (i === 0) xN[0] = Fr.mul(xN[0], point); - } - } - - for (let i = 1; i < nThreads; i++) { - res[0] = Fr.add(res[0], Fr.mul(xN[i - 1], res[i])); - xN[i] = Fr.mul(xN[i - 1], xN[0]); - } - - return res[0]; - } - - add(polynomial, blindingValue) { - let other = false; - - if (polynomial.length() > this.length()) { - other = true; - } - - const thisLength = this.length(); - const polyLength = polynomial.length(); - for (let i = 0; i < Math.max(thisLength, polyLength); i++) { - const i_n8 = i * this.Fr.n8; - - const a = i < thisLength ? this.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; - let b = i < polyLength ? polynomial.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; - - if (blindingValue !== undefined) { - b = this.Fr.mul(b, blindingValue); - } - if (other) { - polynomial.coef.set(this.Fr.add(a, b), i_n8); - } else { - this.coef.set(this.Fr.add(a, b), i_n8); - } - } - if (other) { - delete this.coef; - this.coef = polynomial.coef; - } - } - - sub(polynomial, blindingValue) { - let other = false; - - if (polynomial.length() > this.length()) { - other = true; - } - - const thisLength = this.length(); - const polyLength = polynomial.length(); - for (let i = 0; i < Math.max(thisLength, polyLength); i++) { - const i_n8 = i * this.Fr.n8; - - const a = i < thisLength ? this.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; - let b = i < polyLength ? polynomial.coef.slice(i_n8, i_n8 + this.Fr.n8) : this.Fr.zero; - - if (blindingValue !== undefined) { - b = this.Fr.mul(b, blindingValue); - } - if (other) { - polynomial.coef.set(this.Fr.sub(a, b), i_n8); - } else { - this.coef.set(this.Fr.sub(a, b), i_n8); - } - } - if (other) { - delete this.coef; - this.coef = polynomial.coef; - } - } - - mulScalar(value) { - for (let i = 0; i < this.length(); i++) { - const i_n8 = i * this.Fr.n8; - - this.coef.set(this.Fr.mul(this.coef.slice(i_n8, i_n8 + this.Fr.n8), value), i_n8); - } - } - - addScalar(value) { - const currentValue = 0 === this.length() ? this.Fr.zero : this.coef.slice(0, this.Fr.n8); - this.coef.set(this.Fr.add(currentValue, value), 0); - } - - subScalar(value) { - const currentValue = 0 === this.length() ? this.Fr.zero : this.coef.slice(0, this.Fr.n8); - this.coef.set(this.Fr.sub(currentValue, value), 0); - } - - // Multiply current polynomial by the polynomial (X - value) - byXSubValue(value) { - const Fr = this.Fr; - const resize = !Fr.eq(Fr.zero, this.getCoef(this.length() - 1)); - - const length = resize ? this.length() + 1 : this.length(); - const buff = length > 2 << 14 ? new BigBuffer(length * Fr.n8) : new Uint8Array(length * Fr.n8); - let pol = new Polynomial(buff, this.curve, this.logger); - - // Step 0: Set current coefficients to the new buffer shifted one position - pol.coef.set(this.coef.slice(0, (length - 1) * Fr.n8), 32); - - // Step 1: multiply each coefficient by (-value) - this.mulScalar(Fr.neg(value)); - - // Step 2: Add current polynomial to destination polynomial - pol.add(this); - - // Swap buffers - this.coef = pol.coef; - } - - // Multiply current polynomial by the polynomial (X^n + value) - byXNSubValue(n, value) { - const Fr = this.Fr; - const resize = !(this.length() - n - 1 >= this.degree()); - - const length = resize ? this.length() + n : this.length(); - const buff = length > 2 << 14 ? new BigBuffer(length * Fr.n8) : new Uint8Array(length * Fr.n8); - let pol = new Polynomial(buff, this.curve, this.logger); - - // Step 0: Set current coefficients to the new buffer shifted one position - pol.coef.set(this.coef.slice(0, (this.degree() + 1) * 32, ), n * 32); - - // Step 1: multiply each coefficient by (- value) - this.mulScalar(value); - - // Step 2: Add current polynomial to destination polynomial - pol.add(this); - - // Swap buffers - this.coef = pol.coef; - } - - // Euclidean division - divBy(polynomial) { - const Fr = this.Fr; - const degreeA = this.degree(); - const degreeB = polynomial.degree(); - - let polR = new Polynomial(this.coef, this.curve, this.logger); - - this.coef = this.length() > 2 << 14 ? - new BigBuffer(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); - - for (let i = degreeA - degreeB; i >= 0; i--) { - this.setCoef(i, Fr.div(polR.getCoef(i + degreeB), polynomial.getCoef(degreeB))); - for (let j = 0; j <= degreeB; j++) { - polR.setCoef(i + j, Fr.sub(polR.getCoef(i + j), Fr.mul(this.getCoef(i), polynomial.getCoef(j)))); - } - } - - return polR; - } - - // Division by a Polynomial of the form (x^m - beta) - divByMonic(m, beta) { - const Fr = this.Fr; - - let d = this.degree(); - - let buffer = this.length() > 2 << 14 ? - new BigBuffer(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); - let quotient = new Polynomial(buffer, this.curve, this.logger); - - let bArr = []; - - // Add the m leading coefficients of this to quotient - for (let i = 0; i < m; i++) { - quotient.setCoef((d - i) - m, this.getCoef(d - i)); - bArr[i] = this.getCoef(d - i); - } - - let nThreads = m; - for (let k = 0; k < nThreads; k++) { - for (let i = d - 2 * m - k; i >= 0; i = i - nThreads) { - if (i < 0) break; - let idx = k; - bArr[idx] = Fr.add(this.getCoef(i + m), Fr.mul(bArr[idx], beta)); - - quotient.setCoef(i, bArr[idx]); - } - } - - this.coef = quotient.coef; - } - - divByVanishing(n, beta) { - if (this.degree() < n) { - throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); - } - - const Fr = this.Fr; - - let polR = new Polynomial(this.coef, this.curve, this.logger); - - this.coef = this.length() > 2 << 14 ? - new BigBuffer(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); - - for (let i = this.length() - 1; i >= n; i--) { - let leadingCoef = polR.getCoef(i); - if (Fr.eq(Fr.zero, leadingCoef)) continue; - - polR.setCoef(i, Fr.zero); - polR.setCoef(i - n, Fr.add(polR.getCoef(i - n), Fr.mul(beta, leadingCoef))); - this.setCoef(i - n, Fr.add(this.getCoef(i - n), leadingCoef)); - } - - return polR; - } - - divByVanishing2(m, beta) { - if (this.degree() < m) { - throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); - } - - const Fr = this.Fr; - - let polR = new Polynomial(this.coef, this.curve, this.logger); - - this.coef = this.length() > 2 << 14 ? - new BigBuffer(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8); - - let nThreads = 3; - let nTotal = this.length() - m; - let nElementsChunk = Math.floor(nTotal / nThreads); - let nElementsLast = nTotal - (nThreads - 1) * nElementsChunk; - - console.log(nTotal); - console.log(nElementsChunk + " " + nElementsLast); - for (let k = 0; k < nThreads; k++) { - console.log("> Thread " + k); - for (let i = (k === 0 ? nElementsLast : nElementsChunk); i > 0; i--) { - let idxDst = i - 1; - if (k !== 0) idxDst += (k - 1) * nElementsChunk + nElementsLast; - let idxSrc = idxDst + m; - - let leadingCoef = polR.getCoef(idxSrc); - if (Fr.eq(Fr.zero, leadingCoef)) continue; - - polR.setCoef(idxSrc, Fr.zero); - polR.setCoef(idxDst, Fr.add(polR.getCoef(idxDst), Fr.mul(beta, leadingCoef))); - this.setCoef(idxDst, Fr.add(this.getCoef(idxDst), leadingCoef)); - console.log(idxDst + " <-- " + idxSrc); - } - } - - this.print(); - return polR; - } - - fastDivByVanishing(data) { - const Fr = this.Fr; - - for (let i = 0; i < data.length; i++) { - - let m = data[i][0]; - let beta = data[i][1]; - - if (this.degree() < m) { - throw new Error("divByVanishing polynomial divisor must be of degree lower than the dividend polynomial"); - } - - let nThreads = 5; - let nElements = this.length() - m; - let nElementsBucket = Math.floor(nElements / nThreads / m); - let nElementsChunk = nElementsBucket * m; - let nElementsLast = nElements - nThreads * nElementsChunk; - - //In C++ implementation this buffer will be allocated only once outside the loop - let polTmp = new Polynomial(this.length() > 2 << 14 ? - new BigBuffer(this.length() * Fr.n8) : new Uint8Array(this.length() * Fr.n8), this.curve, this.logger); - - let ptr = this.coef; - this.coef = polTmp.coef; - polTmp.coef = ptr; - - // STEP 1: Setejar els m valors del següent bucket al chunk actual, PARALEL·LITZAR - for (let k = 0; k < nThreads; k++) { - let idx0 = (k + 1) * nElementsChunk + nElementsLast; - for (let i = 0; i < m; i++) { - this.setCoef(idx0 + i - m, polTmp.getCoef(idx0 + i)); - } - - for (let i = 0; i < nElementsChunk - m; i++) { - let offset = idx0 - i - 1; - let val = Fr.add(polTmp.getCoef(offset), Fr.mul(beta, this.getCoef(offset))); - this.setCoef(offset - m, val); - } - } - - //STEP 2: Setejar els valors del elements last NO PARAL·LELITZAR - let idx0 = nElementsLast; - let pending = nElementsLast; - for (let i = 0; i < m && pending; i++) { - this.setCoef(idx0 - i - 1, polTmp.getCoef(idx0 + m - i - 1)); - pending--; - } - - for (let i = 0; i < pending; i++) { - let offset = idx0 - i - 1; - let val = Fr.add(polTmp.getCoef(offset), Fr.mul(beta, this.getCoef(offset))); - this.setCoef(offset - m, val); - } - - //Step 3: calcular acumulats NO PARALEL·LITZAR - - let acc = []; - let betaPow = Fr.one; - for (let i = 0; i < nElementsBucket; i++) { - betaPow = Fr.mul(betaPow, beta); - } - let currentBeta = Fr.one; - - for (let k = nThreads; k > 0; k--) { - let idThread = k - 1; - let idx0 = idThread * nElementsChunk + nElementsLast; - acc[idThread] = []; - - for (let i = 0; i < m; i++) { - acc[idThread][i] = this.getCoef(idx0 + i); - - if (k !== nThreads) { - acc[idThread][i] = Fr.add(acc[idThread][i], Fr.mul(betaPow, acc[idThread + 1][i])); - } - } - currentBeta = Fr.mul(currentBeta, betaPow); - } - - //STEP 4 recalcular PARALEL·LITZAR - for (let k = 0; k < nThreads; k++) { - - let idx0 = k * nElementsChunk + nElementsLast; - let currentBeta = beta; //Quan hopassem a C++ i ho paralelitzem aquesta variable ha de ser privada - let currentM = m - 1; - - let limit = k === 0 ? nElementsLast : nElementsChunk; - for (let i = 0; i < limit; i++) { - let offset = idx0 - i - 1; - let val = Fr.add(this.getCoef(offset), Fr.mul(currentBeta, acc[k][currentM])); - - this.setCoef(offset, val); - - // To avoid modular operations in each loop... - if (currentM === 0) { - currentM = m - 1; - currentBeta = Fr.mul(currentBeta, beta); - } else { - currentM--; - } - } - } - } - } - - - // Divide polynomial by X - value - divByXSubValue(value) { - const coefs = this.length() > 2 << 14 ? - new BigBuffer(this.length() * this.Fr.n8) : new Uint8Array(this.length() * this.Fr.n8); - - coefs.set(this.Fr.zero, (this.length() - 1) * this.Fr.n8); - coefs.set(this.coef.slice((this.length() - 1) * this.Fr.n8, this.length() * this.Fr.n8), (this.length() - 2) * this.Fr.n8); - for (let i = this.length() - 3; i >= 0; i--) { - let i_n8 = i * this.Fr.n8; - coefs.set( - this.Fr.add( - this.coef.slice(i_n8 + this.Fr.n8, i_n8 + 2 * this.Fr.n8), - this.Fr.mul(value, coefs.slice(i_n8 + this.Fr.n8, i_n8 + 2 * this.Fr.n8)) - ), - i * this.Fr.n8 - ); - } - if (!this.Fr.eq( - this.coef.slice(0, this.Fr.n8), - this.Fr.mul(this.Fr.neg(value), coefs.slice(0, this.Fr.n8)) - )) { - throw new Error("Polynomial does not divide"); - } - - this.coef = coefs; - } - - divZh(domainSize, extensions = 4) { - for (let i = 0; i < domainSize; i++) { - const i_n8 = i * this.Fr.n8; - this.coef.set(this.Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)), i_n8); - } - - for (let i = domainSize; i < domainSize * extensions; i++) { - const i_n8 = i * this.Fr.n8; - - const a = this.Fr.sub( - this.coef.slice((i - domainSize) * this.Fr.n8, (i - domainSize) * this.Fr.n8 + this.Fr.n8), - this.coef.slice(i_n8, i_n8 + this.Fr.n8) - ); - this.coef.set(a, i_n8); - if (i > (domainSize * (extensions-1) - extensions)) { - if (!this.Fr.isZero(a)) { - throw new Error("Polynomial is not divisible"); - } - } - } - - return this; - } - - divByZerofier(n, beta) { - let Fr = this.Fr; - const invBeta = Fr.inv(beta); - const invBetaNeg = Fr.neg(invBeta); - - let isOne = Fr.eq(Fr.one, invBetaNeg); - let isNegOne = Fr.eq(Fr.negone, invBetaNeg); - - if (!isOne) { - for (let i = 0; i < n; i++) { - const i_n8 = i * this.Fr.n8; - let element; - - // If invBetaNeg === -1 we'll save a multiplication changing it by a neg function call - if (isNegOne) { - element = Fr.neg(this.coef.slice(i_n8, i_n8 + this.Fr.n8)); - } else { - element = Fr.mul(invBetaNeg, this.coef.slice(i_n8, i_n8 + this.Fr.n8)); - } - - this.coef.set(element, i_n8); - } - } - - isOne = Fr.eq(Fr.one, invBeta); - isNegOne = Fr.eq(Fr.negone, invBeta); - - for (let i = n; i < this.length(); i++) { - const i_n8 = i * this.Fr.n8; - const i_prev_n8 = (i - n) * this.Fr.n8; - - let element = this.Fr.sub( - this.coef.slice(i_prev_n8, i_prev_n8 + this.Fr.n8), - this.coef.slice(i_n8, i_n8 + this.Fr.n8) - ); - - // If invBeta === 1 we'll not do anything - if(!isOne) { - // If invBeta === -1 we'll save a multiplication changing it by a neg function call - if(isNegOne) { - element = Fr.neg(element); - } else { - element = Fr.mul(invBeta, element); - } - } - - this.coef.set(element, i_n8); - - // Check if polynomial is divisible by checking if n high coefficients are zero - if (i > this.length() - n - 1) { - if (!this.Fr.isZero(element)) { - throw new Error("Polynomial is not divisible"); - } - } - } - - return this; - } - - // function divideByVanishing(f, n, p) { - // // polynomial division f(X) / (X^n - 1) with remainder - // // very cheap, 0 multiplications - // // strategy: - // // start with q(X) = 0, r(X) = f(X) - // // then start changing q, r while preserving the identity: - // // f(X) = q(X) * (X^n - 1) + r(X) - // // in every step, move highest-degree term of r into the product - // // => r eventually has degree < n and we're done - // let q = Array(f.length).fill(0n); - // let r = [...f]; - // for (let i = f.length - 1; i >= n; i--) { - // let leadingCoeff = r[i]; - // if (leadingCoeff === 0n) continue; - // r[i] = 0n; - // r[i - n] = mod(r[i - n] + leadingCoeff, p); - // q[i - n] = mod(q[i - n] + leadingCoeff, p); - // } - // return [q, r]; - // } - - byX() { - const coefs = (this.length() + 1) > 2 << 14 ? - new BigBuffer(this.coef.byteLength + this.Fr.n8) : new Uint8Array(this.coef.byteLength + this.Fr.n8); - coefs.set(this.Fr.zero, 0); - coefs.set(this.coef, this.Fr.n8); - - this.coef = coefs; - } - - // Compute a new polynomial f(x^n) from f(x) - // f(x) = a_0 + a_1·x + a_2·x^2 + ... + a_j·x^j - // f(x^n) = a_0 + a_1·x^n + a_2·x^2n + ... + a_j·x^jn - static - async expX(polynomial, n, truncate = false) { - const Fr = polynomial.Fr; - - if (n < 1) { - // n == 0 not allowed because it has no sense, but if it's necessary we have to return - // a zero degree polynomial with a constant coefficient equals to the sum of all the original coefficients - throw new Error("Compute a new polynomial to a zero or negative number is not allowed"); - } else if (1 === n) { - return await Polynomial.fromEvaluations(polynomial.coef, curve, polynomial.logger); - } - - // length is the length of non-constant coefficients - // if truncate === true, the highest zero coefficients (if exist) will be removed - const length = truncate ? polynomial.degree() : (polynomial.length() - 1); - const bufferDst = (length * n + 1) > 2 << 14 ? - new BigBuffer((length * n + 1) * Fr.n8) : new Uint8Array((length * n + 1) * Fr.n8); - - // Copy constant coefficient as is because is not related to x - bufferDst.set(polynomial.getCoef(0), 0); - - for (let i = 1; i <= length; i++) { - const i_sFr = i * Fr.n8; - - const coef = polynomial.getCoef(i); - bufferDst.set(coef, i_sFr * n); - } - - return new Polynomial(bufferDst, polynomial.curve, polynomial.logger); - } - - split(numPols, degPols, blindingFactors) { - if (numPols < 1) { - throw new Error(`Polynomials can't be split in ${numPols} parts`); - } else if (1 === numPols) { - return [this]; - } - - //blinding factors can be void or must have a length of numPols - 1 - if (0 !== blindingFactors.length && blindingFactors.length < numPols - 1) { - throw new Error(`Blinding factors length must be ${numPols - 1}`); - } - - const chunkByteLength = (degPols + 1) * this.Fr.n8; - let res = []; - - // Check polynomial can be split in numChunks parts of chunkSize bytes... - const numRealPols = Math.ceil((this.degree() + 1) * this.Fr.n8 / chunkByteLength); - if (numRealPols < numPols) { - //throw new Error(`Polynomial is short to be split in ${numPols} parts of ${degPols} coefficients each.`); - for (let i = numRealPols; i < numPols; i++) { - res[i] = new Polynomial(new Uint8Array(this.Fr.n8), this.curve, this.logger); - } - } - - numPols = Math.min(numPols, numRealPols); - for (let i = 0; i < numPols; i++) { - const isLast = (numPols - 1) === i; - const byteLength = isLast ? this.coef.byteLength - ((numPols - 1) * chunkByteLength) : chunkByteLength + this.Fr.n8; - - let buff = (byteLength / this.Fr.n8) > 2 << 14 ? new BigBuffer(byteLength) : new Uint8Array(byteLength); - res[i] = new Polynomial(buff, this.curve, this.logger); - - const fr = i * chunkByteLength; - const to = isLast ? this.coef.byteLength : (i + 1) * chunkByteLength; - res[i].coef.set(this.coef.slice(fr, to), 0); - - // Add a blinding factor as higher degree - if (!isLast) { - res[i].coef.set(blindingFactors[i], chunkByteLength); - } - - // Sub blinding factor to the lowest degree - if (0 !== i) { - const lowestDegree = this.Fr.sub(res[i].coef.slice(0, this.Fr.n8), blindingFactors[i - 1]); - res[i].coef.set(lowestDegree, 0); - } - - if (isLast) { - res[i].truncate(); - } - } - - return res; - - // // compute t_low(X) - // let polTLow = new BigBuffer((chunkSize + 1) * n8r); - // polTLow.set(t.slice(0, zkey.domainSize * n8r), 0); - // // Add blinding scalar b_10 as a new coefficient n - // polTLow.set(ch.b[10], zkey.domainSize * n8r); - // - // // compute t_mid(X) - // let polTMid = new BigBuffer((zkey.domainSize + 1) * n8r); - // polTMid.set(t.slice(zkey.domainSize * n8r, zkey.domainSize * 2 * n8r), 0); - // // Subtract blinding scalar b_10 to the lowest coefficient of t_mid - // const lowestMid = Fr.sub(polTMid.slice(0, n8r), ch.b[10]); - // polTMid.set(lowestMid, 0); - // // Add blinding scalar b_11 as a new coefficient n - // polTMid.set(ch.b[11], zkey.domainSize * n8r); - // - // // compute t_high(X) - // let polTHigh = new BigBuffer((zkey.domainSize + 6) * n8r); - // polTHigh.set(t.slice(zkey.domainSize * 2 * n8r, (zkey.domainSize * 3 + 6) * n8r), 0); - // //Subtract blinding scalar b_11 to the lowest coefficient of t_high - // const lowestHigh = Fr.sub(polTHigh.slice(0, n8r), ch.b[11]); - // polTHigh.set(lowestHigh, 0); - // - // proof.T1 = await expTau(polTLow, "multiexp T1"); - // proof.T2 = await expTau(polTMid, "multiexp T2"); - // proof.T3 = await expTau(polTHigh, "multiexp T3"); - } - - // split2(degPols, blindingFactors) { - // let currentDegree = this.degree(); - // const numFilledPols = Math.ceil((currentDegree + 1) / (degPols + 1)); - // - // //blinding factors can be void or must have a length of numPols - 1 - // if (0 !== blindingFactors.length && blindingFactors.length < numFilledPols - 1) { - // throw new Error(`Blinding factors length must be ${numFilledPols - 1}`); - // } - // - // const chunkByteLength = (degPols + 1) * this.Fr.n8; - // - // // Check polynomial can be split in numChunks parts of chunkSize bytes... - // if (this.coef.byteLength / chunkByteLength <= numFilledPols - 1) { - // throw new Error(`Polynomial is short to be split in ${numFilledPols} parts of ${degPols} coefficients each.`); - // } - // - // let res = []; - // for (let i = 0; i < numFilledPols; i++) { - // const isLast = (numFilledPols - 1) === i; - // const byteLength = isLast ? (currentDegree + 1) * this.Fr.n8 - ((numFilledPols - 1) * chunkByteLength) : chunkByteLength + this.Fr.n8; - // - // res[i] = new Polynomial(new BigBuffer(byteLength), this.Fr, this.logger); - // const fr = i * chunkByteLength; - // const to = isLast ? (currentDegree + 1) * this.Fr.n8 : (i + 1) * chunkByteLength; - // res[i].coef.set(this.coef.slice(fr, to), 0); - // - // // Add a blinding factor as higher degree - // if (!isLast) { - // res[i].coef.set(blindingFactors[i], chunkByteLength); - // } - // - // // Sub blinding factor to the lowest degree - // if (0 !== i) { - // const lowestDegree = this.Fr.sub(res[i].coef.slice(0, this.Fr.n8), blindingFactors[i - 1]); - // res[i].coef.set(lowestDegree, 0); - // } - // } - // - // return res; - // } - - // merge(pols, overlap = true) { - // let length = 0; - // for (let i = 0; i < pols.length; i++) { - // length += pols[i].length(); - // } - // - // if (overlap) { - // length -= pols.length - 1; - // } - // - // let res = new Polynomial(new BigBuffer(length * this.Fr.n8)); - // for (let i = 0; i < pols.length; i++) { - // const byteLength = pols[i].coef.byteLength; - // if (0 === i) { - // res.coef.set(pols[i].coef, 0); - // } else { - // - // } - // } - // - // return res; - // } - - truncate() { - const deg = this.degree(); - if (deg + 1 < this.coef.byteLength / this.Fr.n8) { - const newCoefs = (deg + 1) > 2 << 14 ? - new BigBuffer((deg + 1) * this.Fr.n8) : new Uint8Array((deg + 1) * this.Fr.n8); - - newCoefs.set(this.coef.slice(0, (deg + 1) * this.Fr.n8), 0); - this.coef = newCoefs; - } - } - - static lagrangePolynomialInterpolation(xArr, yArr, curve) { - const Fr = curve.Fr; - let polynomial = computeLagrangePolynomial(0); - for (let i = 1; i < xArr.length; i++) { - polynomial.add(computeLagrangePolynomial(i)); - } - - return polynomial; - - function computeLagrangePolynomial(i) { - let polynomial; - - for (let j = 0; j < xArr.length; j++) { - if (j === i) continue; - - if (polynomial === undefined) { - let buff = (xArr.length) > 2 << 14 ? - new BigBuffer((xArr.length) * Fr.n8) : new Uint8Array((xArr.length) * Fr.n8); - polynomial = new Polynomial(buff, curve); - polynomial.setCoef(0, Fr.neg(xArr[j])); - polynomial.setCoef(1, Fr.one); - } else { - polynomial.byXSubValue(xArr[j]); - } - } - - let denominator = polynomial.evaluate(xArr[i]); - denominator = Fr.inv(denominator); - const mulFactor = Fr.mul(yArr[i], denominator); - - polynomial.mulScalar(mulFactor); - - return polynomial; - } - } - - static zerofierPolynomial(xArr, curve) { - const Fr = curve.Fr; - let buff = (xArr.length + 1) > 2 << 14 ? - new BigBuffer((xArr.length + 1) * Fr.n8) : new Uint8Array((xArr.length + 1) * Fr.n8); - let polynomial = new Polynomial(buff, curve); - - // Build a zerofier polynomial with the following form: - // zerofier(X) = (X-xArr[0])(X-xArr[1])...(X-xArr[n]) - polynomial.setCoef(0, Fr.neg(xArr[0])); - polynomial.setCoef(1, Fr.one); - - for (let i = 1; i < xArr.length; i++) { - polynomial.byXSubValue(xArr[i]); - } - - return polynomial; - } - - print() { - const Fr = this.Fr; - let res = ""; - for (let i = this.degree(); i >= 0; i--) { - const coef = this.getCoef(i); - if (!Fr.eq(Fr.zero, coef)) { - if (Fr.isNegative(coef)) { - res += " - "; - } else if (i !== this.degree()) { - res += " + "; - } - res += Fr.toString(coef); - if (i > 0) { - res += i > 1 ? "x^" + i : "x"; - } - } - } - console.log(res); - } - - async multiExponentiation(PTau, name) { - const n = this.coef.byteLength / this.Fr.n8; - const PTauN = PTau.slice(0, n * this.G1.F.n8 * 2); - const bm = await this.Fr.batchFromMontgomery(this.coef); - let res = await this.G1.multiExpAffine(PTauN, bm, this.logger, name); - res = this.G1.toAffine(res); - return res; - } - } - - /* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - - class Evaluations { - constructor(evaluations, curve, logger) { - this.eval = evaluations; - this.curve = curve; - this.Fr = curve.Fr; - this.logger = logger; - } - - static async fromPolynomial(polynomial, extension, curve, logger) { - const coefficientsN = new BigBuffer(polynomial.length() * extension * curve.Fr.n8); - coefficientsN.set(polynomial.coef, 0); - - const evaluations = await curve.Fr.fft(coefficientsN); - - return new Evaluations(evaluations, curve, logger); - } - - getEvaluation(index) { - const i_n8 = index * this.Fr.n8; - - if (i_n8 + this.Fr.n8 > this.eval.byteLength) { - throw new Error("Evaluations.getEvaluation() out of bounds"); - } - - return this.eval.slice(i_n8, i_n8 + this.Fr.n8); - } - - length() { - let length = this.eval.byteLength / this.Fr.n8; - if (length !== Math.floor(this.eval.byteLength / this.Fr.n8)) { - throw new Error("Polynomial evaluations buffer has incorrect size"); - } - if (0 === length) { - this.logger.warn("Polynomial has length zero"); - } - return length; - } - } - - /* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - class CPolynomial { constructor(n, curve, logger) { this.n = n; @@ -29808,10 +46619,10 @@ var snarkjs = (function (exports) { getPolynomial() { let degrees = this.polynomials.map(polynomial => polynomial === undefined ? 0 : polynomial.degree()); const maxDegree = this.degree(); - const lengthBuffer = 2 ** (log2(maxDegree - 1) + 1); + const lengthBuffer = 2 ** (log2$3(maxDegree - 1) + 1); const sFr = this.Fr.n8; - let polynomial = new Polynomial(new BigBuffer(lengthBuffer * sFr), this.curve, this.logger); + let polynomial = new Polynomial(new BigBuffer$1(lengthBuffer * sFr), this.curve, this.logger); for (let i = 0; i < maxDegree; i++) { const i_n8 = i * sFr; @@ -29911,7 +46722,7 @@ var snarkjs = (function (exports) { // As the t polynomial is n+5 whe need at least a power of 4 //TODO check!!!! // NOTE : plonkConstraints + 2 = #constraints + blinding coefficients for each wire polynomial - settings.cirPower = Math.max(FF_T_POL_DEG_MIN, log2((plonkConstraints.length + 2) - 1) + 1); + settings.cirPower = Math.max(FF_T_POL_DEG_MIN, log2$3((plonkConstraints.length + 2) - 1) + 1); settings.domainSize = 2 ** settings.cirPower; if (pTauSections[2][0].size < (settings.domainSize * 9 + 18) * sG1) { @@ -30120,7 +46931,7 @@ var snarkjs = (function (exports) { async function writeQMap(fdZKey, sectionNum, posConstraint, name) { // Compute Q from q evaluations - let Q = new BigBuffer(settings.domainSize * sFr); + let Q = new BigBuffer$1(settings.domainSize * sFr); for (let i = 0; i < plonkConstraints.length; i++) { Q.set(plonkConstraints[i][posConstraint], i * sFr); @@ -30141,7 +46952,7 @@ var snarkjs = (function (exports) { async function writeSigma(fdZKey) { // Compute sigma - const sigma = new BigBuffer(sFr * settings.domainSize * 3); + const sigma = new BigBuffer$1(sFr * settings.domainSize * 3); const lastSeen = new BigArray(settings.nVars); const firstPos = new BigArray(settings.nVars); @@ -30221,7 +47032,7 @@ var snarkjs = (function (exports) { const l = Math.max(settings.nPublic, 1); for (let i = 0; i < l; i++) { - let buff = new BigBuffer(settings.domainSize * sFr); + let buff = new BigBuffer$1(settings.domainSize * sFr); buff.set(Fr.one, i * sFr); await writeP4(fdZKey, buff); @@ -30233,7 +47044,7 @@ var snarkjs = (function (exports) { await startWriteSection(fdZKey, ZKEY_FF_PTAU_SECTION); // domainSize * 9 + 18 = maximum SRS length needed, specifically to commit C2 - PTau = new BigBuffer((settings.domainSize * 9 + 18) * sG1); + PTau = new BigBuffer$1((settings.domainSize * 9 + 18) * sG1); await fdPTau.readToBuffer(PTau, 0, (settings.domainSize * 9 + 18) * sG1, pTauSections[2][0].p); await fdZKey.write(PTau); @@ -30269,12 +47080,12 @@ var snarkjs = (function (exports) { await startWriteSection(fdZKey, ZKEY_FF_HEADER_SECTION); const primeQ = curve.q; - const n8q = (Math.floor((Scalar.bitLength(primeQ) - 1) / 64) + 1) * 8; + const n8q = (Math.floor((Scalar$1.bitLength(primeQ) - 1) / 64) + 1) * 8; await fdZKey.writeULE32(n8q); await writeBigInt(fdZKey, primeQ, n8q); const primeR = curve.r; - const n8r = (Math.floor((Scalar.bitLength(primeR) - 1) / 64) + 1) * 8; + const n8r = (Math.floor((Scalar$1.bitLength(primeR) - 1) / 64) + 1) * 8; await fdZKey.writeULE32(n8r); await writeBigInt(fdZKey, primeR, n8r); @@ -30338,7 +47149,7 @@ var snarkjs = (function (exports) { // Exponent is order(r - 1) / 3 let orderRsub1 = 3648040478639879203707734290876212514758060733402672390616367364429301415936n; - let exponent = Scalar.div(orderRsub1, Scalar.e(3)); + let exponent = Scalar$1.div(orderRsub1, Scalar$1.e(3)); return Fr.exp(generator, exponent); } @@ -30377,166 +47188,8 @@ var snarkjs = (function (exports) { You should have received a copy of the GNU General Public License along with snarkjs. If not, see . */ - const { keccak256 } = jsSha3; - const POLYNOMIAL = 0; - const SCALAR = 1; - - class Keccak256Transcript { - constructor(curve) { - this.G1 = curve.G1; - this.Fr = curve.Fr; - - this.reset(); - } - - reset() { - this.data = []; - } - - addPolCommitment(polynomialCommitment) { - this.data.push({type: POLYNOMIAL, data: polynomialCommitment}); - } - - addScalar(scalar) { - this.data.push({type: SCALAR, data: scalar}); - } - - getChallenge() { - if(0 === this.data.length) { - throw new Error("Keccak256Transcript: No data to generate a transcript"); - } - - let nPolynomials = 0; - let nScalars = 0; - - this.data.forEach(element => POLYNOMIAL === element.type ? nPolynomials++ : nScalars++); - - let buffer = new Uint8Array(nScalars * this.Fr.n8 + nPolynomials * this.G1.F.n8 * 2); - let offset = 0; - - for (let i = 0; i < this.data.length; i++) { - if (POLYNOMIAL === this.data[i].type) { - this.G1.toRprUncompressed(buffer, offset, this.data[i].data); - offset += this.G1.F.n8 * 2; - } else { - this.Fr.toRprBE(buffer, offset, this.data[i].data); - offset += this.Fr.n8; - } - } - - const value = Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(buffer))); - return this.Fr.e(value); - } - } - - /* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - - class Proof { - constructor(curve, logger) { - this.curve = curve; - this.logger = logger; - - this.resetProof(); - } - - resetProof() { - this.polynomials = {}; - this.evaluations = {}; - } - - addPolynomial(key, polynomial) { - if (key in this.polynomials) { - this.logger.warn(`proof: polynomial.${key} already exist in proof`); - } - this.polynomials[key] = polynomial; - } - - getPolynomial(key) { - if (!(key in this.polynomials)) { - this.logger.warn(`proof: polynomial ${key} does not exist in proof`); - } - return this.polynomials[key]; - } - - addEvaluation(key, evaluation) { - if (key in this.evaluations) { - this.logger.warn(`proof: evaluations.${key} already exist in proof`); - } - this.evaluations[key] = evaluation; - } - - getEvaluation(key) { - if (!(key in this.evaluations)) { - this.logger.warn(`proof: evaluation ${key} does not exist in proof`); - } - return this.evaluations[key]; - } - - toObjectProof() { - let res = {polynomials: {}, evaluations: {}}; - - Object.keys(this.polynomials).forEach(key => { - res.polynomials[key] = this.curve.G1.toObject(this.polynomials[key]); - }); - - Object.keys(this.evaluations).forEach(key => { - res.evaluations[key] = this.curve.Fr.toObject(this.evaluations[key]); - }); - - return res; - } - - fromObjectProof(objectProof) { - this.resetProof(); - - Object.keys(objectProof.polynomials).forEach(key => { - this.polynomials[key] = this.curve.G1.fromObject(objectProof.polynomials[key]); - }); - - Object.keys(objectProof.evaluations).forEach(key => { - this.evaluations[key] = this.curve.Fr.fromObject(objectProof.evaluations[key]); - }); - } - } - - /* - Copyright 2022 iden3 association. - - This file is part of snarkjs. - - snarkjs is a free software: you can redistribute it and/or - modify it under the terms of the GNU General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your option) - any later version. - - snarkjs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - snarkjs. If not, see . - */ - - const { stringifyBigInts } = utils; + const { stringifyBigInts } = utils$6; async function fflonkProve(zkeyFileName, witnessFileName, logger) { @@ -30562,7 +47215,7 @@ var snarkjs = (function (exports) { throw new Error("zkey file is not fflonk"); } - if (!Scalar.eq(zkey.r, wtns.q)) { + if (!Scalar$1.eq(zkey.r, wtns.q)) { throw new Error("Curve of the witness does not match the curve of the proving key"); } @@ -30599,7 +47252,7 @@ var snarkjs = (function (exports) { // First element in plonk is not used and can be any value. (But always the same). // We set it to zero to go faster in the exponentiations. buffWitness.set(Fr.zero, 0); - const buffInternalWitness = new BigBuffer(zkey.nAdditions * sFr); + const buffInternalWitness = new BigBuffer$1(zkey.nAdditions * sFr); let buffers = {}; let polynomials = {}; @@ -30633,25 +47286,25 @@ var snarkjs = (function (exports) { if (logger) logger.info(`> Reading Sections ${ZKEY_FF_SIGMA1_SECTION},${ZKEY_FF_SIGMA2_SECTION},${ZKEY_FF_SIGMA3_SECTION}. Sigma1, Sigma2 & Sigma 3`); if (logger) logger.info("··· Reading Sigma polynomials "); - polynomials.Sigma1 = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.Sigma2 = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.Sigma3 = new Polynomial(new BigBuffer(sDomain), curve, logger); + polynomials.Sigma1 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.Sigma2 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.Sigma3 = new Polynomial(new BigBuffer$1(sDomain), curve, logger); await fdZKey.readToBuffer(polynomials.Sigma1.coef, 0, sDomain, zkeySections[ZKEY_FF_SIGMA1_SECTION][0].p); await fdZKey.readToBuffer(polynomials.Sigma2.coef, 0, sDomain, zkeySections[ZKEY_FF_SIGMA2_SECTION][0].p); await fdZKey.readToBuffer(polynomials.Sigma3.coef, 0, sDomain, zkeySections[ZKEY_FF_SIGMA3_SECTION][0].p); if (logger) logger.info("··· Reading Sigma evaluations"); - evaluations.Sigma1 = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.Sigma2 = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.Sigma3 = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); + evaluations.Sigma1 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.Sigma2 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.Sigma3 = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); await fdZKey.readToBuffer(evaluations.Sigma1.eval, 0, sDomain * 4, zkeySections[ZKEY_FF_SIGMA1_SECTION][0].p + sDomain); await fdZKey.readToBuffer(evaluations.Sigma2.eval, 0, sDomain * 4, zkeySections[ZKEY_FF_SIGMA2_SECTION][0].p + sDomain); await fdZKey.readToBuffer(evaluations.Sigma3.eval, 0, sDomain * 4, zkeySections[ZKEY_FF_SIGMA3_SECTION][0].p + sDomain); if (logger) logger.info(`> Reading Section ${ZKEY_FF_PTAU_SECTION}. Powers of Tau`); - const PTau = new BigBuffer(zkey.domainSize * 16 * sG1); + const PTau = new BigBuffer$1(zkey.domainSize * 16 * sG1); // domainSize * 9 + 18 = SRS length in the zkey saved in setup process. // it corresponds to the maximum SRS length needed, specifically to commit C2 // notice that the reserved buffers size is zkey.domainSize * 16 * sG1 because a power of two buffer size is needed @@ -30746,7 +47399,7 @@ var snarkjs = (function (exports) { const i_sFr = i * sFr; const pub = buffWitness.slice(i_sFr, i_sFr + sFr); - publicSignals.push(Scalar.fromRprLE(pub)); + publicSignals.push(Scalar$1.fromRprLE(pub)); } if (logger) logger.info("FFLONK PROVER FINISHED"); @@ -30835,9 +47488,9 @@ var snarkjs = (function (exports) { async function computeWirePolynomials() { if (logger) logger.info("··· Reading data from zkey file"); // Build A, B and C evaluations buffer from zkey and witness files - buffers.A = new BigBuffer(sDomain); - buffers.B = new BigBuffer(sDomain); - buffers.C = new BigBuffer(sDomain); + buffers.A = new BigBuffer$1(sDomain); + buffers.B = new BigBuffer$1(sDomain); + buffers.C = new BigBuffer$1(sDomain); // Read zkey sections and fill the buffers const aMapBuff = await readSection(fdZKey, zkeySections, ZKEY_FF_A_MAP_SECTION); @@ -30906,11 +47559,11 @@ var snarkjs = (function (exports) { if (logger) logger.info(`··· Reading sections ${ZKEY_FF_QL_SECTION}, ${ZKEY_FF_QR_SECTION}` + `, ${ZKEY_FF_QM_SECTION}, ${ZKEY_FF_QO_SECTION}, ${ZKEY_FF_QC_SECTION}. Q selectors`); // Reserve memory for Q's evaluations - evaluations.QL = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.QR = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.QM = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.QO = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); - evaluations.QC = new Evaluations(new BigBuffer(sDomain * 4), curve, logger); + evaluations.QL = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QR = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QM = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QO = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); + evaluations.QC = new Evaluations(new BigBuffer$1(sDomain * 4), curve, logger); // Read Q's evaluations from zkey file await fdZKey.readToBuffer(evaluations.QL.eval, 0, sDomain * 4, zkeySections[ZKEY_FF_QL_SECTION][0].p + sDomain); @@ -30924,7 +47577,7 @@ var snarkjs = (function (exports) { evaluations.lagrange1 = new Evaluations(lagrangePolynomials, curve, logger); // Reserve memory for buffers T0 - buffers.T0 = new BigBuffer(sDomain * 4); + buffers.T0 = new BigBuffer$1(sDomain * 4); if (logger) logger.info("··· Computing T0 evaluations"); for (let i = 0; i < zkey.domainSize * 4; i++) { @@ -31059,8 +47712,8 @@ var snarkjs = (function (exports) { async function computeZ() { if (logger) logger.info("··· Computing Z evaluations"); - let numArr = new BigBuffer(sDomain); - let denArr = new BigBuffer(sDomain); + let numArr = new BigBuffer$1(sDomain); + let denArr = new BigBuffer$1(sDomain); // Set the first values to 1 numArr.set(Fr.one, 0); @@ -31157,8 +47810,8 @@ var snarkjs = (function (exports) { async function computeT1() { if (logger) logger.info("··· Computing T1 evaluations"); - buffers.T1 = new BigBuffer(sDomain * 2); - buffers.T1z = new BigBuffer(sDomain * 2); + buffers.T1 = new BigBuffer$1(sDomain * 2); + buffers.T1z = new BigBuffer$1(sDomain * 2); // Set initial omega let omega = Fr.one; @@ -31210,8 +47863,8 @@ var snarkjs = (function (exports) { async function computeT2() { if (logger) logger.info("··· Computing T2 evaluations"); - buffers.T2 = new BigBuffer(sDomain * 4); - buffers.T2z = new BigBuffer(sDomain * 4); + buffers.T2 = new BigBuffer$1(sDomain * 4); + buffers.T2z = new BigBuffer$1(sDomain * 4); // Set initial omega let omega = Fr.one; @@ -31386,11 +48039,11 @@ var snarkjs = (function (exports) { if (logger) logger.info("··· challenges.xi: " + Fr.toString(challenges.xi)); // Reserve memory for Q's polynomials - polynomials.QL = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.QR = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.QM = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.QO = new Polynomial(new BigBuffer(sDomain), curve, logger); - polynomials.QC = new Polynomial(new BigBuffer(sDomain), curve, logger); + polynomials.QL = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QR = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QM = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QO = new Polynomial(new BigBuffer$1(sDomain), curve, logger); + polynomials.QC = new Polynomial(new BigBuffer$1(sDomain), curve, logger); // Read Q's evaluations from zkey file await fdZKey.readToBuffer(polynomials.QL.coef, 0, sDomain, zkeySections[ZKEY_FF_QL_SECTION][0].p); @@ -31445,7 +48098,7 @@ var snarkjs = (function (exports) { // STEP 4.2 - Compute F(X) if (logger) logger.info("> Reading C0 polynomial"); - polynomials.C0 = new Polynomial(new BigBuffer(sDomain * 8), curve, logger); + polynomials.C0 = new Polynomial(new BigBuffer$1(sDomain * 8), curve, logger); await fdZKey.readToBuffer(polynomials.C0.coef, 0, sDomain * 8, zkeySections[ZKEY_FF_C0_SECTION][0].p); if (logger) logger.info("> Computing R0 polynomial"); @@ -31681,17 +48334,11 @@ var snarkjs = (function (exports) { // toInverse.denH1 & toInverse.denH2 -> Computed in round5, computeL() // · denominator needed in the verifier when computing L_i^{S0}(X), L_i^{S1}(X) and L_i^{S2}(X) - for (let i = 0; i < 8; i++) { - toInverse["LiS0_" + (i + 1)] = computeLiS0(i); - } + computeLiS0(toInverse, roots.S0.h0w8, challenges.y, curve); - for (let i = 0; i < 4; i++) { - toInverse["LiS1_" + (i + 1)] = computeLiS1(i); - } + computeLiS1(toInverse, roots.S1.h1w4, challenges.y, curve); - for (let i = 0; i < 6; i++) { - toInverse["LiS2_" + (i + 1)] = computeLiS2(i); - } + computeLiS2(toInverse, roots.S2.h2w3, roots.S2.h3w3, challenges.y, challenges.xi, challenges.xiw, curve); // · L_i i=1 to num public inputs, needed in step 6 and 7 of the verifier to compute L_1(xi) and PI(xi) const size = Math.max(1, zkey.nPublic); @@ -31699,52 +48346,84 @@ var snarkjs = (function (exports) { let w = Fr.one; for (let i = 0; i < size; i++) { toInverse["Li_" + (i + 1)] = Fr.mul(Fr.e(zkey.domainSize), Fr.sub(challenges.xi, w)); - - w = Fr.mul(w, zkey.w); + w = Fr.mul(w, Fr.w[zkey.power]); } let mulAccumulator = Fr.one; for (const element of Object.values(toInverse)) { - mulAccumulator = Fr.mul(mulAccumulator, element); + if(Array.isArray(element)) { + for (const subElement of element) { + mulAccumulator = Fr.mul(mulAccumulator, subElement); + } + } else { + mulAccumulator = Fr.mul(mulAccumulator, element); + } } return Fr.inv(mulAccumulator); - function computeLiS0(i) { - // Compute L_i^{(S0)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 7; j++) { - idx = (idx + 1) % 8; - - den = Fr.mul(den, Fr.sub(roots.S0.h0w8[i], roots.S0.h0w8[idx])); + + function computeLiS0(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS0_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); } - return den; + + return Li; } - function computeLiS1(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 3; j++) { - idx = (idx + 1) % 4; + function computeLiS1(toInverse, roots, x, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + toInverse[["LiS1_" + (i + 1)]] = Fr.mul(Fr.mul(den1, den2), den3); - den = Fr.mul(den, Fr.sub(roots.S1.h1w4[i], roots.S1.h1w4[idx])); } - return den; + + return Li; } - function computeLiS2(i) { - // Compute L_i^{(S1)}(y) - let idx = i; - let den = Fr.one; - for (let j = 0; j < 5; j++) { - idx = (idx + 1) % 6; - - const root1 = i < 3 ? roots.S2.h2w3[i] : roots.S2.h3w3[i - 3]; - const root2 = idx < 3 ? roots.S2.h2w3[idx] : roots.S2.h3w3[idx - 3]; - den = Fr.mul(den, Fr.sub(root1, root2)); + function computeLiS2(toInverse, S2, S2p, value, xi, xiw, curve) { + const Fr = curve.Fr; + + const Li = []; + + const _3h2 = Fr.mul(Fr.e(3), S2[0]); + const xisubxiw = Fr.sub(xi, xiw); + let den1 = Fr.mul(_3h2, xisubxiw); + for (let i = 0; i < 3; i++) { + const den2 = S2[2 * i % 3]; + const den3 = Fr.sub(value, S2[i]); + + toInverse[["LiS2_" + (i + 1)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } - return den; + + const _3h3 = Fr.mul(Fr.e(3), S2p[0]); + const xiwsubxi = Fr.sub(xiw, xi); + den1 = Fr.mul(_3h3, xiwsubxi); + for (let i = 0; i < 3; i++) { + const den2 = S2p[2 * i % 3]; + const den3 = Fr.sub(value, S2p[i]); + + toInverse[["LiS2_" + (i + 1 + 3)]] = Fr.mul(den1,Fr.mul(den2, den3)); + } + + return Li; } } } @@ -31765,7 +48444,7 @@ var snarkjs = (function (exports) { You should have received a copy of the GNU General Public License along with snarkjs. If not, see . */ - const {unstringifyBigInts: unstringifyBigInts$2} = utils; + const {unstringifyBigInts: unstringifyBigInts$2} = utils$6; async function fflonkFullProve(_input, wasmFilename, zkeyFilename, logger) { const input = unstringifyBigInts$2(_input); @@ -31798,7 +48477,7 @@ var snarkjs = (function (exports) { snarkjs. If not, see . */ - const { unstringifyBigInts: unstringifyBigInts$1 } = utils; + const { unstringifyBigInts: unstringifyBigInts$1 } = utils$6; async function fflonkVerify(_vk_verifier, _publicSignals, _proof, logger) { if (logger) logger.info("FFLONK VERIFIER STARTED"); @@ -31837,15 +48516,23 @@ var snarkjs = (function (exports) { // STEP 1 - Validate that all polynomial commitments ∈ G_1 if (logger) logger.info("> Checking commitments belong to G1"); if (!commitmentsBelongToG1(curve, proof, vk)) { - logger.error("Proof is not well constructed"); + if (logger) logger.error("Proof commitments are not valid"); return false; } - // TODO // STEP 2 - Validate that all evaluations ∈ F + if (logger) logger.info("> Checking evaluations belong to F"); + if (!evaluationsAreValid(curve, proof)) { + if (logger) logger.error("Proof evaluations are not valid."); + return false; + } - // TODO // STEP 3 - Validate that w_i ∈ F for i ∈ [l] + if (logger) logger.info("> Checking public inputs belong to F"); + if (!publicInputsAreValid(curve, publicSignals)) { + if (logger) logger.error("Public inputs are not valid."); + return false; + } // STEP 4 - Compute the challenges: beta, gamma, xi, alpha and y ∈ F // as in prover description, from the common preprocessed inputs, public inputs and elements of π_SNARK @@ -31867,7 +48554,7 @@ var snarkjs = (function (exports) { // STEP 8 - Compute polynomial r0 ∈ F_{<4}[X] if (logger) logger.info("> Computing r0(y)"); - const r0 = computeR0(proof, challenges, roots, pi, curve, logger); + const r0 = computeR0(proof, challenges, roots, curve, logger); // STEP 9 - Compute polynomial r1 ∈ F_{<4}[X] if (logger) logger.info("> Computing r1(y)"); @@ -31927,6 +48614,41 @@ var snarkjs = (function (exports) { && G1.isValid(vk.C0); } + function checkValueBelongToField(curve, value) { + return Scalar$1.lt(value, curve.r); + } + + function checkEvaluationIsValid(curve, evaluation) { + return checkValueBelongToField(curve, Scalar$1.fromRprLE(evaluation)); + } + + function evaluationsAreValid(curve, proof) { + return checkEvaluationIsValid(curve, proof.evaluations.ql) + && checkEvaluationIsValid(curve, proof.evaluations.qr) + && checkEvaluationIsValid(curve, proof.evaluations.qm) + && checkEvaluationIsValid(curve, proof.evaluations.qo) + && checkEvaluationIsValid(curve, proof.evaluations.qc) + && checkEvaluationIsValid(curve, proof.evaluations.s1) + && checkEvaluationIsValid(curve, proof.evaluations.s2) + && checkEvaluationIsValid(curve, proof.evaluations.s3) + && checkEvaluationIsValid(curve, proof.evaluations.a) + && checkEvaluationIsValid(curve, proof.evaluations.b) + && checkEvaluationIsValid(curve, proof.evaluations.c) + && checkEvaluationIsValid(curve, proof.evaluations.z) + && checkEvaluationIsValid(curve, proof.evaluations.zw) + && checkEvaluationIsValid(curve, proof.evaluations.t1w) + && checkEvaluationIsValid(curve, proof.evaluations.t2w); + } + + function publicInputsAreValid(curve, publicInputs) { + for(let i = 0; i < publicInputs.length; i++) { + if(!checkValueBelongToField(curve, publicInputs[i])) { + return false; + } + } + return true; + } + function computeChallenges(curve, proof, vk, publicSignals, logger) { const Fr = curve.Fr; @@ -32006,6 +48728,7 @@ var snarkjs = (function (exports) { // Compute xi = xi_seeder^12 challenges.xi = Fr.mul(Fr.square(roots.S2.h2w3[0]), roots.S2.h2w3[0]); + challenges.xiw = Fr.mul(challenges.xi, Fr.w[vk.power]); challenges.xiN = challenges.xi; vk.domainSize = 1; @@ -32053,8 +48776,8 @@ var snarkjs = (function (exports) { const Fr = curve.Fr; const size = Math.max(1, vk.nPublic); - const numArr = new BigBuffer(size * Fr.n8); - let denArr = new BigBuffer(size * Fr.n8); + const numArr = new BigBuffer$1(size * Fr.n8); + let denArr = new BigBuffer$1(size * Fr.n8); let w = Fr.one; for (let i = 0; i < size; i++) { @@ -32085,15 +48808,17 @@ var snarkjs = (function (exports) { return pi; } - function computeR0(proof, challenges, roots, pi, curve, logger) { + function computeR0(proof, challenges, roots, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S0.h0w8, challenges.y, challenges.xi, curve); + // r0(y) = ∑_1^8 C_0(h_0 ω_8^{i-1}) L_i(y). To this end we need to compute // Compute the 8 C0 values - if (logger) logger.info("··· Computing C0(h_0ω_8^i) values"); + if (logger) logger.info("··· Computing r0(y)"); - let c0Values = []; + let res = Fr.zero; for (let i = 0; i < 8; i++) { let coefValues = []; coefValues[1] = roots.S0.h0w8[i]; @@ -32101,34 +48826,25 @@ var snarkjs = (function (exports) { coefValues[j] = Fr.mul(coefValues[j - 1], roots.S0.h0w8[i]); } - c0Values[i] = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qo, coefValues[2])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qm, coefValues[3])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.qc, coefValues[4])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s1, coefValues[5])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s2, coefValues[6])); - c0Values[i] = Fr.add(c0Values[i], Fr.mul(proof.evaluations.s3, coefValues[7])); + let c0 = Fr.add(proof.evaluations.ql, Fr.mul(proof.evaluations.qr, coefValues[1])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qo, coefValues[2])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qm, coefValues[3])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.qc, coefValues[4])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s1, coefValues[5])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s2, coefValues[6])); + c0 = Fr.add(c0, Fr.mul(proof.evaluations.s3, coefValues[7])); + + res = Fr.add(res, Fr.mul(c0, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R0 = Polynomial.lagrangePolynomialInterpolation( - [roots.S0.h0w8[0], roots.S0.h0w8[1], roots.S0.h0w8[2], roots.S0.h0w8[3], - roots.S0.h0w8[4], roots.S0.h0w8[5], roots.S0.h0w8[6], roots.S0.h0w8[7]], - c0Values, curve); - - // Check the degree of r1(X) < 4 - if (R0.degree() > 7) { - throw new Error("R0 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r0(y)"); - return R0.evaluate(challenges.y); + return res; } function computeR1(proof, challenges, roots, pi, curve, logger) { const Fr = curve.Fr; + const Li = computeLagrangeLiSi(roots.S1.h1w4, challenges.y, challenges.xi, curve); + // r1(y) = ∑_1^4 C_1(h_1 ω_4^{i-1}) L_i(y). To this end we need to compute // Z1 = {C1(h_1}, C1(h_1 ω_4), C1(h_1 ω_4^2), C1(h_1 ω_4^3)} // where C_1(h_1 ω_4^{i-1}) = eval.a + h_1 ω_4^i eval.b + (h_1 ω_4^i)^2 eval.c + (h_1 ω_4^i)^3 T0(xi), @@ -32147,33 +48863,25 @@ var snarkjs = (function (exports) { // Compute the 4 C1 values if (logger) logger.info("··· Computing C1(h_1ω_4^i) values"); - let c1Values = []; + let res = Fr.zero; for (let i = 0; i < 4; i++) { - c1Values[i] = proof.evaluations.a; - c1Values[i] = Fr.add(c1Values[i], Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); + let c1 = proof.evaluations.a; + c1 = Fr.add(c1, Fr.mul(roots.S1.h1w4[i], proof.evaluations.b)); const h1w4Squared = Fr.square(roots.S1.h1w4[i]); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(h1w4Squared, proof.evaluations.c)); - c1Values[i] = Fr.add(c1Values[i], Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + c1 = Fr.add(c1, Fr.mul(h1w4Squared, proof.evaluations.c)); + c1 = Fr.add(c1, Fr.mul(Fr.mul(h1w4Squared, roots.S1.h1w4[i]), t0)); + + res = Fr.add(res, Fr.mul(c1, Li[i])); } - // Interpolate a polynomial with the points computed previously - const R1 = Polynomial.lagrangePolynomialInterpolation( - [roots.S1.h1w4[0], roots.S1.h1w4[1], roots.S1.h1w4[2], roots.S1.h1w4[3]], - c1Values, curve); - - // Check the degree of r1(X) < 4 - if (R1.degree() > 3) { - throw new Error("R1 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r1(y)"); - return R1.evaluate(challenges.y); + return res; } function computeR2(proof, challenges, roots, lagrange1, vk, curve, logger) { const Fr = curve.Fr; + const LiS2 = computeLagrangeLiS2([roots.S2.h2w3, roots.S2.h3w3], challenges.y, challenges.xi, challenges.xiw, curve); + // r2(y) = ∑_1^3 C_2(h_2 ω_3^{i-1}) L_i(y) + ∑_1^3 C_2(h_3 ω_3^{i-1}) L_{i+3}(y). To this end we need to compute // Z2 = {[C2(h_2}, C2(h_2 ω_3), C2(h_2 ω_3^2)], [C2(h_3}, C2(h_3 ω_3), C2(h_3 ω_3^2)]} // where C_2(h_2 ω_3^{i-1}) = eval.z + h_2 ω_2^i T1(xi) + (h_2 ω_3^i)^2 T2(xi), @@ -32206,33 +48914,23 @@ var snarkjs = (function (exports) { // Compute the 6 C2 values if (logger) logger.info("··· Computing C2(h_2ω_3^i) values"); - let c2Values = []; + let res = Fr.zero; for (let i = 0; i < 3; i++) { - c2Values[i] = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); - c2Values[i] = Fr.add(c2Values[i], Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + let c2 = Fr.add(proof.evaluations.z, Fr.mul(roots.S2.h2w3[i], t1)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h2w3[i]), t2)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i])); } if (logger) logger.info("··· Computing C2(h_3ω_3^i) values"); for (let i = 0; i < 3; i++) { - c2Values[i + 3] = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); - c2Values[i + 3] = Fr.add(c2Values[i + 3], Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + let c2 = Fr.add(proof.evaluations.zw, Fr.mul(roots.S2.h3w3[i], proof.evaluations.t1w)); + c2 = Fr.add(c2, Fr.mul(Fr.square(roots.S2.h3w3[i]), proof.evaluations.t2w)); + + res = Fr.add(res, Fr.mul(c2, LiS2[i + 3])); } - // Interpolate a polynomial with the points computed previously - if (logger) logger.info("··· Computing r2(xi)"); - const R2 = Polynomial.lagrangePolynomialInterpolation( - [roots.S2.h2w3[0], roots.S2.h2w3[1], roots.S2.h2w3[2], - roots.S2.h3w3[0], roots.S2.h3w3[1], roots.S2.h3w3[2]], - c2Values, curve); - - // Check the degree of r2(X) < 6 - if (R2.degree() > 5) { - throw new Error("R2 Polynomial is not well calculated"); - } - - // Evaluate the polynomial in challenges.y - if (logger) logger.info("··· Computing evaluation r2(y)"); - return R2.evaluate(challenges.y); + return res; } function computeF(curve, proof, vk, challenges, roots) { @@ -32297,6 +48995,61 @@ var snarkjs = (function (exports) { return await curve.pairingEq(G1.neg(A1), A2, B1, B2); } + + function computeLagrangeLiSi(roots, x, xi, curve) { + const Fr = curve.Fr; + const len = roots.length; + + const num = Fr.sub(Fr.exp(x, len), xi); + const den1 = Fr.mul(Fr.e(len), Fr.exp(roots[0], len - 2)); + + const Li = []; + for (let i = 0; i < len; i++) { + const den2 = roots[((len - 1) * i) % len]; + const den3 = Fr.sub(x, roots[i]); + + Li[i] = Fr.div(num, Fr.mul(Fr.mul(den1, den2), den3)); + } + + return Li; + } + + function computeLagrangeLiS2(roots, value, xi0, xi1, curve) { + const Fr = curve.Fr; + + const Li = []; + + const len = roots[0].length; + const n = len * roots.length; + + const num1 = Fr.exp(value, n); + const num2 = Fr.mul(Fr.add(xi0, xi1), Fr.exp(value, len)); + const num3 = Fr.mul(xi0, xi1); + const num = Fr.add(Fr.sub(num1, num2), num3); + + let den1 = Fr.mul(Fr.mul(Fr.e(len), roots[0][0]), Fr.sub(xi0, xi1)); + for (let i = 0; i < len; i++) { + const den2 = roots[0][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[0][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i] = Fr.div(num, den); + } + + den1 = Fr.mul(Fr.mul(Fr.e(len), roots[1][0]), Fr.sub(xi1, xi0)); + for (let i = 0; i < len; i++) { + const den2 = roots[1][(len - 1) * i % len]; + const den3 = Fr.sub(value, roots[1][i]); + + const den = Fr.mul(den1,Fr.mul(den2, den3)); + + Li[i + len] = Fr.div(num, den); + } + + return Li; + } + /* Copyright 2021 0KIMS association. @@ -32316,16 +49069,12 @@ var snarkjs = (function (exports) { along with snarkJS. If not, see . */ - const {unstringifyBigInts} = utils; - - function i2hex(i) { - return ("0" + i.toString(16)).slice(-2); - } + const {unstringifyBigInts} = utils$6; function p256(n) { let nstr = n.toString(16); while (nstr.length < 64) nstr = "0" + nstr; - nstr = `"0x${nstr}"`; + nstr = `0x${nstr}`; return nstr; } @@ -32334,8 +49083,8 @@ var snarkjs = (function (exports) { const pub = unstringifyBigInts(_pub); const curve = await getCurveFromName(proof.curve); - const G1 = curve.G1; - const Fr = curve.Fr; + curve.G1; + curve.Fr; let inputs = ""; for (let i = 0; i < pub.length; i++) { @@ -32343,32 +49092,17 @@ var snarkjs = (function (exports) { inputs = inputs + p256(pub[i]); } - const proofBuff = new Uint8Array(G1.F.n8 * 2 * 4 + Fr.n8 * 16); - - G1.toRprUncompressed(proofBuff, 0, G1.e(proof.polynomials.C1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 2, G1.e(proof.polynomials.C2)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 4, G1.e(proof.polynomials.W1)); - G1.toRprUncompressed(proofBuff, G1.F.n8 * 6, G1.e(proof.polynomials.W2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8, Fr.e(proof.evaluations.ql)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8, Fr.e(proof.evaluations.qr)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 2, Fr.e(proof.evaluations.qm)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 3, Fr.e(proof.evaluations.qo)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 4, Fr.e(proof.evaluations.qc)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 5, Fr.e(proof.evaluations.s1)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 6, Fr.e(proof.evaluations.s2)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 7, Fr.e(proof.evaluations.s3)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 8, Fr.e(proof.evaluations.a)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 9, Fr.e(proof.evaluations.b)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 10, Fr.e(proof.evaluations.c)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 11, Fr.e(proof.evaluations.z)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 12, Fr.e(proof.evaluations.zw)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 13, Fr.e(proof.evaluations.t1w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 14, Fr.e(proof.evaluations.t2w)); - Fr.toRprBE(proofBuff, G1.F.n8 * 8 + Fr.n8 * 15, Fr.e(proof.evaluations.inv)); - - const proofHex = Array.from(proofBuff).map(i2hex).join(""); - - return `0x${proofHex},[${inputs}]`; + return `[${p256(proof.polynomials.C1[0])}, ${p256(proof.polynomials.C1[1])},` + + `${p256(proof.polynomials.C2[0])},${p256(proof.polynomials.C2[1])},` + + `${p256(proof.polynomials.W1[0])},${p256(proof.polynomials.W1[1])},` + + `${p256(proof.polynomials.W2[0])},${p256(proof.polynomials.W2[1])},` + + `${p256(proof.evaluations.ql)},${p256(proof.evaluations.qr)},${p256(proof.evaluations.qm)},` + + `${p256(proof.evaluations.qo)},${p256(proof.evaluations.qc)},${p256(proof.evaluations.s1)},` + + `${p256(proof.evaluations.s2)},${p256(proof.evaluations.s3)},${p256(proof.evaluations.a)},` + + `${p256(proof.evaluations.b)},${p256(proof.evaluations.c)},${p256(proof.evaluations.z)},` + + `${p256(proof.evaluations.zw)},${p256(proof.evaluations.t1w)},${p256(proof.evaluations.t2w)},` + + `${p256(proof.evaluations.inv)}],` + + `[${inputs}]`; } /* @@ -32413,4 +49147,4 @@ var snarkjs = (function (exports) { return exports; })({}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcmtqcy5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvc2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZnV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZnNxcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9jaGFjaGEuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9yYW5kb20uanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mZnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mMWZpZWxkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2ludC5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF90aW1lc3NjYWxhci5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9iYXRjaGludmVyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfYmF0Y2hjb252ZXJ0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2JhdGNob3AuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYmlnaW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2YxbS5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mMS5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mMm0uanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfZjNtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX3RpbWVzc2NhbGFybmFmLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX211bHRpZXhwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2ZmdC5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9wb2wuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfcWFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2FwcGx5a2V5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2JuMTI4L2J1aWxkX2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2JsczEyMzgxL2J1aWxkX2JsczEyMzgxLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JpZ2J1ZmZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2VuZ2luZV9iYXRjaGNvbnZlcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy93YXNtX2ZpZWxkMS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL3dhc21fZmllbGQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9maWVsZDMuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy93YXNtX2N1cnZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdGhyZWFkbWFuX3RocmVhZC5qcyIsIi4uL25vZGVfbW9kdWxlcy93ZWItd29ya2VyL2Nqcy9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdGhyZWFkbWFuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX2FwcGx5a2V5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX3BhaXJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9lbmdpbmVfbXVsdGlleHAuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9lbmdpbmVfZmZ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21idWlsZGVyL3NyYy91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtYnVpbGRlci9zcmMvY29kZWJ1aWxkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWJ1aWxkZXIvc3JjL2Z1bmN0aW9uYnVpbGRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtYnVpbGRlci9zcmMvbW9kdWxlYnVpbGRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvYmxzMTIzODEuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9jdXJ2ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L21haW4uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdGZpbGUvc3JjL29zZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvbWVtZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvYmlnbWVtZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvZmFzdGZpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQGlkZW4zL2JpbmZpbGV1dGlscy9zcmMvYmluZmlsZXV0aWxzLmpzIiwiLi4vc3JjL2N1cnZlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9uYW5vYXNzZXJ0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2I0YS9saWIvYXNjaWkuanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi9oZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi91dGY4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2I0YS9saWIvdXRmMTZsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9iNGEvYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ibGFrZTJiLXdhc20vYmxha2UyYi5qcyIsIi4uL25vZGVfbW9kdWxlcy9ibGFrZTJiLXdhc20vaW5kZXguanMiLCIuLi9zcmMvbWlzYy5qcyIsIi4uL3NyYy96a2V5X2NvbnN0YW50cy5qcyIsIi4uL3NyYy9mZmxvbmtfY29uc3RhbnRzLmpzIiwiLi4vc3JjL3prZXlfdXRpbHMuanMiLCIuLi9zcmMvd3Ruc191dGlscy5qcyIsIi4uL3NyYy9ncm90aDE2X3Byb3ZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL2pzL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL2pzL3dpdG5lc3NfY2FsY3VsYXRvci5qcyIsIi4uL3NyYy93dG5zX2NhbGN1bGF0ZS5qcyIsIi4uL3NyYy9ncm90aDE2X2Z1bGxwcm92ZS5qcyIsIi4uL3NyYy9ncm90aDE2X3ZlcmlmeS5qcyIsIi4uL3NyYy9ncm90aDE2X2V4cG9ydHNvbGlkaXR5Y2FsbGRhdGEuanMiLCIuLi9zcmMvZ3JvdGgxNi5qcyIsIi4uL3NyYy9rZXlwYWlyLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X3V0aWxzLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X25ldy5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV9leHBvcnRfY2hhbGxlbmdlLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2ltcG9ydC5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV92ZXJpZnkuanMiLCIuLi9zcmMvbXBjX2FwcGx5a2V5LmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2NoYWxsZW5nZV9jb250cmlidXRlLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2JlYWNvbi5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV9jb250cmlidXRlLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X3ByZXBhcmVwaGFzZTIuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfdHJ1bmNhdGUuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfY29udmVydC5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV9leHBvcnRfanNvbi5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdS5qcyIsIi4uL3NyYy9yMWNzX3ByaW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BpZGVuMy9iaWdhcnJheS9zcmMvYmlnYXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvc3JjL3IxY3NmaWxlLmpzIiwiLi4vc3JjL3IxY3NfaW5mby5qcyIsIi4uL3NyYy9yMWNzX2V4cG9ydF9qc29uLmpzIiwiLi4vc3JjL3IxY3MuanMiLCIuLi9zcmMvbG9hZHN5bXMuanMiLCIuLi9zcmMvd3Ruc19kZWJ1Zy5qcyIsIi4uL3NyYy93dG5zX2V4cG9ydF9qc29uLmpzIiwiLi4vc3JjL3d0bnNfY2hlY2suanMiLCIuLi9zcmMvd3Rucy5qcyIsIi4uL3NyYy9iaWdhcnJheS5qcyIsIi4uL3NyYy96a2V5X25ldy5qcyIsIi4uL3NyYy96a2V5X2V4cG9ydF9iZWxsbWFuLmpzIiwiLi4vc3JjL3prZXlfaW1wb3J0X2JlbGxtYW4uanMiLCIuLi9zcmMvemtleV92ZXJpZnlfZnJvbWluaXQuanMiLCIuLi9zcmMvemtleV92ZXJpZnlfZnJvbXIxY3MuanMiLCIuLi9zcmMvemtleV9jb250cmlidXRlLmpzIiwiLi4vc3JjL3prZXlfYmVhY29uLmpzIiwiLi4vc3JjL3prZXlfZXhwb3J0X2pzb24uanMiLCIuLi9zcmMvemtleV9iZWxsbWFuX2NvbnRyaWJ1dGUuanMiLCIuLi9zcmMvemtleV9leHBvcnRfdmVyaWZpY2F0aW9ua2V5LmpzIiwiLi4vc3JjL2ZmbG9ua19leHBvcnRfc29saWRpdHlfdmVyaWZpZXIuanMiLCIuLi9zcmMvemtleV9leHBvcnRfc29saWRpdHl2ZXJpZmllci5qcyIsIi4uL3NyYy96a2V5LmpzIiwiLi4vc3JjL3Bsb25rX3NldHVwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2pzLXNoYTMvc3JjL3NoYTMuanMiLCIuLi9zcmMvcGxvbmtfcHJvdmUuanMiLCIuLi9zcmMvcGxvbmtfZnVsbHByb3ZlLmpzIiwiLi4vc3JjL3Bsb25rX3ZlcmlmeS5qcyIsIi4uL3NyYy9wbG9ua19leHBvcnRzb2xpZGl0eWNhbGxkYXRhLmpzIiwiLi4vc3JjL3Bsb25rLmpzIiwiLi4vc3JjL3Bsb25rX2VxdWF0aW9uLmpzIiwiLi4vc3JjL3IxY3NfY29uc3RyYWludF9wcm9jZXNzb3IuanMiLCIuLi9zcmMvcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzIiwiLi4vc3JjL3BvbHlub21pYWwvZXZhbHVhdGlvbnMuanMiLCIuLi9zcmMvcG9seW5vbWlhbC9jcG9seW5vbWlhbC5qcyIsIi4uL3NyYy9mZmxvbmtfc2V0dXAuanMiLCIuLi9zcmMvS2VjY2FrMjU2VHJhbnNjcmlwdC5qcyIsIi4uL3NyYy9wcm9vZi5qcyIsIi4uL3NyYy9mZmxvbmtfcHJvdmUuanMiLCIuLi9zcmMvZmZsb25rX2Z1bGxfcHJvdmUuanMiLCIuLi9zcmMvZmZsb25rX3ZlcmlmeS5qcyIsIi4uL3NyYy9mZmxvbmtfZXhwb3J0X2NhbGxkYXRhLmpzIiwiLi4vc3JjL2ZmbG9uay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qIGdsb2JhbCBCaWdJbnQgKi9cbmNvbnN0IGhleExlbiA9IFsgMCwgMSwgMiwgMiwgMywgMywgMywgMywgNCAsNCAsNCAsNCAsNCAsNCAsNCAsNF07XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU3RyaW5nKHMsIHJhZGl4KSB7XG4gICAgaWYgKCghcmFkaXgpfHwocmFkaXg9PTEwKSkge1xuICAgICAgICByZXR1cm4gQmlnSW50KHMpO1xuICAgIH0gZWxzZSBpZiAocmFkaXg9PTE2KSB7XG4gICAgICAgIGlmIChzLnNsaWNlKDAsMikgPT0gXCIweFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gQmlnSW50KHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEJpZ0ludChcIjB4XCIrcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBlID0gZnJvbVN0cmluZztcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21BcnJheShhLCByYWRpeCkge1xuICAgIGxldCBhY2MgPUJpZ0ludCgwKTtcbiAgICByYWRpeCA9IEJpZ0ludChyYWRpeCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWNjID0gYWNjKnJhZGl4ICsgQmlnSW50KGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYml0TGVuZ3RoKGEpIHtcbiAgICBjb25zdCBhUyA9YS50b1N0cmluZygxNik7XG4gICAgcmV0dXJuIChhUy5sZW5ndGgtMSkqNCAraGV4TGVuW3BhcnNlSW50KGFTWzBdLCAxNildO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZWdhdGl2ZShhKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA8IEJpZ0ludCgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzWmVybyhhKSB7XG4gICAgcmV0dXJuICFhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hpZnRMZWZ0KGEsIG4pIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDw8IEJpZ0ludChuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWZ0UmlnaHQoYSwgbikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPj4gQmlnSW50KG4pO1xufVxuXG5leHBvcnQgY29uc3Qgc2hsID0gc2hpZnRMZWZ0O1xuZXhwb3J0IGNvbnN0IHNociA9IHNoaWZ0UmlnaHQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09kZChhKSB7XG4gICAgcmV0dXJuIChCaWdJbnQoYSkgJiBCaWdJbnQoMSkpID09IEJpZ0ludCgxKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gbmFmKG4pIHtcbiAgICBsZXQgRSA9IEJpZ0ludChuKTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICB3aGlsZSAoRSkge1xuICAgICAgICBpZiAoRSAmIEJpZ0ludCgxKSkge1xuICAgICAgICAgICAgY29uc3QgeiA9IDIgLSBOdW1iZXIoRSAlIEJpZ0ludCg0KSk7XG4gICAgICAgICAgICByZXMucHVzaCggeiApO1xuICAgICAgICAgICAgRSA9IEUgLSBCaWdJbnQoeik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICB9XG4gICAgICAgIEUgPSBFID4+IEJpZ0ludCgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYml0cyhuKSB7XG4gICAgbGV0IEUgPSBCaWdJbnQobik7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgd2hpbGUgKEUpIHtcbiAgICAgICAgaWYgKEUgJiBCaWdJbnQoMSkpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgfVxuICAgICAgICBFID0gRSA+PiBCaWdJbnQoMSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcihzKSB7XG4gICAgaWYgKHM+QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSICkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBiaWdcIik7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIocyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5KHMsIHJhZGl4KSB7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IHJlbSA9IEJpZ0ludChzKTtcbiAgICByYWRpeCA9IEJpZ0ludChyYWRpeCk7XG4gICAgd2hpbGUgKHJlbSkge1xuICAgICAgICByZXMudW5zaGlmdCggTnVtYmVyKHJlbSAlIHJhZGl4KSk7XG4gICAgICAgIHJlbSA9IHJlbSAvIHJhZGl4O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKyBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWIoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgLSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWcoYSkge1xuICAgIHJldHVybiAtQmlnSW50KGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXVsKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICogQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlKGEpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICogQmlnSW50KGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG93KGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICoqIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAqKiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYnMoYSkge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPj0gMCA/IEJpZ0ludChhKSA6IC1CaWdJbnQoYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXYoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgLyBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2QoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgJSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA9PSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXEoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgIT0gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbHQoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPCBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBndChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA8PSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXEoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPj0gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFuZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAmIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvcihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSB8IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ4b3IoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgXiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYW5kKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICYmIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvcihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSB8fCBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsbm90KGEpIHtcbiAgICByZXR1cm4gIUJpZ0ludChhKTtcbn1cblxuLy8gUmV0dXJucyBhIGJ1ZmZlciB3aXRoIExpdHRsZSBFbmRpYW4gUmVwcmVzZW50YXRpb25cbmV4cG9ydCBmdW5jdGlvbiB0b1JwckxFKGJ1ZmYsIG8sIGUsIG44KSB7XG4gICAgY29uc3QgcyA9IFwiMDAwMDAwMFwiICsgZS50b1N0cmluZygxNik7XG4gICAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheShidWZmLmJ1ZmZlciwgbywgbjgvNCk7XG4gICAgY29uc3QgbCA9ICgoKHMubGVuZ3RoLTcpKjQgLSAxKSA+PiA1KSsxOyAgICAvLyBOdW1iZXIgb2YgMzJiaXQgd29yZHM7XG4gICAgZm9yIChsZXQgaT0wOyBpPGw7IGkrKykgdltpXSA9IHBhcnNlSW50KHMuc3Vic3RyaW5nKHMubGVuZ3RoLTgqaS04LCBzLmxlbmd0aC04KmkpLCAxNik7XG4gICAgZm9yIChsZXQgaT1sOyBpPHYubGVuZ3RoOyBpKyspIHZbaV0gPSAwO1xuICAgIGZvciAobGV0IGk9di5sZW5ndGgqNDsgaTxuODsgaSsrKSBidWZmW2ldID0gdG9OdW1iZXIoYmFuZChzaGlmdFJpZ2h0KGUsIGkqOCksIDB4RkYpKTtcbn1cblxuLy8gUmV0dXJucyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gUmVwcmVzZW50YXRpb25cbmV4cG9ydCBmdW5jdGlvbiB0b1JwckJFKGJ1ZmYsIG8sIGUsIG44KSB7XG4gICAgY29uc3QgcyA9IFwiMDAwMDAwMFwiICsgZS50b1N0cmluZygxNik7XG4gICAgY29uc3QgdiA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0ICsgbywgbjgpO1xuICAgIGNvbnN0IGwgPSAoKChzLmxlbmd0aC03KSo0IC0gMSkgPj4gNSkrMTsgICAgLy8gTnVtYmVyIG9mIDMyYml0IHdvcmRzO1xuICAgIGZvciAobGV0IGk9MDsgaTxsOyBpKyspIHYuc2V0VWludDMyKG44LWkqNCAtNCwgcGFyc2VJbnQocy5zdWJzdHJpbmcocy5sZW5ndGgtOCppLTgsIHMubGVuZ3RoLTgqaSksIDE2KSwgZmFsc2UpO1xuICAgIGZvciAobGV0IGk9MDsgaTxuOC80LWw7IGkrKykgdltpXSA9IDA7XG59XG5cbi8vIFBhc2VzIGEgYnVmZmVyIHdpdGggTGl0dGxlIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21ScHJMRShidWZmLCBvLCBuOCkge1xuICAgIG44ID0gbjggfHwgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIG8gPSBvIHx8IDA7XG4gICAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheShidWZmLmJ1ZmZlciwgbywgbjgvNCk7XG4gICAgY29uc3QgYSA9IG5ldyBBcnJheShuOC80KTtcbiAgICB2LmZvckVhY2goIChjaCxpKSA9PiBhW2EubGVuZ3RoLWktMV0gPSBjaC50b1N0cmluZygxNikucGFkU3RhcnQoOCxcIjBcIikgKTtcbiAgICByZXR1cm4gZnJvbVN0cmluZyhhLmpvaW4oXCJcIiksIDE2KTtcbn1cblxuLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJwckJFKGJ1ZmYsIG8sIG44KSB7XG4gICAgbjggPSBuOCB8fCBidWZmLmJ5dGVMZW5ndGg7XG4gICAgbyA9IG8gfHwgMDtcbiAgICBjb25zdCB2ID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQgKyBvLCBuOCk7XG4gICAgY29uc3QgYSA9IG5ldyBBcnJheShuOC80KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bjgvNDsgaSsrKSB7XG4gICAgICAgIGFbaV0gPSB2LmdldFVpbnQzMihpKjQsIGZhbHNlKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbVN0cmluZyhhLmpvaW4oXCJcIiksIDE2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgcmV0dXJuIGEudG9TdHJpbmcocmFkaXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9MRUJ1ZmYoYSkge1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShNYXRoLmZsb29yKChiaXRMZW5ndGgoYSkgLSAxKSAvIDgpICsxKTtcbiAgICB0b1JwckxFKGJ1ZmYsIDAsIGEsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBjb25zdCB6ZXJvID0gZSgwKTtcbmV4cG9ydCBjb25zdCBvbmUgPSBlKDEpO1xuXG5cblxuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gbXVsU2NhbGFyKEYsIGJhc2UsIGUpIHtcbiAgICBsZXQgcmVzO1xuXG4gICAgaWYgKFNjYWxhci5pc1plcm8oZSkpIHJldHVybiBGLnplcm87XG5cbiAgICBjb25zdCBuID0gU2NhbGFyLm5hZihlKTtcblxuICAgIGlmIChuW24ubGVuZ3RoLTFdID09IDEpIHtcbiAgICAgICAgcmVzID0gYmFzZTtcbiAgICB9IGVsc2UgaWYgKG5bbi5sZW5ndGgtMV0gPT0gLTEpIHtcbiAgICAgICAgcmVzID0gRi5uZWcoYmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52bGF1ZCBOQUZcIik7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaT1uLmxlbmd0aC0yOyBpPj0wOyBpLS0pIHtcblxuICAgICAgICByZXMgPSBGLmRvdWJsZShyZXMpO1xuXG4gICAgICAgIGlmIChuW2ldID09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9IEYuYWRkKHJlcywgYmFzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobltpXSA9PSAtMSkge1xuICAgICAgICAgICAgcmVzID0gRi5zdWIocmVzLCBiYXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59XG5cblxuLypcbmV4cG9ydHMubXVsU2NhbGFyID0gKEYsIGJhc2UsIGUpID0+e1xuICAgIGxldCByZXMgPSBGLnplcm87XG4gICAgbGV0IHJlbSA9IGJpZ0ludChlKTtcbiAgICBsZXQgZXhwID0gYmFzZTtcblxuICAgIHdoaWxlICghIHJlbS5lcShiaWdJbnQuemVybykpIHtcbiAgICAgICAgaWYgKHJlbS5hbmQoYmlnSW50Lm9uZSkuZXEoYmlnSW50Lm9uZSkpIHtcbiAgICAgICAgICAgIHJlcyA9IEYuYWRkKHJlcywgZXhwKTtcbiAgICAgICAgfVxuICAgICAgICBleHAgPSBGLmRvdWJsZShleHApO1xuICAgICAgICByZW0gPSByZW0uc2hpZnRSaWdodCgxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufTtcbiovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cChGLCBiYXNlLCBlKSB7XG5cbiAgICBpZiAoU2NhbGFyLmlzWmVybyhlKSkgcmV0dXJuIEYub25lO1xuXG4gICAgY29uc3QgbiA9IFNjYWxhci5iaXRzKGUpO1xuXG4gICAgaWYgKG4ubGVuZ3RoPT0wKSByZXR1cm4gRi5vbmU7XG5cbiAgICBsZXQgcmVzID0gYmFzZTtcblxuICAgIGZvciAobGV0IGk9bi5sZW5ndGgtMjsgaT49MDsgaS0tKSB7XG5cbiAgICAgICAgcmVzID0gRi5zcXVhcmUocmVzKTtcblxuICAgICAgICBpZiAobltpXSkge1xuICAgICAgICAgICAgcmVzID0gRi5tdWwocmVzLCBiYXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59XG5cblxuIiwiaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuLy8gQ2hlY2sgaGVyZTogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMi82ODUucGRmXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkU3FydCAoRikge1xuICAgIGlmICgoRi5tICUgMikgPT0gMSkge1xuICAgICAgICBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCA0KSwgMSApKSB7XG4gICAgICAgICAgICBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCA4KSwgMSApKSB7XG4gICAgICAgICAgICAgICAgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgMTYpLCAxICkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxnN19tdWxsZXIoRik7XG4gICAgICAgICAgICAgICAgICAgIGFsZzVfdG9uZWxsaVNoYW5rcyhGKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgMTYpLCA5ICkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxnNF9rb25nKEYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdpdGhvdCBzcXJ0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCA4KSwgNSApKSB7XG4gICAgICAgICAgICAgICAgYWxnM19hdGtpbihGKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2l0aG90IHNxcnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCA0KSwgMyApKSB7XG4gICAgICAgICAgICBhbGcyX3NoYW5rcyhGKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBtMm1vZDQgPSBTY2FsYXIubW9kKFNjYWxhci5wb3coRi5wLCBGLm0vMiksIDQpO1xuICAgICAgICBpZiAocG0ybW9kNCA9PSAxKSB7XG4gICAgICAgICAgICBhbGcxMF9hZGooRik7XG4gICAgICAgIH0gZWxzZSBpZiAocG0ybW9kNCA9PSAzKSB7XG4gICAgICAgICAgICBhbGc5X2FkaihGKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsZzhfY29tcGxleChGKTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG5cbmZ1bmN0aW9uIGFsZzVfdG9uZWxsaVNoYW5rcyhGKSB7XG4gICAgRi5zcXJ0X3EgPSBTY2FsYXIucG93KEYucCwgRi5tKTtcblxuICAgIEYuc3FydF9zID0gMDtcbiAgICBGLnNxcnRfdCA9IFNjYWxhci5zdWIoRi5zcXJ0X3EsIDEpO1xuXG4gICAgd2hpbGUgKCFTY2FsYXIuaXNPZGQoRi5zcXJ0X3QpKSB7XG4gICAgICAgIEYuc3FydF9zID0gRi5zcXJ0X3MgKyAxO1xuICAgICAgICBGLnNxcnRfdCA9IFNjYWxhci5kaXYoRi5zcXJ0X3QsIDIpO1xuICAgIH1cblxuICAgIGxldCBjMCA9IEYub25lO1xuXG4gICAgd2hpbGUgKEYuZXEoYzAsIEYub25lKSkge1xuICAgICAgICBjb25zdCBjID0gRi5yYW5kb20oKTtcbiAgICAgICAgRi5zcXJ0X3ogPSBGLnBvdyhjLCBGLnNxcnRfdCk7XG4gICAgICAgIGMwID0gRi5wb3coRi5zcXJ0X3osIDIgKiogKEYuc3FydF9zLTEpICk7XG4gICAgfVxuXG4gICAgRi5zcXJ0X3RtMWQyID0gU2NhbGFyLmRpdihTY2FsYXIuc3ViKEYuc3FydF90LCAxKSwyKTtcblxuICAgIEYuc3FydCA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgY29uc3QgRj10aGlzO1xuICAgICAgICBpZiAoRi5pc1plcm8oYSkpIHJldHVybiBGLnplcm87XG4gICAgICAgIGxldCB3ID0gRi5wb3coYSwgRi5zcXJ0X3RtMWQyKTtcbiAgICAgICAgY29uc3QgYTAgPSBGLnBvdyggRi5tdWwoRi5zcXVhcmUodyksIGEpLCAyICoqIChGLnNxcnRfcy0xKSApO1xuICAgICAgICBpZiAoRi5lcShhMCwgRi5uZWdvbmUpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBsZXQgdiA9IEYuc3FydF9zO1xuICAgICAgICBsZXQgeCA9IEYubXVsKGEsIHcpO1xuICAgICAgICBsZXQgYiA9IEYubXVsKHgsIHcpO1xuICAgICAgICBsZXQgeiA9IEYuc3FydF96O1xuICAgICAgICB3aGlsZSAoIUYuZXEoYiwgRi5vbmUpKSB7XG4gICAgICAgICAgICBsZXQgYjJrID0gRi5zcXVhcmUoYik7XG4gICAgICAgICAgICBsZXQgaz0xO1xuICAgICAgICAgICAgd2hpbGUgKCFGLmVxKGIyaywgRi5vbmUpKSB7XG4gICAgICAgICAgICAgICAgYjJrID0gRi5zcXVhcmUoYjJrKTtcbiAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHcgPSB6O1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHYtay0xOyBpKyspIHtcbiAgICAgICAgICAgICAgICB3ID0gRi5zcXVhcmUodyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6ID0gRi5zcXVhcmUodyk7XG4gICAgICAgICAgICBiID0gRi5tdWwoYiwgeik7XG4gICAgICAgICAgICB4ID0gRi5tdWwoeCwgdyk7XG4gICAgICAgICAgICB2ID0gaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRi5nZXEoeCwgRi56ZXJvKSA/IHggOiBGLm5lZyh4KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGc0X2tvbmcoRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyA0IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGczX2F0a2luKEYpIHtcbiAgICBGLnNxcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3FydCBhbGcgMyBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnMl9zaGFua3MoRikge1xuXG4gICAgRi5zcXJ0X3EgPSBTY2FsYXIucG93KEYucCwgRi5tKTtcbiAgICBGLnNxcnRfZTEgPSBTY2FsYXIuZGl2KCBTY2FsYXIuc3ViKEYuc3FydF9xLCAzKSAsIDQpO1xuXG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICBpZiAodGhpcy5pc1plcm8oYSkpIHJldHVybiB0aGlzLnplcm87XG5cbiAgICAgICAgLy8gVGVzdCB0aGF0IGhhdmUgc29sdXRpb25cbiAgICAgICAgY29uc3QgYTEgPSB0aGlzLnBvdyhhLCB0aGlzLnNxcnRfZTEpO1xuXG4gICAgICAgIGNvbnN0IGEwID0gdGhpcy5tdWwodGhpcy5zcXVhcmUoYTEpLCBhKTtcblxuICAgICAgICBpZiAoIHRoaXMuZXEoYTAsIHRoaXMubmVnb25lKSApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLm11bChhMSwgYSk7XG5cbiAgICAgICAgcmV0dXJuIEYuZ2VxKHgsIEYuemVybykgPyB4IDogRi5uZWcoeCk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnMTBfYWRqKEYpIHtcbiAgICBGLnNxcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3FydCBhbGcgMTAgbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzlfYWRqKEYpIHtcbiAgICBGLnNxcnRfcSA9IFNjYWxhci5wb3coRi5wLCBGLm0vMik7XG4gICAgRi5zcXJ0X2UzNCA9IFNjYWxhci5kaXYoIFNjYWxhci5zdWIoRi5zcXJ0X3EsIDMpICwgNCk7XG4gICAgRi5zcXJ0X2UxMiA9IFNjYWxhci5kaXYoIFNjYWxhci5zdWIoRi5zcXJ0X3EsIDEpICwgMik7XG5cbiAgICBGLmZyb2Jlbml1cyA9IGZ1bmN0aW9uKG4sIHgpIHtcbiAgICAgICAgaWYgKChuJTIpID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBGLmNvbmp1Z2F0ZSh4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIEYuc3FydCA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgY29uc3QgRiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGExID0gRi5wb3coYSwgRi5zcXJ0X2UzNCk7XG4gICAgICAgIGNvbnN0IGFsZmEgPSBGLm11bChGLnNxdWFyZShhMSksIGEpO1xuICAgICAgICBjb25zdCBhMCA9IEYubXVsKEYuZnJvYmVuaXVzKDEsIGFsZmEpLCBhbGZhKTtcbiAgICAgICAgaWYgKEYuZXEoYTAsIEYubmVnb25lKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHgwID0gRi5tdWwoYTEsIGEpO1xuICAgICAgICBsZXQgeDtcbiAgICAgICAgaWYgKEYuZXEoYWxmYSwgRi5uZWdvbmUpKSB7XG4gICAgICAgICAgICB4ID0gRi5tdWwoeDAsIFtGLkYuemVybywgRi5GLm9uZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYiA9IEYucG93KEYuYWRkKEYub25lLCBhbGZhKSwgRi5zcXJ0X2UxMik7XG4gICAgICAgICAgICB4ID0gRi5tdWwoYiwgeDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGLmdlcSh4LCBGLnplcm8pID8geCA6IEYubmVnKHgpO1xuICAgIH07XG59XG5cblxuZnVuY3Rpb24gYWxnOF9jb21wbGV4KEYpIHtcbiAgICBGLnNxcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3FydCBhbGcgOCBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfTtcbn1cbiIsIlxuXG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5cblxuZnVuY3Rpb24gcXVhcnRlclJvdW5kKHN0LCBhLCBiLCBjLCBkKSB7XG5cbiAgICBzdFthXSA9IChzdFthXSArIHN0W2JdKSA+Pj4gMDtcbiAgICBzdFtkXSA9IChzdFtkXSBeIHN0W2FdKSA+Pj4gMDtcbiAgICBzdFtkXSA9ICgoc3RbZF0gPDwgMTYpIHwgKChzdFtkXT4+PjE2KSAmIDB4RkZGRikpID4+PiAwO1xuXG4gICAgc3RbY10gPSAoc3RbY10gKyBzdFtkXSkgPj4+IDA7XG4gICAgc3RbYl0gPSAoc3RbYl0gXiBzdFtjXSkgPj4+IDA7XG4gICAgc3RbYl0gPSAoKHN0W2JdIDw8IDEyKSB8ICgoc3RbYl0+Pj4yMCkgJiAweEZGRikpID4+PiAwO1xuXG4gICAgc3RbYV0gPSAoc3RbYV0gKyBzdFtiXSkgPj4+IDA7XG4gICAgc3RbZF0gPSAoc3RbZF0gXiBzdFthXSkgPj4+IDA7XG4gICAgc3RbZF0gPSAoKHN0W2RdIDw8IDgpIHwgKChzdFtkXT4+PjI0KSAmIDB4RkYpKSA+Pj4gMDtcblxuICAgIHN0W2NdID0gKHN0W2NdICsgc3RbZF0pID4+PiAwO1xuICAgIHN0W2JdID0gKHN0W2JdIF4gc3RbY10pID4+PiAwO1xuICAgIHN0W2JdID0gKChzdFtiXSA8PCA3KSB8ICgoc3RbYl0+Pj4yNSkgJiAweDdGKSkgPj4+IDA7XG59XG5cbmZ1bmN0aW9uIGRvdWJsZVJvdW5kKHN0KSB7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAwLCA0LCA4LDEyKTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDEsIDUsIDksMTMpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMiwgNiwxMCwxNCk7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAzLCA3LDExLDE1KTtcblxuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMCwgNSwxMCwxNSk7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAxLCA2LDExLDEyKTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDIsIDcsIDgsMTMpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMywgNCwgOSwxNCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYUNoYSB7XG5cbiAgICBjb25zdHJ1Y3RvcihzZWVkKSB7XG4gICAgICAgIHNlZWQgPSBzZWVkIHx8IFswLDAsMCwwLDAsMCwwLDBdO1xuICAgICAgICB0aGlzLnN0YXRlID0gW1xuICAgICAgICAgICAgMHg2MTcwNzg2NSxcbiAgICAgICAgICAgIDB4MzMyMDY0NkUsXG4gICAgICAgICAgICAweDc5NjIyRDMyLFxuICAgICAgICAgICAgMHg2QjIwNjU3NCxcbiAgICAgICAgICAgIHNlZWRbMF0sXG4gICAgICAgICAgICBzZWVkWzFdLFxuICAgICAgICAgICAgc2VlZFsyXSxcbiAgICAgICAgICAgIHNlZWRbM10sXG4gICAgICAgICAgICBzZWVkWzRdLFxuICAgICAgICAgICAgc2VlZFs1XSxcbiAgICAgICAgICAgIHNlZWRbNl0sXG4gICAgICAgICAgICBzZWVkWzddLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmlkeCA9IDE2O1xuICAgICAgICB0aGlzLmJ1ZmYgPSBuZXcgQXJyYXkoMTYpO1xuICAgIH1cblxuICAgIG5leHRVMzIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlkeCA9PSAxNikgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZlt0aGlzLmlkeCsrXTtcbiAgICB9XG5cbiAgICBuZXh0VTY0KCkge1xuICAgICAgICByZXR1cm4gU2NhbGFyLmFkZChTY2FsYXIubXVsKHRoaXMubmV4dFUzMigpLCAweDEwMDAwMDAwMCksIHRoaXMubmV4dFUzMigpKTtcbiAgICB9XG5cbiAgICBuZXh0Qm9vbCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm5leHRVMzIoKSAmIDEpID09IDE7XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBzdGF0ZVxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8MTY7IGkrKykgdGhpcy5idWZmW2ldID0gdGhpcy5zdGF0ZVtpXTtcblxuICAgICAgICAvLyBBcHBseSB0aGUgcm91bmRzXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwxMDsgaSsrKSBkb3VibGVSb3VuZCh0aGlzLmJ1ZmYpO1xuXG4gICAgICAgIC8vIEFkZCB0byB0aGUgaW5pdGlhbFxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8MTY7IGkrKykgdGhpcy5idWZmW2ldID0gKHRoaXMuYnVmZltpXSArIHRoaXMuc3RhdGVbaV0pID4+PiAwO1xuXG4gICAgICAgIHRoaXMuaWR4ID0gMDtcblxuICAgICAgICB0aGlzLnN0YXRlWzEyXSA9ICh0aGlzLnN0YXRlWzEyXSArIDEpID4+PiAwO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZVsxMl0gIT0gMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0YXRlWzEzXSA9ICh0aGlzLnN0YXRlWzEzXSArIDEpID4+PiAwO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZVsxM10gIT0gMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0YXRlWzE0XSA9ICh0aGlzLnN0YXRlWzE0XSArIDEpID4+PiAwO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZVsxNF0gIT0gMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0YXRlWzE1XSA9ICh0aGlzLnN0YXRlWzE1XSArIDEpID4+PiAwO1xuICAgIH1cbn1cbiIsImltcG9ydCBDaGFDaGEgZnJvbSBcIi4vY2hhY2hhLmpzXCI7XG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbUJ5dGVzKG4pIHtcbiAgICBsZXQgYXJyYXkgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICBpZiAocHJvY2Vzcy5icm93c2VyKSB7IC8vIEJyb3dzZXJcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBTdXBwb3J0ZWRcbiAgICAgICAgICAgIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIGZhbGxiYWNrXG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAoTWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk2KT4+PjA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7IC8vIE5vZGVKU1xuICAgICAgICBjcnlwdG8ucmFuZG9tRmlsbFN5bmMoYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21TZWVkKCkge1xuICAgIGNvbnN0IGFyciA9IGdldFJhbmRvbUJ5dGVzKDMyKTtcbiAgICBjb25zdCBhcnJWID0gbmV3IFVpbnQzMkFycmF5KGFyci5idWZmZXIpO1xuICAgIGNvbnN0IHNlZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgIHNlZWQucHVzaChhcnJWW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlZWQ7XG59XG5cbmxldCB0aHJlYWRSbmcgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhyZWFkUm5nKCkge1xuICAgIGlmICh0aHJlYWRSbmcpIHJldHVybiB0aHJlYWRSbmc7XG4gICAgdGhyZWFkUm5nID0gbmV3IENoYUNoYShnZXRSYW5kb21TZWVkKCkpO1xuICAgIHJldHVybiB0aHJlYWRSbmc7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBraW1zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vKlxuICAgIFRoaXMgbGlicmFyeSBkb2VzIG9wZXJhdGlvbnMgb24gcG9seW5vbWlhbHMgd2l0aCBjb2VmZmljaWVudHMgaW4gYSBmaWVsZCBGLlxuXG4gICAgQSBwb2x5bm9taWFsIFAoeCkgPSBwMCArIHAxICogeCArIHAyICogeF4yICsgLi4uICsgcG4gKiB4Xm4gIGlzIHJlcHJlc2VudGVkXG4gICAgYnkgdGhlIGFycmF5IFsgcDAsIHAxLCBwMiwgLi4uICwgcG4gXS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGRlQge1xuICAgIGNvbnN0cnVjdG9yIChHLCBGLCBvcE11bEdGKSB7XG4gICAgICAgIHRoaXMuRiA9IEY7XG4gICAgICAgIHRoaXMuRyA9IEc7XG4gICAgICAgIHRoaXMub3BNdWxHRiA9IG9wTXVsR0Y7XG5cbiAgICAgICAgbGV0IHJlbSA9IEYuc3FydF90IHx8IEYudDtcbiAgICAgICAgbGV0IHMgPSBGLnNxcnRfcyB8fCBGLnM7XG5cbiAgICAgICAgbGV0IG5xciA9IEYub25lO1xuICAgICAgICB3aGlsZSAoRi5lcShGLnBvdyhucXIsIEYuaGFsZiksIEYub25lKSkgbnFyID0gRi5hZGQobnFyLCBGLm9uZSk7XG5cbiAgICAgICAgdGhpcy53ID0gbmV3IEFycmF5KHMrMSk7XG4gICAgICAgIHRoaXMud2kgPSBuZXcgQXJyYXkocysxKTtcbiAgICAgICAgdGhpcy53W3NdID0gdGhpcy5GLnBvdyhucXIsIHJlbSk7XG4gICAgICAgIHRoaXMud2lbc10gPSB0aGlzLkYuaW52KHRoaXMud1tzXSk7XG5cbiAgICAgICAgbGV0IG49cy0xO1xuICAgICAgICB3aGlsZSAobj49MCkge1xuICAgICAgICAgICAgdGhpcy53W25dID0gdGhpcy5GLnNxdWFyZSh0aGlzLndbbisxXSk7XG4gICAgICAgICAgICB0aGlzLndpW25dID0gdGhpcy5GLnNxdWFyZSh0aGlzLndpW24rMV0pO1xuICAgICAgICAgICAgbi0tO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLnJvb3RzID0gW107XG4gICAgICAgIC8qXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwxNjsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgciA9IHRoaXMuRi5vbmU7XG4gICAgICAgICAgICBuID0gMSA8PCBpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdHNpID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG47IGorKykge1xuICAgICAgICAgICAgICAgIHJvb3RzaVtqXSA9IHI7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMuRi5tdWwociwgdGhpcy53W2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb290cy5wdXNoKHJvb3RzaSk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fc2V0Um9vdHMoTWF0aC5taW4ocywgMTUpKTtcbiAgICB9XG5cbiAgICBfc2V0Um9vdHMobikge1xuICAgICAgICBmb3IgKGxldCBpPW47IChpPj0wKSAmJiAoIXRoaXMucm9vdHNbaV0pOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5GLm9uZTtcbiAgICAgICAgICAgIGNvbnN0IG5yb290cyA9IDEgPDwgaTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzaSA9IG5ldyBBcnJheShucm9vdHMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5yb290czsgaisrKSB7XG4gICAgICAgICAgICAgICAgcm9vdHNpW2pdID0gcjtcbiAgICAgICAgICAgICAgICByID0gdGhpcy5GLm11bChyLCB0aGlzLndbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvb3RzW2ldID0gcm9vdHNpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmZ0KHApIHtcbiAgICAgICAgaWYgKHAubGVuZ3RoIDw9IDEpIHJldHVybiBwO1xuICAgICAgICBjb25zdCBiaXRzID0gbG9nMihwLmxlbmd0aC0xKSsxO1xuICAgICAgICB0aGlzLl9zZXRSb290cyhiaXRzKTtcblxuICAgICAgICBjb25zdCBtID0gMSA8PCBiaXRzO1xuICAgICAgICBpZiAocC5sZW5ndGggIT0gbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gX19mZnQodGhpcywgcCwgYml0cywgMCwgMSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgaWZmdChwKSB7XG5cbiAgICAgICAgaWYgKHAubGVuZ3RoIDw9IDEpIHJldHVybiBwO1xuICAgICAgICBjb25zdCBiaXRzID0gbG9nMihwLmxlbmd0aC0xKSsxO1xuICAgICAgICB0aGlzLl9zZXRSb290cyhiaXRzKTtcbiAgICAgICAgY29uc3QgbSA9IDEgPDwgYml0cztcbiAgICAgICAgaWYgKHAubGVuZ3RoICE9IG0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiAyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9ICBfX2ZmdCh0aGlzLCBwLCBiaXRzLCAwLCAxKTtcbiAgICAgICAgY29uc3QgdHdvaW52bSA9IHRoaXMuRi5pbnYoIHRoaXMuRi5tdWxTY2FsYXIodGhpcy5GLm9uZSwgbSkgKTtcbiAgICAgICAgY29uc3QgcmVzbiA9IG5ldyBBcnJheShtKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG07IGkrKykge1xuICAgICAgICAgICAgcmVzbltpXSA9IHRoaXMub3BNdWxHRihyZXNbKG0taSklbV0sIHR3b2ludm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc247XG4gICAgfVxuXG5cbn1cblxuZnVuY3Rpb24gbG9nMiggViApXG57XG4gICAgcmV0dXJuKCAoICggViAmIDB4RkZGRjAwMDAgKSAhPT0gMCA/ICggViAmPSAweEZGRkYwMDAwLCAxNiApIDogMCApIHwgKCAoIFYgJiAweEZGMDBGRjAwICkgIT09IDAgPyAoIFYgJj0gMHhGRjAwRkYwMCwgOCApIDogMCApIHwgKCAoIFYgJiAweEYwRjBGMEYwICkgIT09IDAgPyAoIFYgJj0gMHhGMEYwRjBGMCwgNCApIDogMCApIHwgKCAoIFYgJiAweENDQ0NDQ0NDICkgIT09IDAgPyAoIFYgJj0gMHhDQ0NDQ0NDQywgMiApIDogMCApIHwgKCAoIFYgJiAweEFBQUFBQUFBICkgIT09IDAgKSApO1xufVxuXG5cbmZ1bmN0aW9uIF9fZmZ0KFBGLCBwYWxsLCBiaXRzLCBvZmZzZXQsIHN0ZXApIHtcblxuICAgIGNvbnN0IG4gPSAxIDw8IGJpdHM7XG4gICAgaWYgKG49PTEpIHtcbiAgICAgICAgcmV0dXJuIFsgcGFsbFtvZmZzZXRdIF07XG4gICAgfSBlbHNlIGlmIChuPT0yKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBQRi5HLmFkZChwYWxsW29mZnNldF0sIHBhbGxbb2Zmc2V0ICsgc3RlcF0pLFxuICAgICAgICAgICAgUEYuRy5zdWIocGFsbFtvZmZzZXRdLCBwYWxsW29mZnNldCArIHN0ZXBdKV07XG4gICAgfVxuXG4gICAgY29uc3QgbmRpdjIgPSBuID4+IDE7XG4gICAgY29uc3QgcDEgPSBfX2ZmdChQRiwgcGFsbCwgYml0cy0xLCBvZmZzZXQsIHN0ZXAqMik7XG4gICAgY29uc3QgcDIgPSBfX2ZmdChQRiwgcGFsbCwgYml0cy0xLCBvZmZzZXQrc3RlcCwgc3RlcCoyKTtcblxuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheShuKTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxuZGl2MjsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IFBGLkcuYWRkKHAxW2ldLCBQRi5vcE11bEdGKHAyW2ldLCBQRi5yb290c1tiaXRzXVtpXSkpO1xuICAgICAgICBvdXRbaStuZGl2Ml0gPSBQRi5HLnN1YihwMVtpXSwgUEYub3BNdWxHRihwMltpXSwgUEYucm9vdHNbYml0c11baV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG4iLCIvKiBnbG9iYWwgQmlnSW50ICovXG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgKiBhcyBmdXRpbHMgZnJvbSBcIi4vZnV0aWxzLmpzXCI7XG5pbXBvcnQgYnVpbGRTcXJ0IGZyb20gXCIuL2ZzcXJ0LmpzXCI7XG5pbXBvcnQge2dldFJhbmRvbUJ5dGVzfSBmcm9tIFwiLi9yYW5kb20uanNcIjtcbmltcG9ydCBGRkZUIGZyb20gXCIuL2ZmdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBacUZpZWxkIHtcbiAgICBjb25zdHJ1Y3RvcihwKSB7XG4gICAgICAgIHRoaXMudHlwZT1cIkYxXCI7XG4gICAgICAgIHRoaXMub25lID0gQmlnSW50KDEpO1xuICAgICAgICB0aGlzLnplcm8gPSBCaWdJbnQoMCk7XG4gICAgICAgIHRoaXMucCA9IEJpZ0ludChwKTtcbiAgICAgICAgdGhpcy5tID0gMTtcbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLnAtdGhpcy5vbmU7XG4gICAgICAgIHRoaXMudHdvID0gQmlnSW50KDIpO1xuICAgICAgICB0aGlzLmhhbGYgPSB0aGlzLnAgPj4gdGhpcy5vbmU7XG4gICAgICAgIHRoaXMuYml0TGVuZ3RoID0gU2NhbGFyLmJpdExlbmd0aCh0aGlzLnApO1xuICAgICAgICB0aGlzLm1hc2sgPSAodGhpcy5vbmUgPDwgQmlnSW50KHRoaXMuYml0TGVuZ3RoKSkgLSB0aGlzLm9uZTtcblxuICAgICAgICB0aGlzLm42NCA9IE1hdGguZmxvb3IoKHRoaXMuYml0TGVuZ3RoIC0gMSkgLyA2NCkrMTtcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLm42NCoyO1xuICAgICAgICB0aGlzLm44ID0gdGhpcy5uNjQqODtcbiAgICAgICAgdGhpcy5SID0gdGhpcy5lKHRoaXMub25lIDw8IEJpZ0ludCh0aGlzLm42NCo2NCkpO1xuICAgICAgICB0aGlzLlJpID0gdGhpcy5pbnYodGhpcy5SKTtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5uZWdvbmUgPj4gdGhpcy5vbmU7XG4gICAgICAgIHRoaXMubnFyID0gdGhpcy50d287XG4gICAgICAgIGxldCByID0gdGhpcy5wb3codGhpcy5ucXIsIGUpO1xuICAgICAgICB3aGlsZSAoIXRoaXMuZXEociwgdGhpcy5uZWdvbmUpKSB7XG4gICAgICAgICAgICB0aGlzLm5xciA9IHRoaXMubnFyICsgdGhpcy5vbmU7XG4gICAgICAgICAgICByID0gdGhpcy5wb3codGhpcy5ucXIsIGUpO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLnMgPSAwO1xuICAgICAgICB0aGlzLnQgPSB0aGlzLm5lZ29uZTtcblxuICAgICAgICB3aGlsZSAoKHRoaXMudCAmIHRoaXMub25lKSA9PSB0aGlzLnplcm8pIHtcbiAgICAgICAgICAgIHRoaXMucyA9IHRoaXMucyArIDE7XG4gICAgICAgICAgICB0aGlzLnQgPSB0aGlzLnQgPj4gdGhpcy5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5xcl90b190ID0gdGhpcy5wb3codGhpcy5ucXIsIHRoaXMudCk7XG5cbiAgICAgICAgYnVpbGRTcXJ0KHRoaXMpO1xuXG4gICAgICAgIHRoaXMuRkZUID0gbmV3IEZGRlQodGhpcywgdGhpcywgdGhpcy5tdWwuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5mZnQgPSB0aGlzLkZGVC5mZnQuYmluZCh0aGlzLkZGVCk7XG4gICAgICAgIHRoaXMuaWZmdCA9IHRoaXMuRkZULmlmZnQuYmluZCh0aGlzLkZGVCk7XG4gICAgICAgIHRoaXMudyA9IHRoaXMuRkZULnc7XG4gICAgICAgIHRoaXMud2kgPSB0aGlzLkZGVC53aTsgXG4gICAgXG4gICAgICAgIHRoaXMuc2hpZnQgPSB0aGlzLnNxdWFyZSh0aGlzLm5xcik7XG4gICAgICAgIHRoaXMuayA9IHRoaXMuZXhwKHRoaXMubnFyLCAyKip0aGlzLnMpO1xuICAgIH1cblxuICAgIGUoYSxiKSB7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIGlmICghYikge1xuICAgICAgICAgICAgcmVzID0gQmlnSW50KGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGI9PTE2KSB7XG4gICAgICAgICAgICByZXMgPSBCaWdJbnQoXCIweFwiK2EpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMgPCAwKSB7XG4gICAgICAgICAgICBsZXQgbnJlcyA9IC1yZXM7XG4gICAgICAgICAgICBpZiAobnJlcyA+PSB0aGlzLnApIG5yZXMgPSBucmVzICUgdGhpcy5wO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucCAtIG5yZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKHJlcz49IHRoaXMucCkgPyByZXMldGhpcy5wIDogcmVzO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBhZGQoYSwgYikge1xuICAgICAgICBjb25zdCByZXMgPSBhICsgYjtcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIHN1YihhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSA+PSBiKSA/IGEtYiA6IHRoaXMucC1iK2E7XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgcmV0dXJuIGEgPyB0aGlzLnAtYSA6IGE7XG4gICAgfVxuXG4gICAgbXVsKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhKmIpJXRoaXMucDtcbiAgICB9XG5cbiAgICBtdWxTY2FsYXIoYmFzZSwgcykge1xuICAgICAgICByZXR1cm4gKGJhc2UgKiB0aGlzLmUocykpICUgdGhpcy5wO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiAoYSphKSAlIHRoaXMucDtcbiAgICB9XG5cbiAgICBlcShhLCBiKSB7XG4gICAgICAgIHJldHVybiBhPT1iO1xuICAgIH1cblxuICAgIG5lcShhLCBiKSB7XG4gICAgICAgIHJldHVybiBhIT1iO1xuICAgIH1cblxuICAgIGx0KGEsIGIpIHtcbiAgICAgICAgY29uc3QgYWEgPSAoYSA+IHRoaXMuaGFsZikgPyBhIC0gdGhpcy5wIDogYTtcbiAgICAgICAgY29uc3QgYmIgPSAoYiA+IHRoaXMuaGFsZikgPyBiIC0gdGhpcy5wIDogYjtcbiAgICAgICAgcmV0dXJuIGFhIDwgYmI7XG4gICAgfVxuXG4gICAgZ3QoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPiBiYjtcbiAgICB9XG5cbiAgICBsZXEoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPD0gYmI7XG4gICAgfVxuXG4gICAgZ2VxKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYWEgPSAoYSA+IHRoaXMuaGFsZikgPyBhIC0gdGhpcy5wIDogYTtcbiAgICAgICAgY29uc3QgYmIgPSAoYiA+IHRoaXMuaGFsZikgPyBiIC0gdGhpcy5wIDogYjtcbiAgICAgICAgcmV0dXJuIGFhID49IGJiO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bChhLCB0aGlzLmludihiKSk7XG4gICAgfVxuXG4gICAgaWRpdihhLCBiKSB7XG4gICAgICAgIGlmICghYikgdGhyb3cgbmV3IEVycm9yKFwiRGl2aXNpb24gYnkgemVyb1wiKTtcbiAgICAgICAgcmV0dXJuIGEgLyBiO1xuICAgIH1cblxuICAgIGludihhKSB7XG4gICAgICAgIGlmICghYSkgdGhyb3cgbmV3IEVycm9yKFwiRGl2aXNpb24gYnkgemVyb1wiKTtcblxuICAgICAgICBsZXQgdCA9IHRoaXMuemVybztcbiAgICAgICAgbGV0IHIgPSB0aGlzLnA7XG4gICAgICAgIGxldCBuZXd0ID0gdGhpcy5vbmU7XG4gICAgICAgIGxldCBuZXdyID0gYSAlIHRoaXMucDtcbiAgICAgICAgd2hpbGUgKG5ld3IpIHtcbiAgICAgICAgICAgIGxldCBxID0gci9uZXdyO1xuICAgICAgICAgICAgW3QsIG5ld3RdID0gW25ld3QsIHQtcSpuZXd0XTtcbiAgICAgICAgICAgIFtyLCBuZXdyXSA9IFtuZXdyLCByLXEqbmV3cl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHQ8dGhpcy56ZXJvKSB0ICs9IHRoaXMucDtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgbW9kKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgJSBiO1xuICAgIH1cblxuICAgIHBvdyhiLCBlKSB7XG4gICAgICAgIHJldHVybiBmdXRpbHMuZXhwKHRoaXMsIGIsIGUpO1xuICAgIH1cblxuICAgIGV4cChiLCBlKSB7XG4gICAgICAgIHJldHVybiBmdXRpbHMuZXhwKHRoaXMsIGIsIGUpO1xuICAgIH1cblxuICAgIGJhbmQoYSwgYikge1xuICAgICAgICBjb25zdCByZXMgPSAgKChhICYgYikgJiB0aGlzLm1hc2spO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgYm9yKGEsIGIpIHtcbiAgICAgICAgY29uc3QgcmVzID0gICgoYSB8IGIpICYgdGhpcy5tYXNrKTtcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIGJ4b3IoYSwgYikge1xuICAgICAgICBjb25zdCByZXMgPSAgKChhIF4gYikgJiB0aGlzLm1hc2spO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgYm5vdChhKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGEgXiB0aGlzLm1hc2s7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBzaGwoYSwgYikge1xuICAgICAgICBpZiAoTnVtYmVyKGIpIDwgdGhpcy5iaXRMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IChhIDw8IGIpICYgdGhpcy5tYXNrO1xuICAgICAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmIgPSB0aGlzLnAgLSBiO1xuICAgICAgICAgICAgaWYgKE51bWJlcihuYikgPCB0aGlzLmJpdExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhID4+IG5iO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy56ZXJvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hyKGEsIGIpIHtcbiAgICAgICAgaWYgKE51bWJlcihiKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA+PiBiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmIgPSB0aGlzLnAgLSBiO1xuICAgICAgICAgICAgaWYgKE51bWJlcihuYikgPCB0aGlzLmJpdExlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IChhIDw8IG5iKSAmIHRoaXMubWFzaztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGFuZChhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSAmJiBiKSA/IHRoaXMub25lIDogdGhpcy56ZXJvO1xuICAgIH1cblxuICAgIGxvcihhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSB8fCBiKSA/IHRoaXMub25lIDogdGhpcy56ZXJvO1xuICAgIH1cblxuICAgIGxub3QoYSkge1xuICAgICAgICByZXR1cm4gKGEpID8gdGhpcy56ZXJvIDogdGhpcy5vbmU7XG4gICAgfVxuXG4gICAgc3FydF9vbGQobikge1xuXG4gICAgICAgIGlmIChuID09IHRoaXMuemVybykgcmV0dXJuIHRoaXMuemVybztcblxuICAgICAgICAvLyBUZXN0IHRoYXQgaGF2ZSBzb2x1dGlvblxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnBvdyhuLCB0aGlzLm5lZ29uZSA+PiB0aGlzLm9uZSk7XG4gICAgICAgIGlmICggcmVzICE9IHRoaXMub25lICkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgbGV0IG0gPSB0aGlzLnM7XG4gICAgICAgIGxldCBjID0gdGhpcy5ucXJfdG9fdDtcbiAgICAgICAgbGV0IHQgPSB0aGlzLnBvdyhuLCB0aGlzLnQpO1xuICAgICAgICBsZXQgciA9IHRoaXMucG93KG4sIHRoaXMuYWRkKHRoaXMudCwgdGhpcy5vbmUpID4+IHRoaXMub25lICk7XG5cbiAgICAgICAgd2hpbGUgKCB0ICE9IHRoaXMub25lICkge1xuICAgICAgICAgICAgbGV0IHNxID0gdGhpcy5zcXVhcmUodCk7XG4gICAgICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgICAgICB3aGlsZSAoc3EgIT0gdGhpcy5vbmUgKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHNxID0gdGhpcy5zcXVhcmUoc3EpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiID0gYyBeIG0taS0xXG4gICAgICAgICAgICBsZXQgYiA9IGM7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8IG0taS0xOyBqICsrKSBiID0gdGhpcy5zcXVhcmUoYik7XG5cbiAgICAgICAgICAgIG0gPSBpO1xuICAgICAgICAgICAgYyA9IHRoaXMuc3F1YXJlKGIpO1xuICAgICAgICAgICAgdCA9IHRoaXMubXVsKHQsIGMpO1xuICAgICAgICAgICAgciA9IHRoaXMubXVsKHIsIGIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIgPiAodGhpcy5wID4+IHRoaXMub25lKSkge1xuICAgICAgICAgICAgciA9IHRoaXMubmVnKHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplKGEsIGIpIHtcbiAgICAgICAgYSA9IEJpZ0ludChhLGIpO1xuICAgICAgICBpZiAoYSA8IDApIHtcbiAgICAgICAgICAgIGxldCBuYSA9IC1hO1xuICAgICAgICAgICAgaWYgKG5hID49IHRoaXMucCkgbmEgPSBuYSAlIHRoaXMucDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAgLSBuYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoYT49IHRoaXMucCkgPyBhJXRoaXMucCA6IGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByYW5kb20oKSB7XG4gICAgICAgIGNvbnN0IG5CeXRlcyA9ICh0aGlzLmJpdExlbmd0aCoyIC8gOCk7XG4gICAgICAgIGxldCByZXMgPXRoaXMuemVybztcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5CeXRlczsgaSsrKSB7XG4gICAgICAgICAgICByZXMgPSAocmVzIDw8IEJpZ0ludCg4KSkgKyBCaWdJbnQoZ2V0UmFuZG9tQnl0ZXMoMSlbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMgJSB0aGlzLnA7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoYSwgYmFzZSkge1xuICAgICAgICBiYXNlID0gYmFzZSB8fCAxMDtcbiAgICAgICAgbGV0IHZzO1xuICAgICAgICBpZiAoKGEgPiB0aGlzLmhhbGYpJiYoYmFzZSA9PSAxMCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLnAtYTtcbiAgICAgICAgICAgIHZzID0gXCItXCIrdi50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gYS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdnM7XG4gICAgfVxuXG4gICAgaXNaZXJvKGEpIHtcbiAgICAgICAgcmV0dXJuIGEgPT0gdGhpcy56ZXJvO1xuICAgIH1cblxuICAgIGZyb21Sbmcocm5nKSB7XG4gICAgICAgIGxldCB2O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB2PXRoaXMuemVybztcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLm42NDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdiArPSBybmcubmV4dFU2NCgpIDw8IEJpZ0ludCg2NCAqaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ICY9IHRoaXMubWFzaztcbiAgICAgICAgfSB3aGlsZSAodiA+PSB0aGlzLnApO1xuICAgICAgICB2ID0gKHYgKiB0aGlzLlJpKSAlIHRoaXMucDsgICAvLyBDb252ZXJ0IGZyb20gbW9udGdvbWVyeVxuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG5cbiAgICBmZnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5GRlQuZmZ0KGEpO1xuICAgIH1cblxuICAgIGlmZnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5GRlQuaWZmdChhKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggTGl0dGxlIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuICAgIHRvUnByTEUoYnVmZiwgbywgZSkge1xuICAgICAgICBTY2FsYXIudG9ScHJMRShidWZmLCBvLCBlLCB0aGlzLm42NCo4KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuICAgIHRvUnByQkUoYnVmZiwgbywgZSkge1xuICAgICAgICBTY2FsYXIudG9ScHJCRShidWZmLCBvLCBlLCB0aGlzLm42NCo4KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBNb250Z29tZXJ5IFJlcHJlc2VudGF0aW9uXG4gICAgdG9ScHJCRU0oYnVmZiwgbywgZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1JwckJFKGJ1ZmYsIG8sIHRoaXMubXVsKHRoaXMuUiwgZSkpO1xuICAgIH1cblxuICAgIHRvUnByTEVNKGJ1ZmYsIG8sIGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9ScHJMRShidWZmLCBvLCB0aGlzLm11bCh0aGlzLlIsIGUpKTtcbiAgICB9XG5cblxuICAgIC8vIFBhc2VzIGEgYnVmZmVyIHdpdGggTGl0dGxlIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuICAgIGZyb21ScHJMRShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKGJ1ZmYsIG8sIHRoaXMubjgpO1xuICAgIH1cblxuICAgIC8vIFBhc2VzIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuICAgIGZyb21ScHJCRShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckJFKGJ1ZmYsIG8sIHRoaXMubjgpO1xuICAgIH1cblxuICAgIGZyb21ScHJMRU0oYnVmZiwgbykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWwodGhpcy5mcm9tUnByTEUoYnVmZiwgbyksIHRoaXMuUmkpO1xuICAgIH1cblxuICAgIGZyb21ScHJCRU0oYnVmZiwgbykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWwodGhpcy5mcm9tUnByQkUoYnVmZiwgbyksIHRoaXMuUmkpO1xuICAgIH1cblxuICAgIHRvT2JqZWN0KGEpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0cy5iaWdJbnQyQnl0ZXNMRSA9IGZ1bmN0aW9uIGJpZ0ludDJCeXRlc0xFKF9hLCBsZW4pIHtcbiAgICBjb25zdCBiID0gQXJyYXkobGVuKTtcbiAgICBsZXQgdiA9IEJpZ0ludChfYSk7XG4gICAgZm9yIChsZXQgaT0wOyBpPGxlbjsgaSsrKSB7XG4gICAgICAgIGJbaV0gPSBOdW1iZXIodiAmIDB4RkZuKTtcbiAgICAgICAgdiA9IHYgPj4gOG47XG4gICAgfVxuICAgIHJldHVybiBiO1xufTtcblxuZXhwb3J0cy5iaWdJbnQyVTMyTEUgPSBmdW5jdGlvbiBiaWdJbnQyQnl0ZXNMRShfYSwgbGVuKSB7XG4gICAgY29uc3QgYiA9IEFycmF5KGxlbik7XG4gICAgbGV0IHYgPSBCaWdJbnQoX2EpO1xuICAgIGZvciAobGV0IGk9MDsgaTxsZW47IGkrKykge1xuICAgICAgICBiW2ldID0gTnVtYmVyKHYgJiAweEZGRkZGRkZGbik7XG4gICAgICAgIHYgPSB2ID4+IDMybjtcbiAgICB9XG4gICAgcmV0dXJuIGI7XG59O1xuXG5leHBvcnRzLmlzT2NhbU51bSA9IGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYS5sZW5ndGggIT0gMykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgYVswXSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgYVsxXSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhWzJdKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRJbnQobW9kdWxlLCBuNjQsIF9wcmVmaXgpIHtcblxuICAgIGNvbnN0IHByZWZpeCA9IF9wcmVmaXggfHwgXCJpbnRcIjtcbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7fTtcblxuICAgIGNvbnN0IG4zMiA9IG42NCoyO1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG5cbiAgICBmdW5jdGlvbiBidWlsZENvcHkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2NvcHlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG42NDsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICAgICAgaSo4LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSo4XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjY0OyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgICAgICBpKjgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9vbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAobGV0IGk9MTsgaTxuNjQ7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgICAgIGkqOCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1plcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmdW5jdGlvbiBnZXRDb21wQ29kZShuKSB7XG4gICAgICAgICAgICBpZiAobj09MCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAgYy5yZXQoYy5pNjRfZXF6KFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSlcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTY0X2VxeihcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIiksIG4qOCApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBnZXRDb21wQ29kZShuLTEpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShnZXRDb21wQ29kZShuNjQtMSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5yZXQoYy5pMzJfY29uc3QoMCkpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEVxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9lcVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldENvbXBDb2RlKG4pIHtcbiAgICAgICAgICAgIGlmIChuPT0wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBjLnJldChjLmk2NF9lcShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIikpLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweVwiKSlcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTY0X2VxKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSwgbio4ICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB5XCIpLCBuKjggKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2V0Q29tcENvZGUobi0xKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoZ2V0Q29tcENvZGUobjY0LTEpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMucmV0KGMuaTMyX2NvbnN0KDApKSk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkR3RlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9ndGVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmdW5jdGlvbiBnZXRDb21wQ29kZShuKSB7XG4gICAgICAgICAgICBpZiAobj09MCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAgYy5yZXQoYy5pNjRfZ2VfdShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIikpLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweVwiKSlcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTY0X2x0X3UoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpLCBuKjggKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHlcIiksIG4qOCApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfZ3RfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpLCBuKjggKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB5XCIpLCBuKjggKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBDb2RlKG4tMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGdldENvbXBDb2RlKG42NC0xKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnJldChjLmkzMl9jb25zdCgwKSkpO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9hZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNcIiwgXCJpNjRcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ4XCIpKSxcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieVwiKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICApKTtcblxuICAgICAgICBmb3IgKGxldCBpPTE7IGk8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKCBcImNcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ4XCIpLCA0KmkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInlcIiksIDQqaSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UgKGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIGkqNCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoYy5pMzJfd3JhcF9pNjQoYy5pNjRfc2hyX3UgKGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YigpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zdWJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNcIiwgXCJpNjRcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgYy5pNjRfc3ViKFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ4XCIpKSxcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieVwiKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICAgICBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkZcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbCggXCJjXCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieFwiKSwgNCppKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ5XCIpLCA0KmkpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl9zIChjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBpKjQsXG4gICAgICAgICAgICAgICAgYy5pNjRfYW5kKCBjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGXCIpKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoYy5pMzJfd3JhcF9pNjQgKCBjLmk2NF9zaHJfcyAoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSkpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX211bFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFcIiwgXCJpNjRcIik7XG5cblxuICAgICAgICBmb3IgKGxldCBpPTA7aTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInhcIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ5XCIraSwgXCJpNjRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGxvYWRYID0gW107XG4gICAgICAgIGNvbnN0IGxvYWRZID0gW107XG4gICAgICAgIGZ1bmN0aW9uIG11bGlqKGksIGopIHtcbiAgICAgICAgICAgIGxldCBYLFk7XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2ldKSB7XG4gICAgICAgICAgICAgICAgWCA9IGMudGVlTG9jYWwoXCJ4XCIraSwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBpKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFggPSBjLmdldExvY2FsKFwieFwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2FkWVtqXSkge1xuICAgICAgICAgICAgICAgIFkgPSBjLnRlZUxvY2FsKFwieVwiK2osIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieVwiKSwgaio0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFlbal0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBZID0gYy5nZXRMb2NhbChcInlcIitqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggWCwgWSApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGMwID0gXCJjMFwiO1xuICAgICAgICBsZXQgYzEgPSBcImMxXCI7XG5cbiAgICAgICAgZm9yIChsZXQgaz0wOyBrPG4zMioyLTE7IGsrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgwLCBrLW4zMisxKTsgKGk8PWspJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgayo0LFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBbYzAsIGMxXSA9IFtjMSwgYzBdO1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBuMzIqNCoyLTQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMF9vbGRcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMV9vbGRcIiwgXCJpNjRcIik7XG5cblxuICAgICAgICBmb3IgKGxldCBpPTA7aTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInhcIitpLCBcImk2NFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgbG9hZFggPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gbXVsaWooaSwgaikge1xuICAgICAgICAgICAgbGV0IFgsWTtcbiAgICAgICAgICAgIGlmICghbG9hZFhbaV0pIHtcbiAgICAgICAgICAgICAgICBYID0gYy50ZWVMb2NhbChcInhcIitpLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGkqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWCA9IGMuZ2V0TG9jYWwoXCJ4XCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2pdKSB7XG4gICAgICAgICAgICAgICAgWSA9IGMudGVlTG9jYWwoXCJ4XCIraiwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBqKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtqXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFkgPSBjLmdldExvY2FsKFwieFwiK2opO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBYLCBZICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYzAgPSBcImMwXCI7XG4gICAgICAgIGxldCBjMSA9IFwiYzFcIjtcbiAgICAgICAgbGV0IGMwX29sZCA9IFwiYzBfb2xkXCI7XG4gICAgICAgIGxldCBjMV9vbGQgPSBcImMxX29sZFwiO1xuXG4gICAgICAgIGZvciAobGV0IGs9MDsgazxuMzIqMi0xOyBrKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLCBjLmk2NF9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSwgYy5pNjRfY29uc3QoMCkpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgwLCBrLW4zMisxKTsgKGk8KChrKzEpPj4xKSApJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNdWx0aXBseSBieSAyXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChrJTIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaz4+MSwgaz4+MSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG9sZCBjYXJyeVxuXG4gICAgICAgICAgICBpZiAoaz4wKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzFfb2xkKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgICAgICBrKjQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIGMwX29sZCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIGMxX29sZCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIG4zMio0KjItNCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmVPbGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZU9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9idWlsZE11bDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19tdWwxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTY0XCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwicHhcIiksIDAsIDApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ5XCIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbCggXCJjXCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwicHhcIiksIDQqaSwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwieVwiKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdSAoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgIGkqNCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9idWlsZEFkZDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19hZGQxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicHhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInB4XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwicHhcIiksIDAsIDApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ5XCIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgYy5pNjRfZXF6KGMuZ2V0TG9jYWwoXCJjXCIpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJweFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwicHhcIiksIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRGl2KCkge1xuICAgICAgICBfYnVpbGRNdWwxKCk7XG4gICAgICAgIF9idWlsZEFkZDEoKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9kaXZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicnJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImVYXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZVlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzeVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInN4XCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZWNcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IENhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUmF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBDID0gYy5nZXRMb2NhbChcImNjXCIpO1xuICAgICAgICBjb25zdCBSID0gYy5nZXRMb2NhbChcInJyXCIpO1xuICAgICAgICBjb25zdCBwcjEgPSBtb2R1bGUuYWxsb2MobjgqMik7XG4gICAgICAgIGNvbnN0IFIxID0gYy5pMzJfY29uc3QocHIxKTtcbiAgICAgICAgY29uc3QgUjIgPSBjLmkzMl9jb25zdChwcjErbjgpO1xuXG4gICAgICAgIC8vIEljIGMgaXMgMCB0aGVuIHN0b3JlIGl0IGluIGFuIGF1eGlsaWFyeSBidWZmZXJcbiAgICAgICAgZi5hZGRDb2RlKGMuaWYoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjY1wiLCBjLmdldExvY2FsKFwiY1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiY2NcIiwgQ2F1eClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgLy8gSWMgciBpcyAwIHRoZW4gc3RvcmUgaXQgaW4gYW4gYXV4aWxpYXJ5IGJ1ZmZlclxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInJyXCIsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJyclwiLCBSYXV4KVxuICAgICAgICApKTtcblxuICAgICAgICAvLyBDb3B5XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwieFwiKSwgUikpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInlcIiksIFkpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIEMpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIFIxKSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcImVYXCIsIGMuaTMyX2NvbnN0KG44LTEpKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiZVlcIiwgYy5pMzJfY29uc3QobjgtMSkpKTtcblxuICAgICAgICAvLyB3aGlsZSAoZVk+MykmJihZW2VZXT09MCkgZXktLTtcbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIGMuaTMyX29yKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFkgLCBjLmdldExvY2FsKFwiZVlcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZVlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJlWVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImVZXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInN5XCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoIFksIGMuZ2V0TG9jYWwoXCJlWVwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMylcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBGb3JjZSBhIGRpdmlkZSBieSAwIGlmIHF1b3RpZW4gaXMgMFxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTY0X2VxKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3lcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmRyb3AoYy5pNjRfZGl2X3UoYy5pNjRfY29uc3QoMCksIGMuaTY0X2NvbnN0KDApKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5ibG9jayhjLmxvb3AoXG5cbiAgICAgICAgICAgIC8vIHdoaWxlIChlWD43KSYmKFlbZVhdPT0wKSBleC0tO1xuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChSICwgYy5nZXRMb2NhbChcImVYXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZVhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoNylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImVYXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiZVhcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJzeFwiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZCggUiwgYy5nZXRMb2NhbChcImVYXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDcpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwic3hcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9kaXZfdShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3lcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImVjXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZVhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZVlcIilcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoNClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAvLyBXaGlsZSBncmVhdGVyIHRoYW4gMzIgYml0cyBvciBlYyBpcyBuZWcsIHNociBhbmQgaW5jIGV4cFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfZXF6KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkYwMDAwMDAwMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwic3hcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCg4KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiZWNcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pNjRfZXF6KGMuZ2V0TG9jYWwoXCJzeFwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwocHJlZml4ICsgXCJfZ3RlXCIsIFIsIFkpKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic3hcIiwgYy5pNjRfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiZWNcIiwgYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19tdWwxXCIsIFksIGMuZ2V0TG9jYWwoXCJzeFwiKSwgUjIpLFxuICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICBSLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihSMiwgYy5nZXRMb2NhbChcImVjXCIpKSxcbiAgICAgICAgICAgICAgICBSXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9fYWRkMVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChDLCBjLmdldExvY2FsKFwiZWNcIikpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeFwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZU1vZCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pbnZlcnNlTW9kXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwbVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwidFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5ld3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicXFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJxclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5ld3JcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzd3BcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic2lnbnRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzaWdubmV3dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNpZ254XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBhdXgyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGF1eDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgYXV4NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBhdXg1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGF1eDYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgbXVsQnVmZiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCoyKSk7XG4gICAgICAgIGNvbnN0IGF1eDcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwidFwiLCBhdXgxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGF1eDEpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNpZ250XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiclwiLCBhdXgyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJwbVwiKSwgYXV4MilcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibmV3dFwiLCBhdXgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgYXV4MyksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic2lnbm5ld3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuZXdyXCIsIGF1eDQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInB4XCIpLCBhdXg0KVxuICAgICAgICApO1xuXG5cblxuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwicXFcIiwgYXV4NSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInFyXCIsIGF1eDYpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ4XCIsIGF1eDcpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwibmV3clwiKSApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2RpdlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5nZXRMb2NhbChcIm5ld3JcIiksIGMuZ2V0TG9jYWwoXCJxcVwiKSwgYy5nZXRMb2NhbChcInFyXCIpKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwicXFcIiksIGMuZ2V0TG9jYWwoXCJuZXd0XCIpLCBtdWxCdWZmKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2lnbnRcIiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNpZ25uZXd0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9ndGVcIiwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInRcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgYy5nZXRMb2NhbChcInRcIiksIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzaWdubmV3dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGMuaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2d0ZVwiLCBjLmdldExvY2FsKFwidFwiKSwgbXVsQnVmZiksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgYy5nZXRMb2NhbChcInRcIiksIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBtdWxCdWZmLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic3dwXCIsIGMuZ2V0TG9jYWwoXCJ0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJ0XCIsIGMuZ2V0TG9jYWwoXCJuZXd0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuZXd0XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJ4XCIsIGMuZ2V0TG9jYWwoXCJzd3BcIikpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic2lnbnRcIiwgYy5nZXRMb2NhbChcInNpZ25uZXd0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzaWdubmV3dFwiLCBjLmdldExvY2FsKFwic2lnbnhcIikpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic3dwXCIsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJyXCIsIGMuZ2V0TG9jYWwoXCJuZXdyXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuZXdyXCIsIGMuZ2V0TG9jYWwoXCJxclwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicXJcIiwgYy5nZXRMb2NhbChcInN3cFwiKSksXG5cbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmlmKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInNpZ250XCIpLFxuICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgYy5nZXRMb2NhbChcInBtXCIpLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInByXCIpKSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInByXCIpKVxuICAgICAgICApKTtcbiAgICB9XG5cblxuICAgIGJ1aWxkQ29weSgpO1xuICAgIGJ1aWxkWmVybygpO1xuICAgIGJ1aWxkSXNaZXJvKCk7XG4gICAgYnVpbGRPbmUoKTtcbiAgICBidWlsZEVxKCk7XG4gICAgYnVpbGRHdGUoKTtcbiAgICBidWlsZEFkZCgpO1xuICAgIGJ1aWxkU3ViKCk7XG4gICAgYnVpbGRNdWwoKTtcbiAgICBidWlsZFNxdWFyZSgpO1xuICAgIGJ1aWxkU3F1YXJlT2xkKCk7XG4gICAgYnVpbGREaXYoKTtcbiAgICBidWlsZEludmVyc2VNb2QoKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfb25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZXFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9ndGVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9zdWJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9tdWxcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVPbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9kaXZcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9pbnZlcnNlTW9kXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRUaW1lc1NjYWxhcihtb2R1bGUsIGZuTmFtZSwgZWxlbWVudExlbiwgb3BBQiwgb3BBQSwgb3BDb3B5LCBvcEluaXQpIHtcblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwiYmFzZVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5ndGhcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImJcIiwgXCJpMzJcIik7XG5cbiAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGVsZW1lbnRMZW4pKTtcblxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5pZihcbiAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwic2NhbGFyTGVuZ3RoXCIpKSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BJbml0LCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICBdXG4gICAgICAgIClcbiAgICApO1xuICAgIGYuYWRkQ29kZShjLmNhbGwob3BDb3B5LCBjLmdldExvY2FsKFwiYmFzZVwiKSwgYXV4KSk7XG4gICAgZi5hZGRDb2RlKGMuY2FsbChvcEluaXQsIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJpXCIsIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5ndGhcIikpKTtcbiAgICBmLmFkZENvZGUoYy5ibG9jayhjLmxvb3AoXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcblxuICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJiXCIsXG4gICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIC4uLmlubmVyTG9vcCgpLFxuICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICBjLmJyKDApXG4gICAgKSkpO1xuXG5cbiAgICBmdW5jdGlvbiBpbm5lckxvb3AoKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDg7IGkrKykge1xuICAgICAgICAgICAgY29kZS5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEFBLCBjLmdldExvY2FsKFwiclwiKSwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIC4uLmMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3UoIGMuZ2V0TG9jYWwoXCJiXCIpLCBjLmkzMl9jb25zdCgweDgwID4+IGkpKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDgwID4+IGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEFCLCBjLmdldExvY2FsKFwiclwiKSxhdXgsIGMuZ2V0TG9jYWwoXCJyXCIpKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG5cbn07XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gYnVpbGRCYXRjaEludmVyc2U7XG5cbmZ1bmN0aW9uIGJ1aWxkQmF0Y2hJbnZlcnNlKG1vZHVsZSwgcHJlZml4KSB7XG5cblxuICAgIGNvbnN0IG44ID0gbW9kdWxlLm1vZHVsZXNbcHJlZml4XS5uNjQqODtcblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2JhdGNoSW52ZXJzZVwiKTtcbiAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJpblN0ZXBcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcIm91dFN0ZXBcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0QXV4XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdE91dFwiLFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsXCJpMzJcIik7XG5cbiAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cblxuICAgIC8vIEFsbG9jIFdvcmtpbmcgc3BhY2UgZm9yIGFjY3VtdWxhdGVkIHVtbHRpcGxpY2F0aW9uc1xuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX2xvYWQoIGMuaTMyX2NvbnN0KDApICkpLFxuICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIGYuYWRkQ29kZShcblxuICAgICAgICAvLyBhdXhbMF0gPSBhO1xuICAgICAgICBjLmNhbGwocHJlZml4K1wiX29uZVwiLCBjLmdldExvY2FsKFwiaXRBdXhcIikpLFxuICAgICAgICAvLyBmb3IgKGk9MDtpPG47aSsrKSBhdXhbaV0gPSBhdXhbaS0xXSppbltpXVxuICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG5cbiAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4K1wiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwiaXRJblwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXgrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEluXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmdldExvY2FsKFwiaW5TdGVwXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpLFxuXG4gICAgICAgIC8vIHBvaW50IHRvIHRoZSBsYXN0XG4gICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRJblwiKSwgYy5nZXRMb2NhbChcImluU3RlcFwiKSkpLFxuICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgIC8vIGl0T3V0ID0gcE91dCArIChuLTEpKnN0ZXBPdXQgICAvLyBQb2ludCB0byB0aGUgbGFzdFxuICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJpdE91dFwiLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvdXRTdGVwXCIpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcblxuICAgICAgICAvLyBhdXhbbi0xXSA9IDEvYXV4W24tMV1cbiAgICAgICAgYy5jYWxsKHByZWZpeCtcIl9pbnZlcnNlXCIsIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5nZXRMb2NhbChcIml0QXV4XCIpICksXG5cbiAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiggYy5nZXRMb2NhbChcImlcIikpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCtcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIml0SW5cIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0T3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdLFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSwgQVVYKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4K1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0SW5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBBVVgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRPdXRcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuZ2V0TG9jYWwoXCJpblN0ZXBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmdldExvY2FsKFwib3V0U3RlcFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKVxuXG4gICAgKTtcblxuXG4gICAgLy8gUmVjb3ZlciBPbGQgbWVtb3J5XG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpXG4gICAgICAgIClcbiAgICApO1xuXG59XG4iLCJcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZEJhdGNoQ29udmVydGlvbjtcblxuZnVuY3Rpb24gYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBmbk5hbWUsIGludGVybmFsRm5OYW1lLCBzaXplSW4sIHNpemVPdXQsIHJldmVyc2UpIHtcbiAgICBpZiAodHlwZW9mIHJldmVyc2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gU2V0IHRoZSByZXZlcnNlIGluIGEgd2F5IHRoYXQgYWxsb3dzIHRvIHVzZSB0aGUgc2FtZSBidWZmZXIgYXMgaW4vb3V0LlxuICAgICAgICBpZiAoc2l6ZUluIDwgc2l6ZU91dCkge1xuICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXZlcnNlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRJblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRPdXRcIiwgXCJpMzJcIik7XG5cbiAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSW5cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHNpemVJbilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChzaXplT3V0KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50ZXJuYWxGbk5hbWUsIGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmdldExvY2FsKFwiaXRPdXRcIikpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KHNpemVPdXQpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50ZXJuYWxGbk5hbWUsIGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmdldExvY2FsKFwiaXRPdXRcIikpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KHNpemVPdXQpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQmF0Y2hDb252ZXJ0aW9uO1xuXG5mdW5jdGlvbiBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIGZuTmFtZSwgaW50ZXJuYWxGbk5hbWUsIHNpemVJbiwgc2l6ZU91dCwgcmV2ZXJzZSkge1xuICAgIGlmICh0eXBlb2YgcmV2ZXJzZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBTZXQgdGhlIHJldmVyc2UgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdG8gdXNlIHRoZSBzYW1lIGJ1ZmZlciBhcyBpbi9vdXQuXG4gICAgICAgIGlmIChzaXplSW4gPCBzaXplT3V0KSB7XG4gICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwicEluMVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwicEluMlwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRJbjFcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0SW4yXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdE91dFwiLCBcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjFcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSW4xXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChzaXplSW4pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4yXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEluMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3Qoc2l6ZUluKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHNpemVPdXQpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRlcm5hbEZuTmFtZSwgYy5nZXRMb2NhbChcIml0SW4xXCIpLCBjLmdldExvY2FsKFwiaXRJbjJcIiksIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjFcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEluMVwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMlwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0SW4yXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KHNpemVPdXQpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMVwiLCBjLmdldExvY2FsKFwicEluMVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjJcIiwgYy5nZXRMb2NhbChcInBJbjJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50ZXJuYWxGbk5hbWUsIGMuZ2V0TG9jYWwoXCJpdEluMVwiKSwgYy5nZXRMb2NhbChcIml0SW4yXCIpLCBjLmdldExvY2FsKFwiaXRPdXRcIikpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4xXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJbjFcIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluMlwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChzaXplT3V0KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBNYW55IG9mIHRoZXNlIHV0aWxpdGllcyBhcmUgZnJvbSB0aGUgYGJpZy1pbnRlZ2VyYCBsaWJyYXJ5LFxuLy8gYnV0IGFkanVzdGVkIHRvIG9ubHkgd29yayB3aXRoIG5hdGl2ZSBCaWdJbnQgdHlwZVxuLy8gUmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlcm9sc29uL0JpZ0ludGVnZXIuanMvYmxvYi9lNWQyMTU0ZDNjNDE3MDY5YzUxZTcxMTZiYWZjM2I5MWQwYjlmZTQxL0JpZ0ludGVnZXIuanNcbi8vIE9yaWdpbmFsbHkgbGljZW5zZWQgVGhlIFVubGljZW5zZVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYiA/IDAgOiBhID4gYiA/IDEgOiAtMTtcbn1cblxuZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICByZXR1cm4gbiAqIG47XG59XG5cbmZ1bmN0aW9uIGlzT2RkKG4pIHtcbiAgICByZXR1cm4gbiAlIDJuICE9PSAwbjtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAgICByZXR1cm4gbiAlIDJuID09PSAwbjtcbn1cblxuZnVuY3Rpb24gaXNOZWdhdGl2ZShuKSB7XG4gICAgcmV0dXJuIG4gPCAwbjtcbn1cblxuZnVuY3Rpb24gaXNQb3NpdGl2ZShuKSB7XG4gICAgcmV0dXJuIG4gPiAwbjtcbn1cblxuZnVuY3Rpb24gYml0TGVuZ3RoKG4pIHtcbiAgICBpZiAoaXNOZWdhdGl2ZShuKSkge1xuICAgICAgICByZXR1cm4gbi50b1N0cmluZygyKS5sZW5ndGggLSAxOyAvLyBkaXNjYXJkIHRoZSAtIHNpZ25cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbi50b1N0cmluZygyKS5sZW5ndGg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhYnMobikge1xuICAgIHJldHVybiBuIDwgMG4gPyAtbiA6IG47XG59XG5cbmZ1bmN0aW9uIGlzVW5pdChuKSB7XG4gICAgcmV0dXJuIGFicyhuKSA9PT0gMW47XG59XG5cbmZ1bmN0aW9uIG1vZEludihhLCBuKSB7XG4gICAgdmFyIHQgPSAwbiwgbmV3VCA9IDFuLCByID0gbiwgbmV3UiA9IGFicyhhKSwgcSwgbGFzdFQsIGxhc3RSO1xuICAgIHdoaWxlIChuZXdSICE9PSAwbikge1xuICAgICAgICBxID0gciAvIG5ld1I7XG4gICAgICAgIGxhc3RUID0gdDtcbiAgICAgICAgbGFzdFIgPSByO1xuICAgICAgICB0ID0gbmV3VDtcbiAgICAgICAgciA9IG5ld1I7XG4gICAgICAgIG5ld1QgPSBsYXN0VCAtIChxICogbmV3VCk7XG4gICAgICAgIG5ld1IgPSBsYXN0UiAtIChxICogbmV3Uik7XG4gICAgfVxuICAgIGlmICghaXNVbml0KHIpKSB0aHJvdyBuZXcgRXJyb3IoYS50b1N0cmluZygpICsgXCIgYW5kIFwiICsgbi50b1N0cmluZygpICsgXCIgYXJlIG5vdCBjby1wcmltZVwiKTtcbiAgICBpZiAoY29tcGFyZSh0LCAwbikgPT09IC0xKSB7XG4gICAgICAgIHQgPSB0ICsgbjtcbiAgICB9XG4gICAgaWYgKGlzTmVnYXRpdmUoYSkpIHtcbiAgICAgICAgcmV0dXJuIC10O1xuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cblxuZnVuY3Rpb24gbW9kUG93KG4sIGV4cCwgbW9kKSB7XG4gICAgaWYgKG1vZCA9PT0gMG4pIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0YWtlIG1vZFBvdyB3aXRoIG1vZHVsdXMgMFwiKTtcbiAgICB2YXIgciA9IDFuLFxuICAgICAgICBiYXNlID0gbiAlIG1vZDtcbiAgICBpZiAoaXNOZWdhdGl2ZShleHApKSB7XG4gICAgICAgIGV4cCA9IGV4cCAqIC0xbjtcbiAgICAgICAgYmFzZSA9IG1vZEludihiYXNlLCBtb2QpO1xuICAgIH1cbiAgICB3aGlsZSAoaXNQb3NpdGl2ZShleHApKSB7XG4gICAgICAgIGlmIChiYXNlID09PSAwbikgcmV0dXJuIDBuO1xuICAgICAgICBpZiAoaXNPZGQoZXhwKSkgciA9IHIgKiBiYXNlICUgbW9kO1xuICAgICAgICBleHAgPSBleHAgLyAybjtcbiAgICAgICAgYmFzZSA9IHNxdWFyZShiYXNlKSAlIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVBYnMoYSwgYikge1xuICAgIGEgPSBhID49IDBuID8gYSA6IC1hO1xuICAgIGIgPSBiID49IDBuID8gYiA6IC1iO1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPiBiID8gMSA6IC0xO1xufVxuXG5mdW5jdGlvbiBpc0RpdmlzaWJsZUJ5KGEsIG4pIHtcbiAgICBpZiAobiA9PT0gMG4pIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNVbml0KG4pKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY29tcGFyZUFicyhuLCAybikgPT09IDApIHJldHVybiBpc0V2ZW4oYSk7XG4gICAgcmV0dXJuIGEgJSBuID09PSAwbjtcbn1cblxuZnVuY3Rpb24gaXNCYXNpY1ByaW1lKHYpIHtcbiAgICB2YXIgbiA9IGFicyh2KTtcbiAgICBpZiAoaXNVbml0KG4pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG4gPT09IDJuIHx8IG4gPT09IDNuIHx8IG4gPT09IDVuKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNFdmVuKG4pIHx8IGlzRGl2aXNpYmxlQnkobiwgM24pIHx8IGlzRGl2aXNpYmxlQnkobiwgNW4pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG4gPCA0OW4pIHJldHVybiB0cnVlO1xuICAgIC8vIHdlIGRvbid0IGtub3cgaWYgaXQncyBwcmltZTogbGV0IHRoZSBvdGhlciBmdW5jdGlvbnMgZmlndXJlIGl0IG91dFxufVxuXG5mdW5jdGlvbiBwcmV2KG4pIHtcbiAgICByZXR1cm4gbiAtIDFuO1xufVxuXG5mdW5jdGlvbiBtaWxsZXJSYWJpblRlc3QobiwgYSkge1xuICAgIHZhciBuUHJldiA9IHByZXYobiksXG4gICAgICAgIGIgPSBuUHJldixcbiAgICAgICAgciA9IDAsXG4gICAgICAgIGQsIGksIHg7XG4gICAgd2hpbGUgKGlzRXZlbihiKSkgYiA9IGIgLyAybiwgcisrO1xuICAgIG5leHQ6IGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChuIDwgYVtpXSkgY29udGludWU7XG4gICAgICAgIHggPSBtb2RQb3coQmlnSW50KGFbaV0pLCBiLCBuKTtcbiAgICAgICAgaWYgKGlzVW5pdCh4KSB8fCB4ID09PSBuUHJldikgY29udGludWU7XG4gICAgICAgIGZvciAoZCA9IHIgLSAxOyBkICE9IDA7IGQtLSkge1xuICAgICAgICAgICAgeCA9IHNxdWFyZSh4KSAlIG47XG4gICAgICAgICAgICBpZiAoaXNVbml0KHgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoeCA9PT0gblByZXYpIGNvbnRpbnVlIG5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQcmltZShwKSB7XG4gICAgdmFyIGlzUHJpbWUgPSBpc0Jhc2ljUHJpbWUocCk7XG4gICAgaWYgKGlzUHJpbWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGlzUHJpbWU7XG4gICAgdmFyIG4gPSBhYnMocCk7XG4gICAgdmFyIGJpdHMgPSBiaXRMZW5ndGgobik7XG4gICAgaWYgKGJpdHMgPD0gNjQpXG4gICAgICAgIHJldHVybiBtaWxsZXJSYWJpblRlc3QobiwgWzIsIDMsIDUsIDcsIDExLCAxMywgMTcsIDE5LCAyMywgMjksIDMxLCAzN10pO1xuICAgIHZhciBsb2dOID0gTWF0aC5sb2coMikgKiBOdW1iZXIoYml0cyk7XG4gICAgdmFyIHQgPSBNYXRoLmNlaWwobG9nTik7XG4gICAgZm9yICh2YXIgYSA9IFtdLCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICBhLnB1c2goQmlnSW50KGkgKyAyKSk7XG4gICAgfVxuICAgIHJldHVybiBtaWxsZXJSYWJpblRlc3QobiwgYSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmJpdExlbmd0aCA9IGJpdExlbmd0aDtcbm1vZHVsZS5leHBvcnRzLmlzT2RkID0gaXNPZGQ7XG5tb2R1bGUuZXhwb3J0cy5pc05lZ2F0aXZlID0gaXNOZWdhdGl2ZTtcbm1vZHVsZS5leHBvcnRzLmFicyA9IGFicztcbm1vZHVsZS5leHBvcnRzLmlzVW5pdCA9IGlzVW5pdDtcbm1vZHVsZS5leHBvcnRzLmNvbXBhcmUgPSBjb21wYXJlO1xubW9kdWxlLmV4cG9ydHMubW9kSW52ID0gbW9kSW52O1xubW9kdWxlLmV4cG9ydHMubW9kUG93ID0gbW9kUG93O1xubW9kdWxlLmV4cG9ydHMuaXNQcmltZSA9IGlzUHJpbWU7XG5tb2R1bGUuZXhwb3J0cy5zcXVhcmUgPSBzcXVhcmU7XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IGJ1aWxkSW50ID0gcmVxdWlyZShcIi4vYnVpbGRfaW50LmpzXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGJ1aWxkRXhwID0gcmVxdWlyZShcIi4vYnVpbGRfdGltZXNzY2FsYXJcIik7XG5jb25zdCBidWlsZEJhdGNoSW52ZXJzZSA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNoaW52ZXJzZVwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hDb252ZXJ0aW9uID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hjb252ZXJ0aW9uXCIpO1xuY29uc3QgYnVpbGRCYXRjaE9wID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hvcFwiKTtcbmNvbnN0IHsgYml0TGVuZ3RoLCBtb2RJbnYsIG1vZFBvdywgaXNQcmltZSwgaXNPZGQsIHNxdWFyZSB9ID0gcmVxdWlyZShcIi4vYmlnaW50LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRjFtKG1vZHVsZSwgX3EsIF9wcmVmaXgsIF9pbnRQcmVmaXgpIHtcbiAgICBjb25zdCBxID0gQmlnSW50KF9xKTtcbiAgICBjb25zdCBuNjQgPSBNYXRoLmZsb29yKChiaXRMZW5ndGgocSAtIDFuKSAtIDEpLzY0KSArMTtcbiAgICBjb25zdCBuMzIgPSBuNjQqMjtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImYxbVwiO1xuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG5cbiAgICBjb25zdCBpbnRQcmVmaXggPSBidWlsZEludChtb2R1bGUsIG42NCwgX2ludFByZWZpeCk7XG4gICAgY29uc3QgcHEgPSBtb2R1bGUuYWxsb2MobjgsIHV0aWxzLmJpZ0ludDJCeXRlc0xFKHEsIG44KSk7XG5cbiAgICBjb25zdCBwUjIgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoc3F1YXJlKDFuIDw8IEJpZ0ludChuNjQqNjQpKSAlIHEsIG44KSk7XG4gICAgY29uc3QgcE9uZSA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgoMW4gPDwgQmlnSW50KG42NCo2NCkpICUgcSwgbjgpKTtcbiAgICBjb25zdCBwWmVybyA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgwbiwgbjgpKTtcbiAgICBjb25zdCBfbWludXNPbmUgPSBxIC0gMW47XG4gICAgY29uc3QgX2UgPSBfbWludXNPbmUgPj4gMW47IC8vIGUgPSAocC0xKS8yXG4gICAgY29uc3QgcGUgPSBtb2R1bGUuYWxsb2MobjgsIHV0aWxzLmJpZ0ludDJCeXRlc0xFKF9lLCBuOCkpO1xuXG4gICAgY29uc3QgX2VQbHVzT25lID0gX2UgKyAxbjsgLy8gZSA9IChwLTEpLzJcbiAgICBjb25zdCBwZVBsdXNPbmUgPSBtb2R1bGUuYWxsb2MobjgsIHV0aWxzLmJpZ0ludDJCeXRlc0xFKF9lUGx1c09uZSwgbjgpKTtcblxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIHBxOiBwcSxcbiAgICAgICAgcFIyOiBwUjIsXG4gICAgICAgIG42NDogbjY0LFxuICAgICAgICBxOiBxLFxuICAgICAgICBwT25lOiBwT25lLFxuICAgICAgICBwWmVybzogcFplcm8sXG4gICAgICAgIHBlUGx1c09uZTogcGVQbHVzT25lXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9vbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoaW50UHJlZml4ICsgXCJfY29weVwiLCBjLmkzMl9jb25zdChwT25lKSwgYy5nZXRMb2NhbChcInByXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2FkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCtcIl9hZGRcIiwgYy5nZXRMb2NhbChcInhcIiksICBjLmdldExvY2FsKFwieVwiKSwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXgrXCJfZ3RlXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSkgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3ViXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwieFwiKSwgIGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCAgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGROZWcoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX25lZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBjLmkzMl9jb25zdChwWmVybyksIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwiclwiKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwieFwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl9ndGVcIiwgQVVYLCBjLmkzMl9jb25zdChwZVBsdXNPbmUpIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFNpZ24oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NpZ25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmIChcbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInhcIiksIEFVWCksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl9ndGVcIiwgQVVYLCBjLmkzMl9jb25zdChwZVBsdXNPbmUpKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgtMSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZE1SZWR1Y3QoKSB7XG4gICAgICAgIGNvbnN0IGNhcnJpZXMgPSBtb2R1bGUuYWxsb2MobjMyKm4zMio4KTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tUmVkdWN0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwidFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJucDMyXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1cIiwgXCJpNjRcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBucDMyID0gTnVtYmVyKDB4MTAwMDAwMDAwbiAtIG1vZEludihxLCAweDEwMDAwMDAwMG4pKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcIm5wMzJcIiwgYy5pNjRfY29uc3QobnAzMikpKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiY1wiLCBjLmk2NF9jb25zdCgwKSkpO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJtXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwidFwiKSwgaSo0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibnAzMlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRlwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG4zMjsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwidFwiKSwgKGkraikqNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuaTMyX2NvbnN0KHBxKSwgaio0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm1cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaStqKSo0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChjYXJyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgaSo0LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4K1wiX2FkZFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KGNhcnJpZXMpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG4zMio0KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbXVsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5wMzJcIiwgXCJpNjRcIik7XG5cblxuICAgICAgICBmb3IgKGxldCBpPTA7aTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInhcIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ5XCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwibVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInFcIitpLCBcImk2NFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgbnAzMiA9IE51bWJlcigweDEwMDAwMDAwMG4gLSBtb2RJbnYocSwgMHgxMDAwMDAwMDBuKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJucDMyXCIsIGMuaTY0X2NvbnN0KG5wMzIpKSk7XG5cblxuICAgICAgICBjb25zdCBsb2FkWCA9IFtdO1xuICAgICAgICBjb25zdCBsb2FkWSA9IFtdO1xuICAgICAgICBjb25zdCBsb2FkUSA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBtdWxpaihpLCBqKSB7XG4gICAgICAgICAgICBsZXQgWCxZO1xuICAgICAgICAgICAgaWYgKCFsb2FkWFtpXSkge1xuICAgICAgICAgICAgICAgIFggPSBjLnRlZUxvY2FsKFwieFwiK2ksIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaSo0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBYID0gYy5nZXRMb2NhbChcInhcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9hZFlbal0pIHtcbiAgICAgICAgICAgICAgICBZID0gYy50ZWVMb2NhbChcInlcIitqLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInlcIiksIGoqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRZW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWSA9IGMuZ2V0TG9jYWwoXCJ5XCIraik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFgsIFkgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG11bHFtKGksIGopIHtcbiAgICAgICAgICAgIGxldCBRLE07XG4gICAgICAgICAgICBpZiAoIWxvYWRRW2ldKSB7XG4gICAgICAgICAgICAgICAgUSA9IGMudGVlTG9jYWwoXCJxXCIraSwgYy5pNjRfbG9hZDMyX3UoYy5pMzJfY29uc3QoMCksIHBxK2kqNCApKTtcbiAgICAgICAgICAgICAgICBsb2FkUVtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFEgPSBjLmdldExvY2FsKFwicVwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTSA9IGMuZ2V0TG9jYWwoXCJtXCIraik7XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFEsIE0gKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IGMwID0gXCJjMFwiO1xuICAgICAgICBsZXQgYzEgPSBcImMxXCI7XG5cbiAgICAgICAgZm9yIChsZXQgaz0wOyBrPG4zMioyLTE7IGsrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgwLCBrLW4zMisxKTsgKGk8PWspJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMSwgay1uMzIrMSk7IChpPD1rKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxxbShpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrPG4zMikge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibVwiK2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJucDMyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVscW0oMCxrKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGs+PW4zMikge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGstbjMyKSo0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbYzAsIGMxXSA9IFtjMSwgYzBdO1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBuMzIqNC00LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl93cmFwX2k2NChjLmdldExvY2FsKGMxKSksXG4gICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCtcIl9ndGVcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmUoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBfb2xkXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFfb2xkXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibnAzMlwiLCBcImk2NFwiKTtcblxuXG4gICAgICAgIGZvciAobGV0IGk9MDtpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieFwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcIm1cIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJxXCIraSwgXCJpNjRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IG5wMzIgPSBOdW1iZXIoMHgxMDAwMDAwMDBuIC0gbW9kSW52KHEsIDB4MTAwMDAwMDAwbikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwibnAzMlwiLCBjLmk2NF9jb25zdChucDMyKSkpO1xuXG5cbiAgICAgICAgY29uc3QgbG9hZFggPSBbXTtcbiAgICAgICAgY29uc3QgbG9hZFEgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gbXVsaWooaSwgaikge1xuICAgICAgICAgICAgbGV0IFgsWTtcbiAgICAgICAgICAgIGlmICghbG9hZFhbaV0pIHtcbiAgICAgICAgICAgICAgICBYID0gYy50ZWVMb2NhbChcInhcIitpLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGkqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWCA9IGMuZ2V0TG9jYWwoXCJ4XCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2pdKSB7XG4gICAgICAgICAgICAgICAgWSA9IGMudGVlTG9jYWwoXCJ4XCIraiwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBqKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtqXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFkgPSBjLmdldExvY2FsKFwieFwiK2opO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBYLCBZICk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWxxbShpLCBqKSB7XG4gICAgICAgICAgICBsZXQgUSxNO1xuICAgICAgICAgICAgaWYgKCFsb2FkUVtpXSkge1xuICAgICAgICAgICAgICAgIFEgPSBjLnRlZUxvY2FsKFwicVwiK2ksIGMuaTY0X2xvYWQzMl91KGMuaTMyX2NvbnN0KDApLCBwcStpKjQgKSk7XG4gICAgICAgICAgICAgICAgbG9hZFFbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBRID0gYy5nZXRMb2NhbChcInFcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE0gPSBjLmdldExvY2FsKFwibVwiK2opO1xuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBRLCBNICk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBjMCA9IFwiYzBcIjtcbiAgICAgICAgbGV0IGMxID0gXCJjMVwiO1xuICAgICAgICBsZXQgYzBfb2xkID0gXCJjMF9vbGRcIjtcbiAgICAgICAgbGV0IGMxX29sZCA9IFwiYzFfb2xkXCI7XG5cbiAgICAgICAgZm9yIChsZXQgaz0wOyBrPG4zMioyLTE7IGsrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsIGMuaTY0X2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLCBjLmk2NF9jb25zdCgwKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgwLCBrLW4zMisxKTsgKGk8KChrKzEpPj4xKSApJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNdWx0aXBseSBieSAyXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChrJTIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaz4+MSwgaz4+MSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG9sZCBjYXJyeVxuXG4gICAgICAgICAgICBpZiAoaz4wKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzFfb2xkKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDEsIGstbjMyKzEpOyAoaTw9aykmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVscW0oaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoazxuMzIpIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1cIitrLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibnAzMlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHFtKDAsaylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaz49bjMyKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAoay1uMzIpKjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBjMF9vbGQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBjMV9vbGQsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgbjMyKjQtNCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX3dyYXBfaTY0KGMuZ2V0TG9jYWwoYzFfb2xkKSksXG4gICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCtcIl9ndGVcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmVPbGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZU9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90b01vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCtcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KHBSMiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9tTW9udGdvbWVyeSgpIHtcblxuICAgICAgICBjb25zdCBwQXV4MiA9IG1vZHVsZS5hbGxvYyhuOCoyKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoaW50UHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocEF1eDIpICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGludFByZWZpeCArIFwiX3plcm9cIiwgYy5pMzJfY29uc3QocEF1eDIgKyBuOCkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4K1wiX21SZWR1Y3RcIiwgYy5pMzJfY29uc3QocEF1eDIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfaW52ZXJzZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoaW50UHJlZml4ICsgXCJfaW52ZXJzZU1vZFwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdmFyaW91cyB2YWx1c2UgbmVlZGVkIGZvciBzcXJ0XG5cblxuICAgIGxldCBfbnFyID0gMm47XG4gICAgaWYgKGlzUHJpbWUocSkpIHtcbiAgICAgICAgd2hpbGUgKG1vZFBvdyhfbnFyLCBfZSwgcSkgIT09IF9taW51c09uZSkgX25xciA9IF9ucXIgKyAxbjtcbiAgICB9XG5cbiAgICBsZXQgczIgPSAwO1xuICAgIGxldCBfdCA9IF9taW51c09uZTtcblxuICAgIHdoaWxlICgoIWlzT2RkKF90KSkmJihfdCAhPT0gMG4pKSB7XG4gICAgICAgIHMyKys7XG4gICAgICAgIF90ID0gX3QgPj4gMW47XG4gICAgfVxuICAgIGNvbnN0IHB0ID0gbW9kdWxlLmFsbG9jKG44LCB1dGlscy5iaWdJbnQyQnl0ZXNMRShfdCwgbjgpKTtcblxuICAgIGNvbnN0IF9ucXJUb1QgPSBtb2RQb3coX25xciwgX3QsIHEpO1xuICAgIGNvbnN0IHBOcXJUb1QgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoKF9ucXJUb1QgPDwgQmlnSW50KG42NCo2NCkpICUgcSwgbjgpKTtcblxuICAgIGNvbnN0IF90UGx1c09uZU92ZXIyID0gKF90ICsgMW4pID4+IDFuO1xuICAgIGNvbnN0IHB0UGx1c09uZU92ZXIyID0gbW9kdWxlLmFsbG9jKG44LCB1dGlscy5iaWdJbnQyQnl0ZXNMRShfdFBsdXNPbmVPdmVyMiwgbjgpKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3FydCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfc3FydFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgT05FID0gYy5pMzJfY29uc3QocE9uZSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFNRID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIElmIChuPT0wKSByZXR1cm4gMFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJuXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInJcIikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm1cIiwgYy5pMzJfY29uc3QoczIpKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuaTMyX2NvbnN0KHBOcXJUb1QpLCBDKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYy5nZXRMb2NhbChcIm5cIiksIGMuaTMyX2NvbnN0KHB0KSwgYy5pMzJfY29uc3QobjgpLCBUKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYy5nZXRMb2NhbChcIm5cIiksIGMuaTMyX2NvbnN0KHB0UGx1c09uZU92ZXIyKSwgYy5pMzJfY29uc3QobjgpLCBSKSxcblxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmNhbGwocHJlZml4ICsgXCJfZXFcIiwgVCwgT05FKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIFQsIFNRKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5jYWxsKHByZWZpeCArIFwiX2VxXCIsIFNRLCBPTkUpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBTUSwgU1EpLFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIEMsIEIpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX3N1YihjLmkzMl9zdWIoIGMuZ2V0TG9jYWwoXCJtXCIpLCBjLmdldExvY2FsKFwiaVwiKSksIGMuaTMyX2NvbnN0KDEpKSApLFxuICAgICAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeihjLmdldExvY2FsKFwialwiKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIEIsIEIpLFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtXCIsIGMuZ2V0TG9jYWwoXCJpXCIpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIEIsIEMpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgVCwgQywgVCksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBSLCBCLCBSKSxcblxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc05lZ2F0aXZlXCIsIFIpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdcIiwgUiwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIFIsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc1NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IE9ORSA9IGMuaTMyX2NvbnN0KHBPbmUpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIm5cIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYy5nZXRMb2NhbChcIm5cIiksIGMuaTMyX2NvbnN0KHBlKSwgYy5pMzJfY29uc3QobjgpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2VxXCIsIEFVWCwgT05FKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRMb2FkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9sb2FkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJsXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgUiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBwQXV4ID0gbW9kdWxlLmFsbG9jKG44KTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QocEF1eCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIikpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9ndF91KGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpKSksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBSKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBSLCBjLmkzMl9jb25zdChwUjIpLCBSKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwicFwiKSwgUiwgQVVYKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImxcIiwgYy5pMzJfcmVtX3UoIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgYy5pZihjLmkzMl9lcXooYy5nZXRMb2NhbChcImxcIikpLCBjLnJldChbXSkpLFxuICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX3plcm9cIiwgQVVYKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEoYy5nZXRMb2NhbChcImpcIiksIGMuZ2V0TG9jYWwoXCJsXCIpKSksXG5cbiAgICAgICAgICAgICAgICBjLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpLFxuICAgICAgICAgICAgICAgICAgICBwQXV4LFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwXCIpKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXEoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBSKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBSMiksIFIpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBBVVgsIFIsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRpbWVzU2NhbGFyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90aW1lc1NjYWxhclwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2xvYWRcIiwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIiwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgQVVYLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc09uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNPbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGludFByZWZpeCArIFwiX2VxXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwT25lKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oaW50UHJlZml4ICsgXCJfY29weVwiLCBwcmVmaXgrXCJfY29weVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oaW50UHJlZml4ICsgXCJfemVyb1wiLCBwcmVmaXgrXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oaW50UHJlZml4ICsgXCJfaXNaZXJvXCIsIHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGludFByZWZpeCArIFwiX2VxXCIsIHByZWZpeCtcIl9lcVwiKTtcblxuICAgIGJ1aWxkSXNPbmUoKTtcbiAgICBidWlsZEFkZCgpO1xuICAgIGJ1aWxkU3ViKCk7XG4gICAgYnVpbGROZWcoKTtcbiAgICBidWlsZE1SZWR1Y3QoKTtcbiAgICBidWlsZE11bCgpO1xuICAgIGJ1aWxkU3F1YXJlKCk7XG4gICAgYnVpbGRTcXVhcmVPbGQoKTtcbiAgICBidWlsZFRvTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkRnJvbU1vbnRnb21lcnkoKTtcbiAgICBidWlsZElzTmVnYXRpdmUoKTtcbiAgICBidWlsZFNpZ24oKTtcbiAgICBidWlsZEludmVyc2UoKTtcbiAgICBidWlsZE9uZSgpO1xuICAgIGJ1aWxkTG9hZCgpO1xuICAgIGJ1aWxkVGltZXNTY2FsYXIoKTtcbiAgICBidWlsZEJhdGNoSW52ZXJzZShtb2R1bGUsIHByZWZpeCk7XG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaFRvTW9udGdvbWVyeVwiLCBwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIiwgbjgsIG44KTtcbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoRnJvbU1vbnRnb21lcnlcIiwgcHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIiwgbjgsIG44KTtcbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoTmVnXCIsIHByZWZpeCArIFwiX25lZ1wiLCBuOCwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hPcChtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoQWRkXCIsIHByZWZpeCArIFwiX2FkZFwiLCBuOCwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hPcChtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoU3ViXCIsIHByZWZpeCArIFwiX3N1YlwiLCBuOCwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hPcChtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoTXVsXCIsIHByZWZpeCArIFwiX211bFwiLCBuOCwgbjgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzTmVnYXRpdmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzT25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zaWduXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tUmVkdWN0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3F1YXJlT2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbnZlcnNlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9vbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2xvYWRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRXhwKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX2V4cFwiLFxuICAgICAgICBuOCxcbiAgICAgICAgcHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3NxdWFyZVwiLFxuICAgICAgICBpbnRQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX29uZVwiLFxuICAgICk7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2V4cFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hJbnZlcnNlXCIpO1xuICAgIGlmIChpc1ByaW1lKHEpKSB7XG4gICAgICAgIGJ1aWxkU3FydCgpO1xuICAgICAgICBidWlsZElzU3F1YXJlKCk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXJ0XCIpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNTcXVhcmVcIik7XG4gICAgfVxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaFRvTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hGcm9tTW9udGdvbWVyeVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhtb2R1bGUuZnVuY3Rpb25JZHhCeU5hbWUpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IGJ1aWxkRjFtID1yZXF1aXJlKFwiLi9idWlsZF9mMW0uanNcIik7XG5jb25zdCB7IGJpdExlbmd0aCB9ID0gcmVxdWlyZShcIi4vYmlnaW50LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRjEobW9kdWxlLCBfcSwgX3ByZWZpeCwgX2YxbVByZWZpeCwgX2ludFByZWZpeCkge1xuXG4gICAgY29uc3QgcSA9IEJpZ0ludChfcSk7XG4gICAgY29uc3QgbjY0ID0gTWF0aC5mbG9vcigoYml0TGVuZ3RoKHEgLSAxbikgLSAxKS82NCkgKzE7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuICAgIGNvbnN0IHByZWZpeCA9IF9wcmVmaXggfHwgXCJmMVwiO1xuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0OiBuNjRcbiAgICB9O1xuXG4gICAgY29uc3QgaW50UHJlZml4ID0gX2ludFByZWZpeCB8fCBcImludFwiO1xuICAgIGNvbnN0IGYxbVByZWZpeCA9IGJ1aWxkRjFtKG1vZHVsZSwgcSwgX2YxbVByZWZpeCwgaW50UHJlZml4KTtcblxuXG4gICAgY29uc3QgcFIyID0gICAgIG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ucFIyO1xuICAgIGNvbnN0IHBxID0gICAgIG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ucHE7XG4gICAgY29uc3QgcGVQbHVzT25lID0gbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5wZVBsdXNPbmU7XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bCgpIHtcbiAgICAgICAgY29uc3QgcEF1eDEgPSBtb2R1bGUuYWxsb2MobjgpO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9tdWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChwQXV4MSkpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocEF1eDEpLCBjLmkzMl9jb25zdChwUjIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfaW52ZXJzZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoaW50UHJlZml4ICsgXCJfaW52ZXJzZU1vZFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl9ndGVcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KHBlUGx1c09uZSkgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgYnVpbGRNdWwoKTtcbiAgICBidWlsZFNxdWFyZSgpO1xuICAgIGJ1aWxkSW52ZXJzZSgpO1xuICAgIGJ1aWxkSXNOZWdhdGl2ZSgpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9hZGRcIiwgcHJlZml4ICsgXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9zdWJcIiwgcHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9uZWdcIiwgcHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW52ZXJzZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfY29weVwiLCBwcmVmaXgrXCJfY29weVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfemVyb1wiLCBwcmVmaXgrXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfb25lXCIsIHByZWZpeCtcIl9vbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX2lzWmVyb1wiLCBwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9lcVwiLCBwcmVmaXgrXCJfZXFcIik7XG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cbmNvbnN0IGJ1aWxkRXhwID0gcmVxdWlyZShcIi4vYnVpbGRfdGltZXNzY2FsYXJcIik7XG5jb25zdCBidWlsZEJhdGNoSW52ZXJzZSA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNoaW52ZXJzZVwiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGMm0obW9kdWxlLCBtdWxOb25SZXNpZHVlRm4sIHByZWZpeCwgZjFtUHJlZml4KSB7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgZjFuOCA9IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ubjY0Kjg7XG4gICAgY29uc3QgcSA9IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ucTtcblxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIG42NDogbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5uNjQqMlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYWRkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MCwgeTAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgxLCB5MSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVGltZXNTY2FsYXIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RpbWVzU2NhbGFyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhckxlblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdGltZXNTY2FsYXJcIiwgeDAsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdGltZXNTY2FsYXJcIiwgeDEsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3ViXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MCwgeTAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHgxLCB5MSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTmVnKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9uZWdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRDb25qdWdhdGUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2Nvbmp1Z2F0ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZElzTmVnYXRpdmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzTmVnYXRpdmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDEpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChmMW1QcmVmaXgrXCJfaXNOZWdhdGl2ZVwiLCB4MCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGYxbVByZWZpeCtcIl9pc05lZ2F0aXZlXCIsIHgxKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbXVsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBjb25zdCBBID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBEID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgeDAsIHkwLCBBKSwgICAgICAgICAgICAgLy8gQSA9IHgwKnkwXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHgxLCB5MSwgQiksICAgICAgICAgICAgIC8vIEIgPSB4MSp5MVxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MSwgQyksICAgICAgICAgICAgIC8vIEMgPSB4MCArIHgxXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHkwLCB5MSwgRCksICAgICAgICAgICAgIC8vIEQgPSB5MCArIHkxXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIEMsIEQsIEMpLCAgICAgICAgICAgICAgIC8vIEMgPSAoeDAgKyB4MSkqKHkwICsgeTEpID0geDAqeTAreDAqeTEreDEqeTAreDEqeTFcblxuICAgICAgICAgICAgLy8gIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgQiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWUpLCByMCksICAvLyByMCA9IG5yKih4MSp5MSlcbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIEIsIHIwKSwgIC8vIHIwID0gbnIqKHgxKnkxKVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBLCByMCwgcjApLCAgICAgICAgICAgICAvLyByMCA9IHgwKnkwICsgbnIqKHgxKnkxKVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBLCBCLCByMSksICAgICAgICAgICAgIC8vIHIxID0geDAqeTAreDEqeTFcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgQywgcjEsIHIxKSAgICAgICAgICAgICAgLy8gcjEgPSB4MCp5MCt4MCp5MSt4MSp5MCt4MSp5MSAtIHgwKnkwK3gxKnkxID0geDAqeTEreDEqeTBcbiAgICAgICAgKTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbXVsMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgeDAsIHksIHIwKSwgICAgICAgICAgICAgLy8gQSA9IHgwKnlcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgeDEsIHksIHIxKSwgICAgICAgICAgICAgLy8gQiA9IHgxKnlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IEFCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQVBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQVBOQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFCUE5BQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBBQiA9IHgwKnkxXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB4MSwgQUIpLFxuXG4gICAgICAgICAgICAvLyBBUEIgPSB4MCt5MVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCB4MCwgeDEsIEFQQiksXG5cbiAgICAgICAgICAgIC8vIEFQQk4wID0geDAgKyBucip4MVxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgeDEsIEFQTkIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCB4MCwgQVBOQiwgQVBOQiksXG5cbiAgICAgICAgICAgIC8vIEFCUE5BQiA9IGFiICsgbnIqYWJcbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIEFCLCBBQlBOQUIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBQlBOQUIsIEFCLCBBQlBOQUIpLFxuXG4gICAgICAgICAgICAvLyByMCA9IEFQQiAqIEFQTkIgLSBBQlBOQUJcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgQVBCLCBBUE5CLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIHIwLCBBQlBOQUIsIHIwKSxcblxuICAgICAgICAgICAgLy8gcjEgPSBBQiArIEFCXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEFCLCBBQiwgcjEpLFxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFRvTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RvTW9udGdvbWVyeVwiLCB4MSwgcjEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9tTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiLCB4MSwgcjEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRDb3B5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9jb3B5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgxLCByMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFplcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9vbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX29uZVwiLCB4MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZXFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9lcVwiLCB4MCwgeTApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZXFcIiwgeDEsIHkxKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MCksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDEpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbnZlcnNlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pbnZlcnNlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3NxdWFyZVwiLCB4MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zcXVhcmVcIiwgeDEsIHQxKSxcbiAgICAgICAgICAgIC8vIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHQxLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZSksIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHQxLCB0MiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHQwLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pbnZlcnNlXCIsIHQyLCB0MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgwLCB0MywgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDEsIHQzLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCByMSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTaWduKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zaWduXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNcIiAsIGMuY2FsbCggZjFtUHJlZml4ICsgXCJfc2lnblwiLCB4MSkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmdldExvY2FsKFwic1wiKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmNhbGwoIGYxbVByZWZpeCArIFwiX3NpZ25cIiwgeDApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzT25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnJldChjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2lzT25lXCIsIHgwKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIHgxKSxcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvLyBDaGVjayBoZXJlOiBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDEyLzY4NS5wZGZcbiAgICAvLyBBbGcgOWFkalxuICAgIGZ1bmN0aW9uIGJ1aWxkU3FydCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXJ0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgLy8gQmlnSW50IGNhbid0IHRha2UgYHVuZGVmaW5lZGAgc28gd2UgdXNlIGB8fCAwYFxuICAgICAgICBjb25zdCBlMzQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoKEJpZ0ludChxIHx8IDApIC0gM24pIC8gNG4sIGYxbjggKSkpO1xuICAgICAgICAvLyBCaWdJbnQgY2FuJ3QgdGFrZSBgdW5kZWZpbmVkYCBzbyB3ZSB1c2UgYHx8IDBgXG4gICAgICAgIGNvbnN0IGUxMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgoQmlnSW50KHEgfHwgMCkgLSAxbikgLyAybiwgZjFuOCApKSk7XG5cbiAgICAgICAgY29uc3QgYSA9IGMuZ2V0TG9jYWwoXCJhXCIpO1xuICAgICAgICBjb25zdCBhMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgYWxwaGEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IGEwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBwbjEgPSBtb2R1bGUuYWxsb2MoZjFuOCoyKTtcbiAgICAgICAgY29uc3QgbjEgPSBjLmkzMl9jb25zdChwbjEpO1xuICAgICAgICBjb25zdCBuMWEgPSBjLmkzMl9jb25zdChwbjEpO1xuICAgICAgICBjb25zdCBuMWIgPSBjLmkzMl9jb25zdChwbjErZjFuOCk7XG4gICAgICAgIGNvbnN0IHgwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBuMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnXCIsIG4xLCBuMSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGExID0gRi5wb3coYSwgRi5zcXJ0X2UzNCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGEsIGUzNCwgYy5pMzJfY29uc3QoZjFuOCksIGExKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgYTEsIGFscGhhKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYSwgYWxwaGEsIGFscGhhKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTAgPSBGLm11bChGLmZyb2Jlbml1cygxLCBhbGZhKSwgYWxmYSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29uanVnYXRlXCIsIGFscGhhLCBhMCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGEwLCBhbHBoYSwgYTApLFxuXG4gICAgICAgICAgICAvLyBpZiAoRi5lcShhMCwgRi5uZWdvbmUpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGMuaWYoYy5jYWxsKHByZWZpeCArIFwiX2VxXCIsYTAsbjEpLCBjLnVucmVhY2hhYmxlKCkgKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgeDAgPSBGLm11bChhMSwgYSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGExLCBhLCB4MCksXG5cbiAgICAgICAgICAgIC8vIGlmIChGLmVxKGFsZmEsIEYubmVnb25lKSkge1xuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXFcIiwgYWxwaGEsIG4xKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC8vIHggPSBGLm11bCh4MCwgW0YuRi56ZXJvLCBGLkYub25lXSk7XG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChmMW1QcmVmaXggKyBcIl96ZXJvXCIsIG4xYSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChmMW1QcmVmaXggKyBcIl9vbmVcIiwgbjFiKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBuMSwgeDAsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGIgPSBGLnBvdyhGLmFkZChGLm9uZSwgYWxmYSksIEYuc3FydF9lMTIpO1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIGIpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIGIsIGFscGhhLCBiKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBiLCBlMTIsIGMuaTMyX2NvbnN0KGYxbjgpLCBiKSxcblxuICAgICAgICAgICAgICAgICAgICAvLyB4ID0gRi5tdWwoYiwgeDApO1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGIsIHgwLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1NxdWFyZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc1NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIC8vIEJpZ0ludCBjYW4ndCB0YWtlIGB1bmRlZmluZWRgIHNvIHdlIHVzZSBgfHwgMGBcbiAgICAgICAgY29uc3QgZTM0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKChCaWdJbnQocSB8fCAwKSAtIDNuKSAvIDRuLCBmMW44ICkpKTtcblxuICAgICAgICBjb25zdCBhID0gYy5nZXRMb2NhbChcImFcIik7XG4gICAgICAgIGNvbnN0IGExID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBhbHBoYSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgYTAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IHBuMSA9IG1vZHVsZS5hbGxvYyhmMW44KjIpO1xuICAgICAgICBjb25zdCBuMSA9IGMuaTMyX2NvbnN0KHBuMSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIG4xKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdcIiwgbjEsIG4xKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYSwgZTM0LCBjLmkzMl9jb25zdChmMW44KSwgYTEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMSA9IEYucG93KGEsIEYuc3FydF9lMzQpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBhMSwgYWxwaGEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBhLCBhbHBoYSwgYWxwaGEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMCA9IEYubXVsKEYuZnJvYmVuaXVzKDEsIGFsZmEpLCBhbGZhKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgYWxwaGEsIGEwKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYTAsIGFscGhhLCBhMCksXG5cbiAgICAgICAgICAgIC8vIGlmIChGLmVxKGEwLCBGLm5lZ29uZSkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2VxXCIsXG4gICAgICAgICAgICAgICAgICAgIGEwLFxuICAgICAgICAgICAgICAgICAgICBuMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGJ1aWxkSXNaZXJvKCk7XG4gICAgYnVpbGRJc09uZSgpO1xuICAgIGJ1aWxkWmVybygpO1xuICAgIGJ1aWxkT25lKCk7XG4gICAgYnVpbGRDb3B5KCk7XG4gICAgYnVpbGRNdWwoKTtcbiAgICBidWlsZE11bDEoKTtcbiAgICBidWlsZFNxdWFyZSgpO1xuICAgIGJ1aWxkQWRkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZE5lZygpO1xuICAgIGJ1aWxkQ29uanVnYXRlKCk7XG4gICAgYnVpbGRUb01vbnRnb21lcnkoKTtcbiAgICBidWlsZEZyb21Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRFcSgpO1xuICAgIGJ1aWxkSW52ZXJzZSgpO1xuICAgIGJ1aWxkVGltZXNTY2FsYXIoKTtcbiAgICBidWlsZFNpZ24oKTtcbiAgICBidWlsZElzTmVnYXRpdmUoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzT25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl96ZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9vbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX211bFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zaWduXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9jb25qdWdhdGVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbnZlcnNlXCIpO1xuICAgIGJ1aWxkQmF0Y2hJbnZlcnNlKG1vZHVsZSwgcHJlZml4KTtcbiAgICBidWlsZEV4cChcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl9leHBcIixcbiAgICAgICAgZjFuOCoyLFxuICAgICAgICBwcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgcHJlZml4ICsgXCJfc3F1YXJlXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgcHJlZml4ICsgXCJfb25lXCIsXG4gICAgKTtcbiAgICBidWlsZFNxcnQoKTtcbiAgICBidWlsZElzU3F1YXJlKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXhwXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hJbnZlcnNlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXJ0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNOZWdhdGl2ZVwiKTtcblxuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5jb25zdCBidWlsZEV4cCA9IHJlcXVpcmUoXCIuL2J1aWxkX3RpbWVzc2NhbGFyXCIpO1xuY29uc3QgYnVpbGRCYXRjaEludmVyc2UgPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaGludmVyc2VcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGM20obW9kdWxlLCBtdWxOb25SZXNpZHVlRm4sIHByZWZpeCwgZjFtUHJlZml4KSB7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgZjFuOCA9IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ubjY0Kjg7XG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0OiBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLm42NCozXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9hZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgwLCB5MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgeDEsIHkxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MiwgeTIsIHIyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRpbWVzU2NhbGFyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90aW1lc1NjYWxhclwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90aW1lc1NjYWxhclwiLCB4MCwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90aW1lc1NjYWxhclwiLCB4MSwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90aW1lc1NjYWxhclwiLCB4MiwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgcjIpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3N1YlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDAsIHkwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MSwgeTEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHgyLCB5MiwgcjIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTmVnKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9uZWdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDIsIHIyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzTmVnYXRpdmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzTmVnYXRpdmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDEpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwoZjFtUHJlZml4K1wiX2lzTmVnYXRpdmVcIiwgeDApKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGYxbVByZWZpeCtcIl9pc05lZ2F0aXZlXCIsIHgxKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGYxbVByZWZpeCtcIl9pc05lZ2F0aXZlXCIsIHgyKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tdWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgY2QgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYSA9IGNkLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgYiA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJ4XCIpLCBjZC5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCBjID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInhcIiksIGNkLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgQSA9IGNkLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgQiA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJ5XCIpLCBjZC5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCBDID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInlcIiksIGNkLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjZC5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInJcIiksIGNkLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInJcIiksIGNkLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBjb25zdCBhQSA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBiQiA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBjQyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBhX2IgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQV9CID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGFfYyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBX0MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYl9jID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEJfQyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBhQV9iQiA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBhQV9jQyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBiQl9jQyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBVVggPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGEsIEEsIGFBKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGIsIEIsIGJCKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGMsIEMsIGNDKSxcblxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYSwgYiwgYV9iKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEEsIEIsIEFfQiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhLCBjLCBhX2MpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQSwgQywgQV9DKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGIsIGMsIGJfYyksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBCLCBDLCBCX0MpLFxuXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhQSwgYkIsIGFBX2JCKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGFBLCBjQywgYUFfY0MpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYkIsIGNDLCBiQl9jQyksXG5cbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGJfYywgQl9DLCByMCksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCByMCwgYkJfY0MsIHIwKSxcbiAgICAgICAgICAgIGNkLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCByMCwgcjApLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYUEsIHIwLCByMCksXG5cbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGFfYiwgQV9CLCByMSksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCByMSwgYUFfYkIsIHIxKSxcbiAgICAgICAgICAgIGNkLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCBjQywgQVVYKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHIxLCBBVVgsIHIxKSxcblxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYV9jLCBBX0MsIHIyKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIHIyLCBhQV9jQywgcjIpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgcjIsIGJCLCByMiksXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBjb25zdCBzMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGFiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgczEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBzMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGJjID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgczMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBzNCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zcXVhcmVcIiwgQSwgczApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBBLCBCLCBhYiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGFiLCBhYiwgczEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIEEsIEIsIHMyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczIsIEMsIHMyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zcXVhcmVcIiwgczIsIHMyKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBCLCBDLCBiYyksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGJjLCBiYywgczMpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEMsIHM0KSxcblxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgczMsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczAsIHIwLCByMCksXG5cbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHM0LCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMxLCByMSwgcjEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMwLCBzNCwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBzMywgcjIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczIsIHIyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMxLCByMiwgcjIpLFxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFRvTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RvTW9udGdvbWVyeVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90b01vbnRnb21lcnlcIiwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIsIHgyLCByMilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb21Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiLCB4MiwgcjIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRDb3B5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9jb3B5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgyLCByMiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX29uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9vbmVcIiwgeDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZXFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9lcVwiLCB4MCwgeTApLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2VxXCIsIHgxLCB5MSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2VxXCIsIHgyLCB5MilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgwKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDEpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEludmVyc2UoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ludmVyc2VcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0NSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGMwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYzEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBjMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQ2ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3NxdWFyZVwiLCB4MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zcXVhcmVcIiwgeDEsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3F1YXJlXCIsIHgyLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MCwgeDEsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgwLCB4MiwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDEsIHgyLCB0NSksXG5cbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHQ1LCBjMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB0MCwgYzAsIGMwKSxcblxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgdDIsIGMxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIGMxLCB0MywgYzEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB0MSwgdDQsIGMyKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDIsIGMxLCB0NiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MSwgYzIsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB0NiwgQVVYLCB0NiksXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCB0NiwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDAsIGMwLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgQVVYLCB0NiwgdDYpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2ludmVyc2VcIiwgdDYsIHQ2KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgdDYsIGMwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB0NiwgYzEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHQ2LCBjMiwgcjIpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNpZ24oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NpZ25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIgLCBjLmNhbGwoIGYxbVByZWZpeCArIFwiX3NpZ25cIiwgeDIpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5nZXRMb2NhbChcInNcIikpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNcIiAsIGMuY2FsbCggZjFtUHJlZml4ICsgXCJfc2lnblwiLCB4MSkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmdldExvY2FsKFwic1wiKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmNhbGwoIGYxbVByZWZpeCArIFwiX3NpZ25cIiwgeDApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzT25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2lzT25lXCIsIHgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgeDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgeDIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkSXNaZXJvKCk7XG4gICAgYnVpbGRJc09uZSgpO1xuICAgIGJ1aWxkWmVybygpO1xuICAgIGJ1aWxkT25lKCk7XG4gICAgYnVpbGRDb3B5KCk7XG4gICAgYnVpbGRNdWwoKTtcbiAgICBidWlsZFNxdWFyZSgpO1xuICAgIGJ1aWxkQWRkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZE5lZygpO1xuICAgIGJ1aWxkU2lnbigpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkRXEoKTtcbiAgICBidWlsZEludmVyc2UoKTtcbiAgICBidWlsZFRpbWVzU2NhbGFyKCk7XG4gICAgYnVpbGRJc05lZ2F0aXZlKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc09uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfb25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc2lnblwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ludmVyc2VcIik7XG4gICAgYnVpbGRCYXRjaEludmVyc2UobW9kdWxlLCBwcmVmaXgpO1xuICAgIGJ1aWxkRXhwKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX2V4cFwiLFxuICAgICAgICBmMW44KjMsXG4gICAgICAgIHByZWZpeCArIFwiX211bFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zcXVhcmVcIixcbiAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9vbmVcIlxuICAgICk7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2V4cFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoSW52ZXJzZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNOZWdhdGl2ZVwiKTtcblxuICAgIHJldHVybiBwcmVmaXg7XG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVGltZXNTY2FsYXJOQUYobW9kdWxlLCBmbk5hbWUsIGVsZW1lbnRMZW4sIG9wQUIsIG9wQUEsIG9wQW1CLCBvcENvcHksIG9wSW5pdCkge1xuXG4gICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgIGYuYWRkUGFyYW0oXCJiYXNlXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInNjYWxhckxlbmd0aFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwib2xkMFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwibmJpdHNcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImxhc3RcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImN1clwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiY2FycnlcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcInBcIiwgXCJpMzJcIik7XG5cbiAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGVsZW1lbnRMZW4pKTtcblxuICAgIGZ1bmN0aW9uIGdldEJpdChJRFgpIHtcbiAgICAgICAgcmV0dXJuIGMuaTMyX2FuZChcbiAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEWCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkZGRkZGRkMpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgSURYLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDFGKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHB1c2hCaXQoYikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uYy5pMzJfc3RvcmU4KFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KGIpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInBcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuaWYoXG4gICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcInNjYWxhckxlbmd0aFwiKSksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wSW5pdCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgXVxuICAgICAgICApLFxuICAgICAgICBjLnNldExvY2FsKFwibmJpdHNcIiwgYy5pMzJfc2hsKGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5ndGhcIiksIGMuaTMyX2NvbnN0KDMpKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJvbGQwXCIsIGMuaTMyX2xvYWQoYy5pMzJfY29uc3QoMCkpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5nZXRMb2NhbChcIm9sZDBcIikpLFxuICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9sZDBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5iaXRzXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweEZGRkZGRkY4KVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgxKSksXG5cbiAgICAgICAgYy5zZXRMb2NhbChcImxhc3RcIixnZXRCaXQoYy5pMzJfY29uc3QoMCkpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcImNhcnJ5XCIsYy5pMzJfY29uc3QoMCkpLFxuXG4gICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuYml0c1wiKSkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiY3VyXCIsIGdldEJpdChjLmdldExvY2FsKFwiaVwiKSkpLFxuICAgICAgICAgICAgYy5pZiggYy5nZXRMb2NhbChcImxhc3RcIiksXG4gICAgICAgICAgICAgICAgYy5pZiggYy5nZXRMb2NhbChcImN1clwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMjU1KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgyNTUpXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoIGMuZ2V0TG9jYWwoXCJjdXJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSxcblxuICAgICAgICBjLmlmKCBjLmdldExvY2FsKFwibGFzdFwiKSxcbiAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgyNTUpLFxuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApLFxuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDEpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgxKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICksXG5cbiAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuXG4gICAgICAgIC8vIHAgYWxyZWFkeSBwb2ludHMgdG8gdGhlIGxhc3QgYml0XG5cbiAgICAgICAgYy5jYWxsKG9wQ29weSwgYy5nZXRMb2NhbChcImJhc2VcIiksIGF1eCksXG5cbiAgICAgICAgYy5jYWxsKG9wSW5pdCwgYy5nZXRMb2NhbChcInJcIikpLFxuXG4gICAgICAgIGMuYmxvY2soYy5sb29wKFxuXG5cbiAgICAgICAgICAgIGMuY2FsbChvcEFBLCBjLmdldExvY2FsKFwiclwiKSwgYy5nZXRMb2NhbChcInJcIikpLFxuXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjdXJcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImN1clwiKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwiY3VyXCIpLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChvcEFCLCAgYy5nZXRMb2NhbChcInJcIiksIGF1eCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwob3BBbUIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBhdXgsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxKCBjLmdldExvY2FsKFwib2xkMFwiKSwgYy5nZXRMb2NhbChcInBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcblxuICAgICAgICApKSxcblxuICAgICAgICBjLmkzMl9zdG9yZSggYy5pMzJfY29uc3QoMCksIGMuZ2V0TG9jYWwoXCJvbGQwXCIpKVxuXG4gICAgKTtcblxufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZE11bHRpZXhwKG1vZHVsZSwgcHJlZml4LCBmbk5hbWUsIG9wQWRkLCBuOGIpIHtcblxuICAgIGNvbnN0IG42NGcgPSBtb2R1bGUubW9kdWxlc1twcmVmaXhdLm42NDtcbiAgICBjb25zdCBuOGcgPSBuNjRnKjg7XG5cbiAgICBmdW5jdGlvbiBidWlsZEdldENodW5rKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSArIFwiX2dldENodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclNpemVcIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgYnl0ZXMgb2YgdGhlIHNjYWxhclxuICAgICAgICBmLmFkZFBhcmFtKFwic3RhcnRCaXRcIiwgXCJpMzJcIik7ICAvLyBCaXQgdG8gc3RhcnQgZXh0cmFjdFxuICAgICAgICBmLmFkZFBhcmFtKFwiY2h1bmtTaXplXCIsIFwiaTMyXCIpOyAgLy8gQ2h1bmsgc2l6ZSBpbiBiaXRzXG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzVG9FbmRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtYXNrXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiYml0c1RvRW5kXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDgpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzdGFydEJpdFwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2d0X3MoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzVG9FbmRcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwibWFza1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNUb0VuZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwibWFza1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2NhbGFyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3RhcnRCaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsICAvLyBvZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgICAvLyBhbGlnbiB0byBieXRlLlxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3RhcnRCaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDcpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJtYXNrXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdXRpZXhwQ2h1bmsoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lICsgXCJfY2h1bmtcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQmFzZXNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwU2NhbGFyc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclNpemVcIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIHBvaW50c1xuICAgICAgICBmLmFkZFBhcmFtKFwic3RhcnRCaXRcIiwgXCJpMzJcIik7ICAvLyBiaXQgd2hlcmUgaXQgc3RhcnRzIHRoZSBjaHVua1xuICAgICAgICBmLmFkZFBhcmFtKFwiY2h1bmtTaXplXCIsIFwiaTMyXCIpOyAgLy8gYml0IHdoZXJlIGl0IHN0YXJ0cyB0aGUgY2h1bmtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibkNodW5rc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0U2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZW5kU2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRCYXNlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuVGFibGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwVGFibGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwSWR4VGFibGVcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwiblwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAvLyBBbGxvY2F0ZSBtZW1vcnlcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIm5UYWJsZVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBUYWJsZVwiLCBjLmkzMl9sb2FkKCBjLmkzMl9jb25zdCgwKSApKSxcbiAgICAgICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5UYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIC8vIFJlc2V0IFRhYmxlXG4gICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5UYWJsZVwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgZWxlbWVudHNcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEJhc2VcIiwgYy5nZXRMb2NhbChcInBCYXNlc1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRTY2FsYXJcIiwgYy5nZXRMb2NhbChcInBTY2FsYXJzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJlbmRTY2FsYXJcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2NhbGFyc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0U2NhbGFyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVuZFNjYWxhclwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4XCIsXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmbk5hbWUgKyBcIl9nZXRDaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0U2NhbGFyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3RhcnRCaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBJZHhUYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wQWRkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSWR4VGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QmFzZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicElkeFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdFNjYWxhclwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0U2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEJhc2VcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEJhc2VcIiksIGMuaTMyX2NvbnN0KG44YikpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5jYWxsKGZuTmFtZSArIFwiX3JlZHVjZVRhYmxlXCIsIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIikpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bHRpZXhwKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQmFzZXNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwU2NhbGFyc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclNpemVcIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIHBvaW50c1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjaHVua1NpemVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuQ2h1bmtzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRTY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJlbmRTY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEJhc2VcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEJpdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiblRhYmxlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFRhYmxlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicElkeFRhYmxlXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGNvbnN0IHBUU2l6ZXMgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgMTcsIDE3LCAxNywgMTcsICAgMTcsIDE3LCAxNywgMTcsXG4gICAgICAgICAgICAxNywgMTcsIDE2LCAxNiwgICAxNSwgMTQsIDEzLCAxMyxcbiAgICAgICAgICAgIDEyLCAxMSwgMTAsICA5LCAgICA4LCAgNywgIDcsICA2LFxuICAgICAgICAgICAgNSAsICA0LCAgMywgIDIsICAgIDEsICAxLCAgMSwgIDFcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJuXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChbXSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiY2h1bmtTaXplXCIsIGMuaTMyX2xvYWQ4X3UoIGMuaTMyX2NseihjLmdldExvY2FsKFwiblwiKSksICBwVFNpemVzICkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIm5DaHVua3NcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2Rpdl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIC8vIEFsbG9jYXRlIG1lbW9yeVxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiaXRCaXRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuQ2h1bmtzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sdF9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0Qml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAvLyBEb3VibGUgbkNodW5rIHRpbWVzXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInByXCIpKSksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZVwiLCBjLmdldExvY2FsKFwicHJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZuTmFtZSArIFwiX2NodW5rXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQmFzZXNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2NhbGFyc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRCaXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIiksXG4gICAgICAgICAgICAgICAgICAgIGF1eFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgICAgIGF1eCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRCaXRcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEJpdFwiKSwgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VUYWJsZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUgKyBcIl9yZWR1Y2VUYWJsZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBUYWJsZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBcIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgYml0cyBvZiB0aGUgdGFibGVcbiAgICAgICAgZi5hZGRMb2NhbChcImhhbGZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQWNjXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJoYWxmXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0MVwiLCBjLmdldExvY2FsKFwicFRhYmxlXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJpdDJcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJoYWxmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQWNjXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQWNjXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDFcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQWNjXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFjY1wiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0MVwiKSwgYy5pMzJfY29uc3QobjhnKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdDJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdDJcIiksIGMuaTMyX2NvbnN0KG44ZykpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGZuTmFtZSArIFwiX3JlZHVjZVRhYmxlXCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJwXCIpKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZVwiLCBjLmdldExvY2FsKFwicEFjY1wiKSwgYy5nZXRMb2NhbChcInBBY2NcIikpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBjLmdldExvY2FsKFwicFRhYmxlXCIpLCBjLmdldExvY2FsKFwicEFjY1wiKSwgYy5nZXRMb2NhbChcInBUYWJsZVwiKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZEdldENodW5rKCk7XG4gICAgYnVpbGRSZWR1Y2VUYWJsZSgpO1xuICAgIGJ1aWxkTXV0aWV4cENodW5rKCk7XG4gICAgYnVpbGRNdWx0aWV4cCgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZuTmFtZSArXCJfY2h1bmtcIik7XG5cblxufTtcblxuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgYnVpbGRUaW1lc1NjYWxhck5BRiA9IHJlcXVpcmUoXCIuL2J1aWxkX3RpbWVzc2NhbGFybmFmXCIpO1xuLy9jb25zdCBidWlsZFRpbWVzU2NhbGFyID0gcmVxdWlyZShcIi4vYnVpbGRfdGltZXNzY2FsYXJcIik7XG5jb25zdCBidWlsZEJhdGNoQ29udmVydGlvbiA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNoY29udmVydGlvblwiKTtcbmNvbnN0IGJ1aWxkTXVsdGlleHAgPSByZXF1aXJlKFwiLi9idWlsZF9tdWx0aWV4cFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEN1cnZlKG1vZHVsZSwgcHJlZml4LCBwcmVmaXhGaWVsZCwgcEIpIHtcblxuXG4gICAgY29uc3QgbjY0ID0gbW9kdWxlLm1vZHVsZXNbcHJlZml4RmllbGRdLm42NDtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG42NCozXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzWmVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9pc1plcm9cIixcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgqMilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNaZXJvQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2lzWmVyb1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9pc1plcm9cIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRDb3B5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBkXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG42NCozOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBkXCIpLFxuICAgICAgICAgICAgICAgICAgICBpKjgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBpKjhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29weUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwZFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuNjQqMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgaSo4LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSo4XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfb25lXCIsXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KjIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9BZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3plcm9cIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEVxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgxID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoxID0gYy5nZXRMb2NhbChcInoxXCIpO1xuICAgICAgICBjb25zdCB4MiA9IGMuZ2V0TG9jYWwoXCJwMlwiKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MiA9IGMuZ2V0TG9jYWwoXCJ6MlwiKTtcblxuICAgICAgICBjb25zdCBaMVoxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyWjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjFfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDJcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejEpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChwcmVmaXggKyBcIl9lcU1peGVkXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInAxXCIpKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoyKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwocHJlZml4ICsgXCJfZXFNaXhlZFwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwMlwiKSkpXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejEsIFoxWjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoyLCBaMloyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MSwgWjJaMiwgVTEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgyLCBaMVoxLCBVMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejEsIFoxWjEsIFoxX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MiwgWjJaMiwgWjJfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkxLCBaMl9jdWJlZCwgUzEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkyLCBaMV9jdWJlZCwgUzIpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIFUxLCBVMiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgUzEsIFMyKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcU1peGVkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxTWl4ZWRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgxID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoxID0gYy5nZXRMb2NhbChcInoxXCIpO1xuICAgICAgICBjb25zdCB4MiA9IGMuZ2V0TG9jYWwoXCJwMlwiKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuXG4gICAgICAgIGNvbnN0IFoxWjEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjFfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldCggYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIikpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoxKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwocHJlZml4ICsgXCJfZXFBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicDJcIikpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MSwgWjFaMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDIsIFoxWjEsIFUyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MSwgWjFaMSwgWjFfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkyLCBaMV9jdWJlZCwgUzIpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHgxLCBVMiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeTEsIFMyKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRG91YmxlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2RvdWJsZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgRCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBFID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgRyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBlaWdodEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgeiksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChjLmNhbGwocHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB4LCBBKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB5LCBCKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBCLCBDKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHgsIEIsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEQsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIEQsIEEsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIEQsIEMsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEQsIEQsIEQpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgQSwgQSwgRSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgRSwgQSwgRSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgRSwgRiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5LCB6LCBHKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEQsIEQsIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBGLCB4MywgeDMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgQywgQywgZWlnaHRDKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBlaWdodEMsIGVpZ2h0QywgZWlnaHRDKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBlaWdodEMsIGVpZ2h0QywgZWlnaHRDKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIEQsIHgzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTMsIEUsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MywgZWlnaHRDLCB5MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBHLCBHLCB6MyksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZERvdWJsZUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9kb3VibGVBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGNvbnN0IFhYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFlZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFlZWVkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBNID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGVpZ2h0WVlZWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3RvSmFjb2JpYW5cIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAvLyBYWCA9IFgxXjJcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB4LCBYWCksXG5cbiAgICAgICAgICAgIC8vIFlZID0gWTFeMlxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHksIFlZKSxcblxuICAgICAgICAgICAgLy8gWVlZWSA9IFlZXjJcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBZWSwgWVlZWSksXG5cbiAgICAgICAgICAgIC8vIFMgPSAyKigoWDErWVkpXjItWFgtWVlZWSlcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB4LCBZWSwgUyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgUywgUyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgUywgWFgsIFMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFMsIFlZWVksIFMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFMsIFMsIFMpLFxuXG4gICAgICAgICAgICAvLyBNID0gMypYWCthICAoSGVyYSBhPTApXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgWFgsIFhYLCBNKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBNLCBYWCwgTSksXG5cbiAgICAgICAgICAgIC8vIFozID0gMipZMVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHksIHksIHozKSxcblxuICAgICAgICAgICAgLy8gVCA9IE1eMi0yKlNcbiAgICAgICAgICAgIC8vIFgzID0gVFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIE0sIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MywgUywgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgzLCBTLCB4MyksXG5cbiAgICAgICAgICAgIC8vIFkzID0gTSooUy1UKS04KllZWVlcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBZWVlZLCBZWVlZLCBlaWdodFlZWVkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIGVpZ2h0WVlZWSwgZWlnaHRZWVlZLCBlaWdodFlZWVkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIGVpZ2h0WVlZWSwgZWlnaHRZWVlZLCBlaWdodFlZWVkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFMsIHgzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTMsIE0sIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MywgZWlnaHRZWVlZLCB5MyksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEVxQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnJldChjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2VxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInAyXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZXFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb01vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3RvTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfdG9Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoaSpuOCkpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KGkqbjgpKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRvTW9udGdvbWVyeUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfdG9Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG4gICAgICAgIGZvciAobGV0IGk9MTsgaTwyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChpKm44KSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoaSpuOCkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvbU1vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZnJvbU1vbnRnb21lcnlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPDM7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoaSpuOCkpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KGkqbjgpKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvbU1vbnRnb21lcnlBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZnJvbU1vbnRnb21lcnlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPDI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoaSpuOCkpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KGkqbjgpKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MSA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MSA9IGMuZ2V0TG9jYWwoXCJ6MVwiKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmdldExvY2FsKFwicDJcIik7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejIgPSBjLmdldExvY2FsKFwiejJcIik7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGNvbnN0IFoxWjEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJaMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMV9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMl9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyX21pbnVzX1MxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzFfSjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDJcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgeDIsIHgxLCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoyKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9hZGRNaXhlZFwiLCB4MSwgeDIsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MSwgWjFaMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejIsIFoyWjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgxLCBaMloyLCBVMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDIsIFoxWjEsIFUyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MSwgWjFaMSwgWjFfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoyLCBaMloyLCBaMl9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTEsIFoyX2N1YmVkLCBTMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTIsIFoxX2N1YmVkLCBTMiksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgVTEsIFUyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCBTMSwgUzIpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZG91YmxlXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFUyLCBVMSwgSCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgUzIsIFMxLCBTMl9taW51c19TMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSCwgSCwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgSSwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgSCwgSSwgSiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgUzJfbWludXNfUzEsIFMyX21pbnVzX1MxLCByKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBVMSwgSSwgViksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgciwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFYsIFYsIFYyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHIyLCBKLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDMsIFYyLCB4MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBTMSwgSiwgUzFfSjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFMxX0oyLCBTMV9KMiwgUzFfSjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgViwgeDMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MywgciwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkzLCBTMV9KMiwgeTMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgejEsIHoyLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejMsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB6MywgWjFaMSwgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHozLCBaMloyLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejMsIEgsIHozKSxcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGRNaXhlZCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZE1peGVkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MSA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MSA9IGMuZ2V0TG9jYWwoXCJ6MVwiKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmdldExvY2FsKFwicDJcIik7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgY29uc3QgWjFaMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMV9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEhIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyX21pbnVzX3kxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgeTFfSjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfb25lXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIikgLCBjLmkzMl9jb25zdChuOCoyKSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoxKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9hZGRBZmZpbmVcIiwgeDEsIHgyLCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejEsIFoxWjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgyLCBaMVoxLCBVMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejEsIFoxWjEsIFoxX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MiwgWjFfY3ViZWQsIFMyKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB4MSwgVTIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHkxLCBTMiksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgVTIsIHgxLCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBTMiwgeTEsIFMyX21pbnVzX3kxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBILCBISCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSEggLCBISCwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSSAsIEksIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIEgsIEksIEopLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFMyX21pbnVzX3kxLCBTMl9taW51c195MSwgciksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDEsIEksIFYpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBWLCBWLCBWMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCByMiwgSiwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgzLCBWMiwgeDMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTEsIEosIHkxX0oyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB5MV9KMiwgeTFfSjIsIHkxX0oyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFYsIHgzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTMsIHIsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MywgeTFfSjIsIHkzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHoxLCBILCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejMsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB6MywgWjFaMSwgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHozLCBISCwgejMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGRBZmZpbmUoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgxID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5nZXRMb2NhbChcInAyXCIpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgeTJfbWludXNfeTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBKID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgViA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCB5MV9KMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9vbmVcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSAsIGMuaTMyX2NvbnN0KG44KjIpKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfb25lXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIikgLCBjLmkzMl9jb25zdChuOCoyKSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeDEsIHgyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB5MSwgeTIpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgyLCB4MSwgSCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTIsIHkxLCB5Ml9taW51c195MSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgSCwgSEgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEhIICwgSEgsIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEkgLCBJLCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBILCBJLCBKKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB5Ml9taW51c195MSwgeTJfbWludXNfeTEsIHIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgxLCBJLCBWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCByLCByMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgViwgViwgVjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgcjIsIEosIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MywgVjIsIHgzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkxLCBKLCB5MV9KMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeTFfSjIsIHkxX0oyLCB5MV9KMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBWLCB4MywgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkzLCByLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTMsIHkxX0oyLCB5MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBILCBILCB6MyksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGROZWcoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHgsIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB5LCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHosIHozKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGROZWdBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgeCwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbmVnXCIsIHksIHkzKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCozKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ1wiLCBjLmdldExvY2FsKFwicDJcIiksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgQVVYLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViTWl4ZWQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViTWl4ZWRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgqMykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZE1peGVkXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgQVVYLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWJBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjMpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzZXRzIFogdG8gT25lXG4gICAgZnVuY3Rpb24gYnVpbGROb3JtYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfbm9ybWFsaXplXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuXG4gICAgICAgIGNvbnN0IFpfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaM19pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaW52ZXJzZVwiLCB6LCBaX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBaX2ludiwgWjJfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIFpfaW52LCBaMl9pbnYsIFozX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4LCBaMl9pbnYsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHksIFozX2ludiwgeTMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9vbmVcIiwgejMpLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIC8vIERvZXMgbm90IHNldCBaLlxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9BZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfdG9BZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG5cblxuICAgICAgICBjb25zdCBaX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMl9pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjNfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCB5MyksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2ludmVyc2VcIiwgeiwgWl9pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgWl9pbnYsIFoyX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBaX2ludiwgWjJfaW52LCBaM19pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeCwgWjJfaW52LCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5LCBaM19pbnYsIHkzKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFRvSmFjb2JpYW4oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfdG9KYWNvYmlhblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX29uZVwiLCB6MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgeSwgeTMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHgsIHgzKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEJhdGNoVG9BZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hUb0FmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicEF1eFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0SW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEF1eFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0T3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHRtcCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQXV4XCIsIGMuaTMyX2xvYWQoIGMuaTMyX2NvbnN0KDApICkpLFxuICAgICAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdChuOCkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYmF0Y2hJbnZlcnNlXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KjIpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOCozKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEF1eFwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuZ2V0TG9jYWwoXCJwQXV4XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcIml0T3V0XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkK1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCtcIl9zcXVhcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkK1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRJblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkK1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmkzMl9jb25zdChuOCozKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChuOCoyKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEF1eFwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcml2YXRlIGFuZCBkb2VzIG5vdCBhbGxvdyB0byBPVkVSTEFQIGJ1ZmZlcnMuXG4gICAgZnVuY3Rpb24gYnVpbGRSZXZlcnNlQnl0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEluXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIml0T3V0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJpdEluXCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJblwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfbHRfcyggYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmdldExvY2FsKFwicE91dFwiKSApKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShjLmdldExvY2FsKFwiaXRJblwiKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZExFTXRvQygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9MRU10b0NcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgdG1wID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg0MClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsIGMuZ2V0TG9jYWwoXCJwSW5cIiksIHRtcCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiLCB0bXAsIGMuaTMyX2NvbnN0KG44KSwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc2lnblwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBJblwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KC0xKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pMzJfc3RvcmU4KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4ODApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTEVNdG9VKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX0xFTXRvVVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwVG1wID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWCA9IGMuaTMyX2NvbnN0KHBUbXApO1xuICAgICAgICBjb25zdCB0bXBZID0gYy5pMzJfY29uc3QocFRtcCArIG44KTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBJblwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg0MClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5QWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIiksIHRtcCksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcFgsIGMuaTMyX2NvbnN0KG44KSwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgdG1wWSwgYy5pMzJfY29uc3QobjgpLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVXRvTEVNKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX1V0b0xFTVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwVG1wID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWCA9IGMuaTMyX2NvbnN0KHBUbXApO1xuICAgICAgICBjb25zdCB0bXBZID0gYy5pMzJfY29uc3QocFRtcCArIG44KTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwSW5cIikpLCBjLmkzMl9jb25zdCgweDQwKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiLCBjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCksIHRtcFgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KSksIGMuaTMyX2NvbnN0KG44KSwgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5QWZmaW5lXCIsIHRtcCwgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ3RvTEVNKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX0N0b0xFTVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJmaXJzdEJ5dGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJncmVhdGVzdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHBUbXAgPSBtb2R1bGUuYWxsb2MobjgqMik7XG4gICAgICAgIGNvbnN0IHRtcFggPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWSA9IGMuaTMyX2NvbnN0KHBUbXAgKyBuOCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImZpcnN0Qnl0ZVwiLCBjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwSW5cIikpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmlyc3RCeXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDQwKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiZ3JlYXRlc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJmaXJzdEJ5dGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4ODApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicEluXCIpLCB0bXBZKSxcbiAgICAgICAgICAgIGMuaTMyX3N0b3JlOCh0bXBZLCBjLmkzMl9hbmQoYy5nZXRMb2NhbChcImZpcnN0Qnl0ZVwiKSwgYy5pMzJfY29uc3QoMHgzRikpKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcFksIGMuaTMyX2NvbnN0KG44KSwgdG1wWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIiwgdG1wWCwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgYy5nZXRMb2NhbChcInBPdXRcIiksIHRtcFkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCB0bXBZLCAgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgdG1wWSwgYy5pMzJfY29uc3QocEIpLCAgdG1wWSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxcnRcIiwgdG1wWSwgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgdG1wWSwgdG1wWCksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NpZ25cIiwgdG1wWSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KC0xKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImdyZWF0ZXN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHRtcFksIGMuaTMyX2FkZChjLmdldExvY2FsKFwicE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZ3JlYXRlc3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHRtcFksIGMuaTMyX2FkZChjLmdldExvY2FsKFwicE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkN1cnZlQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2luQ3VydmVBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicEluXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KSk7XG5cbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgeDNiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHksIHkyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB4LCB4M2IpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgsIHgzYiwgeDNiKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB4M2IsIGMuaTMyX2NvbnN0KHBCKSwgeDNiKSxcblxuICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeTIsIHgzYilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEluQ3VydmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfaW5DdXJ2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfdG9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBJblwiKSwgYXV4KSxcblxuICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2luQ3VydmVBZmZpbmVcIiwgYXV4KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZElzWmVyb0FmZmluZSgpO1xuICAgIGJ1aWxkSXNaZXJvKCk7XG4gICAgYnVpbGRaZXJvQWZmaW5lKCk7XG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRDb3B5QWZmaW5lKCk7XG4gICAgYnVpbGRDb3B5KCk7XG4gICAgYnVpbGRUb0phY29iaWFuKCk7XG4gICAgYnVpbGRFcUFmZmluZSgpO1xuICAgIGJ1aWxkRXFNaXhlZCgpO1xuICAgIGJ1aWxkRXEoKTtcbiAgICBidWlsZERvdWJsZUFmZmluZSgpO1xuICAgIGJ1aWxkRG91YmxlKCk7XG4gICAgYnVpbGRBZGRBZmZpbmUoKTtcbiAgICBidWlsZEFkZE1peGVkKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZE5lZ0FmZmluZSgpO1xuICAgIGJ1aWxkTmVnKCk7XG4gICAgYnVpbGRTdWJBZmZpbmUoKTtcbiAgICBidWlsZFN1Yk1peGVkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZEZyb21Nb250Z29tZXJ5QWZmaW5lKCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5QWZmaW5lKCk7XG4gICAgYnVpbGRUb01vbnRnb21lcnkoKTtcbiAgICBidWlsZFRvQWZmaW5lKCk7XG4gICAgYnVpbGRJbkN1cnZlQWZmaW5lKCk7XG4gICAgYnVpbGRJbkN1cnZlKCk7XG5cbiAgICBidWlsZEJhdGNoVG9BZmZpbmUoKTtcblxuICAgIGJ1aWxkTm9ybWFsaXplKCk7XG5cblxuICAgIGJ1aWxkUmV2ZXJzZUJ5dGVzKCk7XG5cbiAgICBidWlsZExFTXRvVSgpO1xuICAgIGJ1aWxkTEVNdG9DKCk7XG4gICAgYnVpbGRVdG9MRU0oKTtcbiAgICBidWlsZEN0b0xFTSgpO1xuXG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaExFTXRvVVwiLCBwcmVmaXggKyBcIl9MRU10b1VcIiwgbjgqMiwgbjgqMik7XG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaExFTXRvQ1wiLCBwcmVmaXggKyBcIl9MRU10b0NcIiwgbjgqMiwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIiwgcHJlZml4ICsgXCJfVXRvTEVNXCIsIG44KjIsIG44KjIpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hDdG9MRU1cIiwgcHJlZml4ICsgXCJfQ3RvTEVNXCIsIG44LCBuOCoyLCB0cnVlKTtcblxuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hUb0phY29iaWFuXCIsIHByZWZpeCArIFwiX3RvSmFjb2JpYW5cIiwgbjgqMiwgbjgqMywgdHJ1ZSk7XG5cbiAgICBidWlsZE11bHRpZXhwKG1vZHVsZSwgcHJlZml4LCBwcmVmaXggKyBcIl9tdWx0aWV4cFwiLCBwcmVmaXggKyBcIl9hZGRcIiwgbjgqMyk7XG4gICAgYnVpbGRNdWx0aWV4cChtb2R1bGUsIHByZWZpeCwgcHJlZml4ICsgXCJfbXVsdGlleHBBZmZpbmVcIiwgcHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgbjgqMik7XG5cbiAgICAvKlxuICAgIGJ1aWxkVGltZXNTY2FsYXIoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfdGltZXNTY2FsYXJPbGRcIixcbiAgICAgICAgbjgqMyxcbiAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2RvdWJsZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIixcbiAgICApO1xuICAgICovXG4gICAgYnVpbGRUaW1lc1NjYWxhck5BRihcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiLFxuICAgICAgICBuOCozLFxuICAgICAgICBwcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgcHJlZml4ICsgXCJfZG91YmxlXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIlxuICAgICk7XG5cbiAgICBidWlsZFRpbWVzU2NhbGFyTkFGKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX3RpbWVzU2NhbGFyQWZmaW5lXCIsXG4gICAgICAgIG44KjIsXG4gICAgICAgIHByZWZpeCArIFwiX2FkZE1peGVkXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2RvdWJsZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zdWJNaXhlZFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIlxuICAgICk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxTWl4ZWRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb0FmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9kb3VibGVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZE1peGVkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJNaXhlZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbm9ybWFsaXplXCIpO1xuXG4gICAgLy8gQ29udmVydGlvbiBmdW5jdGlvbnNcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfTEVNdG9VXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9MRU10b0NcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX1V0b0xFTVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfQ3RvTEVNXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoTEVNdG9VXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaExFTXRvQ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoQ3RvTEVNXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvQWZmaW5lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b0phY29iaWFuXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9BZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9KYWNvYmlhblwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbkN1cnZlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIpO1xuXG4gICAgLypcbiAgICBidWlsZEcxTXVsU2NhbGFyKG1vZHVsZSwgenEpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihcImcxTXVsU2NhbGFyXCIpO1xuICAgICovXG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgeyBpc09kZCwgbW9kSW52LCBtb2RQb3cgfSA9IHJlcXVpcmUoXCIuL2JpZ2ludC5qc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGRlQobW9kdWxlLCBwcmVmaXgsIGdQcmVmaXgsIGZQcmVmaXgsIG9wR3RpbWVzRikge1xuXG4gICAgY29uc3QgbjY0ZiA9IG1vZHVsZS5tb2R1bGVzW2ZQcmVmaXhdLm42NDtcbiAgICBjb25zdCBuOGYgPSBuNjRmKjg7XG5cbiAgICBjb25zdCBuNjRnID0gbW9kdWxlLm1vZHVsZXNbZ1ByZWZpeF0ubjY0O1xuICAgIGNvbnN0IG44ZyA9IG42NGcqODtcblxuICAgIGNvbnN0IHEgPSBtb2R1bGUubW9kdWxlc1tmUHJlZml4XS5xO1xuXG4gICAgbGV0IHJlbSA9IHEgLSAxbjtcbiAgICBsZXQgbWF4Qml0cyA9IDA7XG4gICAgd2hpbGUgKCFpc09kZChyZW0pKSB7XG4gICAgICAgIG1heEJpdHMgKys7XG4gICAgICAgIHJlbSA9IHJlbSA+PiAxbjtcbiAgICB9XG5cbiAgICBsZXQgbnIgPSAybjtcblxuICAgIHdoaWxlICggbW9kUG93KG5yLCBxID4+IDFuLCBxKSA9PT0gMW4gKSBuciA9IG5yICsgMW47XG5cbiAgICAvLyBjb25zb2xlLmxvZyhucik7XG5cbiAgICBjb25zdCB3ID0gbmV3IEFycmF5KG1heEJpdHMrMSk7XG4gICAgd1ttYXhCaXRzXSA9IG1vZFBvdyhuciwgcmVtLCBxKTtcblxuICAgIGxldCBuPW1heEJpdHMtMTtcbiAgICB3aGlsZSAobj49MCkge1xuICAgICAgICB3W25dID0gbW9kUG93KHdbbisxXSwgMm4sIHEpO1xuICAgICAgICBuLS07XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBbXTtcbiAgICBjb25zdCBSID0gKDFuIDw8IEJpZ0ludChuOGYqOCkpICUgcTtcblxuICAgIGZvciAobGV0IGk9MDsgaTx3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG0gPSB3W2ldICogUiAlIHE7XG4gICAgICAgIGJ5dGVzLnB1c2goLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUobSwgbjhmKSk7XG4gICAgfVxuXG4gICAgY29uc3QgUk9PVHMgPSBtb2R1bGUuYWxsb2MoYnl0ZXMpO1xuXG4gICAgY29uc3QgaTIgPSBuZXcgQXJyYXkobWF4Qml0cysxKTtcbiAgICBpMlswXSA9IDFuO1xuXG4gICAgZm9yIChsZXQgaT0xOyBpPD1tYXhCaXRzOyBpKyspIHtcbiAgICAgICAgaTJbaV0gPSBpMltpLTFdICogMm47XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXNpMiA9W107XG4gICAgZm9yIChsZXQgaT0wOyBpPD1tYXhCaXRzOyBpKyspIHtcbiAgICAgICAgY29uc3QgbSA9IG1vZEludihpMltpXSwgcSkgKiBSICUgcTtcbiAgICAgICAgYnl0ZXNpMi5wdXNoKC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKG0sIG44ZikpO1xuICAgIH1cblxuICAgIGNvbnN0IElOVjIgPSBtb2R1bGUuYWxsb2MoYnl0ZXNpMik7XG5cbiAgICBjb25zdCBzaGlmdCA9IG1vZFBvdyhuciwgMm4sIHEpO1xuICAgIGNvbnN0IGJ5dGVzU2hpZnRUb1NtYWxsTSA9W107XG4gICAgY29uc3QgYnl0ZXNTQ29uc3QgPVtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw9bWF4Qml0czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0VG9TbWFsbE0gPSBtb2RQb3coc2hpZnQsIDJuICoqIEJpZ0ludChpKSwgcSk7XG4gICAgICAgIGNvbnN0IHNDb25zdCA9IG1vZEludihxICsgMW4gLSBzaGlmdFRvU21hbGxNLCBxKTtcbiAgICAgICAgYnl0ZXNTaGlmdFRvU21hbGxNLnB1c2goLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoc2hpZnRUb1NtYWxsTSAqIFIgJSBxLCBuOGYpKTtcbiAgICAgICAgYnl0ZXNTQ29uc3QucHVzaCguLi51dGlscy5iaWdJbnQyQnl0ZXNMRShzQ29uc3QgKiBSICUgcSwgbjhmKSk7XG4gICAgfVxuXG4gICAgY29uc3QgU0hJRlRfVE9fTSA9IG1vZHVsZS5hbGxvYyggYnl0ZXNTaGlmdFRvU21hbGxNICApO1xuICAgIGNvbnN0IFNDT05TVCA9IG1vZHVsZS5hbGxvYyggYnl0ZXNTQ29uc3QgICk7XG5cbiAgICBmdW5jdGlvbiByZXYoeCkge1xuICAgICAgICBsZXQgcj0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoeCAmICgxIDw8IGkpKSB7XG4gICAgICAgICAgICAgICAgciA9IHIgfCAoMHg4MCA+PiBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBjb25zdCBydGFibGUgPSBBcnJheSgyNTYpO1xuICAgIGZvciAobGV0IGk9MDsgaTwyNTY7IGkrKykge1xuICAgICAgICBydGFibGVbaV0gPSByZXYoaSk7XG4gICAgfVxuXG4gICAgY29uc3QgUkVWVEFCTEUgPSBtb2R1bGUuYWxsb2MocnRhYmxlKTtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRMb2cyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9fbG9nMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJhdXhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYXV4XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJiaXRzXCIsIGMuaTMyX2NvbnN0KDApKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwiYXV4XCIpKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImF1eFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJiaXRzXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuaTMyX25lKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMudW5yZWFjaGFibGUoKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuaTMyX2d0X3UoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobWF4Qml0cylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnVucmVhY2hhYmxlKClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuZ2V0TG9jYWwoXCJiaXRzXCIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgT25lID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJiaXRzXCIsXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9fbG9nMlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZlByZWZpeCArIFwiX29uZVwiLCBPbmUpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCtcIl9yYXdmZnRcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgT25lXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElGRlQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lmZnRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicEludjJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYml0c1wiLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfX2xvZzJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInBJbnYyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChJTlYyKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4K1wiX3Jhd2ZmdFwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEludjJcIilcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSYXdGRlQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3Jhd2ZmdFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTsgLy8gMiBwb3dlclxuICAgICAgICBmLmFkZFBhcmFtKFwicmV2ZXJzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm11bEZhY3RvclwiLCBcImkzMlwiKTtcblxuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImtcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1kaXYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInB3bVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VQZXJtdXRhdGlvblwiLCBjLmdldExvY2FsKFwicHhcIiksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuXCIsIGMuaTMyX3NobChjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcImJpdHNcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2d0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtXCIsIGMuaTMyX3NobChjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcInNcIikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHdtXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFJPT1RzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJrXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJrXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9vbmVcIiwgVyksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIm1kaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJtXCIpLCBjLmkzMl9jb25zdCgxKSkgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm1kaXYyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJrXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibWRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHdtXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJrXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwia1wiKSwgYy5nZXRMb2NhbChcIm1cIikpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInNcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJzXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX19mZnRGaW5hbFwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicmV2ZXJzZVwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsSW52ZXJzZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX2ZmdEZpbmFsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJiaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicmV2ZXJzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm11bEZhY3RvclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZGl2MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBJbnYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1hc2tcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwicmV2ZXJzZVwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuXCIsIGMuaTMyX3NobCggYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtYXNrXCIsIGMuaTMyX3N1YiggYy5nZXRMb2NhbChcIm5cIikgLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIm5kaXYyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyZXZlcnNlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9pc09uZVwiLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDFcIiksIFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MlwiKSAsIGMuZ2V0TG9jYWwoXCJpZHgxXCIpICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGdQcmVmaXggKyBcIl9jb3B5XCIsIFQgLCBjLmdldExvY2FsKFwiaWR4MlwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MVwiKSwgVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiAsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpICwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSwgYy5nZXRMb2NhbChcImlkeDFcIikgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGICwgVCAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyAoSXQgc2hvdWxkIG5vdCBiZSBoZXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGICwgYy5nZXRMb2NhbChcImlkeDFcIikgLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpLCBjLmdldExvY2FsKFwiaWR4MVwiKSApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YgLCBjLmdldExvY2FsKFwiaWR4MlwiKSAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9pc09uZVwiLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgKEl0IHNob3VsZCBub3QgYmUgaGVyZSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiwgYy5nZXRMb2NhbChcInB4XCIpICwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSwgYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFJldmVyc2VQZXJtdXRhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX3JldmVyc2VQZXJtdXRhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicmlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5cIiwgYy5pMzJfc2hsKCBjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcImJpdHNcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInJpXCIsIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2XCIsIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiYml0c1wiKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbHRfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJpXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MVwiKSwgVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDJcIikgLCBjLmdldExvY2FsKFwiaWR4MVwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgVCAsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcblxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSZXYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19yZXZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfcm90bChcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwieFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVlRBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoOClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweEZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZUQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWVEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDgpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVlRBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVEpvaW4oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImZpcnN0XCIpLCBXKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBUXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZlByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaW5jXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRkZUSm9pbkV4dCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0Sm9pbkV4dFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmaXJzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImluY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInRvdGFsQml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTaGlmdFRvTVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFNoaWZ0VG9NXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTSElGVF9UT19NKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRvdGFsQml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgYy5jYWxsKCBmUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiZmlyc3RcIiksIFcpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTaGlmdFRvTVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImluY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgV1xuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVEpvaW5FeHRJbnYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5FeHRJbnZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ0b3RhbEJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU2hpZnRUb01cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU0NvbnN0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU2hpZnRUb01cIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFNISUZUX1RPX00pLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU0NvbnN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTQ09OU1QpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoIGZQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJmaXJzdFwiKSwgVyksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU0NvbnN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2hpZnRUb01cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNDb25zdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpbmNcIiksXG4gICAgICAgICAgICAgICAgICAgIFdcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfcHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmaXJzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImluY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInRvdGFsQml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTaGlmdFRvTVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTQ29uc3RcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBTaGlmdFRvTVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoU0hJRlRfVE9fTSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0b3RhbEJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBTQ29uc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFNDT05TVCksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0b3RhbEJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImZpcnN0XCIpLCBXKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2hpZnRUb01cIiksXG4gICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTQ29uc3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImluY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgV1xuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVE1peCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0TWl4XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZXhwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibkdyb3Vwc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5QZXJHcm91cFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5QZXJHcm91cERpdjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwYWlyT2Zmc2V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInB3bVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5QZXJHcm91cFwiLCBjLmkzMl9zaGwoYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJleHBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibkdyb3Vwc1wiLCBjLmkzMl9zaHJfdShjLmdldExvY2FsKFwiblwiKSwgYy5nZXRMb2NhbChcImV4cFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBhaXJPZmZzZXRcIiwgYy5pMzJfbXVsKGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIpLCBjLmkzMl9jb25zdChuOGcpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicHdtXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChST09UcyksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJleHBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuR3JvdXBzXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX29uZVwiLCBXKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5QZXJHcm91cERpdjJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGFpck9mZnNldFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHdtXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvLyBSZXZlcnNlIGFsbCBhbmQgbXVsdGlwbHkgYnkgZmFjdG9yXG4gICAgZnVuY3Rpb24gYnVpbGRGRlRGaW5hbCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0RmluYWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmYWN0b3JcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZGl2MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5kaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmFjdG9yXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5kaXYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuZGl2MlwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmFjdG9yXCIpLFxuICAgICAgICAgICAgICAgICAgICBUXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImZhY3RvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkUmV2KCk7XG4gICAgYnVpbGRSZXZlcnNlUGVybXV0YXRpb24oKTtcbiAgICBidWlsZEZpbmFsSW52ZXJzZSgpO1xuICAgIGJ1aWxkUmF3RkZUKCk7XG4gICAgYnVpbGRMb2cyKCk7XG4gICAgYnVpbGRGRlQoKTtcbiAgICBidWlsZElGRlQoKTtcbiAgICBidWlsZEZGVEpvaW4oKTtcbiAgICBidWlsZEZGVEpvaW5FeHQoKTtcbiAgICBidWlsZEZGVEpvaW5FeHRJbnYoKTtcbiAgICBidWlsZEZGVE1peCgpO1xuICAgIGJ1aWxkRkZURmluYWwoKTtcbiAgICBidWlsZFByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24oKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfaWZmdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3Jhd2ZmdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRKb2luRXh0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0Sm9pbkV4dEludlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdE1peFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdEZpbmFsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfcHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvblwiKTtcblxufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFBvbChtb2R1bGUsIHByZWZpeCwgcHJlZml4RmllbGQpIHtcblxuICAgIGNvbnN0IG42NCA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeEZpZWxkXS5uNjQ7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdHBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0cFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdHBcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29uc3RydWN0TEMoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2NvbnN0cnVjdExDXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHBvbHlub21pYWxzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHNpZ25hbHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuU2lnbmFsc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByZXNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwZFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5jb2Vmc1wiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwcFwiLCBjLmdldExvY2FsKFwicHBvbHlub21pYWxzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwc1wiLCBjLmdldExvY2FsKFwicHNpZ25hbHNcIikpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuU2lnbmFsc1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuY29lZnNcIiwgYy5pMzJfbG9hZChjLmdldExvY2FsKFwicHBcIikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcFwiKSwgYy5pMzJfY29uc3QoNCkpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmNvZWZzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJlc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcInBwXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwcFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBwXCIpLCBjLmkzMl9jb25zdCg0KSkpLFxuXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwcFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1eFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIilcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBzXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHNcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRDb25zdHJ1Y3RMQygpO1xuXG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfY29uc3RydWN0TENcIik7XG5cbiAgICByZXR1cm4gcHJlZml4O1xuXG5cblxuXG59O1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkUUFQKG1vZHVsZSwgcHJlZml4LCBwcmVmaXhGaWVsZCkge1xuXG4gICAgY29uc3QgbjY0ID0gbW9kdWxlLm1vZHVsZXNbcHJlZml4RmllbGRdLm42NDtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJ1aWxkQUJDKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9idWlsZEFCQ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDb2Vmc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5Db2Vmc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBXaXRuZXNzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwib2Zmc2V0T3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwibk91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm9mZnNldFdpdG5lc3NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuV2l0bmVzc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIFNldCBvdXRwdXQgYSBhbmQgYiB0byAwXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuZ2V0TG9jYWwoXCJwQlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibk91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0YVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJsYXN0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcIml0YVwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwiaXRiXCIpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRhXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRiXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRcIiwgYy5nZXRMb2NhbChcInBDb2Vmc1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBDb2Vmc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5Db2Vmc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KzEyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJzXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcIml0XCIpLCA4KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sdF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvZmZzZXRXaXRuZXNzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2Zmc2V0V2l0bmVzc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5XaXRuZXNzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KzEyKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5icigxKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwibVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKGMuZ2V0TG9jYWwoXCJpdFwiKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJtXCIpLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwT3V0XCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwibVwiKSwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBPdXRcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5icigxKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZChjLmdldExvY2FsKFwiaXRcIiksIDQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9vcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2x0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5PdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmJyKDEpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwicE91dFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2Zmc2V0T3V0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFdpdG5lc3NcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJzXCIpLCBjLmdldExvY2FsKFwib2Zmc2V0V2l0bmVzc1wiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcIml0XCIpLCBjLmkzMl9jb25zdCgxMikpLFxuICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGF1eCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5nZXRMb2NhbChcInBBXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdFwiLCBjLmdldExvY2FsKFwicENcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5PdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdFwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRKb2luQUJDKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9qb2luQUJDXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5nZXRMb2NhbChcInBBXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGNcIiwgYy5nZXRMb2NhbChcInBDXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdHBcIiwgYy5nZXRMb2NhbChcInBQXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRiXCIpLFxuICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgYXV4LFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRjXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRwXCIpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0Y1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0Y1wiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0cFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0cFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEJhdGNoQWRkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9iYXRjaEFkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicGJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdGFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdGJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJsYXN0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmdldExvY2FsKFwicGFcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmdldExvY2FsKFwicGJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0clwiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwYVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdHJcIiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRhXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRiXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRyXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkQnVpbGRBQkMoKTtcbiAgICBidWlsZEpvaW5BQkMoKTtcbiAgICBidWlsZEJhdGNoQWRkKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYnVpbGRBQkNcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2pvaW5BQkNcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoQWRkXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcblxufTtcblxuIiwiXG5cbi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEFwcGx5S2V5KG1vZHVsZSwgZm5OYW1lLCBnUHJlZml4LCBmclByZWZpeCwgc2l6ZUdJbiwgc2l6ZUdPdXQsIHNpemVGLCBvcEd0aW1lc0YpIHtcblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwRmlyc3RcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBJbmNcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcInBPbGRGcmVlXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJwRnJvbVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwicFRvXCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IHQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2Moc2l6ZUYpKTtcblxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5zZXRMb2NhbChcInBGcm9tXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICBjLnNldExvY2FsKFwicFRvXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICApO1xuXG4gICAgLy8gdCA9IGZpcnN0XG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICBmclByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwRmlyc3RcIiksXG4gICAgICAgICAgICB0XG4gICAgICAgIClcbiAgICApO1xuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBGcm9tXCIpLFxuICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUb1wiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwRnJvbVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBGcm9tXCIpLCBjLmkzMl9jb25zdChzaXplR0luKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBUb1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBUb1wiKSwgYy5pMzJfY29uc3Qoc2l6ZUdPdXQpKSksXG5cbiAgICAgICAgICAgIC8vIHQgPSB0KiBpbmNcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmclByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJbmNcIiksXG4gICAgICAgICAgICAgICAgdFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSlcbiAgICApO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZuTmFtZSk7XG5cbn07XG4iLCJjb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcblxuY29uc3QgYnVpbGRGMW0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMW0uanNcIik7XG5jb25zdCBidWlsZEYxID1yZXF1aXJlKFwiLi4vYnVpbGRfZjEuanNcIik7XG5jb25zdCBidWlsZEYybSA9cmVxdWlyZShcIi4uL2J1aWxkX2YybS5qc1wiKTtcbmNvbnN0IGJ1aWxkRjNtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjNtLmpzXCIpO1xuY29uc3QgYnVpbGRDdXJ2ZSA9cmVxdWlyZShcIi4uL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzXCIpO1xuY29uc3QgYnVpbGRGRlQgPSByZXF1aXJlKFwiLi4vYnVpbGRfZmZ0XCIpO1xuY29uc3QgYnVpbGRQb2wgPSByZXF1aXJlKFwiLi4vYnVpbGRfcG9sXCIpO1xuY29uc3QgYnVpbGRRQVAgPSByZXF1aXJlKFwiLi4vYnVpbGRfcWFwXCIpO1xuY29uc3QgYnVpbGRBcHBseUtleSA9IHJlcXVpcmUoXCIuLi9idWlsZF9hcHBseWtleVwiKTtcbmNvbnN0IHsgYml0TGVuZ3RoLCBtb2RJbnYsIGlzT2RkLCBpc05lZ2F0aXZlIH0gPSByZXF1aXJlKFwiLi4vYmlnaW50LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkQk4xMjgobW9kdWxlLCBfcHJlZml4KSB7XG5cbiAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4IHx8IFwiYm4xMjhcIjtcblxuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG5cbiAgICBjb25zdCBxID0gMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNuO1xuICAgIGNvbnN0IHIgPSAyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODU0ODM2NDQwMDQxNjAzNDM0MzY5ODIwNDE4NjU3NTgwODQ5NTYxN247XG5cblxuICAgIGNvbnN0IG42NCA9IE1hdGguZmxvb3IoKGJpdExlbmd0aChxIC0gMW4pIC0gMSkvNjQpICsxO1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG4gICAgY29uc3QgZnJzaXplID0gbjg7XG4gICAgY29uc3QgZjFzaXplID0gbjg7XG4gICAgY29uc3QgZjJzaXplID0gZjFzaXplICogMjtcbiAgICBjb25zdCBmdHNpemUgPSBmMXNpemUgKiAxMjtcblxuICAgIGNvbnN0IHByID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCByLCBmcnNpemUgKSk7XG5cbiAgICBjb25zdCBmMW1QcmVmaXggPSBidWlsZEYxbShtb2R1bGUsIHEsIFwiZjFtXCIpO1xuICAgIGJ1aWxkRjEobW9kdWxlLCByLCBcImZyXCIsIFwiZnJtXCIpO1xuXG4gICAgY29uc3QgcEcxYiA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDNuKSwgZjFzaXplICkpO1xuICAgIGNvbnN0IGcxbVByZWZpeCA9IGJ1aWxkQ3VydmUobW9kdWxlLCBcImcxbVwiLCBcImYxbVwiLCBwRzFiKTtcblxuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1fbXVsXCIpO1xuXG4gICAgYnVpbGRQb2wobW9kdWxlLCBcInBvbFwiLCBcImZybVwiKTtcbiAgICBidWlsZFFBUChtb2R1bGUsIFwicWFwXCIsIFwiZnJtXCIpO1xuXG4gICAgY29uc3QgZjJtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBcImYxbV9uZWdcIiwgXCJmMm1cIiwgXCJmMW1cIik7XG4gICAgY29uc3QgcEcyYiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMTk0ODU4NzQ3NTE3NTkzNTQ3NzEwMjQyMzkyNjEwMjE3MjA1MDU3OTA2MTg0NjkzMDE3MjEwNjU1NjQ2MzEyOTY0NTI0NTc0NzgzNzNuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMjY2OTI5NzkxMTE5OTkxMTYxMjQ2OTA3Mzg3MTM3MjgzODQyNTQ1MDc2OTY1MzMyOTAwMjg4NTY5Mzc4NTEwOTEwMzA3NjM2NjkwbiksIGYxc2l6ZSApXG4gICAgXSk7XG4gICAgY29uc3QgZzJtUHJlZml4ID0gYnVpbGRDdXJ2ZShtb2R1bGUsIFwiZzJtXCIsIFwiZjJtXCIsIHBHMmIpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEdUaW1lc0ZyKGZuTmFtZSwgb3BNdWwpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEdcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRnJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcImZybV9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwicEZyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIG9wTXVsLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwR1wiKSxcbiAgICAgICAgICAgICAgICBBVVgsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmbk5hbWUpO1xuICAgIH1cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzFtX3RpbWVzRnJcIiwgXCJnMW1fdGltZXNTY2FsYXJcIik7XG4gICAgYnVpbGRGRlQobW9kdWxlLCBcImcxbVwiLCBcImcxbVwiLCBcImZybVwiLCBcImcxbV90aW1lc0ZyXCIpO1xuXG4gICAgYnVpbGRHVGltZXNGcihcImcybV90aW1lc0ZyXCIsIFwiZzJtX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJnMm1cIiwgXCJnMm1cIiwgXCJmcm1cIiwgXCJnMm1fdGltZXNGclwiKTtcblxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMW1fdGltZXNGckFmZmluZVwiLCBcImcxbV90aW1lc1NjYWxhckFmZmluZVwiKTtcbiAgICBidWlsZEdUaW1lc0ZyKFwiZzJtX3RpbWVzRnJBZmZpbmVcIiwgXCJnMm1fdGltZXNTY2FsYXJBZmZpbmVcIik7XG5cbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJmcm1fYmF0Y2hBcHBseUtleVwiLCBcImZtclwiLCBcImZybVwiLCBuOCwgbjgsIG44LCBcImZybV9tdWxcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzFtX2JhdGNoQXBwbHlLZXlcIiwgXCJnMW1cIiwgXCJmcm1cIiwgbjgqMywgbjgqMywgbjgsIFwiZzFtX3RpbWVzRnJcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzFtX2JhdGNoQXBwbHlLZXlNaXhlZFwiLCBcImcxbVwiLCBcImZybVwiLCBuOCoyLCBuOCozLCBuOCwgXCJnMW1fdGltZXNGckFmZmluZVwiKTtcbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJnMm1fYmF0Y2hBcHBseUtleVwiLCBcImcybVwiLCBcImZybVwiLCBuOCoyKjMsIG44KjMqMiwgbjgsIFwiZzJtX3RpbWVzRnJcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzJtX2JhdGNoQXBwbHlLZXlNaXhlZFwiLCBcImcybVwiLCBcImZybVwiLCBuOCoyKjIsIG44KjMqMiwgbjgsIFwiZzJtX3RpbWVzRnJBZmZpbmVcIik7XG5cbiAgICBmdW5jdGlvbiB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGEpICogKCAxbiA8PCBCaWdJbnQoZjFzaXplKjgpKSAlIHE7XG4gICAgfVxuXG4gICAgY29uc3QgRzFnZW4gPSBbXG4gICAgICAgIDFuLFxuICAgICAgICAybixcbiAgICAgICAgMW5cbiAgICBdO1xuXG4gICAgY29uc3QgcEcxZ2VuID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzJdKSwgZjFzaXplICksXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzF6ZXJvID0gW1xuICAgICAgICAwbixcbiAgICAgICAgMW4sXG4gICAgICAgIDBuXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMXplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1sxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMl0pLCBmMXNpemUgKVxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcyZ2VuID0gW1xuICAgICAgICBbXG4gICAgICAgICAgICAxMDg1NzA0Njk5OTAyMzA1NzEzNTk0NDU3MDc2MjIzMjgyOTQ4MTM3MDc1NjM1OTU3ODUxODA4Njk5MDUxOTk5MzI4NTY1NTg1Mjc4MW4sXG4gICAgICAgICAgICAxMTU1OTczMjAzMjk4NjM4NzEwNzk5MTAwNDAyMTM5MjI4NTc4MzkyNTgxMjg2MTgyMTE5MjUzMDkxNzQwMzE1MTQ1MjM5MTgwNTYzNG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgODQ5NTY1MzkyMzEyMzQzMTQxNzYwNDk3MzI0NzQ4OTI3MjQzODQxODE5MDU4NzI2MzYwMDE0ODc3MDI4MDY0OTMwNjk1ODEwMTkzMG4sXG4gICAgICAgICAgICA0MDgyMzY3ODc1ODYzNDMzNjgxMzMyMjAzNDAzMTQ1NDM1NTY4MzE2ODUxMzI3NTkzNDAxMjA4MTA1NzQxMDc2MjE0MTIwMDkzNTMxbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMmdlbiA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblswXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblswXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsxXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsxXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsyXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsyXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcyemVybyA9IFtcbiAgICAgICAgW1xuICAgICAgICAgICAgMG4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdLFtcbiAgICAgICAgICAgIDBuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF1cbiAgICBdO1xuXG4gICAgY29uc3QgcEcyemVybyA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMF1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzBdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1sxXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMV1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzJdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1syXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IHBPbmVUID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHBOb25SZXNpZHVlRjYgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDkpLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwVHdvSW52ID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSggIG1vZEludigybiwgcSkpLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIDBuLCBmMXNpemUgKVxuICAgIF0pO1xuXG4gICAgY29uc3QgcEFsdEJuMTI4VHdpc3QgPSBwTm9uUmVzaWR1ZUY2O1xuXG4gICAgY29uc3QgcFR3aXN0Q29lZkIgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDE5NDg1ODc0NzUxNzU5MzU0NzcxMDI0MjM5MjYxMDIxNzIwNTA1NzkwNjE4NDY5MzAxNzIxMDY1NTY0NjMxMjk2NDUyNDU3NDc4MzczbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDI2NjkyOTc5MTExOTk5MTE2MTI0NjkwNzM4NzEzNzI4Mzg0MjU0NTA3Njk2NTMzMjkwMDI4ODU2OTM3ODUxMDkxMDMwNzYzNjY5MG4pLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SNigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxOUjZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkX211bE5SNigpO1xuXG4gICAgY29uc3QgZjZtUHJlZml4ID0gYnVpbGRGM20obW9kdWxlLCBwcmVmaXgrXCJfbXVsTlI2XCIsIFwiZjZtXCIsIFwiZjJtXCIpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRfbXVsTlIxMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxOUjEyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QobjgqNCkpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOCoyKSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqNCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZF9tdWxOUjEyKCk7XG5cbiAgICBjb25zdCBmdG1QcmVmaXggPSBidWlsZEYybShtb2R1bGUsIHByZWZpeCtcIl9tdWxOUjEyXCIsIFwiZnRtXCIsIGY2bVByZWZpeCk7XG5cblxuICAgIGNvbnN0IGF0ZUxvb3BDb3VudCA9IDI5NzkzOTY4MjAzMTU3MDkzMjg4bjtcbiAgICBjb25zdCBhdGVMb29wQml0Qnl0ZXMgPSBiaXRzKGF0ZUxvb3BDb3VudCk7XG4gICAgY29uc3QgcEF0ZUxvb3BCaXRCeXRlcyA9IG1vZHVsZS5hbGxvYyhhdGVMb29wQml0Qnl0ZXMpO1xuICAgIGNvbnN0IGlzTG9vcE5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICBjb25zdCBhdGVDb2VmU2l6ZSA9IDMgKiBmMnNpemU7XG4gICAgY29uc3QgYXRlTkRibENvZWZzID0gYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0xO1xuICAgIGNvbnN0IGF0ZU5BZGRDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5yZWR1Y2UoKGFjYywgYikgPT4gIGFjYyArICggYiE9MCA/IDEgOiAwKSAgICwwKTtcbiAgICBjb25zdCBhdGVOQ29lZnMgPSBhdGVOQWRkQ29lZnMgKyBhdGVORGJsQ29lZnMgKyAxO1xuICAgIGNvbnN0IHByZVBTaXplID0gMyoyKm44O1xuICAgIGNvbnN0IHByZVFTaXplID0gMypuOCoyICsgYXRlTkNvZWZzKmF0ZUNvZWZTaXplO1xuICAgIGNvbnN0IGZpbmFsRXhwSXNOZWdhdGl2ZSA9IGZhbHNlO1xuXG5cbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG42NCxcbiAgICAgICAgcEcxZ2VuOiBwRzFnZW4sXG4gICAgICAgIHBHMXplcm86IHBHMXplcm8sXG4gICAgICAgIHBHMWI6IHBHMWIsXG4gICAgICAgIHBHMmdlbjogcEcyZ2VuLFxuICAgICAgICBwRzJ6ZXJvOiBwRzJ6ZXJvLFxuICAgICAgICBwRzJiOiBwRzJiLFxuICAgICAgICBwcTogbW9kdWxlLm1vZHVsZXNbXCJmMW1cIl0ucHEsXG4gICAgICAgIHByOiBwcixcbiAgICAgICAgcE9uZVQ6IHBPbmVULFxuICAgICAgICBwcmVQU2l6ZTogcHJlUFNpemUsXG4gICAgICAgIHByZVFTaXplOiBwcmVRU2l6ZSxcbiAgICAgICAgcjogci50b1N0cmluZygpLFxuICAgICAgICBxOiBxLnRvU3RyaW5nKClcbiAgICB9O1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJQcmVQU2l6ZTogXCIgK3ByZVBTaXplKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIlByZVFTaXplOiBcIiArcHJlUVNpemUpO1xuXG4gICAgY29uc3QgZmluYWxFeHBaID0gNDk2NTY2MTM2NzE5Mjg0ODg4MW47XG5cbiAgICBmdW5jdGlvbiBuYWYobikge1xuICAgICAgICBsZXQgRSA9IG47XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB3aGlsZSAoRSA+IDBuKSB7XG4gICAgICAgICAgICBpZiAoaXNPZGQoRSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB6ID0gMiAtIE51bWJlcihFICUgNG4pO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCB6ICk7XG4gICAgICAgICAgICAgICAgRSA9IEUgLSBCaWdJbnQoeik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFID0gRSA+PiAxbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpdHMobikge1xuICAgICAgICBsZXQgRSA9IG47XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB3aGlsZSAoRSA+IDBuKSB7XG4gICAgICAgICAgICBpZiAoaXNPZGQoRSkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMSApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRSA9IEUgPj4gMW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBhcmVHMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBhcmVHMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVBcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfbm9ybWFsaXplXCIsIGMuZ2V0TG9jYWwoXCJwUFwiKSwgYy5nZXRMb2NhbChcInBwcmVQXCIpKSwgIC8vIFRPRE8gUmVtb3ZlIGlmIGFscmVhZHkgaW4gYWZmaW5lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwQWRkU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBBZGRTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDb2VmXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgWDIgID0gYy5nZXRMb2NhbChcInBRXCIpO1xuICAgICAgICBjb25zdCBZMiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBRXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcblxuICAgICAgICBjb25zdCBYMSAgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IFkxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBaMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEVMTF8wICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcbiAgICAgICAgY29uc3QgRUxMX1ZXID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEVMTF9WViAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEQgPSBFTExfVlc7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBEID0gWDEgLSBYMipaMVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMiwgWjEsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBYMSwgRCwgRCksXG5cbiAgICAgICAgICAgIC8vIEUgPSBZMSAtIFkyKloxXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFkyLCBaMSwgRSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFkxLCBFLCBFKSxcblxuICAgICAgICAgICAgLy8gRiA9IEReMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBELCBGKSxcblxuICAgICAgICAgICAgLy8gRyA9IEVeMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBFLCBHKSxcblxuICAgICAgICAgICAgLy8gSCA9IEQqRlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBELCBGLCBIKSxcblxuICAgICAgICAgICAgLy8gSSA9IFgxICogRlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMSwgRiwgSSksXG5cbiAgICAgICAgICAgIC8vIEogPSBIICsgWjEqRyAtIChJK0kpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEksIEksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFoxLCBHLCBKKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgSCwgSiwgSiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEosIEFVWCwgSiksXG5cblxuICAgICAgICAgICAgLy8gWDMgKFgxKSA9IEQqSlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBELCBKLCBYMSksXG5cbiAgICAgICAgICAgIC8vIFkzIChZMSkgPSBFKihJLUopLShIKlkxKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBILCBZMSwgWTEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBJLCBKLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBFLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEFVWCwgWTEsIFkxKSxcblxuICAgICAgICAgICAgLy8gWjMgKFoxKSA9IFoxKkhcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWjEsIEgsIFoxKSxcblxuICAgICAgICAgICAgLy8gZWxsXzAgPSB4aSAqIChFICogWDIgLSBEICogWTIpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEQsIFkyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBFLCBYMiwgRUxMXzApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBFTExfMCwgQVVYLCBFTExfMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEVMTF8wLCBjLmkzMl9jb25zdChwQWx0Qm4xMjhUd2lzdCksIEVMTF8wKSxcblxuXG4gICAgICAgICAgICAvLyBlbGxfVlYgPSAtIEUgKGxhdGVyOiAqIHhQKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBFLCBFTExfVlYpLFxuXG4gICAgICAgICAgICAvLyBlbGxfVlcgPSBEIChsYXRlcjogKiB5UCAgICApXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkXG5cbiAgICAgICAgKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwRG91YmxlU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBEYmxTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFgxICA9IGMuZ2V0TG9jYWwoXCJwUlwiKTtcbiAgICAgICAgY29uc3QgWTEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IFoxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgRUxMXzAgID0gYy5nZXRMb2NhbChcInBDb2VmXCIpO1xuICAgICAgICBjb25zdCBFTExfVlcgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRUxMX1ZWICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIEEgPSBYMSAqIFkxIC8gMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBZMSwgYy5pMzJfY29uc3QocFR3b0ludiksIEEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMSwgQSwgQSksXG5cbiAgICAgICAgICAgIC8vIEIgPSBZMV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFkxLCBCKSxcblxuICAgICAgICAgICAgLy8gQyA9IFoxXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgWjEsIEMpLFxuXG4gICAgICAgICAgICAvLyBEID0gMyAqIENcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQywgQywgRCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEQsIEMsIEQpLFxuXG4gICAgICAgICAgICAvLyBFID0gdHdpc3RfYiAqIERcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocFR3aXN0Q29lZkIpLCBELCBFKSxcblxuICAgICAgICAgICAgLy8gRiA9IDMgKiBFXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEUsIEUsIEYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBFLCBGLCBGKSxcblxuICAgICAgICAgICAgLy8gRyA9IChCK0YpLzJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQiwgRiwgRyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEcsIGMuaTMyX2NvbnN0KHBUd29JbnYpLCBHKSxcblxuICAgICAgICAgICAgLy8gSCA9IChZMStaMSleMi0oQitDKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBCLCBDLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBZMSwgWjEsIEgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBILCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgSCwgQVVYLCBIKSxcblxuICAgICAgICAgICAgLy8gSSA9IEUtQlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBFLCBCLCBJKSxcblxuICAgICAgICAgICAgLy8gSiA9IFgxXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgWDEsIEopLFxuXG4gICAgICAgICAgICAvLyBFX3NxdWFyZWQgPSBFXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRSwgRTIpLFxuXG4gICAgICAgICAgICAvLyBYMyAoWDEpID0gQSAqIChCLUYpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEIsIEYsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEEsIEFVWCwgWDEpLFxuXG4gICAgICAgICAgICAvLyBZMyAoWTEpID0gR14yIC0gMypFXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRTIsIEUyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBFMiwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBHLCBZMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFkxLCBBVVgsIFkxKSxcblxuICAgICAgICAgICAgLy8gWjMgKFoxKSA9IEIgKiBIXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEIsIEgsIFoxKSxcblxuICAgICAgICAgICAgLy8gZWxsXzAgPSB4aSAqIElcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocEFsdEJuMTI4VHdpc3QpLCBJLCBFTExfMCksXG5cbiAgICAgICAgICAgIC8vIGVsbF9WVyA9IC0gSCAobGF0ZXI6ICogeVApXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIEgsIEVMTF9WVyksXG5cbiAgICAgICAgICAgIC8vIGVsbF9WViA9IDMqSiAobGF0ZXI6ICogeFApXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEosIEosIEVMTF9WViksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEosIEVMTF9WViwgRUxMX1ZWKSxcblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsQnlRKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX211bEJ5UVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMikpO1xuXG4gICAgICAgIGNvbnN0IE11bEJ5UVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShcIjIxNTc1NDYzNjM4MjgwODQzMDEwMzk4MzI0MjY5NDMwODI2MDk5MjY5MDQ0Mjc0MzQ3MjE2ODI3MjEyNjEzODY3ODM2NDM1MDI3MjYxXCIpLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIxMDMwNzYwMTU5NTg3MzcwOTcwMDE1MjI4NDI3MzgxNjExMjI2NDA2OTIzMDEzMDYxNjQzNjc1NTYyNTE5NDg1NDgxNTg3NTcxMzk1NFwiKSwgZjFzaXplICksXG4gICAgICAgIF0pKTtcblxuICAgICAgICBjb25zdCBNdWxCeVFZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIyODIxNTY1MTgyMTk0NTM2ODQ0NTQ4MTU5NTYxNjkzNTAyNjU5MzU5NjE3MTg1MjQ0MTIwMzY3MDc4MDc5NTU0MTg2NDg0MTI2NTU0XCIpLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIzNTA1ODQzNzY3OTExNTU2Mzc4Njg3MDMwMzA5OTg0MjQ4ODQ1NTQwMjQzNTA5ODk5MjU5NjQxMDEzNjc4MDkzMDMzMTMwOTMwNDAzXCIpLCBmMXNpemUgKSxcbiAgICAgICAgXSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vIFRoZSBmcm9iZW5pdXNNYXAoMSkgaW4gdGhpcyBmaWVsZCwgaXMgdGhlIGNvbmp1Z2F0ZVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCB4MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIE11bEJ5UVgsIHgzLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHksIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgTXVsQnlRWSwgeTMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgeiwgejMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzIoKSB7XG4gICAgICAgIGJ1aWxkTXVsQnlRKCk7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgUVggPSBjLmdldExvY2FsKFwicFFcIik7XG5cbiAgICAgICAgY29uc3QgcFIgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QocFIpO1xuICAgICAgICBjb25zdCBSWCA9IGMuaTMyX2NvbnN0KHBSKTtcbiAgICAgICAgY29uc3QgUlkgPSBjLmkzMl9jb25zdChwUitmMnNpemUpO1xuICAgICAgICBjb25zdCBSWiA9IGMuaTMyX2NvbnN0KHBSKzIqZjJzaXplKTtcblxuICAgICAgICBjb25zdCBjUVggPSBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoMCkpO1xuICAgICAgICBjb25zdCBjUVkgPSBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcFExID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSozKTtcbiAgICAgICAgY29uc3QgUTEgPSBjLmkzMl9jb25zdChwUTEpO1xuXG4gICAgICAgIGNvbnN0IHBRMiA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMyk7XG4gICAgICAgIGNvbnN0IFEyID0gYy5pMzJfY29uc3QocFEyKTtcbiAgICAgICAgY29uc3QgUTJZID0gYy5pMzJfY29uc3QocFEyICsgZjJzaXplKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfbm9ybWFsaXplXCIsIFFYLCBjUVgpLCAgLy8gVE9ETyBSZW1vdmUgaWYgYWxyZWFkeSBpbiBhZmZpbmVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIGNRWCwgUlgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2NvcHlcIiwgY1FZLCBSWSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfb25lXCIsIFJaKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSozKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwRGJsU3RlcFwiLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfcHJlcEFkZFN0ZXBcIiwgY1FYLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxCeVFcIiwgY1FYLCBRMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsQnlRXCIsIFExLCBRMilcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNMb29wTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIFJZLCBSWSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBRMlksIFEyWSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwQWRkU3RlcFwiLCBRMSwgUiwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3ByZXBBZGRTdGVwXCIsIFEyLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsQnkwMjRPbGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fbXVsQnkwMjRPbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRWxsMFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWV1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWVlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAgICAgICAgIC8vIFJlc3VsdCBpbiBGMTJcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwICA9IGMuZ2V0TG9jYWwoXCJwRWxsMFwiKTtcbiAgICAgICAgY29uc3QgeDIgID0gYy5nZXRMb2NhbChcInBFbGxWVlwiKTtcbiAgICAgICAgY29uc3QgeDQgID0gYy5nZXRMb2NhbChcInBFbGxWV1wiKTtcblxuICAgICAgICBjb25zdCB6MCAgPSBjLmdldExvY2FsKFwicFJcIik7XG5cbiAgICAgICAgY29uc3QgcEFVWDEyID0gbW9kdWxlLmFsbG9jKGZ0c2l6ZSk7XG4gICAgICAgIGNvbnN0IEFVWDEyID0gYy5pMzJfY29uc3QocEFVWDEyKTtcbiAgICAgICAgY29uc3QgQVVYMTJfMCA9IGMuaTMyX2NvbnN0KHBBVVgxMik7XG4gICAgICAgIGNvbnN0IEFVWDEyXzIgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKTtcbiAgICAgICAgY29uc3QgQVVYMTJfNCA9IGMuaTMyX2NvbnN0KHBBVVgxMitmMnNpemUqMik7XG4gICAgICAgIGNvbnN0IEFVWDEyXzYgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBBVVgxMl84ID0gYy5pMzJfY29uc3QocEFVWDEyK2Yyc2l6ZSo0KTtcbiAgICAgICAgY29uc3QgQVVYMTJfMTAgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKjUpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2NvcHlcIiwgeDAsIEFVWDEyXzApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3plcm9cIiwgQVVYMTJfMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29weVwiLCB4MiwgQVVYMTJfNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfemVyb1wiLCBBVVgxMl82KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIHg0LCBBVVgxMl84KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl96ZXJvXCIsIEFVWDEyXzEwKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgQVVYMTIsIHowLCB6MCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWxCeTAyNCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19tdWxCeTAyNFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGwwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEVsbFZXXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEVsbFZWXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7ICAgICAgICAgICAgLy8gUmVzdWx0IGluIEYxMlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgID0gYy5nZXRMb2NhbChcInBFbGwwXCIpO1xuICAgICAgICBjb25zdCB4MiAgPSBjLmdldExvY2FsKFwicEVsbFZWXCIpO1xuICAgICAgICBjb25zdCB4NCAgPSBjLmdldExvY2FsKFwicEVsbFZXXCIpO1xuXG4gICAgICAgIGNvbnN0IHowICA9IGMuZ2V0TG9jYWwoXCJwUlwiKTtcbiAgICAgICAgY29uc3QgejEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoMipuOCkpO1xuICAgICAgICBjb25zdCB6MiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCg0Km44KSk7XG4gICAgICAgIGNvbnN0IHozICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDYqbjgpKTtcbiAgICAgICAgY29uc3QgejQgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoOCpuOCkpO1xuICAgICAgICBjb25zdCB6NSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCgxMCpuOCkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHMwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBUMyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgVDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBEMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IFMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBEMCA9IHowICogeDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHowLCB4MCwgRDApLFxuICAgICAgICAgICAgLy8gRDIgPSB6MiAqIHgyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MiwgeDIsIEQyKSxcbiAgICAgICAgICAgIC8vIEQ0ID0gejQgKiB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejQsIHg0LCBENCksXG4gICAgICAgICAgICAvLyB0MiA9IHowICsgejQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHowLCB6NCwgdDIpLFxuICAgICAgICAgICAgLy8gdDEgPSB6MCArIHoyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB6MCwgejIsIHQxKSxcbiAgICAgICAgICAgIC8vIHMwID0gejEgKyB6MyArIHo1O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB6MSwgejMsIHMwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgczAsIHo1LCBzMCksXG5cblxuICAgICAgICAgICAgLy8gRm9yIHouYV8uYV8gPSB6MC5cbiAgICAgICAgICAgIC8vIFMxID0gejEgKiB4MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejEsIHgyLCBTMSksXG4gICAgICAgICAgICAvLyBUMyA9IFMxICsgRDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFMxLCBENCwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBteV9GcDY6Om5vbl9yZXNpZHVlICogVDMgKyBEMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIFQzLCBUNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBEMCwgejApLFxuICAgICAgICAgICAgLy8gejAgPSBUNDtcblxuICAgICAgICAgICAgLy8gRm9yIHouYV8uYl8gPSB6MVxuICAgICAgICAgICAgLy8gVDMgPSB6NSAqIHg0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6NSwgeDQsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUMyA9IFQzICsgRDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQzLCBEMiwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBteV9GcDY6Om5vbl9yZXNpZHVlICogVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCBUMywgVDQpLFxuICAgICAgICAgICAgLy8gVDMgPSB6MSAqIHgwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MSwgeDAsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUNCA9IFQ0ICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBUMywgejEpLFxuICAgICAgICAgICAgLy8gejEgPSBUNDtcblxuXG5cbiAgICAgICAgICAgIC8vIEZvciB6LmFfLmNfID0gejJcbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgyLCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHQxICogdDAgLSBEMCAtIEQyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MSwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDAsIEQyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IHozICogeDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHozLCB4NCwgVDQpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDQsIFMxKSxcblxuXG4gICAgICAgICAgICAvLyBGb3Igei5iXy5hXyA9IHozICh6MyBuZWVkcyB6MilcbiAgICAgICAgICAgIC8vIHQwID0gejIgKyB6NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgejIsIHo0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IFQzICsgVDQ7XG4gICAgICAgICAgICAvLyB6MiA9IFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUMywgVDQsIHoyKSxcbiAgICAgICAgICAgIC8vIHQxID0geDIgKyB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDIsIHg0LCB0MSksXG4gICAgICAgICAgICAvLyBUMyA9IHQwICogdDEgLSBEMiAtIEQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MSwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDIsIEQ0LCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIFQzLCBUNCksXG4gICAgICAgICAgICAvLyBUMyA9IHozICogeDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHozLCB4MCwgVDMpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDMsIFMxKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gVDQgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgVDQsIFQzLCB6MyksXG4gICAgICAgICAgICAvLyB6MyA9IFQ0O1xuXG4gICAgICAgICAgICAvLyBGb3Igei5iXy5iXyA9IHo0XG4gICAgICAgICAgICAvLyBUMyA9IHo1ICogeDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHo1LCB4MiwgVDMpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDMsIFMxKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgVDMsIFQ0KSxcbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHg0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHQyICogdDAgLSBEMCAtIEQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MiwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDAsIEQ0LCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IFQ0ICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBUMywgejQpLFxuICAgICAgICAgICAgLy8gejQgPSBUNDtcblxuICAgICAgICAgICAgLy8gRm9yIHouYl8uY18gPSB6NS5cbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4MiArIHg0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MCwgeDIsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHg0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHMwICogdDAgLSBTMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgczAsIHQwLCBUMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFQzLCBTMSwgejUpLFxuICAgICAgICAgICAgLy8gejUgPSBUMztcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNaWxsZXJMb29wKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfbWlsbGVyTG9vcFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcHJlUF9QWCA9IGMuZ2V0TG9jYWwoXCJwcHJlUFwiKTtcbiAgICAgICAgY29uc3QgcHJlUF9QWSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHByZVBcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEVMTF8wICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcbiAgICAgICAgY29uc3QgRUxMX1ZXID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEVMTF9WViAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG5cbiAgICAgICAgY29uc3QgcFZXID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSk7XG4gICAgICAgIGNvbnN0IFZXID0gYy5pMzJfY29uc3QocFZXKTtcbiAgICAgICAgY29uc3QgcFZWID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSk7XG4gICAgICAgIGNvbnN0IFZWID0gYy5pMzJfY29uc3QocFZWKTtcblxuICAgICAgICBjb25zdCBGID0gYy5nZXRMb2NhbChcInJcIik7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIEYpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSozKSkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChhdGVMb29wQml0Qnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEYsIEYpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX211bEJ5MDI0XCIsIEVMTF8wLCBWVywgVlYsIEYpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlcsIHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WViwgcHJlUF9QWCwgVlYpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfX211bEJ5MDI0XCIsIEVMTF8wLCBWVywgVlYsIEYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG5cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNMb29wTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBGLCBGKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlcsIHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WViwgcHJlUF9QWCwgVlYpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19tdWxCeTAyNFwiLCBFTExfMCwgVlcsIFZWLCBGKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLCBwcmVQX1BZLCBWVyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fbXVsQnkwMjRcIiwgRUxMXzAsIFZXLCBWViwgRiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9iZW5pdXNNYXAobikge1xuICAgICAgICBjb25zdCBGMTIgPSBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFs4Mzc2MTE4ODY1NzYzODIxNDk2NTgzOTczODY3NjI2MzY0MDkyNTg5OTA2MDY1ODY4Mjk4Nzc2OTA5NjE3OTE2MDE4NzY4MzQwMDgwbiwgMTY0Njk4MjMzMjMwNzc4MDgyMjM4ODkxMzcyNDExNzY1MzY3OTkwMDkyODY2NDYxMDgxNjk5MzU2NTkzMDE2MTM5NjE3MTIxOTgzMTZuXSxcbiAgICAgICAgICAgICAgICBbMjE4ODgyNDI4NzE4MzkyNzUyMjAwNDI0NDUyNjAxMDkxNTMxNjcyNzc3MDc0MTQ0NzIwNjE2NDE3MTQ3NTg2MzU3NjUwMjA1NTY2MTduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzExNjk3NDIzNDk2MzU4MTU0MzA0ODI1NzgyOTIyNTg0NzI1MzEyOTEyMzgzNDQxMTU5NTA1MDM4Nzk0MDI3MTA1Nzc4OTU0MTg0MzE5biwgMzAzODQ3Mzg5MTM1MDY1ODg3NDIyNzgzNDU0ODc3NjA5OTQxNDU2MzQ5MTg4OTE5NzE5MjcyMzQ1MDgzOTU0NDM3ODYwNDA5NjAxbl0sXG4gICAgICAgICAgICAgICAgWzIxODg4MjQyODcxODM5Mjc1MjIwMDQyNDQ1MjYwMTA5MTUzMTY3Mjc3NzA3NDE0NDcyMDYxNjQxNzE0NzU4NjM1NzY1MDIwNTU2NjE2biwgMG5dLFxuICAgICAgICAgICAgICAgIFszMzIxMzA0NjMwNTk0MzMyODA4MjQxODA5MDU0OTU4MzYxMjIwMzIyNDc3Mzc1MjkxMjA2MjYxODg0NDA5MTg5NzYwMTg1ODQ0MjM5biwgNTcyMjI2NjkzNzg5NjUzMjg4NTc4MDA1MTk1ODk1ODM0ODIzMTE0MzM3MzcwMDEwOTM3Mjk5OTM3NDgyMDIzNTEyMTM3NDQxOTg2OG5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODY5NjMxMTE1NzI5NzgyMzY2MjY4OTAzNzg5NDY0NTIyNjIwODU4Mm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTM1MTIxMjQwMDYwNzU0NTM3MjU2NjI0MzE4Nzc2MzA5MTA5OTYxMDY0MDUwOTE0Mjk1MjQ4ODU3Nzk0MTk5Nzg2MjY0NTc4Njg1MDNuLCA1NDE4NDE5NTQ4NzYxNDY2OTk4MzU3MjY4NTA0MDgwNzM4Mjg5Njg3MDI0NTExMTg5NjUzNzI3MDI5NzM2MjgwNjgzNTE0MDEwMjY3bl0sXG4gICAgICAgICAgICAgICAgWzIyMDM5NjA0ODUxNDgxMjE5MjE0MTg2MDM3NDI4MjU3NjIwMjA5NzQyNzkyNTg4ODAyMDU2NTE5NjZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzEwMTkwODE5Mzc1NDgxMTIwOTE3NDIwNjIyODIyNjcyNTQ5Nzc1NzgzOTI3NzE2MTM4MzE4NjIzODk1MDEwNzg4ODY2MjcyMDI0MjY0biwgMjE1ODQzOTU0ODI3MDQyMDkzMzQ4MjM2MjIyOTAzNzk2NjUxNDcyMzk5NjE5NjgzNzgxMDQzOTAzNDM5NTM5NDAyMDczNjU3OTg5ODJuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2N24sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTg1NjY5MzgyNDEyNDQ5NDI0MTQwMDQ1OTY2OTAyOTg5MTM4NjgzNzM4MzM3ODIwMDY2MTc0MDA4MDQ2Mjg3MDQ4ODUwNDAzNjQzNDRuLCAxNjE2NTk3NTkzMzk0Mjc0MjMzNjQ2NjM1Mzc4NjI5ODkyNjg1NzU1MjkzNzQ1NzE4ODQ1MDY2MzMxNDIxNzY1OTUyMzg1MTc4ODcxNW5dLFxuICAgICAgICAgICAgXVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IEY2ID0gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMjE1NzU0NjM2MzgyODA4NDMwMTAzOTgzMjQyNjk0MzA4MjYwOTkyNjkwNDQyNzQzNDcyMTY4MjcyMTI2MTM4Njc4MzY0MzUwMjcyNjFuLCAxMDMwNzYwMTU5NTg3MzcwOTcwMDE1MjI4NDI3MzgxNjExMjI2NDA2OTIzMDEzMDYxNjQzNjc1NTYyNTE5NDg1NDgxNTg3NTcxMzk1NG5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMDA0MjQ0NTI2MDEwOTE1MzE2NzI3NzcwNzQxNDQ3MjA2MTY0MTcxNDc1ODYzNTc2NTAyMDU1NjYxNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzc3MjAwMDg4MTkxOTg1Mzc3NjQzMzY5NTE4NjcxMzg1ODIzOTAwOTA3MzU5MzgxNzE5NTc3MTc3MzM4MTkxOTMxNjQxOTM0NTI2MW4sIDIyMzY1OTU0OTU5NjcyNDUxODgyODE3MDEyNDgyMDMxODE3OTUxMjEwNjg5MDI2MDU4NjEyMjc4NTUyNjExMzc4MjA5NDQwMDg5MjZuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTg0MjkwMjEyMjM0Nzc4NTM2NTc2NjA3OTIwMzQzNjk4NjU4MzkxMTQ1MDQ0NDY0MzEyMzQ3MjYzOTIwODAwMDIxMzc1OTgwNDQ2NDRuLCA5MzQ0MDQ1Nzc5OTk4MzIwMzMzODEyNDIwMjIzMjM3OTgxMDI5NTA2MDEyMTI0MDc1NTI1Njc5MjA4NTgxOTAyMDA4NDA2NDg1NzAzbl0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsyNTgxOTExMzQ0NDY3MDA5MzM1MjY3MzExMTE1NDY4ODAzMDk5NTUxNjY1NjA1MDc2MTk2NzQwODY3ODA1MjU4NTY4MjM0MzQ2MzM4biwgMTk5Mzc3NTY5NzE3NzU2NDc5ODc5OTU5MzIxNjk5MjkzNDE5OTQzMTQ2NDA2NTI5NjQ5NDk0NDgzMTMzNzQ0NzI0MDA3MTY2NjEwMzBuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNTMyNDQ3OTIwMjQ0OTkwMzU0MjcyNjc4MzM5NTUwNjIxNDQ4MTkyODI1Nzc2MjQwMDY0MzI3OTc4MDM0MzM2ODU1NzI5NzEzNTcxOG4sIDE2MjA4OTAwMzgwNzM3NjkzMDg0OTE5NDk1MTI3MzM0Mzg3OTgxMzkzNzI2NDE5ODU2ODg4Nzk5OTE3OTE0MTgwOTg4ODQ0MTIzMDM5bl0sXG4gICAgICAgICAgICAgICAgWzIxODg4MjQyODcxODM5Mjc1MjIwMDQyNDQ1MjYwMTA5MTUzMTY3Mjc3NzA3NDE0NDcyMDYxNjQxNzE0NzU4NjM1NzY1MDIwNTU2NjE2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxMzk4MTg1MjMyNDkyMjM2MjM0NDI1MjMxMTIzNDI4MjI1NzUwNzIxNjM4Nzc4OTgyMDk4MzY0MjA0MDg4OTI2NzUxOTY5NDcyNjUyN24sIDc2Mjk4MjgzOTExNjUyMDkzNzE1NzczODQxOTMyNTA4MjAyMDE2ODQyNTUyNDE3NzM4MDkwNzcxNDY3ODcxMzU5MDA4OTE2MzMwOTduXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2Zyb2Jlbml1c01hcFwiK24pO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8NjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBYID0gKGk9PTApID8gYy5nZXRMb2NhbChcInhcIikgOiBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBYYzAgPSBYO1xuICAgICAgICAgICAgY29uc3QgWGMxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSArIGYxc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgUiA9IChpPT0wKSA/IGMuZ2V0TG9jYWwoXCJyXCIpIDogYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgUmMwID0gUjtcbiAgICAgICAgICAgIGNvbnN0IFJjMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUgKyBmMXNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZWYgPSBtdWwyKEYxMltNYXRoLmZsb29yKGkvMyldW24lMTJdICwgRjZbaSUzXVtuJTZdKTtcbiAgICAgICAgICAgIGNvbnN0IHBDb2VmID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoY29lZlswXSksIDMyKSxcbiAgICAgICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoY29lZlsxXSksIDMyKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgaWYgKG4lMiA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBYYzAsIFJjMCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9uZWdcIiwgWGMxLCBSYzEpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUiksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWCwgYy5pMzJfY29uc3QocENvZWYpLCBSKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWwyKGEsIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjMCA9IEJpZ0ludChhWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGFjMSA9IEJpZ0ludChhWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IGJjMCA9IEJpZ0ludChiWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJjMSA9IEJpZ0ludChiWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFtcbiAgICAgICAgICAgICAgICAoYWMwICogYmMwIC0gKCAgYWMxICogYmMxKSAgKSAlIHEsXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMSArICggIGFjMSAqIGJjMCkgICkgJSBxLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKHJlc1swXSkpIHJlc1swXSA9IHJlc1swXSArIHE7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uRmlyc3RDaHVuaygpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25GaXJzdENodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgZWx0QzAgPSBlbHQ7XG4gICAgICAgIGNvbnN0IGVsdEMxID0gYy5pMzJfYWRkKGVsdCwgYy5pMzJfY29uc3QobjgqNikpO1xuICAgICAgICBjb25zdCByID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHBBID0gbW9kdWxlLmFsbG9jKGZ0c2l6ZSk7XG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChwQSk7XG4gICAgICAgIGNvbnN0IEFjMCA9IEE7XG4gICAgICAgIGNvbnN0IEFjMSA9IGMuaTMyX2NvbnN0KHBBICsgbjgqNik7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgQSA9IGFsdF9ibjEyOF9GcTEyKGVsdC5jMCwtZWx0LmMxKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9jb3B5XCIsIGVsdEMwLCBBYzApLFxuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX25lZ1wiLCBlbHRDMSwgQWMxKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgQiA9IGVsdC5pbnZlcnNlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBlbHQsIEIpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhbHRfYm4xMjhfRnExMiBDID0gQSAqIEI7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEEsIEIsIEMpLFxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgRCA9IEMuRnJvYmVuaXVzX21hcCgyKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwMlwiLCBDLCBEKSxcbiAgICAgICAgICAgIC8vIGNvbnN0IGFsdF9ibjEyOF9GcTEyIHJlc3VsdCA9IEQgKiBDO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBDLCBELCByKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEN5Y2xvdG9taWNTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fY3ljbG90b21pY1NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDQgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDMqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCg0KmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4NSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoNSpmMnNpemUpKTtcblxuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByNCA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMypmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDQqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHI1ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg1KmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHRtcCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gICAgLy8gdDAgKyB0MSp5ID0gKHowICsgejEqeSleMiA9IGFeMlxuICAgICAgICAgICAgLy8gICAgdG1wID0gejAgKiB6MTtcbiAgICAgICAgICAgIC8vICAgIHQwID0gKHowICsgejEpICogKHowICsgbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHoxKSAtIHRtcCAtIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB0bXA7XG4gICAgICAgICAgICAvLyAgICB0MSA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDAsIHgxLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4MSwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHQwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIEFVWCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDEpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDIgKyB0Myp5ID0gKHoyICsgejMqeSleMiA9IGJeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHoyICogejM7XG4gICAgICAgICAgICAvLyAgdDIgPSAoejIgKyB6MykgKiAoejIgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejMpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0MyA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDIsIHgzLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4MywgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDIsIHQyLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB4MywgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIEFVWCwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDMpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDQgKyB0NSp5ID0gKHo0ICsgejUqeSleMiA9IGNeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHo0ICogejU7XG4gICAgICAgICAgICAvLyAgdDQgPSAoejQgKyB6NSkgKiAoejQgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejUpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0NSA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDQsIHg1LCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4NSwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDQsIHQ0LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB4NSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDQsIEFVWCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDUpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQVxuICAgICAgICAgICAgLy8gejAgPSAzICogdDAgLSAyICogejBcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIwLCByMCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MCwgcjAsIHIwKSxcbiAgICAgICAgICAgIC8vIHoxID0gMyAqIHQxICsgMiAqIHoxXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMSwgcjEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHIxLCByMSksXG5cbiAgICAgICAgICAgIC8vIEZvciBCXG4gICAgICAgICAgICAvLyB6MiA9IDMgKiAoeGkgKiB0NSkgKyAyICogejJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDUsIGMuaTMyX2NvbnN0KHBBbHRCbjEyOFR3aXN0KSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQVVYLCB4MiwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMiwgcjIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQVVYLCByMiwgcjIpLFxuICAgICAgICAgICAgLy8gejMgPSAzICogdDQgLSAyICogejNcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDQsIHgzLCByMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIzLCByMywgcjMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0NCwgcjMsIHIzKSxcblxuICAgICAgICAgICAgLy8gRm9yIENcbiAgICAgICAgICAgIC8vIHo0ID0gMyAqIHQyIC0gMiAqIHo0XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQyLCB4NCwgcjQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByNCwgcjQsIHI0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDIsIHI0LCByNCksXG4gICAgICAgICAgICAvLyB6NSA9IDMgKiB0MyArIDIgKiB6NVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgeDUsIHI1KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjUsIHI1LCByNSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCByNSwgcjUpLFxuXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEN5Y2xvdG9taWNFeHAoZXhwb25lbnQsIGZuTmFtZSkge1xuICAgICAgICBjb25zdCBleHBvbmVudE5hZkJ5dGVzID0gbmFmKGV4cG9uZW50KS5tYXAoIChiKSA9PiAoYj09LTEgPyAweEZGOiBiKSApO1xuICAgICAgICBjb25zdCBwRXhwb25lbnROYWZCeXRlcyA9IG1vZHVsZS5hbGxvYyhleHBvbmVudE5hZkJ5dGVzKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNFeHBfXCIrZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwieFwiKTtcblxuICAgICAgICBjb25zdCByZXMgPSBjLmdldExvY2FsKFwiclwiKTtcblxuICAgICAgICBjb25zdCBpbnZlcnNlID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCBpbnZlcnNlKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9vbmVcIiwgcmVzKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLnRlZUxvY2FsKFwiYml0XCIsIGMuaTMyX2xvYWQ4X3MoYy5pMzJfY29uc3QoZXhwb25lbnROYWZCeXRlcy5sZW5ndGgtMSksIHBFeHBvbmVudE5hZkJ5dGVzKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIHgsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCByZXMsIHJlcyksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIGludmVyc2UsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkxhc3RDaHVuaygpIHtcbiAgICAgICAgYnVpbGRDeWNsb3RvbWljU3F1YXJlKCk7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY0V4cChmaW5hbEV4cFosIFwidzBcIik7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19maW5hbEV4cG9uZW50aWF0aW9uTGFzdENodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEsgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEwgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE0gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE4gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE8gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG5cbiAgICAgICAgICAgIC8vIEEgPSBleHBfYnlfbmVnX3ooZWx0KSAgLy8gPSBlbHReKC16KVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIGVsdCwgQSksXG4gICAgICAgICAgICBmaW5hbEV4cElzTmVnYXRpdmUgPyBbXSA6IGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgQSwgQSksXG4gICAgICAgICAgICAvLyBCID0gQV4yICAgICAgICAgICAgICAgIC8vID0gZWx0XigtMip6KVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIsIEEsIEIpLFxuICAgICAgICAgICAgLy8gQyA9IEJeMiAgICAgICAgICAgICAgICAvLyA9IGVsdF4oLTQqeilcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCBCLCBDKSxcbiAgICAgICAgICAgIC8vIEQgPSBDICogQiAgICAgICAgICAgICAgLy8gPSBlbHReKC02KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEMsIEIsIEQpLFxuICAgICAgICAgICAgLy8gRSA9IGV4cF9ieV9uZWdfeihEKSAgICAvLyA9IGVsdF4oNip6XjIpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgRCwgRSksXG4gICAgICAgICAgICBmaW5hbEV4cElzTmVnYXRpdmUgPyBbXSA6IGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRSwgRSksXG4gICAgICAgICAgICAvLyBGID0gRV4yICAgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjIpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgRSwgRiksXG4gICAgICAgICAgICAvLyBHID0gZXB4X2J5X25lZ196KEYpICAgIC8vID0gZWx0XigtMTIqel4zKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIEYsIEcpLFxuICAgICAgICAgICAgZmluYWxFeHBJc05lZ2F0aXZlID8gW10gOiBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIEcsIEcpLFxuICAgICAgICAgICAgLy8gSCA9IGNvbmooRCkgICAgICAgICAgICAvLyA9IGVsdF4oNip6KVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBELCBIKSxcbiAgICAgICAgICAgIC8vIEkgPSBjb25qKEcpICAgICAgICAgICAgLy8gPSBlbHReKDEyKnpeMylcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRywgSSksXG4gICAgICAgICAgICAvLyBKID0gSSAqIEUgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSSwgRSwgSiksXG4gICAgICAgICAgICAvLyBLID0gSiAqIEggICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDYqeilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSiwgSCwgSyksXG4gICAgICAgICAgICAvLyBMID0gSyAqIEIgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDQqeilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSywgQiwgTCksXG4gICAgICAgICAgICAvLyBNID0gSyAqIEUgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyAxMip6XjIgKyA2KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEssIEUsIE0pLFxuXG4gICAgICAgICAgICAvLyBOID0gTSAqIGVsdCAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyAxMip6XjIgKyA2KnogKyAxKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBNLCBlbHQsIE4pLFxuXG4gICAgICAgICAgICAvLyBPID0gTC5Gcm9iZW5pdXNfbWFwKDEpIC8vID0gZWx0XihxKigxMip6XjMgKyA2KnpeMiArIDQqeikpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDFcIiwgTCwgTyksXG4gICAgICAgICAgICAvLyBQID0gTyAqIE4gICAgICAgICAgICAgIC8vID0gZWx0XihxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIE8sIE4sIFApLFxuICAgICAgICAgICAgLy8gUSA9IEsuRnJvYmVuaXVzX21hcCgyKSAvLyA9IGVsdF4ocV4yICogKDEyKnpeMyArIDYqel4yICsgNip6KSlcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwMlwiLCBLLCBRKSxcbiAgICAgICAgICAgIC8vIFIgPSBRICogUCAgICAgICAgICAgICAgLy8gPSBlbHReKHFeMiAqICgxMip6XjMgKyA2KnpeMiArIDYqeikgKyBxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFEsIFAsIFIpLFxuICAgICAgICAgICAgLy8gUyA9IGNvbmooZWx0KSAgICAgICAgICAvLyA9IGVsdF4oLTEpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIGVsdCwgUyksXG4gICAgICAgICAgICAvLyBUID0gUyAqIEwgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDQqeiAtIDEpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFMsIEwsIFQpLFxuICAgICAgICAgICAgLy8gVSA9IFQuRnJvYmVuaXVzX21hcCgzKSAvLyA9IGVsdF4ocV4zKDEyKnpeMyArIDYqel4yICsgNCp6IC0gMSkpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDNcIiwgVCwgVSksXG4gICAgICAgICAgICAvLyBWID0gVSAqIFIgICAgICAgICAgICAgIC8vID0gZWx0XihxXjMoMTIqel4zICsgNip6XjIgKyA0KnogLSAxKSArIHFeMiAqICgxMip6XjMgKyA2KnpeMiArIDYqeikgKyBxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFUsIFIsIHJlc3VsdCksXG4gICAgICAgICAgICAvLyByZXN1bHQgPSBWXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsRXhwb25lbnRpYXRpb24oKSB7XG4gICAgICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkZpcnN0Q2h1bmsoKTtcbiAgICAgICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uTGFzdENodW5rKCk7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IGVsdFRvRmlyc3RDaHVuayA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25GaXJzdENodW5rXCIsIGVsdCwgZWx0VG9GaXJzdENodW5rICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25MYXN0Q2h1bmtcIiwgZWx0VG9GaXJzdENodW5rLCByZXN1bHQgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvbk9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGV4cG9uZW50ID0gNTUyNDg0MjMzNjEzMjI0MDk2MzEyNjE3MTI2NzgzMTczMTQ3MDk3MzgyMTAzNzYyOTU3NjU0MTg4ODgyNzM0MzE0MTk2OTEwODM5OTA3NTQxMjEzOTc0NTAyNzYxNTQwNjI5ODE3MDA5NjA4NTQ4NjU0NjgwMzQzNjI3NzAxMTUzODI5NDQ2NzQ3ODEwOTA3MzczMjU2ODQxNTUxMDA2MjAxNjM5Njc3NzI2MTM5OTQ2MDI5MTk5OTY4NDEyNTk4ODA0ODgyMzkxNzAyMjczMDE5MDgzNjUzMjcyMDQ3NTY2MzE2NTg0MzY1NTU5Nzc2NDkzMDI3NDk1NDU4MjM4MzczOTAyODc1OTM3NjU5OTQzNTA0ODczMjIwNTU0MTYxNTUwNTI1OTI2MzAyMzAzMzMxNzQ3NDYzNTE1NjQ0NzExODc2NjUzMTc3MTI5NTc4MzAzMTkxMDk1OTAwOTA5MTkxNjI0ODE3ODI2NTY2Njg4MjQxODA0NDA4MDgxODkyNzg1NzI1OTY3OTMxNzE0MDk3NzE2NzA5NTI2MDkyMjYxMjc4MDcxOTUyNTYwMTcxMTExNDQ0MDcyMDQ5MjI5MTIzNTY1MDU3NDgzNzUwMTYxNDYwMDI0MzUzMzQ2Mjg0MTY3MjgyNDUyNzU2MjE3NjYyMzM1NTI4ODEzNTE5MTM5ODA4MjkxMTcwNTM5MDcyMTI1MzgxMjMwODE1NzI5MDcxNTQ0ODYxNjAyNzUwOTM2OTY0ODI5MzEzNjA4MTM3MzI1NDI2MzgzNzM1MTIyMTc1MjI5NTQxMTU1Mzc2MzQ2NDM2MDkzOTMwMjg3NDAyMDg5NTE3NDI2OTczMTc4OTE3NTY5NzEzMzg0NzQ4MDgxODI3MjU1NDcyNTc2OTM3NDcxNDk2MTk1NzUyNzI3MTg4MjYxNDM1NjMzMjcxMjM4NzEwMTMxNzM2MDk2Mjk5Nzk4MTY4ODUyOTI1NTQwNTQ5MzQyMzMwNzc1Mjc5ODc3MDA2Nzg0MzU0ODAxNDIyMjQ5NzIyNTczNzgzNTYxNjg1MTc5NjE4ODE2NDgwMDM3Njk1MDA1NTE1NDI2MTYyMzYyNDMxMDcyMjQ1NjM4MzI0NzQ0NDgwbjtcblxuICAgICAgICBjb25zdCBwRXhwb25lbnQgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIGV4cG9uZW50LCAzNTIgKSk7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwRXhwb25lbnQpLCBjLmkzMl9jb25zdCgzNTIpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuXG4gICAgY29uc3QgcFByZVAgPSBtb2R1bGUuYWxsb2MocHJlUFNpemUpO1xuICAgIGNvbnN0IHBQcmVRID0gbW9kdWxlLmFsbG9jKHByZVFTaXplKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkUGFpcmluZ0VxdWF0aW9uKG5QYWlyaW5ncykge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wYWlyaW5nRXFcIituUGFpcmluZ3MpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBhaXJpbmdzOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkUGFyYW0oXCJwX1wiK2ksIFwiaTMyXCIpO1xuICAgICAgICAgICAgZi5hZGRQYXJhbShcInFfXCIraSwgXCJpMzJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRQYXJhbShcImNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcmVzVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgYXV4VCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX29uZVwiLCByZXNUICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUGFpcmluZ3M7IGkrKykge1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiLCBjLmdldExvY2FsKFwicF9cIitpKSwgYy5pMzJfY29uc3QocFByZVApICkpO1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzJcIiwgYy5nZXRMb2NhbChcInFfXCIraSksIGMuaTMyX2NvbnN0KHBQcmVRKSApKTtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbWlsbGVyTG9vcFwiLCBjLmkzMl9jb25zdChwUHJlUCksIGMuaTMyX2NvbnN0KHBQcmVRKSwgYXV4VCApKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzVCwgYXV4VCwgcmVzVCApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiLCByZXNULCByZXNUICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXFcIiwgcmVzVCwgYy5nZXRMb2NhbChcImNcIikpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUGFpcmluZygpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcGFpcmluZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHJlc1QgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzFcIiwgYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KHBQcmVQKSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzJcIiwgYy5nZXRMb2NhbChcInFcIiksIGMuaTMyX2NvbnN0KHBQcmVRKSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9taWxsZXJMb29wXCIsIGMuaTMyX2NvbnN0KHBQcmVQKSwgYy5pMzJfY29uc3QocFByZVEpLCByZXNUICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIiwgcmVzVCwgYy5nZXRMb2NhbChcInJcIikgKSk7XG4gICAgfVxuXG5cbiAgICBidWlsZFByZXBBZGRTdGVwKCk7XG4gICAgYnVpbGRQcmVwRG91YmxlU3RlcCgpO1xuXG4gICAgYnVpbGRQcmVwYXJlRzEoKTtcbiAgICBidWlsZFByZXBhcmVHMigpO1xuXG4gICAgYnVpbGRNdWxCeTAyNCgpO1xuICAgIGJ1aWxkTXVsQnkwMjRPbGQoKTtcbiAgICBidWlsZE1pbGxlckxvb3AoKTtcblxuXG4gICAgZm9yIChsZXQgaT0wOyBpPDEwOyBpKyspIHtcbiAgICAgICAgYnVpbGRGcm9iZW5pdXNNYXAoaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwXCIraSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCk7XG4gICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uKCk7XG5cbiAgICBmb3IgKGxldCBpPTE7IGk8PTU7IGkrKykge1xuICAgICAgICBidWlsZFBhaXJpbmdFcXVhdGlvbihpKTtcbiAgICAgICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3BhaXJpbmdFcVwiK2kpO1xuICAgIH1cblxuICAgIGJ1aWxkUGFpcmluZygpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3BhaXJpbmdcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wcmVwYXJlRzJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX21pbGxlckxvb3BcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19tdWxCeTAyNFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX211bEJ5MDI0T2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIik7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhtb2R1bGUuZnVuY3Rpb25JZHhCeU5hbWUpO1xuXG59O1xuXG4iLCJjb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcblxuY29uc3QgYnVpbGRGMW0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMW0uanNcIik7XG5jb25zdCBidWlsZEYxID1yZXF1aXJlKFwiLi4vYnVpbGRfZjEuanNcIik7XG5jb25zdCBidWlsZEYybSA9cmVxdWlyZShcIi4uL2J1aWxkX2YybS5qc1wiKTtcbmNvbnN0IGJ1aWxkRjNtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjNtLmpzXCIpO1xuY29uc3QgYnVpbGRDdXJ2ZSA9cmVxdWlyZShcIi4uL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzXCIpO1xuY29uc3QgYnVpbGRGRlQgPSByZXF1aXJlKFwiLi4vYnVpbGRfZmZ0XCIpO1xuY29uc3QgYnVpbGRQb2wgPSByZXF1aXJlKFwiLi4vYnVpbGRfcG9sXCIpO1xuY29uc3QgYnVpbGRRQVAgPSByZXF1aXJlKFwiLi4vYnVpbGRfcWFwXCIpO1xuY29uc3QgYnVpbGRBcHBseUtleSA9IHJlcXVpcmUoXCIuLi9idWlsZF9hcHBseWtleVwiKTtcbmNvbnN0IHsgYml0TGVuZ3RoLCBpc09kZCwgaXNOZWdhdGl2ZSB9ID0gcmVxdWlyZShcIi4uL2JpZ2ludC5qc1wiKTtcblxuLy8gRGVmaW5pdGlvbiBoZXJlOiBodHRwczovL2VsZWN0cmljY29pbi5jby9ibG9nL25ldy1zbmFyay1jdXJ2ZS9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEJMUzEyMzgxKG1vZHVsZSwgX3ByZWZpeCkge1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImJsczEyMzgxXCI7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgcSA9IDB4MWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFibjtcbiAgICBjb25zdCByID0gMHg3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxbjtcblxuICAgIGNvbnN0IG42NHEgPSBNYXRoLmZsb29yKChiaXRMZW5ndGgocSAtIDFuKSAtIDEpLzY0KSArMTtcbiAgICBjb25zdCBuOHEgPSBuNjRxKjg7XG4gICAgY29uc3QgZjFzaXplID0gbjhxO1xuICAgIGNvbnN0IGYyc2l6ZSA9IGYxc2l6ZSAqIDI7XG4gICAgY29uc3QgZnRzaXplID0gZjFzaXplICogMTI7XG5cbiAgICBjb25zdCBuNjRyID0gTWF0aC5mbG9vcigoYml0TGVuZ3RoKHIgLSAxbikgLSAxKS82NCkgKzE7XG4gICAgY29uc3QgbjhyID0gbjY0cio4O1xuICAgIGNvbnN0IGZyc2l6ZSA9IG44cjtcblxuXG4gICAgY29uc3QgcHIgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIHIsIGZyc2l6ZSApKTtcblxuICAgIGNvbnN0IGYxbVByZWZpeCA9IGJ1aWxkRjFtKG1vZHVsZSwgcSwgXCJmMW1cIiwgXCJpbnRxXCIpO1xuICAgIGJ1aWxkRjEobW9kdWxlLCByLCBcImZyXCIsIFwiZnJtXCIsIFwiaW50clwiKTtcbiAgICBjb25zdCBwRzFiID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoNG4pLCBmMXNpemUgKSk7XG4gICAgY29uc3QgZzFtUHJlZml4ID0gYnVpbGRDdXJ2ZShtb2R1bGUsIFwiZzFtXCIsIFwiZjFtXCIsIHBHMWIpO1xuXG4gICAgYnVpbGRGRlQobW9kdWxlLCBcImZybVwiLCBcImZybVwiLCBcImZybVwiLCBcImZybV9tdWxcIik7XG5cbiAgICBidWlsZFBvbChtb2R1bGUsIFwicG9sXCIsIFwiZnJtXCIpO1xuICAgIGJ1aWxkUUFQKG1vZHVsZSwgXCJxYXBcIiwgXCJmcm1cIik7XG5cbiAgICBjb25zdCBmMm1QcmVmaXggPSBidWlsZEYybShtb2R1bGUsIFwiZjFtX25lZ1wiLCBcImYybVwiLCBcImYxbVwiKTtcbiAgICBjb25zdCBwRzJiID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSg0biksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDRuKSwgZjFzaXplIClcbiAgICBdKTtcbiAgICBjb25zdCBnMm1QcmVmaXggPSBidWlsZEN1cnZlKG1vZHVsZSwgXCJnMm1cIiwgXCJmMm1cIiwgcEcyYik7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkR1RpbWVzRnIoZm5OYW1lLCBvcE11bCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwR1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBGclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44cikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcImZybV9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwicEZyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIG9wTXVsLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwR1wiKSxcbiAgICAgICAgICAgICAgICBBVVgsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhyKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZm5OYW1lKTtcbiAgICB9XG4gICAgYnVpbGRHVGltZXNGcihcImcxbV90aW1lc0ZyXCIsIFwiZzFtX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJnMW1cIiwgXCJnMW1cIiwgXCJmcm1cIiwgXCJnMW1fdGltZXNGclwiKTtcblxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMm1fdGltZXNGclwiLCBcImcybV90aW1lc1NjYWxhclwiKTtcbiAgICBidWlsZEZGVChtb2R1bGUsIFwiZzJtXCIsIFwiZzJtXCIsIFwiZnJtXCIsIFwiZzJtX3RpbWVzRnJcIik7XG5cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzFtX3RpbWVzRnJBZmZpbmVcIiwgXCJnMW1fdGltZXNTY2FsYXJBZmZpbmVcIik7XG4gICAgYnVpbGRHVGltZXNGcihcImcybV90aW1lc0ZyQWZmaW5lXCIsIFwiZzJtX3RpbWVzU2NhbGFyQWZmaW5lXCIpO1xuXG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZnJtX2JhdGNoQXBwbHlLZXlcIiwgXCJmbXJcIiwgXCJmcm1cIiwgbjhyLCBuOHIsIG44ciwgXCJmcm1fbXVsXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5XCIsIFwiZzFtXCIsIFwiZnJtXCIsIG44cSozLCBuOHEqMywgbjhyLCBcImcxbV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMW1cIiwgXCJmcm1cIiwgbjhxKjIsIG44cSozLCBuOHIsIFwiZzFtX3RpbWVzRnJBZmZpbmVcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzJtX2JhdGNoQXBwbHlLZXlcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjhxKjIqMywgbjhxKjMqMiwgbjhyLCBcImcybV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcybV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjhxKjIqMiwgbjhxKjMqMiwgbjhyLCBcImcybV90aW1lc0ZyQWZmaW5lXCIpO1xuXG5cbiAgICBmdW5jdGlvbiB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGEpICogKDFuIDw8IEJpZ0ludChmMXNpemUqOCkpICUgcTtcbiAgICB9XG5cbiAgICBjb25zdCBHMWdlbiA9IFtcbiAgICAgICAgMzY4NTQxNjc1MzcxMzM4NzAxNjc4MTA4ODMxNTE4MzA3Nzc1Nzk2MTYyMDc5NTc4MjU0NjQwOTg5NDU3ODM3ODY4ODYwNzU5MjM3ODM3NjMxODgzNjA1NDk0NzY3NjM0NTgyMTU0ODEwNDE4NTQ2NDUwN24sXG4gICAgICAgIDEzMzk1MDY1NDQ5NDQ0NzY0NzMwMjA0NzEzNzk5NDE5MjEyMjE1ODQ5MzM4NzU5MzgzNDk2MjA0MjY1NDM3MzY0MTY1MTE0MjM5NTYzMzM1MDY0NzI3MjQ2NTUzNTMzNjY1MzQ5OTIzOTE3NTY0NDE1NjluLFxuICAgICAgICAxblxuICAgIF07XG5cbiAgICBjb25zdCBwRzFnZW4gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMl0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMXplcm8gPSBbXG4gICAgICAgIDBuLFxuICAgICAgICAxbixcbiAgICAgICAgMG5cbiAgICBdO1xuXG4gICAgY29uc3QgcEcxemVybyA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1syXSksIGYxc2l6ZSApXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzJnZW4gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDM1MjcwMTA2OTU4NzQ2NjYxODE4NzEzOTExNjAxMTA2MDE0NDg5MDAyOTk1Mjc5Mjc3NTI0MDIxOTkwODY0NDIzOTc5Mzc4NTczNTcxNTAyNjg3MzM0NzYwMDM0Mzg2NTE3NTk1Mjc2MTkyNjMwMzE2MG4sXG4gICAgICAgICAgICAzMDU5MTQ0MzQ0MjQ0MjEzNzA5OTcxMjU5ODE0NzUzNzgxNjM2OTg2NDcwMzI1NDc2NjQ3NTU4NjU5MzczMjA2MjkxNjM1MzI0NzY4OTU4NDMyNDMzNTA5NTYzMTA0MzQ3MDE3ODM3ODg1NzYzMzY1NzU4bixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxOTg1MTUwNjAyMjg3MjkxOTM1NTY4MDU0NTIxMTc3MTcxNjM4MzAwODY4OTc4MjE1NjU1NzMwODU5Mzc4NjY1MDY2MzQ0NzI2MzczODIzNzE4NDIzODY5MTA0MjYzMzMzOTg0NjQxNDk0MzQwMzQ3OTA1bixcbiAgICAgICAgICAgIDkyNzU1MzY2NTQ5MjMzMjQ1NTc0NzIwMTk2NTc3NjAzNzg4MDc1Nzc0MDE5MzQ1MzU5Mjk3MDAyNTAyNzk3ODc5Mzk3Njg3NzAwMjY3NTU2NDk4MDk0OTI4OTcyNzk1NzU2NTU3NTQzMzM0NDIxOTU4Mm4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXVxuICAgIF07XG5cbiAgICBjb25zdCBwRzJnZW4gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMnplcm8gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDBuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAwbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMnplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzBdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1swXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzFdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1syXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBwT25lVCA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMW4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwQmxzMTIzODFUd2lzdCA9ICBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDFuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMW4pLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmMm1QcmVmaXggKyBcIl9tdWxOUlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwYyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUpKTtcbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDAsIHgwYyksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MCwgeDEsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgwYywgeDEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgYnVpbGRfbXVsTlIyKCk7XG5cbiAgICBjb25zdCBmNm1QcmVmaXggPSBidWlsZEYzbShtb2R1bGUsIGYybVByZWZpeCtcIl9tdWxOUlwiLCBcImY2bVwiLCBcImYybVwiKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SNigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWxOUlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGMwY29weSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYzBjb3B5XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX211bE5SXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOHEqNCkpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOHEqMikpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44cSo0KSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICBjMGNvcHksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjhxKjIpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkX211bE5SNigpO1xuXG4gICAgY29uc3QgZnRtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBmNm1QcmVmaXgrXCJfbXVsTlJcIiwgXCJmdG1cIiwgZjZtUHJlZml4KTtcblxuICAgIGNvbnN0IGF0ZUxvb3BDb3VudCA9IDB4ZDIwMTAwMDAwMDAxMDAwMG47XG4gICAgY29uc3QgYXRlTG9vcEJpdEJ5dGVzID0gYml0cyhhdGVMb29wQ291bnQpO1xuICAgIGNvbnN0IHBBdGVMb29wQml0Qnl0ZXMgPSBtb2R1bGUuYWxsb2MoYXRlTG9vcEJpdEJ5dGVzKTtcbiAgICBjb25zdCBpc0xvb3BOZWdhdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBhdGVDb2VmU2l6ZSA9IDMgKiBmMnNpemU7XG4gICAgY29uc3QgYXRlTkRibENvZWZzID0gYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0xO1xuICAgIGNvbnN0IGF0ZU5BZGRDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5yZWR1Y2UoKGFjYywgYikgPT4gIGFjYyArICggYiE9MCA/IDEgOiAwKSAgICwwKTtcbiAgICBjb25zdCBhdGVOQ29lZnMgPSBhdGVOQWRkQ29lZnMgKyBhdGVORGJsQ29lZnMgKyAxO1xuICAgIGNvbnN0IHByZVBTaXplID0gMyoyKm44cTtcbiAgICBjb25zdCBwcmVRU2l6ZSA9IDMqbjhxKjIgKyBhdGVOQ29lZnMqYXRlQ29lZlNpemU7XG4gICAgY29uc3QgZmluYWxFeHBJc05lZ2F0aXZlID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZpbmFsRXhwWiA9IDE1MTMyMzc2MjIyOTQxNjQyNzUybjtcblxuXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0cTogbjY0cSxcbiAgICAgICAgbjY0cjogbjY0cixcbiAgICAgICAgbjhxOiBuOHEsXG4gICAgICAgIG44cjogbjhyLFxuICAgICAgICBwRzFnZW46IHBHMWdlbixcbiAgICAgICAgcEcxemVybzogcEcxemVybyxcbiAgICAgICAgcEcxYjogcEcxYixcbiAgICAgICAgcEcyZ2VuOiBwRzJnZW4sXG4gICAgICAgIHBHMnplcm86IHBHMnplcm8sXG4gICAgICAgIHBHMmI6IHBHMmIsXG4gICAgICAgIHBxOiBtb2R1bGUubW9kdWxlc1tcImYxbVwiXS5wcSxcbiAgICAgICAgcHI6IHByLFxuICAgICAgICBwT25lVDogcE9uZVQsXG4gICAgICAgIHI6IHIsXG4gICAgICAgIHE6IHEsXG4gICAgICAgIHByZVBTaXplOiBwcmVQU2l6ZSxcbiAgICAgICAgcHJlUVNpemU6IHByZVFTaXplXG4gICAgfTtcblxuXG4gICAgZnVuY3Rpb24gbmFmKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDIgLSBOdW1iZXIoRSAlIDRuKTtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggeiApO1xuICAgICAgICAgICAgICAgIEUgPSBFIC0gQmlnSW50KHopO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRSA9IEUgPj4gMW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiaXRzKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDEgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEUgPSBFID4+IDFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBjLmdldExvY2FsKFwicFBcIiksIGMuZ2V0TG9jYWwoXCJwcHJlUFwiKSksICAvLyBUT0RPIFJlbW92ZSBpZiBhbHJlYWR5IGluIGFmZmluZVxuICAgICAgICApO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBEb3VibGVTdGVwKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcERibFN0ZXBcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJSXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFJ4ICA9IGMuZ2V0TG9jYWwoXCJSXCIpO1xuICAgICAgICBjb25zdCBSeSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlJcIiksIGMuaTMyX2NvbnN0KDIqbjhxKSk7XG4gICAgICAgIGNvbnN0IFJ6ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiUlwiKSwgYy5pMzJfY29uc3QoNCpuOHEpKTtcblxuICAgICAgICBjb25zdCB0MCAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgdDMgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKm44cSkpO1xuICAgICAgICBjb25zdCB0NiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDQqbjhxKSk7XG5cblxuICAgICAgICBjb25zdCB6c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyB0bXAwID0gci54LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeCwgdDApLFxuXG4gICAgICAgICAgICAvLyB0bXAxID0gci55LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0bXAyID0gdG1wMS5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDEsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9ICh0bXAxICsgci54KS5zcXVhcmUoKSAtIHRtcDAgLSB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgUngsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDMsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDMsIHQwLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQzLCB0MiwgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXAzID0gdG1wMyArIHRtcDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXA0ID0gdG1wMCArIHRtcDAgKyB0bXAwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MCwgdDAsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHQwLCB0NCksXG5cbiAgICAgICAgICAgIC8vIHRtcDYgPSByLnggKyB0bXA0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBSeCwgdDQsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdG1wNSA9IHRtcDQuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQ0LCB0NSksXG5cbiAgICAgICAgICAgIC8vIHpzcXVhcmVkID0gci56LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgenNxdWFyZWQpLFxuXG4gICAgICAgICAgICAvLyByLnggPSB0bXA1IC0gdG1wMyAtIHRtcDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ1LCB0MywgUngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeCwgdDMsIFJ4KSxcblxuICAgICAgICAgICAgLy8gci56ID0gKHIueiArIHIueSkuc3F1YXJlKCkgLSB0bXAxIC0genNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFJ6LCBSeSwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeiwgdDEsIFJ6KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUnosIHpzcXVhcmVkLCBSeiksXG5cbiAgICAgICAgICAgIC8vIHIueSA9ICh0bXAzIC0gci54KSAqIHRtcDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQzLCBSeCwgUnkpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBSeSwgdDQsIFJ5KSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gci55IC09IHRtcDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ5LCB0MiwgUnkpLFxuXG4gICAgICAgICAgICAvLyB0bXAzID0gdG1wNCAqIHpzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NCwgenNxdWFyZWQsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IHRtcDMgKyB0bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgdDMsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IC10bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXA2ID0gdG1wNi5zcXVhcmUoKSAtIHRtcDAgLSB0bXA1O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0NiwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NiwgdDAsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDYsIHQ1LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHRtcDEgPSB0bXAxICsgdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHRtcDEgPSB0bXAxICsgdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHRtcDYgPSB0bXA2IC0gdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDYsIHQxLCB0NiksXG5cbiAgICAgICAgICAgIC8vIHRtcDAgPSByLnogKiB6c3F1YXJlZDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgUnosIHpzcXVhcmVkLCB0MCksXG5cbiAgICAgICAgICAgIC8vIHRtcDAgPSB0bXAwICsgdG1wMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHQwLCB0MCksXG5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBBZGRTdGVwKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcEFkZFN0ZXBcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJSXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBSeCAgPSBjLmdldExvY2FsKFwiUlwiKTtcbiAgICAgICAgY29uc3QgUnkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJSXCIpLCBjLmkzMl9jb25zdCgyKm44cSkpO1xuICAgICAgICBjb25zdCBSeiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlJcIiksIGMuaTMyX2NvbnN0KDQqbjhxKSk7XG5cbiAgICAgICAgY29uc3QgUXggID0gYy5nZXRMb2NhbChcIlFcIik7XG4gICAgICAgIGNvbnN0IFF5ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiUVwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcblxuICAgICAgICBjb25zdCB0MTAgID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHQxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcbiAgICAgICAgY29uc3QgdDkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0Km44cSkpO1xuXG4gICAgICAgIGNvbnN0IHpzcXVhcmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB5c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgenRzcXVhcmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ2ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyB6c3F1YXJlZCA9IHIuei5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnosIHpzcXVhcmVkKSxcblxuICAgICAgICAgICAgLy8geXNxdWFyZWQgPSBxLnkuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFF5LCB5c3F1YXJlZCksXG5cbiAgICAgICAgICAgIC8vIHQwID0genNxdWFyZWQgKiBxLng7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHpzcXVhcmVkLCBReCwgdDApLFxuXG4gICAgICAgICAgICAvLyB0MSA9ICgocS55ICsgci56KS5zcXVhcmUoKSAtIHlzcXVhcmVkIC0genNxdWFyZWQpICogenNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFF5LCBSeiwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0MSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MSwgeXNxdWFyZWQsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIHpzcXVhcmVkLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQxLCB6c3F1YXJlZCwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MiA9IHQwIC0gci54O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MCwgUngsIHQyKSxcblxuICAgICAgICAgICAgLy8gdDMgPSB0Mi5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDIsIHQzKSxcblxuICAgICAgICAgICAgLy8gdDQgPSB0MyArIHQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgdDMsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDQgPSB0NCArIHQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0NCwgdDQsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDUgPSB0NCAqIHQyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NCwgdDIsIHQ1KSxcblxuICAgICAgICAgICAgLy8gdDYgPSB0MSAtIHIueSAtIHIueTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIFJ5LCB0NiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ2LCBSeSwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0OSA9IHQ2ICogcS54O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NiwgUXgsIHQ5KSxcblxuICAgICAgICAgICAgLy8gdDcgPSB0NCAqIHIueDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIFJ4LCB0NyksXG5cbiAgICAgICAgICAgIC8vIHIueCA9IHQ2LnNxdWFyZSgpIC0gdDUgLSB0NyAtIHQ3O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0NiwgUngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeCwgdDUsIFJ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUngsIHQ3LCBSeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ4LCB0NywgUngpLFxuXG4gICAgICAgICAgICAvLyByLnogPSAoci56ICsgdDIpLnNxdWFyZSgpIC0genNxdWFyZWQgLSB0MztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUnosIHQyLCBSeiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFJ6LCBSeiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ6LCB6c3F1YXJlZCwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeiwgdDMsIFJ6KSxcblxuICAgICAgICAgICAgLy8gdDEwID0gcS55ICsgci56O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBReSwgUnosIHQxMCksXG5cbiAgICAgICAgICAgIC8vIHQ4ID0gKHQ3IC0gci54KSAqIHQ2O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NywgUngsIHQ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDgsIHQ2LCB0OCksXG5cbiAgICAgICAgICAgIC8vIHQwID0gci55ICogdDU7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFJ5LCB0NSwgdDApLFxuXG4gICAgICAgICAgICAvLyB0MCA9IHQwICsgdDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQwLCB0MCwgdDApLFxuXG4gICAgICAgICAgICAvLyByLnkgPSB0OCAtIHQwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0OCwgdDAsIFJ5KSxcblxuICAgICAgICAgICAgLy8gdDEwID0gdDEwLnNxdWFyZSgpIC0geXNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQxMCwgdDEwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEwLCB5c3F1YXJlZCwgdDEwKSxcblxuICAgICAgICAgICAgLy8genRzcXVhcmVkID0gci56LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgenRzcXVhcmVkKSxcblxuICAgICAgICAgICAgLy8gdDEwID0gdDEwIC0genRzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MTAsIHp0c3F1YXJlZCwgdDEwKSxcblxuICAgICAgICAgICAgLy8gdDkgPSB0OSArIHQ5IC0gdDEwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0OSwgdDksIHQ5KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDksIHQxMCwgdDkpLFxuXG4gICAgICAgICAgICAvLyB0MTAgPSByLnogKyByLno7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFJ6LCBSeiwgdDEwKSxcblxuICAgICAgICAgICAgLy8gdDYgPSAtdDY7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIHQ2LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQxID0gdDYgKyB0NjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDYsIHQ2LCB0MSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBhcmVHMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBhcmVHMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQ29lZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuXG4gICAgICAgIGNvbnN0IFEgPSBjLmdldExvY2FsKFwicFFcIik7XG5cbiAgICAgICAgY29uc3QgcFIgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QocFIpO1xuXG4gICAgICAgIGNvbnN0IGJhc2UgPSBjLmdldExvY2FsKFwicHByZVFcIik7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBRLCBiYXNlKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX2lzWmVyb1wiLCBiYXNlKSxcbiAgICAgICAgICAgICAgICBjLnJldChbXSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfY29weVwiLCBiYXNlLCBSKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChhdGVMb29wQml0Qnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3ByZXBEYmxTdGVwXCIsIFIsIGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfcyhjLmdldExvY2FsKFwiaVwiKSwgcEF0ZUxvb3BCaXRCeXRlcyksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9wcmVwQWRkU3RlcFwiLCBSLCBiYXNlLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGNk11bDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjZtUHJlZml4KyBcIl9tdWwxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7ICAgIC8vIEY2XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQV9jMCA9IGMuZ2V0TG9jYWwoXCJwQVwiKTtcbiAgICAgICAgY29uc3QgQV9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEFcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFfYzIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGMxICA9IGMuZ2V0TG9jYWwoXCJwQzFcIik7XG5cbiAgICAgICAgY29uc3QgdDEgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgYl9iID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjQpKTtcblxuICAgICAgICBjb25zdCBBYzBfQWMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFjMV9BYzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQV9jMCwgQV9jMSwgQWMwX0FjMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzIsIEFjMV9BYzIpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYl9iID0gc2VsZi5jMSAqIGMxO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBX2MxLCBjMSwgYl9iKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gKHNlbGYuYzEgKyBzZWxmLmMyKSAqIGMxIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzFfQWMyLCBjMSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MSwgYl9iLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MSA9IHQxLm11bF9ieV9ub25yZXNpZHVlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdDEsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQyID0gKHNlbGYuYzAgKyBzZWxmLmMxKSAqIGMxIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzBfQWMxLCBjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgYl9iLCB0MiksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjZNdWwxKCk7XG5cbiAgICBmdW5jdGlvbiBidWlsZEY2TXVsMDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjZtUHJlZml4KyBcIl9tdWwwMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMwXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQV9jMCA9IGMuZ2V0TG9jYWwoXCJwQVwiKTtcbiAgICAgICAgY29uc3QgQV9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEFcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFfYzIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGMwICA9IGMuZ2V0TG9jYWwoXCJwQzBcIik7XG4gICAgICAgIGNvbnN0IGMxICA9IGMuZ2V0TG9jYWwoXCJwQzFcIik7XG5cbiAgICAgICAgY29uc3QgdDEgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGFfYSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBiX2IgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgQWMwX0FjMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBBYzBfQWMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gbGV0IGFfYSA9IHNlbGYuYzAgKiBjMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQV9jMCwgYzAsIGFfYSksXG5cbiAgICAgICAgICAgIC8vIGxldCBiX2IgPSBzZWxmLmMxICogYzE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFfYzEsIGMxLCBiX2IpLFxuXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQV9jMCwgQV9jMSwgQWMwX0FjMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzAsIEFfYzIsIEFjMF9BYzIpLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDEgPSAoc2VsZi5jMSArIHNlbGYuYzIpICogYzEgLSBiX2I7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzIsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIGMxLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQxLCBiX2IsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gdDEubXVsX2J5X25vbnJlc2lkdWUoKSArIGFfYTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB0MSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgYV9hLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MiA9IChjMCArIGMxKSAqIChzZWxmLmMwICsgc2VsZi5jMSkgLSBhX2EgLSBiX2I7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIGMwLCBjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MiwgQWMwX0FjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgYV9hLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQyLCBiX2IsIHQyKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQzID0gKHNlbGYuYzAgKyBzZWxmLmMyKSAqIGMwIC0gYV9hICsgYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzBfQWMyLCBjMCwgdDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MywgYV9hLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCBiX2IsIHQzKSxcblxuXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjZNdWwwMSgpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEYxMk11bDAxNCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZ0bVByZWZpeCsgXCJfbXVsMDE0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7ICAgIC8vIEYxMlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMwXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBDNFwiLCBcImkzMlwiKTsgICAvLyBGMlxuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7ICAgIC8vIEYxMlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cblxuICAgICAgICBjb25zdCBBX2MwID0gYy5nZXRMb2NhbChcInBBXCIpO1xuICAgICAgICBjb25zdCBBX2MxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQVwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjYpKTtcblxuICAgICAgICBjb25zdCBjMCAgPSBjLmdldExvY2FsKFwicEMwXCIpO1xuICAgICAgICBjb25zdCBjMSAgPSBjLmdldExvY2FsKFwicEMxXCIpO1xuICAgICAgICBjb25zdCBjNCAgPSBjLmdldExvY2FsKFwicEM0XCIpO1xuXG4gICAgICAgIGNvbnN0IGFhID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSo2KSk7XG4gICAgICAgIGNvbnN0IGJiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSo2KSk7XG4gICAgICAgIGNvbnN0IG8gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBjb25zdCBSX2MwID0gYy5nZXRMb2NhbChcInBSXCIpO1xuICAgICAgICBjb25zdCBSX2MxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjYpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBsZXQgYWEgPSBzZWxmLmMwLm11bF9ieV8wMShjMCwgYzEpO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX211bDAxXCIsIEFfYzAsIGMwLCBjMSwgYWEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYmIgPSBzZWxmLmMxLm11bF9ieV8xKGM0KTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWwxXCIsIEFfYzEsIGM0LCBiYiksXG5cbiAgICAgICAgICAgIC8vIGxldCBvID0gYzEgKyBjNDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgYzEsIGM0LCBvKSxcblxuICAgICAgICAgICAgLy8gbGV0IGMxID0gc2VsZi5jMSArIHNlbGYuYzA7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzAsIFJfYzEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzEgPSBjMS5tdWxfYnlfMDEoYzAsICZvKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWwwMVwiLCBSX2MxLCBjMCwgbywgUl9jMSksXG5cbiAgICAgICAgICAgIC8vIGxldCBjMSA9IGMxIC0gYWEgLSBiYjtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9zdWJcIiwgUl9jMSwgYWEsIFJfYzEpLFxuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX3N1YlwiLCBSX2MxLCBiYiwgUl9jMSksXG5cbiAgICAgICAgICAgIC8vIGxldCBjMCA9IGJiO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX2NvcHlcIiwgYmIsIFJfYzApLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzAgPSBjMC5tdWxfYnlfbm9ucmVzaWR1ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX211bE5SXCIsIFJfYzAsIFJfYzApLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzAgPSBjMCArIGFhO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX2FkZFwiLCBSX2MwLCBhYSwgUl9jMCksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjEyTXVsMDE0KCk7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRUxMKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZWxsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFB4ICA9IGMuZ2V0TG9jYWwoXCJwUFwiKTtcbiAgICAgICAgY29uc3QgUHkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUFwiKSwgYy5pMzJfY29uc3QobjhxKSk7XG5cbiAgICAgICAgY29uc3QgRiAgPSBjLmdldExvY2FsKFwicEZcIik7XG5cbiAgICAgICAgY29uc3QgY29lZjBfMCAgPSBjLmdldExvY2FsKFwicENvZWZzXCIpO1xuICAgICAgICBjb25zdCBjb2VmMF8xICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZzXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcbiAgICAgICAgY29uc3QgY29lZjFfMCAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2Vmc1wiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgY29lZjFfMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2Vmc1wiKSwgYy5pMzJfY29uc3QoZjFzaXplKjMpKTtcbiAgICAgICAgY29uc3QgY29lZjIgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZnNcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSo0KSk7XG5cbiAgICAgICAgY29uc3QgcGMwID0gbW9kdWxlLmFsbG9jKGYxc2l6ZSoyKTtcbiAgICAgICAgY29uc3QgYzAgID0gYy5pMzJfY29uc3QocGMwKTtcbiAgICAgICAgY29uc3QgYzBfYzAgPSBjLmkzMl9jb25zdChwYzApO1xuICAgICAgICBjb25zdCBjMF9jMSA9IGMuaTMyX2NvbnN0KHBjMCtmMXNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBjMSA9IG1vZHVsZS5hbGxvYyhmMXNpemUqMik7XG4gICAgICAgIGNvbnN0IGMxICA9IGMuaTMyX2NvbnN0KHBjMSk7XG4gICAgICAgIGNvbnN0IGMxX2MwID0gYy5pMzJfY29uc3QocGMxKTtcbiAgICAgICAgY29uc3QgYzFfYzEgPSBjLmkzMl9jb25zdChwYzErZjFzaXplKTtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gICAgIGxldCBtdXQgYzAgPSBjb2VmZnMuMDtcbiAgICAgICAgICAgIC8vICAgICBsZXQgbXV0IGMxID0gY29lZmZzLjE7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gICAgYzAuYzAgKj0gcC55O1xuICAgICAgICAgICAgLy8gICAgYzAuYzEgKj0gcC55O1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgIGMxLmMwICo9IHAueDtcbiAgICAgICAgICAgIC8vICAgIGMxLmMxICo9IHAueDtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAgICAgZi5tdWxfYnlfMDE0KCZjb2VmZnMuMiwgJmMxLCAmYzApXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjBfMCwgUHksIGMwX2MwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjBfMSwgUHksIGMwX2MxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjFfMCwgUHgsIGMxX2MwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjFfMSwgUHgsIGMxX2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bDAxNFwiLCBGLCBjb2VmMiwgYzEsIGMwLCBGKSxcblxuICAgICAgICApO1xuXG4gICAgfVxuICAgIGJ1aWxkRUxMKCk7XG5cbiAgICBmdW5jdGlvbiBidWlsZE1pbGxlckxvb3AoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9taWxsZXJMb29wXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcHJlUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQ29lZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwcmVQID0gYy5nZXRMb2NhbChcInBwcmVQXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvZWZzICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcblxuICAgICAgICBjb25zdCBGID0gYy5nZXRMb2NhbChcInJcIik7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIEYpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgcHJlUCksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2VsbFwiLCBwcmVQLCBjb2VmcywgIEYpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZWxsXCIsIHByZVAsIGNvZWZzLCAgRiksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRiwgRiksXG5cbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9lbGxcIiwgcHJlUCwgY29lZnMsICBGKSxcblxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWYgKGlzTG9vcE5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBGLCBGKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvYmVuaXVzTWFwKG4pIHtcbiAgICAgICAgY29uc3QgRjEyID0gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzg1MDc1NDM3MDAzNzE2OTAxMTk1MjE0NzA3NjA1MTM2NDA1NzE1ODgwNzQyMDk3MDY4MjQzODY3NjA1MDUyMjYxMzYyODQyMzIxOTYzNzcyNTA3MjE4MjY5NzExMzA2Mjc3Nzg5MTU4OTUwNjQyNDc2MG4sIDE1MTY1NTE4NTE4NDQ5ODM4MTQ2NTY0Mjc0OTY4NDU0MDA5OTM5ODA3NTM5ODk2ODMyNTQ0NjY1NjAwNzYxMzUxMDQwMzIyNzI3MTIwMDEzOTM3MDUwNDkzMjAxNTk1Mjg4NjE0NjMwNDc2NjEzNTAyN25dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzI5NzM2Nzc0MDg5ODY1NjEwNDM0NDI0NjUzNDY1MjAxMDg4NzkxNzIwNDI4ODMwMDkyNDk5ODkxNzY0MTUwMTgwOTE0MjA4MDcxOTIxODI2Mzg1NjcxMTYzMTg1NzY0NzI2NDkzNDcwMTU5MTc2OTA1MzBuLCAxMDI4NzMyMTQ2MjM1MTA2MzQ5OTc1MzI0NDc5MjE1Nzk1Mjc3Mzg0ODM5OTM2OTI5NzU3ODk2MTU1NjQzMTE4MDMyNjEwODQzMjk4NjU1MjI1ODc1NTcxMzEwNTUyNTQzMDE0NjkwODc4MzU0ODY5MjU3bl0sXG4gICAgICAgICAgICAgICAgWzc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzEyNTMzMjU5NDE3MTA1OTQyNDkwODEwODA5NjIwNDY0ODk3ODU3MDExODI4MTk3NzU3NTQzNTgzMjQyMjYzMTYwMTgyNDAzNDQ2MzM4Mjc3NzkzNzYyMTI1MDU5MjQyNTUzNTQ5MzMyMDY4MzgyNTU1N24sIDg3NzA3Njk2MTA1MDYwNzk2ODUwOTY4MTcyOTUzMTI1NTE3Nzk4Njc2NDUzNzk2MTQzMjQ0OTQ5OTYzNTUwNDUyMjIwNzYxNjAyNzQ1NTA4NjUwNTA2NjM3ODUzNjU5MDEyODU0NDU3MzU4ODczNDIzMG5dLFxuICAgICAgICAgICAgICAgIFs0MDAyNDA5NTU1MjIxNjY3MzkzNDE3Nzg5ODI1NzM1OTA0MTU2NTU2ODgyODE5OTM5MDA3ODg1MzMyMDU4MTM2MTI0MDMxNjUwNDkwODM3ODY0NDQyNjg3NjI5MTI5MDE1NjY0MDM3ODk0MjcyNTU5Nzg2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxNTE2NTUxODUxODQ0OTgzODE0NjU2NDI3NDk2ODQ1NDAwOTkzOTgwNzUzOTg5NjgzMjU0NDY2NTYwMDc2MTM1MTA0MDMyMjcyNzEyMDAxMzkzNzA1MDQ5MzIwMTU5NTI4ODYxNDYzMDQ3NjYxMzUwMjduLCAzODUwNzU0MzcwMDM3MTY5MDExOTUyMTQ3MDc2MDUxMzY0MDU3MTU4ODA3NDIwOTcwNjgyNDM4Njc2MDUwNTIyNjEzNjI4NDIzMjE5NjM3NzI1MDcyMTgyNjk3MTEzMDYyNzc3ODkxNTg5NTA2NDI0NzYwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzEwMjg3MzIxNDYyMzUxMDYzNDk5NzUzMjQ0NzkyMTU3OTUyNzczODQ4Mzk5MzY5Mjk3NTc4OTYxNTU2NDMxMTgwMzI2MTA4NDMyOTg2NTUyMjU4NzU1NzEzMTA1NTI1NDMwMTQ2OTA4NzgzNTQ4NjkyNTduLCAyOTczNjc3NDA4OTg2NTYxMDQzNDQyNDY1MzQ2NTIwMTA4ODc5MTcyMDQyODgzMDA5MjQ5OTg5MTc2NDE1MDE4MDkxNDIwODA3MTkyMTgyNjM4NTY3MTE2MzE4NTc2NDcyNjQ5MzQ3MDE1OTE3NjkwNTMwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzg3NzA3Njk2MTA1MDYwNzk2ODUwOTY4MTcyOTUzMTI1NTE3Nzk4Njc2NDUzNzk2MTQzMjQ0OTQ5OTYzNTUwNDUyMjIwNzYxNjAyNzQ1NTA4NjUwNTA2NjM3ODUzNjU5MDEyODU0NDU3MzU4ODczNDIzMG4sIDMxMjUzMzI1OTQxNzEwNTk0MjQ5MDgxMDgwOTYyMDQ2NDg5Nzg1NzAxMTgyODE5Nzc1NzU0MzU4MzI0MjI2MzE2MDE4MjQwMzQ0NjMzODI3Nzc5Mzc2MjEyNTA1OTI0MjU1MzU0OTMzMjA2ODM4MjU1NTduXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBGNiA9IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzBuLCA0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM2bl0sXG4gICAgICAgICAgICAgICAgWzc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMG4sIDFuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMG4sIDc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzN24sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MzQxNzc4OTgyNTczNTkwNDE1NjU1Njg4MjgxOTkzOTAwNzg4NTMzMjA1ODEzNjEyNDAzMTY1MDQ5MDgzNzg2NDQ0MjY4NzYyOTEyOTAxNTY2NDAzNzg5NDI3MjU1OTc4Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUwbiwgMG5dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTFuLCAwbl0sXG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXBcIituKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgWCA9IChpPT0wKSA/IGMuZ2V0TG9jYWwoXCJ4XCIpIDogYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgWGMwID0gWDtcbiAgICAgICAgICAgIGNvbnN0IFhjMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUgKyBmMXNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFIgPSAoaT09MCkgPyBjLmdldExvY2FsKFwiclwiKSA6IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFJjMCA9IFI7XG4gICAgICAgICAgICBjb25zdCBSYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplICsgZjFzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gbXVsMihGMTJbTWF0aC5mbG9vcihpLzMpXVtuJTEyXSAsIEY2W2klM11bbiU2XSk7XG4gICAgICAgICAgICBjb25zdCBwQ29lZiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KGNvZWZbMF0pLCBuOHEpLFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShjb2VmWzFdKSwgbjhxKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgaWYgKG4lMiA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBYYzAsIFJjMCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9uZWdcIiwgWGMxLCBSYzEpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUiksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWCwgYy5pMzJfY29uc3QocENvZWYpLCBSKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWwyKGEsIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjMCA9IGFbMF07XG4gICAgICAgICAgICBjb25zdCBhYzEgPSBhWzFdO1xuICAgICAgICAgICAgY29uc3QgYmMwID0gYlswXTtcbiAgICAgICAgICAgIGNvbnN0IGJjMSA9IGJbMV07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMCAtIChhYzEgKiBiYzEpKSAlIHEsXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMSArIChhYzEgKiBiYzApKSAlIHEsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUocmVzWzBdKSkgcmVzWzBdID0gcmVzWzBdICsgcTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHg0ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgzKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoNCpmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDUgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDUqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjQgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDMqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0KmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByNSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoNSpmMnNpemUpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vICAgIC8vIHQwICsgdDEqeSA9ICh6MCArIHoxKnkpXjIgPSBhXjJcbiAgICAgICAgICAgIC8vICAgIHRtcCA9IHowICogejE7XG4gICAgICAgICAgICAvLyAgICB0MCA9ICh6MCArIHoxKSAqICh6MCArIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB6MSkgLSB0bXAgLSBteV9GcDY6Om5vbl9yZXNpZHVlICogdG1wO1xuICAgICAgICAgICAgLy8gICAgdDEgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB4MSwgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB4MSwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MCwgdDAsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgxLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBVVgsIHQwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIEFVWCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDEpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDIgKyB0Myp5ID0gKHoyICsgejMqeSleMiA9IGJeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHoyICogejM7XG4gICAgICAgICAgICAvLyAgdDIgPSAoejIgKyB6MykgKiAoejIgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejMpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0MyA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDIsIHgzLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHgzLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MiwgeDMsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB0bXAsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgQVVYLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgdG1wLCB0MyksXG5cbiAgICAgICAgICAgIC8vICAvLyB0NCArIHQ1KnkgPSAoejQgKyB6NSp5KV4yID0gY14yXG4gICAgICAgICAgICAvLyAgdG1wID0gejQgKiB6NTtcbiAgICAgICAgICAgIC8vICB0NCA9ICh6NCArIHo1KSAqICh6NCArIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB6NSkgLSB0bXAgLSBteV9GcDY6Om5vbl9yZXNpZHVlICogdG1wO1xuICAgICAgICAgICAgLy8gIHQ1ID0gdG1wICsgdG1wO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4NCwgeDUsIHRtcCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgeDUsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDQsIHQ0LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB4NSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCBBVVgsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQ1KSxcblxuICAgICAgICAgICAgLy8gRm9yIEFcbiAgICAgICAgICAgIC8vIHowID0gMyAqIHQwIC0gMiAqIHowXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQwLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMCwgcjAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHIwLCByMCksXG4gICAgICAgICAgICAvLyB6MSA9IDMgKiB0MSArIDIgKiB6MVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjEsIHIxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCByMSwgcjEpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQlxuICAgICAgICAgICAgLy8gejIgPSAzICogKHhpICogdDUpICsgMiAqIHoyXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQ1LCBjLmkzMl9jb25zdChwQmxzMTIzODFUd2lzdCksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgeDIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjIsIHIyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgcjIsIHIyKSxcbiAgICAgICAgICAgIC8vIHozID0gMyAqIHQ0IC0gMiAqIHozXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCB4MywgcjMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMywgcjMsIHIzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHIzLCByMyksXG5cbiAgICAgICAgICAgIC8vIEZvciBDXG4gICAgICAgICAgICAvLyB6NCA9IDMgKiB0MiAtIDIgKiB6NFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgeDQsIHI0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjQsIHI0LCByNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQyLCByNCwgcjQpLFxuICAgICAgICAgICAgLy8gejUgPSAzICogdDMgKyAyICogejVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHg1LCByNSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHI1LCByNSwgcjUpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgcjUsIHI1KSxcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljRXhwKGV4cG9uZW50LCBpc0V4cE5lZ2F0aXZlLCBmbk5hbWUpIHtcbiAgICAgICAgY29uc3QgZXhwb25lbnROYWZCeXRlcyA9IG5hZihleHBvbmVudCkubWFwKCAoYikgPT4gKGI9PS0xID8gMHhGRjogYikgKTtcbiAgICAgICAgY29uc3QgcEV4cG9uZW50TmFmQnl0ZXMgPSBtb2R1bGUuYWxsb2MoZXhwb25lbnROYWZCeXRlcyk7XG4gICAgICAgIC8vIGNvbnN0IHBFeHBvbmVudCA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRShleHBvbmVudCwgbjgpKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNFeHBfXCIrZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwieFwiKTtcblxuICAgICAgICBjb25zdCByZXMgPSBjLmdldExvY2FsKFwiclwiKTtcblxuICAgICAgICBjb25zdCBpbnZlcnNlID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCBpbnZlcnNlKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9vbmVcIiwgcmVzKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLnRlZUxvY2FsKFwiYml0XCIsIGMuaTMyX2xvYWQ4X3MoYy5pMzJfY29uc3QoZXhwb25lbnROYWZCeXRlcy5sZW5ndGgtMSksIHBFeHBvbmVudE5hZkJ5dGVzKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIHgsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCByZXMsIHJlcyksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIGludmVyc2UsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzRXhwTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHJlcywgcmVzKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbigpIHtcbiAgICAgICAgYnVpbGRDeWNsb3RvbWljU3F1YXJlKCk7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY0V4cChmaW5hbEV4cFosIGZpbmFsRXhwSXNOZWdhdGl2ZSwgXCJ3MFwiKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgZWx0ID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0NiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDAgPSBmLmZyb2Jlbml1c19tYXAoNilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXA2XCIsIGVsdCwgdDApLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDEgPSBmLmludmVydCgpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBlbHQsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0MiA9IHQwICogdDE7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQwLCB0MSwgdDIpLFxuXG4gICAgICAgICAgICAvLyB0MSA9IHQyLmNsb25lKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29weVwiLCB0MiwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MiA9IHQyLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwMlwiLCB0MiwgdDIpLFxuXG4gICAgICAgICAgICAvLyB0MiAqPSB0MTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDIsIHQxLCB0MiksXG5cblxuICAgICAgICAgICAgLy8gdDEgPSBjeWNsb3RvbWljX3NxdWFyZSh0MikuY29uanVnYXRlKCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgdDIsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgdDEsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0MyA9IGN5Y29sb3RvbWljX2V4cCh0Mik7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDIsIHQzKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0NCA9IGN5Y2xvdG9taWNfc3F1YXJlKHQzKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCB0MywgdDQpLFxuXG4gICAgICAgICAgICAvLyBsZXQgbXV0IHQ1ID0gdDEgKiB0MztcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQzLCB0NSksXG5cbiAgICAgICAgICAgIC8vIHQxID0gY3ljb2xvdG9taWNfZXhwKHQ1KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiLCB0NSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MCA9IGN5Y29sb3RvbWljX2V4cCh0MSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDEsIHQwKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0NiA9IGN5Y29sb3RvbWljX2V4cCh0MCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDAsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDYgKj0gdDQ7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ2LCB0NCwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0NCA9IGN5Y29sb3RvbWljX2V4cCh0Nik7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDYsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDUgPSB0NS5jb25qdWdhdGUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgdDUsIHQ1KSxcblxuICAgICAgICAgICAgLy8gdDQgKj0gdDUgKiB0MjtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIHQ1LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ0LCB0MiwgdDQpLFxuXG4gICAgICAgICAgICAvLyB0NSA9IHQyLmNvbmp1Z2F0ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB0MiwgdDUpLFxuXG4gICAgICAgICAgICAvLyB0MSAqPSB0MjtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQyLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHQxID0gdDEuZnJvYmVuaXVzX21hcCgpLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwM1wiLCB0MSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0NiAqPSB0NTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDYsIHQ1LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQ2ID0gdDYuZnJvYmVuaXVzX21hcCgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Zyb2Jlbml1c01hcDFcIiwgdDYsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDMgKj0gdDA7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQzLCB0MCwgdDMpLFxuXG4gICAgICAgICAgICAvLyB0MyA9IHQzLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwMlwiLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0MyAqPSB0MTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDMsIHQxLCB0MyksXG5cbiAgICAgICAgICAgIC8vIHQzICo9IHQ2O1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0MywgdDYsIHQzKSxcblxuICAgICAgICAgICAgLy8gZiA9IHQzICogdDQ7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQzLCB0NCwgcmVzKSxcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvbk9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGV4cG9uZW50ID0gMzIyMjc3MzYxNTE2OTM0MTQwNDYyODkxNTY0NTg2NTEwMTM5OTA4Mzc5OTY5NTE0ODI4NDk0MjE4MzY2Njg4MDI1Mjg4NjYxMDQxMTA0NjgyNzk0OTk4NjgwNDk3NTgwMDA4ODk5OTczMjQ5ODE0MTA0NDQ3NjkyNzc4OTg4MjA4Mzc2Nzc5NTczODE5NDg1MjYzMDI2MTU5NTg4NTEwNTEzODM0ODc2MzAzMDE0MDE2Nzk4ODA5OTE5MzQzNTMyODk5MTY0ODQ4NzMwMjgwOTQyNjA5OTU2NjcwOTE3NTY1NjE4MTE1ODY3Mjg3Mzk5NjIzMjg2ODEzMjcwMzU3OTAxNzMxNTEwMTg4MTQ5OTM0MzYzMzYwMzgxNjE0NTAxMzM0MDg2ODI1NDQyMjcxOTIwMDc5MzYzMjg5OTU0NTEwNTY1Mzc1Mzc4NDQzNzA0MzcyOTk0ODgxNDA2Nzk3ODgyNjc2OTcxMDgyMjAwNjI2NTQxOTE2NDEzMTg0NjQyNTIwMjY5Njc4ODk3NTU5NTMyMjYwOTQ5MzM0NzYwNjA0OTYyMDg2MzQ4ODk4MTE4OTgyMjQ4ODQyNjM0Mzc5NjM3NTk4NjY1NDY4ODE3NzY5MDc1ODc4NTU1NDkzNzUyMjE0NDkyNzkwMTIyNzg1ODUwMjAyOTU3NTc1MjAwMTc2MDg0MjA0NDIyNzUxNDg1OTU3MzM2NDY1NDcyMzI0ODEwOTgyODMzNjM4NDkwOTA0Mjc5MjgyNjk2MTM0MzIzMDcyNTE1MjIwMDQ0NDUxNTkyNjQ2ODg1NDEwNTcyMjM0NDUxNzMyNzkwNTkwMDEzNDc5MzU4MzQzODQxMjIwMDc0MTc0ODQ4MjIxNzIyMDE3MDgzNTk3ODcyMDE3NjM4NTE0MTAzMTc0MTIyNzg0ODQzOTI1NTc4MzcwNDMwODQzNTIyOTU5NjAwMDk1Njc2Mjg1NzIzNzM3MDQ5NDM4MzQ2NTQ0NzUzMTY4OTEyOTc0OTc2NzkxNTI4NTM1Mjc2MzE3MjU2OTA0MzM2NTIwMTc5MjgxMTQ1Mzk0Njg2NTY1MDUwNDE5MjUwNjE0MTA3ODAzMjMzMzE0NjU4ODI1NDYzMTE3OTAwMjUwNzAxMTk5MTgxNTI5MjA1OTQyMzYzMTU5MzI1NzY1OTkxODE5NDMzOTE0MzAzOTA4ODYwNDYwNzIwNTgxNDA4MjAxMzczMTY0MDQ3NzczNzk0ODI1NDExMDExOTIyMzA1ODIwMDY1NjExMTIxNTQ0NTYxODA4NDE0MDU1MzAyMjEyMDU3NDcxMzk1NzE5NDMyMDcyMjA5MjQ1NjAwMjU4MTM0MzY0NTg0NjM2ODEwMDkzNTIwMjg1NzExMDcyNTc4NzIxNDM1NTE3ODg0MTAzNTI2NDgzODMyNzMzMjg5ODAyNDI2MTU3MzAxNTQyNzQ0NDc2NzQwMDA4NDk0NzgwMzYzMzU0MzA1MTE2OTc4ODA1NjIwNjcxNDY3MDcxNDAwNzExMzU4ODM5NTUzMzc1MzQwNzI0ODk5NzM1NDYwNDgwMTQ0NTk5NzgyMDE0OTA2NTg2NTQzODEzMjkyMTU3OTIyMjIwNjQ1MDg5MTkyMTMwMjA5MzM0OTI2NjYxNTg4NzM3MDA3NzY4NTY1ODM4NTE5NDU2NjAxNTYwODA0OTU3OTg1NjY3ODgwMzk1MjIxMDQ5MjQ5ODAzNzUzNTgyNjM3NzA4NTYwbjtcblxuICAgICAgICBjb25zdCBwRXhwb25lbnQgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIGV4cG9uZW50LCA1NDQgKSk7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwRXhwb25lbnQpLCBjLmkzMl9jb25zdCg1NDQpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBwUHJlUCA9IG1vZHVsZS5hbGxvYyhwcmVQU2l6ZSk7XG4gICAgY29uc3QgcFByZVEgPSBtb2R1bGUuYWxsb2MocHJlUVNpemUpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRQYWlyaW5nRXF1YXRpb24oblBhaXJpbmdzKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3BhaXJpbmdFcVwiK25QYWlyaW5ncyk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUGFpcmluZ3M7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRQYXJhbShcInBfXCIraSwgXCJpMzJcIik7XG4gICAgICAgICAgICBmLmFkZFBhcmFtKFwicV9cIitpLCBcImkzMlwiKTtcbiAgICAgICAgfVxuICAgICAgICBmLmFkZFBhcmFtKFwiY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCByZXNUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBhdXhUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIHJlc1QgKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5QYWlyaW5nczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIsIGMuZ2V0TG9jYWwoXCJwX1wiK2kpLCBjLmkzMl9jb25zdChwUHJlUCkgKSk7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMlwiLCBjLmdldExvY2FsKFwicV9cIitpKSwgYy5pMzJfY29uc3QocFByZVEpICkpO1xuXG4gICAgICAgICAgICAvLyBDaGVja3NcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5jYWxsKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYy5pMzJfY29uc3QocFByZVApKSksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChnMm1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIsIGMuaTMyX2NvbnN0KHBQcmVRKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX21pbGxlckxvb3BcIiwgYy5pMzJfY29uc3QocFByZVApLCBjLmkzMl9jb25zdChwUHJlUSksIGF1eFQgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlc1QsIGF1eFQsIHJlc1QgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIiwgcmVzVCwgcmVzVCApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX2VxXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJjXCIpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFBhaXJpbmcoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3BhaXJpbmdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCByZXNUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIsIGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChwUHJlUCkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIsIGMuZ2V0TG9jYWwoXCJxXCIpLCBjLmkzMl9jb25zdChwUHJlUSkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbWlsbGVyTG9vcFwiLCBjLmkzMl9jb25zdChwUHJlUCksIGMuaTMyX2NvbnN0KHBQcmVRKSwgcmVzVCApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJyXCIpICkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkdyb3VwRzIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZzJtUHJlZml4KyBcIl9pbkdyb3VwQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgV0lOViA9IFtcbiAgICAgICAgICAgIDIwMDEyMDQ3Nzc2MTA4MzM2OTY3MDg4OTQ5MTI4Njc5NTIwNzgyNzg0NDE0MDk5Njk1MDM5NDI2NjYwMjkwNjgwNjIwMTU4MjUyNDU0MTg5MzIyMjEzNDM4MTQ1NjQ1MDc4MzIwMTg5NDcxMzYyNzk4OTRuLFxuICAgICAgICAgICAgMjAwMTIwNDc3NzYxMDgzMzY5NjcwODg5NDkxMjg2Nzk1MjA3ODI3ODQ0MTQwOTk2OTUwMzk0MjY2NjAyOTA2ODA2MjAxNTgyNTI0NTQxODkzMjIyMTM0MzgxNDU2NDUwNzgzMjAxODk0NzEzNjI3OTg5M25cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBGUk9CMlggPSA0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM2bjtcbiAgICAgICAgY29uc3QgRlJPQjNZID0gW1xuICAgICAgICAgICAgMjk3MzY3NzQwODk4NjU2MTA0MzQ0MjQ2NTM0NjUyMDEwODg3OTE3MjA0Mjg4MzAwOTI0OTk4OTE3NjQxNTAxODA5MTQyMDgwNzE5MjE4MjYzODU2NzExNjMxODU3NjQ3MjY0OTM0NzAxNTkxNzY5MDUzMG4sXG4gICAgICAgICAgICAyOTczNjc3NDA4OTg2NTYxMDQzNDQyNDY1MzQ2NTIwMTA4ODc5MTcyMDQyODgzMDA5MjQ5OTg5MTc2NDE1MDE4MDkxNDIwODA3MTkyMTgyNjM4NTY3MTE2MzE4NTc2NDcyNjQ5MzQ3MDE1OTE3NjkwNTMwblxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHdJbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KFdJTlZbMF0pLCBuOHEpLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KFdJTlZbMV0pLCBuOHEpLFxuICAgICAgICBdKSk7XG5cbiAgICAgICAgY29uc3QgZnJvYjJYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShGUk9CMlgpLCBuOHEpKSk7XG4gICAgICAgIGNvbnN0IGZyb2IzWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoRlJPQjNZWzBdKSwgbjhxKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShGUk9CM1lbMV0pLCBuOHEpLFxuICAgICAgICBdKSk7XG5cbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRShmaW5hbEV4cFosIDgpKSk7XG5cbiAgICAgICAgY29uc3QgcHggPSBjLmdldExvY2FsKFwicFwiKTtcbiAgICAgICAgY29uc3QgcHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUpKTtcblxuICAgICAgICBjb25zdCB4X3dpbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHlfd2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcGYyID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSoyKTtcbiAgICAgICAgY29uc3QgZjIgPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnggPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnhfYzEgPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnhfYzIgPSBjLmkzMl9jb25zdChwZjIrZjFzaXplKTtcbiAgICAgICAgY29uc3QgZjJ5ID0gYy5pMzJfY29uc3QocGYyK2Yyc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYyeV9jMSA9IGMuaTMyX2NvbnN0KHBmMitmMnNpemUpO1xuICAgICAgICBjb25zdCBmMnlfYzIgPSBjLmkzMl9jb25zdChwZjIrZjJzaXplK2Yxc2l6ZSk7XG4gICAgICAgIGNvbnN0IHBmMyA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMyk7XG4gICAgICAgIGNvbnN0IGYzID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4ID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4X2MxID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4X2MyID0gYy5pMzJfY29uc3QocGYzK2Yxc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYzeSA9IGMuaTMyX2NvbnN0KHBmMytmMnNpemUpO1xuICAgICAgICBjb25zdCBmM3lfYzEgPSBjLmkzMl9jb25zdChwZjMrZjJzaXplKTtcbiAgICAgICAgY29uc3QgZjN5X2MyID0gYy5pMzJfY29uc3QocGYzK2Yyc2l6ZStmMXNpemUpO1xuICAgICAgICBjb25zdCBmM3ogPSBjLmkzMl9jb25zdChwZjMrZjJzaXplKjIpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldCggYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChnMm1QcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwXCIpKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHB4LCB3SW52LCB4X3dpbnYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBweSwgd0ludiwgeV93aW52KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgeF93aW52LCBmcm9iMlgsIGYyeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIHlfd2ludiwgZjJ5KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB4X3dpbnYsIGYzeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHlfd2ludiwgZnJvYjNZLCBmM3kpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYyeF9jMSwgZjJ4X2MyLCBhdXgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBmMnhfYzEsIGYyeF9jMiwgZjJ4X2MyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIGF1eCwgZjJ4X2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBmMnlfYzEsIGYyeV9jMiwgYXV4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjJ5X2MxLCBmMnlfYzIsIGYyeV9jMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBhdXgsIGYyeV9jMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjN4X2MxLCBmM3hfYzIsIGF1eCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYzeF9jMSwgZjN4X2MyLCBmM3hfYzIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgYXV4LCBmM3hfYzEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYzeV9jMiwgZjN5X2MxLCBhdXgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBmM3lfYzEsIGYzeV9jMiwgZjN5X2MyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIGF1eCwgZjN5X2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX29uZVwiLCBmM3opLFxuXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIiwgZjMsIHosIGMuaTMyX2NvbnN0KDgpLCBmMyksXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgZjMsIGYyLCBmMyksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMm1QcmVmaXggKyBcIl9lcU1peGVkXCIsIGYzLCBjLmdldExvY2FsKFwicFwiKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmSW5Hcm91cCA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMm1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuICAgICAgICBmSW5Hcm91cC5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZkluR3JvdXAuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjMiA9IGZJbkdyb3VwLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4MiA9IGMyLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKjIpKTtcblxuICAgICAgICBmSW5Hcm91cC5hZGRDb2RlKFxuICAgICAgICAgICAgYzIuY2FsbChnMm1QcmVmaXggKyBcIl90b0FmZmluZVwiLCBjMi5nZXRMb2NhbChcInBJblwiKSwgYXV4MiksXG5cbiAgICAgICAgICAgIGMyLnJldChcbiAgICAgICAgICAgICAgICBjMi5jYWxsKGcybVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYXV4MiksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEluR3JvdXBHMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMW1QcmVmaXgrIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBCRVRBID0gNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm47XG4gICAgICAgIGNvbnN0IEJFVEEyID0gNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUwbjtcbiAgICAgICAgY29uc3QgWjJNMUQzID0gKGZpbmFsRXhwWiAqIGZpbmFsRXhwWiAtIDFuKSAvIDNuO1xuXG4gICAgICAgIGNvbnN0IGJldGEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KEJFVEEpLCBuOHEpKSk7XG4gICAgICAgIGNvbnN0IGJldGEyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShCRVRBMiksIG44cSkpKTtcblxuICAgICAgICBjb25zdCB6Mm0xZDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoWjJNMUQzLCAxNikpKTtcblxuXG4gICAgICAgIGNvbnN0IHB4ID0gYy5nZXRMb2NhbChcInBcIik7XG4gICAgICAgIGNvbnN0IHB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcblxuICAgICAgICBjb25zdCBwc3AgPSBtb2R1bGUuYWxsb2MoZjFzaXplKjMpO1xuICAgICAgICBjb25zdCBzcCA9IGMuaTMyX2NvbnN0KHBzcCk7XG4gICAgICAgIGNvbnN0IHNweCA9IGMuaTMyX2NvbnN0KHBzcCk7XG4gICAgICAgIGNvbnN0IHNweSA9IGMuaTMyX2NvbnN0KHBzcCtmMXNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBzMnAgPSBtb2R1bGUuYWxsb2MoZjFzaXplKjIpO1xuICAgICAgICBjb25zdCBzMnAgPSBjLmkzMl9jb25zdChwczJwKTtcbiAgICAgICAgY29uc3QgczJweCA9IGMuaTMyX2NvbnN0KHBzMnApO1xuICAgICAgICBjb25zdCBzMnB5ID0gYy5pMzJfY29uc3QocHMycCtmMXNpemUpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwoZzFtUHJlZml4ICsgXCJfaW5DdXJ2ZUFmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSkpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHB4LCBiZXRhLCBzcHgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgcHksIHNweSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgcHgsIGJldGEyLCBzMnB4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIHB5LCBzMnB5KSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIsIHNwLCBzcCksXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfc3ViTWl4ZWRcIiwgc3AsIGMuZ2V0TG9jYWwoXCJwXCIpLCBzcCksXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfc3ViTWl4ZWRcIiwgc3AsIHMycCwgc3ApLFxuXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIiwgc3AsIHoybTFkMywgYy5pMzJfY29uc3QoMTYpLCBzcCksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9lcU1peGVkXCIsIHNwLCBzMnApXG4gICAgICAgICAgICApXG5cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmSW5Hcm91cCA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMW1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuICAgICAgICBmSW5Hcm91cC5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZkluR3JvdXAuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjMiA9IGZJbkdyb3VwLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4MiA9IGMyLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBmSW5Hcm91cC5hZGRDb2RlKFxuICAgICAgICAgICAgYzIuY2FsbChnMW1QcmVmaXggKyBcIl90b0FmZmluZVwiLCBjMi5nZXRMb2NhbChcInBJblwiKSwgYXV4MiksXG5cbiAgICAgICAgICAgIGMyLnJldChcbiAgICAgICAgICAgICAgICBjMi5jYWxsKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYXV4MiksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaT0wOyBpPDEwOyBpKyspIHtcbiAgICAgICAgYnVpbGRGcm9iZW5pdXNNYXAoaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXBcIitpKTtcbiAgICB9XG5cblxuICAgIGJ1aWxkSW5Hcm91cEcxKCk7XG4gICAgYnVpbGRJbkdyb3VwRzIoKTtcblxuICAgIGJ1aWxkUHJlcEFkZFN0ZXAoKTtcbiAgICBidWlsZFByZXBEb3VibGVTdGVwKCk7XG5cbiAgICBidWlsZFByZXBhcmVHMSgpO1xuICAgIGJ1aWxkUHJlcGFyZUcyKCk7XG5cbiAgICBidWlsZE1pbGxlckxvb3AoKTtcblxuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbk9sZCgpO1xuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbigpO1xuXG4gICAgZm9yIChsZXQgaT0xOyBpPD01OyBpKyspIHtcbiAgICAgICAgYnVpbGRQYWlyaW5nRXF1YXRpb24oaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nRXFcIitpKTtcbiAgICB9XG5cbiAgICBidWlsZFBhaXJpbmcoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nXCIpO1xuXG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wcmVwYXJlRzJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX21pbGxlckxvb3BcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWwxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWwwMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZnRtUHJlZml4ICsgXCJfbXVsMDE0XCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcxbVByZWZpeCArIFwiX2luR3JvdXBcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcybVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcybVByZWZpeCArIFwiX2luR3JvdXBcIik7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhtb2R1bGUuZnVuY3Rpb25JZHhCeU5hbWUpO1xufTtcblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbi8vIG1vZHVsZS5leHBvcnRzLmJuMTI4X3dhc20gPSByZXF1aXJlKFwiLi9idWlsZC9ibjEyOF93YXNtLmpzXCIpO1xuLy8gbW9kdWxlLmV4cG9ydHMuYmxzMTIzODFfd2FzbSA9IHJlcXVpcmUoXCIuL2J1aWxkL2JsczEyMzgxX3dhc20uanNcIik7XG4vLyBtb2R1bGUuZXhwb3J0cy5tbnQ2NzUzX3dhc20gPSByZXF1aXJlKFwiLi9idWlsZC9tbnQ2NzUzX3dhc20uanNcIik7XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQm4xMjggPSByZXF1aXJlKFwiLi9zcmMvYm4xMjgvYnVpbGRfYm4xMjguanNcIik7XG5tb2R1bGUuZXhwb3J0cy5idWlsZEJsczEyMzgxID0gcmVxdWlyZShcIi4vc3JjL2JsczEyMzgxL2J1aWxkX2JsczEyMzgxLmpzXCIpO1xuLy8gbW9kdWxlLmV4cG9ydHMuYnVpbGRNbnQ2NzUzID0gcmVxdWlyZShcIi4vc3JjL21udDY3NTMvYnVpbGRfbW50Ny5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRGMW0gPSByZXF1aXJlKFwiLi9zcmMvYnVpbGRfZjFtXCIpO1xuIiwiLyogZ2xvYmFsIEJpZ0ludCAqL1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5QmlnSW50cyhvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwiYmlnaW50XCIgfHwgby5lcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvLnRvU3RyaW5nKDEwKTtcbiAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKG8sIDApO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICAgICAgICByZXR1cm4gby5tYXAoc3RyaW5naWZ5QmlnSW50cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobyk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVzW2tdID0gc3RyaW5naWZ5QmlnSW50cyhvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zdHJpbmdpZnlCaWdJbnRzKG8pIHtcbiAgICBpZiAodHlwZW9mIG8gPT0gXCJzdHJpbmdcIiAmJiAvXlswLTldKyQvLnRlc3QobykpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChvKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvID09IFwic3RyaW5nXCIgJiYgL14weFswLTlhLWZBLUZdKyQvLnRlc3QobykpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChvKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgICAgcmV0dXJuIG8ubWFwKHVuc3RyaW5naWZ5QmlnSW50cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChvID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICByZXNba10gPSB1bnN0cmluZ2lmeUJpZ0ludHMob1trXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlQnVmZjJpbnQoYnVmZikge1xuICAgIGxldCByZXMgPSBCaWdJbnQoMCk7XG4gICAgbGV0IGkgPSBidWZmLmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0LCBidWZmLmJ5dGVMZW5ndGgpO1xuICAgIHdoaWxlIChpID4gMCkge1xuICAgICAgICBpZiAoaSA+PSA0KSB7XG4gICAgICAgICAgICBpIC09IDQ7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQzMihpKSkgPDwgQmlnSW50KG9mZnNldCAqIDgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+PSAyKSB7XG4gICAgICAgICAgICBpIC09IDI7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQxNihpKSkgPDwgQmlnSW50KG9mZnNldCAqIDgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQ4KGkpKSA8PCBCaWdJbnQob2Zmc2V0ICogOCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmVJbnQyQnVmZihuLCBsZW4pIHtcbiAgICBsZXQgciA9IG47XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIpO1xuICAgIGxldCBvID0gbGVuO1xuICAgIHdoaWxlIChvID4gMCkge1xuICAgICAgICBpZiAobyAtIDQgPj0gMCkge1xuICAgICAgICAgICAgbyAtPSA0O1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIE51bWJlcihyICYgQmlnSW50KDB4ZmZmZmZmZmYpKSk7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMzIpO1xuICAgICAgICB9IGVsc2UgaWYgKG8gLSAyID49IDApIHtcbiAgICAgICAgICAgIG8gLT0gMjtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQxNihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmYpKSk7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbyAtPSAxO1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDgobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZikpKTtcbiAgICAgICAgICAgIHIgPSByID4+IEJpZ0ludCg4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgZG9lcyBub3QgZml0IGluIHRoaXMgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlQnVmZjJpbnQoYnVmZikge1xuICAgIGxldCByZXMgPSBCaWdJbnQoMCk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgd2hpbGUgKGkgPCBidWZmLmxlbmd0aCkge1xuICAgICAgICBpZiAoaSArIDQgPD0gYnVmZi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcyArPSBCaWdJbnQoYnVmZlYuZ2V0VWludDMyKGksIHRydWUpKSA8PCBCaWdJbnQoaSAqIDgpO1xuICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICB9IGVsc2UgaWYgKGkgKyAyIDw9IGJ1ZmYubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQxNihpLCB0cnVlKSkgPDwgQmlnSW50KGkgKiA4KTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyArPSBCaWdJbnQoYnVmZlYuZ2V0VWludDgoaSwgdHJ1ZSkpIDw8IEJpZ0ludChpICogOCk7XG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlSW50MkJ1ZmYobiwgbGVuKSB7XG4gICAgbGV0IHIgPSBuO1xuICAgIGlmICh0eXBlb2YgbGVuID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxlbiA9IE1hdGguZmxvb3IoKFNjYWxhci5iaXRMZW5ndGgobikgLSAxKSAvIDgpICsgMTtcbiAgICAgICAgaWYgKGxlbiA9PSAwKSBsZW4gPSAxO1xuICAgIH1cbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlcik7XG4gICAgbGV0IG8gPSAwO1xuICAgIHdoaWxlIChvIDwgbGVuKSB7XG4gICAgICAgIGlmIChvICsgNCA8PSBsZW4pIHtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmZmZmZmKSksIHRydWUpO1xuICAgICAgICAgICAgbyArPSA0O1xuICAgICAgICAgICAgciA9IHIgPj4gQmlnSW50KDMyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvICsgMiA8PSBsZW4pIHtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQxNihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmYpKSwgdHJ1ZSk7XG4gICAgICAgICAgICBvICs9IDI7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDgobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZikpLCB0cnVlKTtcbiAgICAgICAgICAgIG8gKz0gMTtcbiAgICAgICAgICAgIHIgPSByID4+IEJpZ0ludCg4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgZG9lcyBub3QgZml0IGluIHRoaXMgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUZFbGVtZW50cyhGLCBvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwiYmlnaW50XCIgfHwgby5lcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvLnRvU3RyaW5nKDEwKTtcbiAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBGLnRvU3RyaW5nKEYuZShvKSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG4gICAgICAgIHJldHVybiBvLm1hcChzdHJpbmdpZnlGRWxlbWVudHMuYmluZCh0aGlzLCBGKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobyk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVzW2tdID0gc3RyaW5naWZ5RkVsZW1lbnRzKEYsIG9ba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbztcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnN0cmluZ2lmeUZFbGVtZW50cyhGLCBvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwic3RyaW5nXCIgJiYgL15bMC05XSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBGLmUobyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcInN0cmluZ1wiICYmIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBGLmUobyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG4gICAgICAgIHJldHVybiBvLm1hcCh1bnN0cmluZ2lmeUZFbGVtZW50cy5iaW5kKHRoaXMsIEYpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG8gPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHJlc1trXSA9IHVuc3RyaW5naWZ5RkVsZW1lbnRzKEYsIG9ba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbztcbiAgICB9XG59XG5cbmNvbnN0IF9yZXZUYWJsZSA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgIF9yZXZUYWJsZVtpXSA9IF9yZXZTbG93KGksIDgpO1xufVxuXG5mdW5jdGlvbiBfcmV2U2xvdyhpZHgsIGJpdHMpIHtcbiAgICBsZXQgcmVzID0gMDtcbiAgICBsZXQgYSA9IGlkeDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdHM7IGkrKykge1xuICAgICAgICByZXMgPDw9IDE7XG4gICAgICAgIHJlcyA9IHJlcyB8IChhICYgMSk7XG4gICAgICAgIGEgPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRSZXZlcnNlKGlkeCwgYml0cykge1xuICAgIHJldHVybiAoXG4gICAgICAgIChfcmV2VGFibGVbaWR4ID4+PiAyNF0gfFxuICAgICAgICAoX3JldlRhYmxlWyhpZHggPj4+IDE2KSAmIDB4ZmZdIDw8IDgpIHxcbiAgICAgICAgKF9yZXZUYWJsZVsoaWR4ID4+PiA4KSAmIDB4ZmZdIDw8IDE2KSB8XG4gICAgICAgIChfcmV2VGFibGVbaWR4ICYgMHhmZl0gPDwgMjQpKSA+Pj5cbiAgICAgICAgKDMyIC0gYml0cylcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nMihWKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKChWICYgMHhmZmZmMDAwMCkgIT09IDAgPyAoKFYgJj0gMHhmZmZmMDAwMCksIDE2KSA6IDApIHxcbiAgICAgICAgKChWICYgMHhmZjAwZmYwMCkgIT09IDAgPyAoKFYgJj0gMHhmZjAwZmYwMCksIDgpIDogMCkgfFxuICAgICAgICAoKFYgJiAweGYwZjBmMGYwKSAhPT0gMCA/ICgoViAmPSAweGYwZjBmMGYwKSwgNCkgOiAwKSB8XG4gICAgICAgICgoViAmIDB4Y2NjY2NjY2MpICE9PSAwID8gKChWICY9IDB4Y2NjY2NjY2MpLCAyKSA6IDApIHxcbiAgICAgICAgKChWICYgMHhhYWFhYWFhYSkgIT09IDApXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZSZXZlcnNlQml0cyhidWZmLCBlU2l6ZSkge1xuICAgIGNvbnN0IG4gPSBidWZmLmJ5dGVMZW5ndGggLyBlU2l6ZTtcbiAgICBjb25zdCBiaXRzID0gbG9nMihuKTtcbiAgICBpZiAobiAhPSAxIDw8IGJpdHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRlcnNcIik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBiaXRSZXZlcnNlKGksIGJpdHMpO1xuICAgICAgICBpZiAoaSA+IHIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IGJ1ZmYuc2xpY2UoaSAqIGVTaXplLCAoaSArIDEpICogZVNpemUpO1xuICAgICAgICAgICAgYnVmZi5zZXQoYnVmZi5zbGljZShyICogZVNpemUsIChyICsgMSkgKiBlU2l6ZSksIGkgKiBlU2l6ZSk7XG4gICAgICAgICAgICBidWZmLnNldCh0bXAsIHIgKiBlU2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheTJidWZmZXIoYXJyLCBzRykge1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRyAqIGFyci5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnVmZi5zZXQoYXJyW2ldLCBpICogc0cpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyMmFycmF5KGJ1ZmYsIHNHKSB7XG4gICAgY29uc3QgbiA9IGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHO1xuICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBidWZmLnNsaWNlKGkgKiBzRywgaSAqIHNHICsgc0cpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufVxuIiwiXG5jb25zdCBQQUdFX1NJWkUgPSAxPDwzMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnQnVmZmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgdGhpcy5idWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IHNpemU7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxzaXplOyBpKz0gUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oc2l6ZS1pLCBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXJzLnB1c2gobmV3IFVpbnQ4QXJyYXkobikpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBzbGljZShmciwgdG8pIHtcbiAgICAgICAgaWYgKCB0byA9PT0gdW5kZWZpbmVkICkgdG8gPSB0aGlzLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmICggZnIgPT09IHVuZGVmaW5lZCApIGZyID0gMDtcbiAgICAgICAgY29uc3QgbGVuID0gdG8tZnI7XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihmciAvIFBBR0VfU0laRSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigoZnIrbGVuLTEpIC8gUEFHRV9TSVpFKTtcblxuICAgICAgICBpZiAoKGZpcnN0UGFnZSA9PSBsYXN0UGFnZSl8fChsZW49PTApKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyc1tmaXJzdFBhZ2VdLnNsaWNlKGZyJVBBR0VfU0laRSwgZnIlUEFHRV9TSVpFICsgbGVuKTtcblxuICAgICAgICBsZXQgYnVmZjtcblxuICAgICAgICBsZXQgcCA9IGZpcnN0UGFnZTtcbiAgICAgICAgbGV0IG8gPSBmciAlIFBBR0VfU0laRTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBsZW47XG4gICAgICAgIHdoaWxlIChyPjApIHtcbiAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGwgPSAobytyID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLW8pIDogcjtcbiAgICAgICAgICAgIGNvbnN0IHNyY1ZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcnNbcF0uYnVmZmVyLCB0aGlzLmJ1ZmZlcnNbcF0uYnl0ZU9mZnNldCtvLCBsKTtcbiAgICAgICAgICAgIGlmIChsID09IGxlbikgcmV0dXJuIHNyY1ZpZXcuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmICghYnVmZikge1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKGxlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZi5zZXQoc3JjVmlldywgbGVuLXIpO1xuICAgICAgICAgICAgciA9IHItbDtcbiAgICAgICAgICAgIHAgKys7XG4gICAgICAgICAgICBvID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIHNldChidWZmLCBvZmZzZXQpIHtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSBvZmZzZXQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1ZmYuYnl0ZUxlbmd0aDtcblxuICAgICAgICBpZiAobGVuPT0wKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihvZmZzZXQgLyBQQUdFX1NJWkUpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguZmxvb3IoKG9mZnNldCtsZW4tMSkgLyBQQUdFX1NJWkUpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2UgPT0gbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIGlmICgoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikmJihidWZmLmJ1ZmZlcnMubGVuZ3RoPT0xKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbZmlyc3RQYWdlXS5zZXQoYnVmZi5idWZmZXJzWzBdLCBvZmZzZXQgJSBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJzW2ZpcnN0UGFnZV0uc2V0KGJ1ZmYsIG9mZnNldCAlIFBBR0VfU0laRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHAgPSBmaXJzdFBhZ2U7XG4gICAgICAgIGxldCBvID0gb2Zmc2V0ICUgUEFHRV9TSVpFO1xuICAgICAgICBsZXQgciA9IGxlbjtcbiAgICAgICAgd2hpbGUgKHI+MCkge1xuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBQQUdFX1NJWkUpID8gKFBBR0VfU0laRSAtbykgOiByO1xuICAgICAgICAgICAgY29uc3Qgc3JjVmlldyA9IGJ1ZmYuc2xpY2UoIGxlbiAtciwgbGVuIC1yK2wpO1xuICAgICAgICAgICAgY29uc3QgZHN0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyc1twXS5idWZmZXIsIHRoaXMuYnVmZmVyc1twXS5ieXRlT2Zmc2V0ICsgbywgbCk7XG4gICAgICAgICAgICBkc3RWaWV3LnNldChzcmNWaWV3KTtcbiAgICAgICAgICAgIHIgPSByLWw7XG4gICAgICAgICAgICBwICsrO1xuICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbiIsImltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBmbk5hbWUsIHNJbiwgc091dCkge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBiYXRjaENvbnZlcnQoYnVmZkluKSB7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmZJbi5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKCBuUG9pbnRzICogc0luICE9PSBidWZmSW4uYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IE1hdGguZmxvb3IoblBvaW50cy90bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkNodW5rID0gYnVmZkluLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0luLCBpKnBvaW50c1BlckNodW5rKnNJbiArIG4qc0luKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6YnVmZkNodW5rfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOnNPdXQgKiBufSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9XG4gICAgICAgICAgICAgICAgXX0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZkluIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgZ2V0VGhyZWFkUm5nIH0gZnJvbSBcIi4vcmFuZG9tLmpzXCI7XG5pbXBvcnQgYnVpbGRCYXRjaENvbnZlcnQgZnJvbSBcIi4vZW5naW5lX2JhdGNoY29udmVydC5qc1wiO1xuaW1wb3J0IEJpZ0J1ZmZlciBmcm9tIFwiLi9iaWdidWZmZXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQxIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIG44LCBwKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG5cbiAgICAgICAgdGhpcy5wID0gcDtcbiAgICAgICAgdGhpcy5uOCA9IG44O1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYxXCI7XG4gICAgICAgIHRoaXMubSA9IDE7XG5cbiAgICAgICAgdGhpcy5oYWxmID0gU2NhbGFyLnNoaWZ0UmlnaHQocCwgU2NhbGFyLm9uZSk7XG4gICAgICAgIHRoaXMuYml0TGVuZ3RoID0gU2NhbGFyLmJpdExlbmd0aChwKTtcbiAgICAgICAgdGhpcy5tYXNrID0gU2NhbGFyLnN1YihTY2FsYXIuc2hpZnRMZWZ0KFNjYWxhci5vbmUsIHRoaXMuYml0TGVuZ3RoKSwgU2NhbGFyLm9uZSk7XG5cbiAgICAgICAgdGhpcy5wT3AxID0gdG0uYWxsb2MobjgpO1xuICAgICAgICB0aGlzLnBPcDIgPSB0bS5hbGxvYyhuOCk7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKG44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9cIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl9vbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgICAgIHRoaXMubjY0ID0gTWF0aC5mbG9vcihuOC84KTtcbiAgICAgICAgdGhpcy5uMzIgPSBNYXRoLmZsb29yKG44LzQpO1xuXG4gICAgICAgIGlmKHRoaXMubjY0KjggIT0gdGhpcy5uOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibjggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDhcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbGYgPSBTY2FsYXIuc2hpZnRSaWdodCh0aGlzLnAsIFNjYWxhci5vbmUpO1xuICAgICAgICB0aGlzLm5xciA9IHRoaXMudHdvO1xuICAgICAgICBsZXQgciA9IHRoaXMuZXhwKHRoaXMubnFyLCB0aGlzLmhhbGYpO1xuICAgICAgICB3aGlsZSAoIXRoaXMuZXEociwgdGhpcy5uZWdvbmUpKSB7XG4gICAgICAgICAgICB0aGlzLm5xciA9IHRoaXMuYWRkKHRoaXMubnFyLCB0aGlzLm9uZSk7XG4gICAgICAgICAgICByID0gdGhpcy5leHAodGhpcy5ucXIsIHRoaXMuaGFsZik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tdWwodGhpcy5ucXIsIHRoaXMubnFyKTtcbiAgICAgICAgdGhpcy5zaGlmdEludiA9IHRoaXMuaW52KHRoaXMuc2hpZnQpO1xuXG4gICAgICAgIHRoaXMucyA9IDA7XG4gICAgICAgIGxldCB0ID0gU2NhbGFyLnN1Yih0aGlzLnAsIFNjYWxhci5vbmUpO1xuXG4gICAgICAgIHdoaWxlICggIVNjYWxhci5pc09kZCh0KSApIHtcbiAgICAgICAgICAgIHRoaXMucyA9IHRoaXMucyArIDE7XG4gICAgICAgICAgICB0ID0gU2NhbGFyLnNoaWZ0UmlnaHQodCwgU2NhbGFyLm9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLncgPSBbXTtcbiAgICAgICAgdGhpcy53W3RoaXMuc10gPSB0aGlzLmV4cCh0aGlzLm5xciwgdCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0gdGhpcy5zLTE7IGk+PTA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy53W2ldID0gdGhpcy5zcXVhcmUodGhpcy53W2krMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVxKHRoaXMud1swXSwgdGhpcy5vbmUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjYWxjdWxhdGluZyByb290cyBvZiB1bml0eVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmF0Y2hUb01vbnRnb21lcnkgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hUb01vbnRnb21lcnlcIiwgdGhpcy5uOCwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMuYmF0Y2hGcm9tTW9udGdvbWVyeSA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaEZyb21Nb250Z29tZXJ5XCIsIHRoaXMubjgsIHRoaXMubjgpO1xuICAgIH1cblxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIGFkZChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICB9XG5cblxuICAgIGVxKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDJCb29sKFwiX2VxXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvXCIsIGEpO1xuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YlwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfbmVnXCIsIGEpO1xuICAgIH1cblxuICAgIGludihhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9pbnZlcnNlXCIsIGEpO1xuICAgIH1cblxuICAgIHRvTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b01vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgZnJvbU1vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZnJvbU1vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgbXVsKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfaW52ZXJzZVwiXSh0aGlzLnBPcDIsIHRoaXMucE9wMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX211bFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNTcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzU3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIHNxcnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3FydFwiLCBhKTtcbiAgICB9XG5cbiAgICBleHAoYSwgYikge1xuICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIGIgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUoYikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfZXhwXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBiLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBpc05lZ2F0aXZlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc05lZ2F0aXZlXCIsIGEpO1xuICAgIH1cblxuICAgIGUoYSwgYikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBhO1xuICAgICAgICBsZXQgcmEgPSBTY2FsYXIuZShhLCBiKTtcbiAgICAgICAgaWYgKFNjYWxhci5pc05lZ2F0aXZlKHJhKSkge1xuICAgICAgICAgICAgcmEgPSBTY2FsYXIubmVnKHJhKTtcbiAgICAgICAgICAgIGlmIChTY2FsYXIuZ3QocmEsIHRoaXMucCkpIHtcbiAgICAgICAgICAgICAgICByYSA9IFNjYWxhci5tb2QocmEsIHRoaXMucCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYSA9IFNjYWxhci5zdWIodGhpcy5wLCByYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU2NhbGFyLmd0KHJhLCB0aGlzLnApKSB7XG4gICAgICAgICAgICAgICAgcmEgPSBTY2FsYXIubW9kKHJhLCB0aGlzLnApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSB1dGlscy5sZUludDJCdWZmKHJhLCB0aGlzLm44KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Nb250Z29tZXJ5KGJ1ZmYpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgICAgIGNvbnN0IGFuID0gdGhpcy5mcm9tTW9udGdvbWVyeShhKTtcbiAgICAgICAgY29uc3QgcyA9IFNjYWxhci5mcm9tUnByTEUoYW4sIDApO1xuICAgICAgICByZXR1cm4gU2NhbGFyLnRvU3RyaW5nKHMsIHJhZGl4KTtcbiAgICB9XG5cbiAgICBmcm9tUm5nKHJuZykge1xuICAgICAgICBsZXQgdjtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMubjgpO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB2ID0gU2NhbGFyLnplcm87XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uNjQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHYgPSBTY2FsYXIuYWRkKHYsICBTY2FsYXIuc2hpZnRMZWZ0KHJuZy5uZXh0VTY0KCksIDY0KmkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHYgPSBTY2FsYXIuYmFuZCh2LCB0aGlzLm1hc2spO1xuICAgICAgICB9IHdoaWxlIChTY2FsYXIuZ2VxKHYsIHRoaXMucCkpO1xuICAgICAgICBTY2FsYXIudG9ScHJMRShidWZmLCAwLCB2LCB0aGlzLm44KTtcbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgcmFuZG9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tUm5nKGdldFRocmVhZFJuZygpKTtcbiAgICB9XG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGFuID0gdGhpcy5mcm9tTW9udGdvbWVyeShhKTtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByTEUoYW4sIDApO1xuICAgIH1cblxuICAgIGZyb21PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5uOCk7XG4gICAgICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIDAsIGEsIHRoaXMubjgpO1xuICAgICAgICByZXR1cm4gdGhpcy50b01vbnRnb21lcnkoYnVmZik7XG4gICAgfVxuXG4gICAgdG9ScHJMRShidWZmLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgYnVmZi5zZXQodGhpcy5mcm9tTW9udGdvbWVyeShhKSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICB0b1JwckJFKGJ1ZmYsIG9mZnNldCwgYSkge1xuICAgICAgICBjb25zdCBidWZmMiA9IHRoaXMuZnJvbU1vbnRnb21lcnkoYSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLm44LzI7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXV4ID0gYnVmZjJbaV07XG4gICAgICAgICAgICBidWZmMltpXSA9IGJ1ZmYyW3RoaXMubjgtMS1pXTtcbiAgICAgICAgICAgIGJ1ZmYyW3RoaXMubjgtMS1pXSA9IGF1eDtcbiAgICAgICAgfVxuICAgICAgICBidWZmLnNldChidWZmMiwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmcm9tUnByTEUoYnVmZiwgb2Zmc2V0KSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCByZXMgPSBidWZmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5uOCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvTW9udGdvbWVyeShyZXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGJhdGNoSW52ZXJzZShidWZmSW4pIHtcbiAgICAgICAgbGV0IHJldHVybkFycmF5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNJbiA9IHRoaXMubjg7XG4gICAgICAgIGNvbnN0IHNPdXQgPSB0aGlzLm44O1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZJbikpIHtcbiAgICAgICAgICAgIGJ1ZmZJbiA9IHV0aWxzLmFycmF5MmJ1ZmZlcihidWZmSW4sIHNJbiApO1xuICAgICAgICAgICAgcmV0dXJuQXJyYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZkluID0gYnVmZkluLnNsaWNlKDAsIGJ1ZmZJbi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmZJbi5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKCBuUG9pbnRzICogc0luICE9PSBidWZmSW4uYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IE1hdGguZmxvb3IoblBvaW50cy90aGlzLnRtLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy50bS5jb25jdXJyZW5jeTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChpPCB0aGlzLnRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkNodW5rID0gYnVmZkluLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0luLCBpKnBvaW50c1BlckNodW5rKnNJbiArIG4qc0luKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6YnVmZkNodW5rfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOnNPdXQgKiBufSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiB0aGlzLnByZWZpeCArIFwiX2JhdGNoSW52ZXJzZVwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IHNJbn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogc091dH0sXG4gICAgICAgICAgICAgICAgXX0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMudG0ucXVldWVBY3Rpb24odGFzaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQ7XG4gICAgICAgIGlmIChidWZmSW4gaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0ID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0LnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICAgICAgcCs9cmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5idWZmZXIyYXJyYXkoZnVsbEJ1ZmZPdXQsIHNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBnZXRUaHJlYWRSbmcgfSBmcm9tIFwiLi9yYW5kb20uanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQyIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIEYpIHtcbiAgICAgICAgdGhpcy50bSA9IHRtO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcblxuICAgICAgICB0aGlzLkYgPSBGO1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYyXCI7XG4gICAgICAgIHRoaXMubSA9IEYubSAqIDI7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLkYubjgqMjtcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLkYubjMyKjI7XG4gICAgICAgIHRoaXMubjY0ID0gdGhpcy5GLm42NCoyO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMucE9wMiA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX29uZVwiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLm9uZSA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIGFkZChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBlcShhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyQm9vbChcIl9lcVwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzWmVyb1wiLCBhKTtcbiAgICB9XG5cbiAgICBzdWIoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICB9XG5cbiAgICBpbnYoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfaW52ZXJzZVwiLCBhKTtcbiAgICB9XG5cbiAgICBpc05lZ2F0aXZlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc05lZ2F0aXZlXCIsIGEpO1xuICAgIH1cblxuICAgIHRvTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b01vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgZnJvbU1vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZnJvbU1vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgbXVsKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIG11bDEoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9tdWwxXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfaW52ZXJzZVwiXSh0aGlzLnBPcDIsIHRoaXMucE9wMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX211bFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNTcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzU3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIHNxcnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3FydFwiLCBhKTtcbiAgICB9XG5cbiAgICBleHAoYSwgYikge1xuICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIGIgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUoYikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfZXhwXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBiLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBlKGEsIGIpIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gYTtcbiAgICAgICAgaWYgKChBcnJheS5pc0FycmF5KGEpKSAmJiAoYS5sZW5ndGggPT0gMikpIHtcbiAgICAgICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLmUoYVswXSwgYik7XG4gICAgICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5lKGFbMV0sIGIpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgICAgICByZXMuc2V0KGMyLCB0aGlzLkYubjgqMik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBGMlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgICAgIGNvbnN0IHMxID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UoMCwgdGhpcy5GLm44KSwgcmFkaXgpO1xuICAgICAgICBjb25zdCBzMiA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgcmV0dXJuIGBbJHtzMX0sICR7czJ9XWA7XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5mcm9tUm5nKHJuZyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgIHJlcy5zZXQoYzIsIHRoaXMuRi5uOCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcmFuZG9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tUm5nKGdldFRocmVhZFJuZygpKTtcbiAgICB9XG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UoMCwgdGhpcy5GLm44KSk7XG4gICAgICAgIGNvbnN0IGMyID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMikpO1xuICAgICAgICByZXR1cm4gW2MxLCBjMl07XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgIGNvbnN0IGIxID0gdGhpcy5GLmZyb21PYmplY3QoYVswXSk7XG4gICAgICAgIGNvbnN0IGIyID0gdGhpcy5GLmZyb21PYmplY3QoYVsxXSk7XG4gICAgICAgIGJ1ZmYuc2V0KGIxKTtcbiAgICAgICAgYnVmZi5zZXQoYjIsIHRoaXMuRi5uOCk7XG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIGMxKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UoMCwgdGhpcy5GLm44KTtcbiAgICB9XG5cbiAgICBjMihhKSB7XG4gICAgICAgIHJldHVybiBhLnNsaWNlKHRoaXMuRi5uOCk7XG4gICAgfVxuXG59XG5cbiIsIlxuXG5pbXBvcnQgeyBnZXRUaHJlYWRSbmcgfSBmcm9tIFwiLi9yYW5kb20uanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQzIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIEYpIHtcbiAgICAgICAgdGhpcy50bSA9IHRtO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcblxuICAgICAgICB0aGlzLkYgPSBGO1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYzXCI7XG4gICAgICAgIHRoaXMubSA9IEYubSAqIDM7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLkYubjgqMztcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLkYubjMyKjM7XG4gICAgICAgIHRoaXMubjY0ID0gdGhpcy5GLm42NCozO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMiA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX29uZVwiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLm9uZSA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuXG4gICAgZXEoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMkJvb2woXCJfZXFcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgaXNaZXJvKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1plcm9cIiwgYSk7XG4gICAgfVxuXG4gICAgYWRkKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YlwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfbmVnXCIsIGEpO1xuICAgIH1cblxuICAgIGludihhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9pbnZlcnNlXCIsIGEpO1xuICAgIH1cblxuICAgIGlzTmVnYXRpdmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzTmVnYXRpdmVcIiwgYSk7XG4gICAgfVxuXG4gICAgdG9Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3RvTW9udGdvbWVyeVwiLCBhKTtcbiAgICB9XG5cbiAgICBmcm9tTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9mcm9tTW9udGdvbWVyeVwiLCBhKTtcbiAgICB9XG5cbiAgICBtdWwoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9tdWxcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgZGl2KGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9pbnZlcnNlXCJdKHRoaXMucE9wMiwgdGhpcy5wT3AyKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfbXVsXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgc3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3NxdWFyZVwiLCBhKTtcbiAgICB9XG5cbiAgICBpc1NxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNTcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgc3FydChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXJ0XCIsIGEpO1xuICAgIH1cblxuICAgIGV4cChhLCBiKSB7XG4gICAgICAgIGlmICghKGIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgYiA9IFNjYWxhci50b0xFQnVmZihTY2FsYXIuZShiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9leHBcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIGIuYnl0ZUxlbmd0aCwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIGUoYSwgYikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBhO1xuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoYSkpICYmIChhLmxlbmd0aCA9PSAzKSkge1xuICAgICAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZShhWzBdLCBiKTtcbiAgICAgICAgICAgIGNvbnN0IGMyID0gdGhpcy5GLmUoYVsxXSwgYik7XG4gICAgICAgICAgICBjb25zdCBjMyA9IHRoaXMuRi5lKGFbMl0sIGIpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjMpO1xuICAgICAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgICAgICByZXMuc2V0KGMyLCB0aGlzLkYubjgpO1xuICAgICAgICAgICAgcmVzLnNldChjMywgdGhpcy5GLm44KjIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgRjNcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCByYWRpeCkge1xuICAgICAgICBjb25zdCBzMSA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgY29uc3QgczIgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICBjb25zdCBzMyA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICByZXR1cm4gYFske3MxfSwgJHtzMn0sICR7czN9XWA7XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5mcm9tUm5nKHJuZyk7XG4gICAgICAgIGNvbnN0IGMzID0gdGhpcy5GLmZyb21Sbmcocm5nKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjMpO1xuICAgICAgICByZXMuc2V0KGMxKTtcbiAgICAgICAgcmVzLnNldChjMiwgdGhpcy5GLm44KTtcbiAgICAgICAgcmVzLnNldChjMywgdGhpcy5GLm44KjIpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVJuZyhnZXRUaHJlYWRSbmcoKSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBjMSA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKDAsIHRoaXMuRi5uOCkpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpKTtcbiAgICAgICAgY29uc3QgYzMgPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgqMiwgdGhpcy5GLm44KjMpKTtcbiAgICAgICAgcmV0dXJuIFtjMSwgYzIsIGMzXTtcbiAgICB9XG5cbiAgICBmcm9tT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgY29uc3QgYjEgPSB0aGlzLkYuZnJvbU9iamVjdChhWzBdKTtcbiAgICAgICAgY29uc3QgYjIgPSB0aGlzLkYuZnJvbU9iamVjdChhWzFdKTtcbiAgICAgICAgY29uc3QgYjMgPSB0aGlzLkYuZnJvbU9iamVjdChhWzJdKTtcbiAgICAgICAgYnVmZi5zZXQoYjEpO1xuICAgICAgICBidWZmLnNldChiMiwgdGhpcy5GLm44KTtcbiAgICAgICAgYnVmZi5zZXQoYjMsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgYzEoYSkge1xuICAgICAgICByZXR1cm4gYS5zbGljZSgwLCB0aGlzLkYubjgpO1xuICAgIH1cblxuICAgIGMyKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgYzMoYSkge1xuICAgICAgICByZXR1cm4gYS5zbGljZSh0aGlzLkYubjgqMik7XG4gICAgfVxuXG59XG5cblxuIiwiXG5cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCBidWlsZEJhdGNoQ29udmVydCBmcm9tIFwiLi9lbmdpbmVfYmF0Y2hjb252ZXJ0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhc21DdXJ2ZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0bSwgcHJlZml4LCBGLCBwR2VuLCBwR2IsIGNvZmFjdG9yKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgICAgIHRoaXMuRiA9IEY7XG5cbiAgICAgICAgdGhpcy5wT3AxID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy5wT3AyID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy5wT3AzID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9cIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgRi5uOCozKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9BZmZpbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvQWZmaW5lID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgRi5uOCoyKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0aGlzLnRtLmdldEJ1ZmYocEdlbiwgRi5uOCozKTtcbiAgICAgICAgdGhpcy5nID0gdGhpcy5vbmU7XG4gICAgICAgIHRoaXMub25lQWZmaW5lID0gdGhpcy50bS5nZXRCdWZmKHBHZW4sIEYubjgqMik7XG4gICAgICAgIHRoaXMuZ0FmZmluZSA9IHRoaXMub25lQWZmaW5lO1xuICAgICAgICB0aGlzLmIgPSB0aGlzLnRtLmdldEJ1ZmYocEdiLCBGLm44KTtcblxuICAgICAgICBpZiAoY29mYWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29mYWN0b3IgPSBTY2FsYXIudG9MRUJ1ZmYoY29mYWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLm5lZyh0aGlzLm9uZSk7XG4gICAgICAgIHRoaXMudHdvID0gdGhpcy5hZGQodGhpcy5vbmUsIHRoaXMub25lKTtcblxuICAgICAgICB0aGlzLmJhdGNoTEVNdG9DID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoTEVNdG9DXCIsIEYubjgqMiwgRi5uOCk7XG4gICAgICAgIHRoaXMuYmF0Y2hMRU10b1UgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hMRU10b1VcIiwgRi5uOCoyLCBGLm44KjIpO1xuICAgICAgICB0aGlzLmJhdGNoQ3RvTEVNID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoQ3RvTEVNXCIsIEYubjgsIEYubjgqMik7XG4gICAgICAgIHRoaXMuYmF0Y2hVdG9MRU0gPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIiwgRi5uOCoyLCBGLm44KjIpO1xuICAgICAgICB0aGlzLmJhdGNoVG9KYWNvYmlhbiA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaFRvSmFjb2JpYW5cIiwgRi5uOCoyLCBGLm44KjMpO1xuICAgICAgICB0aGlzLmJhdGNoVG9BZmZpbmUgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hUb0FmZmluZVwiLCBGLm44KjMsIEYubjgqMik7XG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLkYubjgqMyk7XG4gICAgfVxuXG4gICAgb3AyYm9vbChvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjMpO1xuICAgIH1cblxuICAgIG9wMUFmZmluZShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjIpO1xuICAgIH1cblxuICAgIG9wMUJvb2wob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICB9XG5cbiAgICBhZGQoYSxiKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkTWl4ZWRcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkTWl4ZWRcIiwgYiwgYSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9hZGRBZmZpbmVcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJNaXhlZFwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJNaXhlZFwiLCBiLCBhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YkFmZmluZVwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUFmZmluZShcIl9uZWdBZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkb3VibGUoYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZG91YmxlXCIsIGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2RvdWJsZUFmZmluZVwiLCBhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvXCIsIGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1plcm9BZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aW1lc1NjYWxhcihhLCBzKSB7XG4gICAgICAgIGlmICghKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgcyA9IFNjYWxhci50b0xFQnVmZihTY2FsYXIuZShzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc1NjYWxhclwiO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc1NjYWxhckFmZmluZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBzKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW2ZuTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHMuYnl0ZUxlbmd0aCwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMuRi5uOCozKTtcbiAgICB9XG5cbiAgICB0aW1lc0ZyKGEsIHMpIHtcbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc0ZyXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSB0aGlzLnByZWZpeCArIFwiX3RpbWVzRnJBZmZpbmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgcyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1tmbk5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjMpO1xuICAgIH1cblxuICAgIGVxKGEsYikge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcVwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcU1peGVkXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcU1peGVkXCIsIGIsIGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDJib29sKFwiX2VxQWZmaW5lXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0FmZmluZShhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUFmZmluZShcIl90b0FmZmluZVwiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9KYWNvYmlhbihhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3RvSmFjb2JpYW5cIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1JwclVuY29tcHJlc3NlZChhcnIsIG9mZnNldCwgYSkge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfdG9BZmZpbmVcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCAhPSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX0xFTXRvVVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgYXJyLnNldChyZXMsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgZnJvbVJwclVuY29tcHJlc3NlZChhcnIsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXJyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5GLm44KjIpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBidWZmKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfVXRvTEVNXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICB9XG5cbiAgICB0b1JwckNvbXByZXNzZWQoYXJyLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX3RvQWZmaW5lXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggIT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9MRU10b0NcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDEpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLkYubjgpO1xuICAgICAgICBhcnIuc2V0KHJlcywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmcm9tUnByQ29tcHJlc3NlZChhcnIsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXJyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5GLm44KTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYnVmZik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX0N0b0xFTVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMik7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AyLCB0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgdG9VbmNvbXByZXNzZWQoYSkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICB0aGlzLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDAsIGEpO1xuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICB0b1JwckxFTShhcnIsIG9mZnNldCwgYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBhcnIuc2V0KGEsIG9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX3RvQWZmaW5lXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIGFyci5zZXQocmVzLCBvZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJvbVJwckxFTShhcnIsIG9mZnNldCkge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICAgICAgcmV0dXJuIGFyci5zbGljZShvZmZzZXQsIG9mZnNldCt0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoYSwgcmFkaXgpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICAgICAgY29uc3QgeiA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICAgICAgcmV0dXJuIGBbICR7eH0sICR7eX0sICR7en0gXWA7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UoMCwgdGhpcy5GLm44KSwgcmFkaXgpO1xuICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgICAgIHJldHVybiBgWyAke3h9LCAke3l9IF1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWxpZChhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzWmVybyhhKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IEYgPSB0aGlzLkY7XG4gICAgICAgIGNvbnN0IGFhID0gdGhpcy50b0FmZmluZShhKTtcbiAgICAgICAgY29uc3QgeCA9IGFhLnNsaWNlKDAsIHRoaXMuRi5uOCk7XG4gICAgICAgIGNvbnN0IHkgPSBhYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgY29uc3QgeDNiID0gRi5hZGQoRi5tdWwoRi5zcXVhcmUoeCkseCksIHRoaXMuYik7XG4gICAgICAgIGNvbnN0IHkyID0gRi5zcXVhcmUoeSk7XG4gICAgICAgIHJldHVybiBGLmVxKHgzYiwgeTIpO1xuICAgIH1cblxuICAgIGZyb21Sbmcocm5nKSB7XG4gICAgICAgIGNvbnN0IEYgPSB0aGlzLkY7XG4gICAgICAgIGxldCBQID0gW107XG4gICAgICAgIGxldCBncmVhdGVzdDtcbiAgICAgICAgbGV0IHgzYjtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgUFswXSA9IEYuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgZ3JlYXRlc3QgPSBybmcubmV4dEJvb2woKTtcbiAgICAgICAgICAgIHgzYiA9IEYuYWRkKEYubXVsKEYuc3F1YXJlKFBbMF0pLCBQWzBdKSwgdGhpcy5iKTtcbiAgICAgICAgfSB3aGlsZSAoIUYuaXNTcXVhcmUoeDNiKSk7XG5cbiAgICAgICAgUFsxXSA9IEYuc3FydCh4M2IpO1xuXG4gICAgICAgIGNvbnN0IHMgPSBGLmlzTmVnYXRpdmUoUFsxXSk7XG4gICAgICAgIGlmIChncmVhdGVzdCBeIHMpIFBbMV0gPSBGLm5lZyhQWzFdKTtcblxuICAgICAgICBsZXQgUGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgIFBidWZmLnNldChQWzBdKTtcbiAgICAgICAgUGJ1ZmYuc2V0KFBbMV0sIHRoaXMuRi5uOCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29mYWN0b3IpIHtcbiAgICAgICAgICAgIFBidWZmID0gdGhpcy50aW1lc1NjYWxhcihQYnVmZiwgdGhpcy5jb2ZhY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUGJ1ZmY7XG4gICAgfVxuXG5cblxuICAgIHRvT2JqZWN0KGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHRoaXMuRi50b09iamVjdCh0aGlzLkYuemVybyksXG4gICAgICAgICAgICAgICAgdGhpcy5GLnRvT2JqZWN0KHRoaXMuRi5vbmUpLFxuICAgICAgICAgICAgICAgIHRoaXMuRi50b09iamVjdCh0aGlzLkYuemVybyksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSgwLCB0aGlzLkYubjgpKTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpKTtcbiAgICAgICAgbGV0IHo7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgqMiwgdGhpcy5GLm44KjMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYudG9PYmplY3QodGhpcy5GLm9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgICB9XG5cbiAgICBmcm9tT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuRi5mcm9tT2JqZWN0KGFbMF0pO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5GLmZyb21PYmplY3QoYVsxXSk7XG4gICAgICAgIGxldCB6O1xuICAgICAgICBpZiAoYS5sZW5ndGg9PTMpIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYuZnJvbU9iamVjdChhWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYub25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLkYuaXNaZXJvKHosIHRoaXMuRi5vbmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy56ZXJvQWZmaW5lO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuRi5lcSh6LCB0aGlzLkYub25lKSkge1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHgpO1xuICAgICAgICAgICAgYnVmZi5zZXQoeSwgdGhpcy5GLm44KTtcbiAgICAgICAgICAgIHJldHVybiBidWZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHgpO1xuICAgICAgICAgICAgYnVmZi5zZXQoeSwgdGhpcy5GLm44KTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHosIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZShhKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIGE7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21PYmplY3QoYSk7XG4gICAgfVxuXG4gICAgeChhKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IHRoaXMudG9BZmZpbmUoYSk7XG4gICAgICAgIHJldHVybiB0bXAuc2xpY2UoMCwgdGhpcy5GLm44KTtcbiAgICB9XG5cbiAgICB5KGEpIHtcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy50b0FmZmluZShhKTtcbiAgICAgICAgcmV0dXJuIHRtcC5zbGljZSh0aGlzLkYubjgpO1xuICAgIH1cblxufVxuXG5cbiIsIi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJlYWQoc2VsZikge1xuICAgIGNvbnN0IE1BWE1FTSA9IDMyNzY3O1xuICAgIGxldCBpbnN0YW5jZTtcbiAgICBsZXQgbWVtb3J5O1xuXG4gICAgaWYgKHNlbGYpIHtcbiAgICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZS5kYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGFbMF0uY21kID09IFwiSU5JVFwiKSB7XG4gICAgICAgICAgICAgICAgaW5pdChkYXRhWzBdKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVswXS5jbWQgPT0gXCJURVJNSU5BVEVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gcnVuVGFzayhkYXRhKTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBuZXcgVWludDhBcnJheShkYXRhLmNvZGUpO1xuICAgICAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShjb2RlKTtcbiAgICAgICAgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDpkYXRhLmluaXQsIG1heGltdW06IE1BWE1FTX0pO1xuXG4gICAgICAgIGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUod2FzbU1vZHVsZSwge1xuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgICAgXCJtZW1vcnlcIjogbWVtb3J5XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBhbGxvYyhsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdTMyID0gbmV3IFVpbnQzMkFycmF5KG1lbW9yeS5idWZmZXIsIDAsIDEpO1xuICAgICAgICB3aGlsZSAodTMyWzBdICYgMykgdTMyWzBdKys7ICAvLyBSZXR1cm4gYWx3YXlzIGFsaWduZWQgcG9pbnRlcnNcbiAgICAgICAgY29uc3QgcmVzID0gdTMyWzBdO1xuICAgICAgICB1MzJbMF0gKz0gbGVuZ3RoO1xuICAgICAgICBpZiAodTMyWzBdICsgbGVuZ3RoID4gbWVtb3J5LmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZXMgPSBtZW1vcnkuYnVmZmVyLmJ5dGVMZW5ndGggLyAweDEwMDAwO1xuICAgICAgICAgICAgbGV0IHJlcXVpcmVkUGFnZXMgPSBNYXRoLmZsb29yKCh1MzJbMF0gKyBsZW5ndGgpIC8gMHgxMDAwMCkrMTtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZFBhZ2VzPk1BWE1FTSkgcmVxdWlyZWRQYWdlcz1NQVhNRU07XG4gICAgICAgICAgICBtZW1vcnkuZ3JvdyhyZXF1aXJlZFBhZ2VzLWN1cnJlbnRQYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhbGxvY0J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGFsbG9jKGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgc2V0QnVmZmVyKHAsIGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEJ1ZmZlcihwb2ludGVyLCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdTggPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHU4LmJ1ZmZlciwgdTguYnl0ZU9mZnNldCArIHBvaW50ZXIsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0QnVmZmVyKHBvaW50ZXIsIGJ1ZmZlcikge1xuICAgICAgICBjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpO1xuICAgICAgICB1OC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcG9pbnRlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuVGFzayh0YXNrKSB7XG4gICAgICAgIGlmICh0YXNrWzBdLmNtZCA9PSBcIklOSVRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGluaXQodGFza1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgdmFyczogW10sXG4gICAgICAgICAgICBvdXQ6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHUzMmEgPSBuZXcgVWludDMyQXJyYXkobWVtb3J5LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgIGNvbnN0IG9sZEFsbG9jID0gdTMyYVswXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRhc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGFza1tpXS5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBTExPQ1NFVFwiOlxuICAgICAgICAgICAgICAgIGN0eC52YXJzW3Rhc2tbaV0udmFyXSA9IGFsbG9jQnVmZmVyKHRhc2tbaV0uYnVmZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiQUxMT0NcIjpcbiAgICAgICAgICAgICAgICBjdHgudmFyc1t0YXNrW2ldLnZhcl0gPSBhbGxvYyh0YXNrW2ldLmxlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU0VUXCI6XG4gICAgICAgICAgICAgICAgc2V0QnVmZmVyKGN0eC52YXJzW3Rhc2tbaV0udmFyXSwgdGFza1tpXS5idWZmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJDQUxMXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8dGFza1tpXS5wYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHRhc2tbaV0ucGFyYW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHAudmFyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChjdHgudmFyc1twLnZhcl0gKyAocC5vZmZzZXQgfHwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwLnZhbCAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZXhwb3J0c1t0YXNrW2ldLmZuTmFtZV0oLi4ucGFyYW1zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJHRVRcIjpcbiAgICAgICAgICAgICAgICBjdHgub3V0W3Rhc2tbaV0ub3V0XSA9IGdldEJ1ZmZlcihjdHgudmFyc1t0YXNrW2ldLnZhcl0sIHRhc2tbaV0ubGVuKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNtZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1MzJiID0gbmV3IFVpbnQzMkFycmF5KG1lbW9yeS5idWZmZXIsIDAsIDEpO1xuICAgICAgICB1MzJiWzBdID0gb2xkQWxsb2M7XG4gICAgICAgIHJldHVybiBjdHgub3V0O1xuICAgIH1cblxuXG4gICAgcmV0dXJuIHJ1blRhc2s7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gV29ya2VyOyIsIi8qIGdsb2JhbCBuYXZpZ2F0b3IsIFdlYkFzc2VtYmx5ICovXG4vKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIGNvbnN0IE1FTV9TSVpFID0gMTAwMDsgIC8vIE1lbW9yeSBzaXplIGluIDY0SyBQYWtlcyAoNTEyTWIpXG5jb25zdCBNRU1fU0laRSA9IDI1OyAgLy8gTWVtb3J5IHNpemUgaW4gNjRLIFBha2VzICgxNjAwS2IpXG5cblxuaW1wb3J0IHRocmVhZCBmcm9tIFwiLi90aHJlYWRtYW5fdGhyZWFkLmpzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgV29ya2VyIGZyb20gXCJ3ZWItd29ya2VyXCI7XG5cbmNsYXNzIERlZmVycmVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PiB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2xlZXAobXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cikge1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuYnRvYShzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuY29uc3QgdGhyZWFkU291cmNlID0gc3RyaW5nVG9CYXNlNjQoXCIoXCIgKyB0aHJlYWQudG9TdHJpbmcoKSArIFwiKShzZWxmKVwiKTtcbmNvbnN0IHdvcmtlclNvdXJjZSA9IFwiZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCxcIiArIHRocmVhZFNvdXJjZTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGhyZWFkTWFuYWdlcih3YXNtLCBzaW5nbGVUaHJlYWQpIHtcbiAgICBjb25zdCB0bSA9IG5ldyBUaHJlYWRNYW5hZ2VyKCk7XG5cbiAgICB0bS5tZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOk1FTV9TSVpFfSk7XG4gICAgdG0udTggPSBuZXcgVWludDhBcnJheSh0bS5tZW1vcnkuYnVmZmVyKTtcbiAgICB0bS51MzIgPSBuZXcgVWludDMyQXJyYXkodG0ubWVtb3J5LmJ1ZmZlcik7XG5cbiAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSh3YXNtLmNvZGUpO1xuXG4gICAgdG0uaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtTW9kdWxlLCB7XG4gICAgICAgIGVudjoge1xuICAgICAgICAgICAgXCJtZW1vcnlcIjogdG0ubWVtb3J5XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRtLnNpbmdsZVRocmVhZCA9IHNpbmdsZVRocmVhZDtcbiAgICB0bS5pbml0YWxQRnJlZSA9IHRtLnUzMlswXTsgICAvLyBTYXZlIHRoZSBQb2ludGVyIHRvIGZyZWUgc3BhY2UuXG4gICAgdG0ucHEgPSB3YXNtLnBxO1xuICAgIHRtLnByID0gd2FzbS5wcjtcbiAgICB0bS5wRzFnZW4gPSB3YXNtLnBHMWdlbjtcbiAgICB0bS5wRzF6ZXJvID0gd2FzbS5wRzF6ZXJvO1xuICAgIHRtLnBHMmdlbiA9IHdhc20ucEcyZ2VuO1xuICAgIHRtLnBHMnplcm8gPSB3YXNtLnBHMnplcm87XG4gICAgdG0ucE9uZVQgPSB3YXNtLnBPbmVUO1xuXG4gICAgLy8gICAgdG0ucFRtcDAgPSB0bS5hbGxvYyhjdXJ2ZS5HMi5GLm44KjMpO1xuICAgIC8vICAgIHRtLnBUbXAxID0gdG0uYWxsb2MoY3VydmUuRzIuRi5uOCozKTtcblxuXG4gICAgaWYgKHNpbmdsZVRocmVhZCkge1xuICAgICAgICB0bS5jb2RlID0gd2FzbS5jb2RlO1xuICAgICAgICB0bS50YXNrTWFuYWdlciA9IHRocmVhZCgpO1xuICAgICAgICBhd2FpdCB0bS50YXNrTWFuYWdlcihbe1xuICAgICAgICAgICAgY21kOiBcIklOSVRcIixcbiAgICAgICAgICAgIGluaXQ6IE1FTV9TSVpFLFxuICAgICAgICAgICAgY29kZTogdG0uY29kZS5zbGljZSgpXG4gICAgICAgIH1dKTtcbiAgICAgICAgdG0uY29uY3VycmVuY3kgID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0bS53b3JrZXJzID0gW107XG4gICAgICAgIHRtLnBlbmRpbmdEZWZlcnJlZHMgPSBbXTtcbiAgICAgICAgdG0ud29ya2luZyA9IFtdO1xuXG4gICAgICAgIGxldCBjb25jdXJyZW5jeTtcblxuICAgICAgICBpZiAoKHR5cGVvZihuYXZpZ2F0b3IpID09PSBcIm9iamVjdFwiKSAmJiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gb3MuY3B1cygpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbmN1cnJlbmN5ID09IDApe1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGltaXQgdG8gNjQgdGhyZWFkcyBmb3IgbWVtb3J5IHJlYXNvbnMuXG4gICAgICAgIGlmIChjb25jdXJyZW5jeT42NCkgY29uY3VycmVuY3k9NjQ7XG4gICAgICAgIHRtLmNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3k7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8Y29uY3VycmVuY3k7IGkrKykge1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldID0gbmV3IFdvcmtlcih3b3JrZXJTb3VyY2UpO1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGdldE9uTXNnKGkpKTtcblxuICAgICAgICAgICAgdG0ud29ya2luZ1tpXT1mYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dG0ud29ya2Vycy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5Q29kZSA9IHdhc20uY29kZS5zbGljZSgpO1xuICAgICAgICAgICAgaW5pdFByb21pc2VzLnB1c2godG0ucG9zdEFjdGlvbihpLCBbe1xuICAgICAgICAgICAgICAgIGNtZDogXCJJTklUXCIsXG4gICAgICAgICAgICAgICAgaW5pdDogTUVNX1NJWkUsXG4gICAgICAgICAgICAgICAgY29kZTogY29weUNvZGVcbiAgICAgICAgICAgIH1dLCBbY29weUNvZGUuYnVmZmVyXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoaW5pdFByb21pc2VzKTtcblxuICAgIH1cbiAgICByZXR1cm4gdG07XG5cbiAgICBmdW5jdGlvbiBnZXRPbk1zZyhpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICgoZSkmJihlLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGUuZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRtLndvcmtpbmdbaV09ZmFsc2U7XG4gICAgICAgICAgICB0bS5wZW5kaW5nRGVmZXJyZWRzW2ldLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB0bS5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbn1cblxuY2xhc3MgVGhyZWFkTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5vbGRQRnJlZSA9IDA7XG4gICAgfVxuXG4gICAgc3RhcnRTeW5jT3AoKSB7XG4gICAgICAgIGlmICh0aGlzLm9sZFBGcmVlICE9IDApIHRocm93IG5ldyBFcnJvcihcIlN5bmMgb3BlcmF0aW9uIGluIHByb2dyZXNzXCIpO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gdGhpcy51MzJbMF07XG4gICAgfVxuXG4gICAgZW5kU3luY09wKCkge1xuICAgICAgICBpZiAodGhpcy5vbGRQRnJlZSA9PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBzeW5jIG9wZXJhdGlvbiBpbiBwcm9ncmVzc1wiKTtcbiAgICAgICAgdGhpcy51MzJbMF0gPSB0aGlzLm9sZFBGcmVlO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gMDtcbiAgICB9XG5cbiAgICBwb3N0QWN0aW9uKHdvcmtlcklkLCBlLCB0cmFuc2ZlcnMsIF9kZWZlcnJlZCkge1xuICAgICAgICBpZiAodGhpcy53b3JraW5nW3dvcmtlcklkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdGluZyBhIGpvYiB0IGEgd29ya2luZyB3b3JrZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53b3JraW5nW3dvcmtlcklkXSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nRGVmZXJyZWRzW3dvcmtlcklkXSA9IF9kZWZlcnJlZCA/IF9kZWZlcnJlZCA6IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgICB0aGlzLndvcmtlcnNbd29ya2VySWRdLnBvc3RNZXNzYWdlKGUsIHRyYW5zZmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0RlZmVycmVkc1t3b3JrZXJJZF0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcm9jZXNzV29ya3MoKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgKGk8dGhpcy53b3JrZXJzLmxlbmd0aCkmJih0aGlzLmFjdGlvblF1ZXVlLmxlbmd0aCA+IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndvcmtpbmdbaV0gPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrID0gdGhpcy5hY3Rpb25RdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdEFjdGlvbihpLCB3b3JrLmRhdGEsIHdvcmsudHJhbnNmZXJzLCB3b3JrLmRlZmVycmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlQWN0aW9uKGFjdGlvbkRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICBjb25zdCBkID0gbmV3IERlZmVycmVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRhc2tNYW5hZ2VyKGFjdGlvbkRhdGEpO1xuICAgICAgICAgICAgZC5yZXNvbHZlKHJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJzOiB0cmFuc2ZlcnMsXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQ6IGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZC5wcm9taXNlO1xuICAgIH1cblxuICAgIHJlc2V0TWVtb3J5KCkge1xuICAgICAgICB0aGlzLnUzMlswXSA9IHRoaXMuaW5pdGFsUEZyZWU7XG4gICAgfVxuXG4gICAgYWxsb2NCdWZmKGJ1ZmYpIHtcbiAgICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYWxsb2MoYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRCdWZmKHBvaW50ZXIsIGJ1ZmYpO1xuICAgICAgICByZXR1cm4gcG9pbnRlcjtcbiAgICB9XG5cbiAgICBnZXRCdWZmKHBvaW50ZXIsIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy51OC5zbGljZShwb2ludGVyLCBwb2ludGVyKyBsZW5ndGgpO1xuICAgIH1cblxuICAgIHNldEJ1ZmYocG9pbnRlciwgYnVmZmVyKSB7XG4gICAgICAgIHRoaXMudTguc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGFsbG9jKGxlbmd0aCkge1xuICAgICAgICB3aGlsZSAodGhpcy51MzJbMF0gJiAzKSB0aGlzLnUzMlswXSsrOyAgLy8gUmV0dXJuIGFsd2F5cyBhbGlnbmVkIHBvaW50ZXJzXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudTMyWzBdO1xuICAgICAgICB0aGlzLnUzMlswXSArPSBsZW5ndGg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgdGVybWluYXRlKCkge1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy53b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnNbaV0ucG9zdE1lc3NhZ2UoW3tjbWQ6IFwiVEVSTUlOQVRFXCJ9XSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQmF0Y2hBcHBseUtleShjdXJ2ZSwgZ3JvdXBOYW1lKSB7XG4gICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCB0bSA9IGN1cnZlLnRtO1xuXG4gICAgY3VydmVbZ3JvdXBOYW1lXS5iYXRjaEFwcGx5S2V5ID0gYXN5bmMgZnVuY3Rpb24oYnVmZiwgZmlyc3QsIGluYywgaW5UeXBlLCBvdXRUeXBlKSB7XG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBvdXRUeXBlID0gb3V0VHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBsZXQgZm5OYW1lLCBmbkFmZmluZTtcbiAgICAgICAgbGV0IHNHaW4sIHNHbWlkLCBzR291dDtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJqYWNvYmlhblwiKSB7XG4gICAgICAgICAgICAgICAgc0dpbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2JhdGNoQXBwbHlLZXlcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc0dpbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2JhdGNoQXBwbHlLZXlNaXhlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc0dtaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGlmIChvdXRUeXBlID09IFwiamFjb2JpYW5cIikge1xuICAgICAgICAgICAgICAgIHNHb3V0ID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZuQWZmaW5lID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgICAgIHNHb3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImphY29iaWFuXCIpIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjM7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fYmF0Y2hBcHBseUtleVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fYmF0Y2hBcHBseUtleU1peGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzR21pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJqYWNvYmlhblwiKSB7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm5BZmZpbmUgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImZybV9iYXRjaEFwcGx5S2V5XCI7XG4gICAgICAgICAgICBzR2luID0gRy5uODtcbiAgICAgICAgICAgIHNHbWlkID0gRy5uODtcbiAgICAgICAgICAgIHNHb3V0ID0gRy5uODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXA6IFwiICsgZ3JvdXBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmLmJ5dGVMZW5ndGggLyBzR2luKTtcbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKG5Qb2ludHMvdG0uY29uY3VycmVuY3kpO1xuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgIGluYyA9IEZyLmUoaW5jKTtcbiAgICAgICAgbGV0IHQgPSBGci5lKGZpcnN0KTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJBTExPQ1NFVFwiLFxuICAgICAgICAgICAgICAgIHZhcjogMCxcbiAgICAgICAgICAgICAgICBidWZmOiBidWZmLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0dpbiwgaSpwb2ludHNQZXJDaHVuaypzR2luICsgbipzR2luKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IHR9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogaW5jfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDMsIGxlbjogbipNYXRoLm1heChzR21pZCwgc0dvdXQpfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJDQUxMXCIsXG4gICAgICAgICAgICAgICAgZm5OYW1lOiBmbk5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOjN9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZm5BZmZpbmUpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjbWQ6IFwiQ0FMTFwiLFxuICAgICAgICAgICAgICAgICAgICBmbk5hbWU6IGZuQWZmaW5lLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAzLCBsZW46IG4qc0dvdXR9KTtcblxuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spKTtcbiAgICAgICAgICAgIHQgPSBGci5tdWwodCwgRnIuZXhwKGluYywgbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IG91dEJ1ZmY7XG4gICAgICAgIGlmIChidWZmIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBvdXRCdWZmID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dEJ1ZmYgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG91dEJ1ZmYuc2V0KHJlc3VsdFtpXVswXSwgcCk7XG4gICAgICAgICAgICBwICs9IHJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dEJ1ZmY7XG4gICAgfTtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRQYWlyaW5nKGN1cnZlKSB7XG4gICAgY29uc3QgdG0gPSBjdXJ2ZS50bTtcbiAgICBjdXJ2ZS5wYWlyaW5nID0gZnVuY3Rpb24gcGFpcmluZyhhLCBiKSB7XG5cbiAgICAgICAgdG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcEEgPSB0bS5hbGxvY0J1ZmYoY3VydmUuRzEudG9KYWNvYmlhbihhKSk7XG4gICAgICAgIGNvbnN0IHBCID0gdG0uYWxsb2NCdWZmKGN1cnZlLkcyLnRvSmFjb2JpYW4oYikpO1xuICAgICAgICBjb25zdCBwUmVzID0gdG0uYWxsb2MoY3VydmUuR3QubjgpO1xuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzW2N1cnZlLm5hbWUgKyBcIl9wYWlyaW5nXCJdKHBBLCBwQiwgcFJlcyk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gdG0uZ2V0QnVmZihwUmVzLCBjdXJ2ZS5HdC5uOCk7XG5cbiAgICAgICAgdG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIGN1cnZlLnBhaXJpbmdFcSA9IGFzeW5jIGZ1bmN0aW9uIHBhaXJpbmdFcSgpIHtcbiAgICAgICAgbGV0ICBidWZmQ3Q7XG4gICAgICAgIGxldCBuRXFzO1xuICAgICAgICBpZiAoKGFyZ3VtZW50cy5sZW5ndGggJSAyKSA9PSAxKSB7XG4gICAgICAgICAgICBidWZmQ3QgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcbiAgICAgICAgICAgIG5FcXMgPSAoYXJndW1lbnRzLmxlbmd0aCAtMSkgLzI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmQ3QgPSBjdXJ2ZS5HdC5vbmU7XG4gICAgICAgICAgICBuRXFzID0gYXJndW1lbnRzLmxlbmd0aCAvMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5FcXM7IGkrKykge1xuXG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGcxQnVmZiA9IGN1cnZlLkcxLnRvSmFjb2JpYW4oYXJndW1lbnRzW2kqMl0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBnMUJ1ZmZ9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOiBjdXJ2ZS5wcmVQU2l6ZX0pO1xuXG4gICAgICAgICAgICBjb25zdCBnMkJ1ZmYgPSBjdXJ2ZS5HMi50b0phY29iaWFuKGFyZ3VtZW50c1tpKjIgKzFdKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZzJCdWZmfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDMsIGxlbjogY3VydmUucHJlUVNpemV9KTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiA0LCBsZW46IGN1cnZlLkd0Lm44fSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfcHJlcGFyZUcxXCIsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9XG4gICAgICAgICAgICBdfSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfcHJlcGFyZUcyXCIsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICBdfSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfbWlsbGVyTG9vcFwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgICAgICAgICB7dmFyOiA0fVxuICAgICAgICAgICAgXX0pO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDQsIGxlbjogY3VydmUuR3Qubjh9KTtcblxuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICB0bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwUmVzID0gdG0uYWxsb2MoY3VydmUuR3QubjgpO1xuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzLmZ0bV9vbmUocFJlcyk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcE1SID0gdG0uYWxsb2NCdWZmKHJlc3VsdFtpXVswXSk7XG4gICAgICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzLmZ0bV9tdWwocFJlcywgcE1SLCBwUmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzW2N1cnZlLm5hbWUgKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCJdKHBSZXMsIHBSZXMpO1xuXG4gICAgICAgIGNvbnN0IHBDdCA9IHRtLmFsbG9jQnVmZihidWZmQ3QpO1xuXG4gICAgICAgIGNvbnN0IHIgPSAhIXRtLmluc3RhbmNlLmV4cG9ydHMuZnRtX2VxKHBSZXMsIHBDdCk7XG5cbiAgICAgICAgdG0uZW5kU3luY09wKCk7XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGN1cnZlLnByZXBhcmVHMSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy50bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwUCA9IHRoaXMudG0uYWxsb2NCdWZmKHApO1xuICAgICAgICBjb25zdCBwUHJlcFAgPSB0aGlzLnRtLmFsbG9jKHRoaXMucHJlUFNpemUpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5uYW1lICsgXCJfcHJlcGFyZUcxXCJdKHBQLCBwUHJlcFApO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYocFByZXBQLCB0aGlzLnByZVBTaXplKTtcbiAgICAgICAgdGhpcy50bS5lbmRTeW5jT3AoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgY3VydmUucHJlcGFyZUcyID0gZnVuY3Rpb24ocSkge1xuICAgICAgICB0aGlzLnRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBRID0gdGhpcy50bS5hbGxvY0J1ZmYocSk7XG4gICAgICAgIGNvbnN0IHBQcmVwUSA9IHRoaXMudG0uYWxsb2ModGhpcy5wcmVRU2l6ZSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9wcmVwYXJlRzJcIl0ocFEsIHBQcmVwUSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZihwUHJlcFEsIHRoaXMucHJlUVNpemUpO1xuICAgICAgICB0aGlzLnRtLmVuZFN5bmNPcCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbiAgICBjdXJ2ZS5taWxsZXJMb29wID0gZnVuY3Rpb24ocHJlUCwgcHJlUSkge1xuICAgICAgICB0aGlzLnRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBQcmVQID0gdGhpcy50bS5hbGxvY0J1ZmYocHJlUCk7XG4gICAgICAgIGNvbnN0IHBQcmVRID0gdGhpcy50bS5hbGxvY0J1ZmYocHJlUSk7XG4gICAgICAgIGNvbnN0IHBSZXMgPSB0aGlzLnRtLmFsbG9jKHRoaXMuR3QubjgpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5uYW1lICsgXCJfbWlsbGVyTG9vcFwiXShwUHJlUCwgcFByZVEsIHBSZXMpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYocFJlcywgdGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIGN1cnZlLmZpbmFsRXhwb25lbnRpYXRpb24gPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHRoaXMudG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcEEgPSB0aGlzLnRtLmFsbG9jQnVmZihhKTtcbiAgICAgICAgY29uc3QgcFJlcyA9IHRoaXMudG0uYWxsb2ModGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCJdKHBBLCBwUmVzKTtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50bS5nZXRCdWZmKHBSZXMsIHRoaXMuR3QubjgpO1xuICAgICAgICB0aGlzLnRtLmVuZFN5bmNPcCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbn1cbiIsImltcG9ydCB7IGxvZzIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5jb25zdCBwVFNpemVzID0gW1xuICAgIDEgLCAgMSwgIDEsICAxLCAgICAyLCAgMywgIDQsICA1LFxuICAgIDYgLCAgNywgIDcsICA4LCAgICA5LCAxMCwgMTEsIDEyLFxuICAgIDEzLCAxMywgMTQsIDE1LCAgIDE2LCAxNiwgMTcsIDE3LFxuICAgIDE3LCAxNywgMTcsIDE3LCAgIDE3LCAxNywgMTcsIDE3XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE11bHRpZXhwKGN1cnZlLCBncm91cE5hbWUpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCB0bSA9IEcudG07XG4gICAgYXN5bmMgZnVuY3Rpb24gX211bHRpRXhwQ2h1bmsoYnVmZkJhc2VzLCBidWZmU2NhbGFycywgaW5UeXBlLCBsb2dnZXIsIGxvZ1RleHQpIHtcbiAgICAgICAgaWYgKCAhIChidWZmQmFzZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSApIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmQmFzZXMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmQmFzZXMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoICEgKGJ1ZmZTY2FsYXJzIGluc3RhbmNlb2YgVWludDhBcnJheSkgKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoYCR7bG9nVGV4dH0gX211bHRpRXhwQ2h1bmsgYnVmZlNjYWxhcnMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmU2NhbGFycyBpcyBub3QgVWludDhBcnJheWApO1xuICAgICAgICB9XG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuXG4gICAgICAgIGxldCBzR0luO1xuICAgICAgICBsZXQgZm5OYW1lO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmtcIjtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX211bHRpZXhwX2NodW5rXCI7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX211bHRpZXhwQWZmaW5lX2NodW5rXCI7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbk5hbWUgPSBcImcybV9tdWx0aWV4cF9jaHVua1wiO1xuICAgICAgICAgICAgICAgIHNHSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZkJhc2VzLmJ5dGVMZW5ndGggLyBzR0luKTtcblxuICAgICAgICBpZiAoblBvaW50cyA9PSAwKSByZXR1cm4gRy56ZXJvO1xuICAgICAgICBjb25zdCBzU2NhbGFyID0gTWF0aC5mbG9vcihidWZmU2NhbGFycy5ieXRlTGVuZ3RoIC8gblBvaW50cyk7XG4gICAgICAgIGlmKCBzU2NhbGFyICogblBvaW50cyAhPSBidWZmU2NhbGFycy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY2FsYXIgc2l6ZSBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpdENodW5rU2l6ZSA9IHBUU2l6ZXNbbG9nMihuUG9pbnRzKV07XG4gICAgICAgIGNvbnN0IG5DaHVua3MgPSBNYXRoLmZsb29yKChzU2NhbGFyKjggLSAxKSAvIGJpdENodW5rU2l6ZSkgKzE7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW1xuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBidWZmQmFzZXN9LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBidWZmU2NhbGFyc30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1wiLCB2YXI6IDIsIGxlbjogRy5GLm44KjN9LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogc1NjYWxhcn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG5Qb2ludHN9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBpKmJpdENodW5rU2l6ZX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IE1hdGgubWluKHNTY2FsYXIqOCAtIGkqYml0Q2h1bmtTaXplLCBiaXRDaHVua1NpemUpfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMn1cbiAgICAgICAgICAgICAgICBdfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMiwgbGVuOiBHLkYubjgqM31cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgRy50bS5xdWV1ZUFjdGlvbih0YXNrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCByZXMgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9cmVzdWx0Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICghRy5pc1plcm8ocmVzKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxiaXRDaHVua1NpemU7IGorKykgcmVzID0gRy5kb3VibGUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IEcuYWRkKHJlcywgcmVzdWx0W2ldWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gX211bHRpRXhwKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIGluVHlwZSwgbG9nZ2VyLCBsb2dUZXh0KSB7XG4gICAgICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMSA8PCAyMjtcbiAgICAgICAgY29uc3QgTUlOX0NIVU5LX1NJWkUgPSAxIDw8IDEwO1xuICAgICAgICBsZXQgc0dJbjtcblxuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZkJhc2VzLmJ5dGVMZW5ndGggLyBzR0luKTtcbiAgICAgICAgY29uc3Qgc1NjYWxhciA9IE1hdGguZmxvb3IoYnVmZlNjYWxhcnMuYnl0ZUxlbmd0aCAvIG5Qb2ludHMpO1xuICAgICAgICBpZiggc1NjYWxhciAqIG5Qb2ludHMgIT0gYnVmZlNjYWxhcnMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NhbGFyIHNpemUgZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiaXRDaHVua1NpemUgPSBwVFNpemVzW2xvZzIoblBvaW50cyldO1xuICAgICAgICBjb25zdCBuQ2h1bmtzID0gTWF0aC5mbG9vcigoc1NjYWxhcio4IC0gMSkgLyBiaXRDaHVua1NpemUpICsxO1xuXG4gICAgICAgIGxldCBjaHVua1NpemU7XG4gICAgICAgIGNodW5rU2l6ZSA9IE1hdGguZmxvb3IoblBvaW50cyAvICh0bS5jb25jdXJyZW5jeSAvbkNodW5rcykpO1xuICAgICAgICBpZiAoY2h1bmtTaXplPk1BWF9DSFVOS19TSVpFKSBjaHVua1NpemUgPSBNQVhfQ0hVTktfU0laRTtcbiAgICAgICAgaWYgKGNodW5rU2l6ZTxNSU5fQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUlOX0NIVU5LX1NJWkU7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSArPSBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgTXVsdGlleHAgc3RhcnQ6ICR7bG9nVGV4dH06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oblBvaW50cyAtIGksIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICBjb25zdCBidWZmQmFzZXNDaHVuayA9IGJ1ZmZCYXNlcy5zbGljZShpKnNHSW4sIChpK24pKnNHSW4pO1xuICAgICAgICAgICAgY29uc3QgYnVmZlNjYWxhcnNDaHVuayA9IGJ1ZmZTY2FsYXJzLnNsaWNlKGkqc1NjYWxhciwgKGkrbikqc1NjYWxhcik7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goX211bHRpRXhwQ2h1bmsoYnVmZkJhc2VzQ2h1bmssIGJ1ZmZTY2FsYXJzQ2h1bmssIGluVHlwZSwgbG9nZ2VyLCBsb2dUZXh0KS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgTXVsdGlleHAgZW5kOiAke2xvZ1RleHR9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCByZXMgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9cmVzdWx0Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIHJlcyA9IEcuYWRkKHJlcywgcmVzdWx0W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgRy5tdWx0aUV4cCA9IGFzeW5jIGZ1bmN0aW9uIG11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIGxvZ2dlciwgbG9nVGV4dCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgX211bHRpRXhwKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIFwiamFjb2JpYW5cIiwgbG9nZ2VyLCBsb2dUZXh0KTtcbiAgICB9O1xuICAgIEcubXVsdGlFeHBBZmZpbmUgPSBhc3luYyBmdW5jdGlvbiBtdWx0aUV4cEFmZmluZShidWZmQmFzZXMsIGJ1ZmZTY2FsYXJzLCBsb2dnZXIsIGxvZ1RleHQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IF9tdWx0aUV4cChidWZmQmFzZXMsIGJ1ZmZTY2FsYXJzLCBcImFmZmluZVwiLCBsb2dnZXIsIGxvZ1RleHQpO1xuICAgIH07XG59XG4iLCJpbXBvcnQge2xvZzIsIGJ1ZmZSZXZlcnNlQml0cywgYXJyYXkyYnVmZmVyLCBidWZmZXIyYXJyYXl9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgQmlnQnVmZmVyIGZyb20gXCIuL2JpZ2J1ZmZlci5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRkZUKGN1cnZlLCBncm91cE5hbWUpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IHRtID0gRy50bTtcbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0KGJ1ZmYsIGludmVyc2UsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcblxuICAgICAgICBpblR5cGUgPSBpblR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgb3V0VHlwZSA9IG91dFR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgY29uc3QgTUFYX0JJVFNfVEhSRUFEID0gMTQ7XG5cbiAgICAgICAgbGV0IHNJbiwgc01pZCwgc091dCwgZm5JbjJNaWQsIGZuTWlkMk91dCwgZm5GRlRNaXgsIGZuRkZUSm9pbiwgZm5GRlRGaW5hbDtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuSW4yTWlkID0gXCJnMW1fYmF0Y2hUb0phY29iaWFuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgICAgICBmbkZGVEZpbmFsID0gXCJnMW1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuRkZUSm9pbiA9IFwiZzFtX2ZmdEpvaW5cIjtcbiAgICAgICAgICAgIGZuRkZUTWl4ID0gXCJnMW1fZmZ0TWl4XCI7XG5cbiAgICAgICAgICAgIGlmIChvdXRUeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5NaWQyT3V0ID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzJtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNNaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgZm5GRlRGaW5hbCA9IFwiZzJtX2ZmdEZpbmFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImcybV9mZnRKb2luXCI7XG4gICAgICAgICAgICBmbkZGVE1peCA9IFwiZzJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbk1pZDJPdXQgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBHLm44O1xuICAgICAgICAgICAgc01pZCA9IEcubjg7XG4gICAgICAgICAgICBzT3V0ID0gRy5uODtcbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgZm5GRlRGaW5hbCA9IFwiZnJtX2ZmdEZpbmFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbkZGVE1peCA9IFwiZnJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmV0dXJuQXJyYXkgPSBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZikpIHtcbiAgICAgICAgICAgIGJ1ZmYgPSBhcnJheTJidWZmZXIoYnVmZiwgc0luKTtcbiAgICAgICAgICAgIHJldHVybkFycmF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmYgPSBidWZmLnNsaWNlKDAsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZi5ieXRlTGVuZ3RoIC8gc0luO1xuICAgICAgICBjb25zdCBiaXRzID0gbG9nMihuUG9pbnRzKTtcblxuICAgICAgICBpZiAgKCgxIDw8IGJpdHMpICE9IG5Qb2ludHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZmdCBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIiApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpdHMgPT0gRnIucyArMSkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZPdXQ7XG5cbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgYnVmZk91dCA9ICBhd2FpdCBfZmZ0RXh0SW52KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0ID0gIGF3YWl0IF9mZnRFeHQoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXR1cm5BcnJheSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIyYXJyYXkoYnVmZk91dCwgc091dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGludjtcbiAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgIGludiA9IEZyLmludihGci5lKG5Qb2ludHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWZmT3V0O1xuXG4gICAgICAgIGJ1ZmZSZXZlcnNlQml0cyhidWZmLCBzSW4pO1xuXG4gICAgICAgIGxldCBjaHVua3M7XG4gICAgICAgIGxldCBwb2ludHNJbkNodW5rID0gTWF0aC5taW4oMSA8PCBNQVhfQklUU19USFJFQUQsIG5Qb2ludHMpO1xuICAgICAgICBsZXQgbkNodW5rcyA9IG5Qb2ludHMgLyBwb2ludHNJbkNodW5rO1xuXG4gICAgICAgIHdoaWxlICgobkNodW5rcyA8IHRtLmNvbmN1cnJlbmN5KSYmKHBvaW50c0luQ2h1bms+PTE2KSkge1xuICAgICAgICAgICAgbkNodW5rcyAqPSAyO1xuICAgICAgICAgICAgcG9pbnRzSW5DaHVuayAvPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbDJDaHVuayA9IGxvZzIocG9pbnRzSW5DaHVuayk7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8IG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdCAke2JpdHN9IG1peCBzdGFydDogJHtpfS8ke25DaHVua3N9YCk7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDAsIGxlbjogc01pZCpwb2ludHNJbkNodW5rfSk7XG4gICAgICAgICAgICBjb25zdCBidWZmQ2h1bmsgPSBidWZmLnNsaWNlKCAocG9pbnRzSW5DaHVuayAqIGkpKnNJbiwgKHBvaW50c0luQ2h1bmsgKiAoaSsxKSkqc0luKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIlNFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ1ZmZDaHVua30pO1xuICAgICAgICAgICAgaWYgKGZuSW4yTWlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5JbjJNaWQsIHBhcmFtczogW3t2YXI6MH0sIHt2YWw6IHBvaW50c0luQ2h1bmt9LCB7dmFyOiAwfV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGo9MTsgajw9bDJDaHVuaztqKyspIHtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTpmbkZGVE1peCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YWw6IGp9XX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobDJDaHVuaz09Yml0cykge1xuICAgICAgICAgICAgICAgIGlmIChmbkZGVEZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogaW52fSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbkZGVEZpbmFsLCAgcGFyYW1zOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzSW5DaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZm5NaWQyT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzSW5DaHVuaypzT3V0fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6MCwgdmFyOiAwLCBsZW46IHNNaWQqcG9pbnRzSW5DaHVua30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bS5xdWV1ZUFjdGlvbih0YXNrKS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgJHtsb2dnZXJUeHR9OiBmZnQgJHtiaXRzfSBtaXggZW5kOiAke2l9LyR7bkNodW5rc31gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8IG5DaHVua3M7IGkrKykgY2h1bmtzW2ldID0gY2h1bmtzW2ldWzBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBsMkNodW5rKzE7ICAgaTw9Yml0czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYCR7bG9nZ2VyVHh0fTogZmZ0ICAke2JpdHN9ICBqb2luOiAke2l9LyR7Yml0c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG5Hcm91cHMgPSAxIDw8IChiaXRzIC0gaSk7XG4gICAgICAgICAgICBjb25zdCBuQ2h1bmtzUGVyR3JvdXAgPSBuQ2h1bmtzIC8gbkdyb3VwcztcbiAgICAgICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxuR3JvdXBzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrPTA7IGsgPG5DaHVua3NQZXJHcm91cC8yOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBGci5leHAoIEZyLndbaV0sIGsqcG9pbnRzSW5DaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluYyA9IEZyLndbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8xID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMiA9IGoqbkNodW5rc1Blckdyb3VwICsgayArIG5DaHVua3NQZXJHcm91cC8yO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBjaHVua3NbbzFdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogY2h1bmtzW28yXX0pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDIsIGJ1ZmY6IGZpcnN0fSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMywgYnVmZjogaW5jfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbkZGVEpvaW4sICBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IHBvaW50c0luQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpPT1iaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5GRlRGaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogNCwgYnVmZjogaW52fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZURmluYWwsICBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzSW5DaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5GRlRGaW5hbCwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNJbkNodW5rfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogNH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuTWlkMk91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjoxfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDF9XX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c0luQ2h1bmsqc091dH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IHBvaW50c0luQ2h1bmsqc091dH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c0luQ2h1bmsqc01pZH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IHBvaW50c0luQ2h1bmsqc01pZH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaCh0bS5xdWV1ZUFjdGlvbih0YXNrKS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdCAke2JpdHN9IGpvaW4gICR7aX0vJHtiaXRzfSAgJHtqKzF9LyR7bkdyb3Vwc30gJHtrfS8ke25DaHVua3NQZXJHcm91cC8yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5Hcm91cHM7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGs9MDsgayA8bkNodW5rc1Blckdyb3VwLzI7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMSA9IGoqbkNodW5rc1Blckdyb3VwICsgaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzIgPSBqKm5DaHVua3NQZXJHcm91cCArIGsgKyBuQ2h1bmtzUGVyR3JvdXAvMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQ2h1bmsgPSByZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW28xXSA9IHJlc0NodW5rWzBdO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzJdID0gcmVzQ2h1bmtbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmYgaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc091dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW52ZXJzZSkge1xuICAgICAgICAgICAgYnVmZk91dC5zZXQoY2h1bmtzWzBdLnNsaWNlKChwb2ludHNJbkNodW5rLTEpKnNPdXQpKTtcbiAgICAgICAgICAgIGxldCBwPSBzT3V0O1xuICAgICAgICAgICAgZm9yIChsZXQgaT1uQ2h1bmtzLTE7IGk+MDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgYnVmZk91dC5zZXQoY2h1bmtzW2ldLCBwKTtcbiAgICAgICAgICAgICAgICBwICs9IHBvaW50c0luQ2h1bmsqc091dDtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2h1bmtzW2ldOyAgLy8gTGliZXJhdGUgbWVtXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbMF0uc2xpY2UoMCwgKHBvaW50c0luQ2h1bmstMSkqc091dCksIHApO1xuICAgICAgICAgICAgZGVsZXRlIGNodW5rc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbaV0sIHBvaW50c0luQ2h1bmsqc091dCppKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2h1bmtzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHVybkFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyMmFycmF5KGJ1ZmZPdXQsIHNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZPdXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0RXh0KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgbGV0IGIxLCBiMjtcbiAgICAgICAgYjEgPSBidWZmLnNsaWNlKCAwICwgYnVmZi5ieXRlTGVuZ3RoLzIpO1xuICAgICAgICBiMiA9IGJ1ZmYuc2xpY2UoIGJ1ZmYuYnl0ZUxlbmd0aC8yLCBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgW2IxLCBiMl0gPSBhd2FpdCBfZmZ0Sm9pbkV4dChiMSwgYjIsIFwiZmZ0Sm9pbkV4dFwiLCBGci5vbmUsIEZyLnNoaWZ0LCBpblR5cGUsIFwiamFjb2JpYW5cIiwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuXG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjEsIGZhbHNlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjIsIGZhbHNlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG5cbiAgICAgICAgY29uc3QgcmVzMSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBsZXQgYnVmZk91dDtcbiAgICAgICAgaWYgKHJlczFbMF0uYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShyZXMxWzBdLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT3V0LnNldChyZXMxWzBdKTtcbiAgICAgICAgYnVmZk91dC5zZXQocmVzMVsxXSwgcmVzMVswXS5ieXRlTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gYnVmZk91dDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0RXh0SW52KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgbGV0IGIxLCBiMjtcbiAgICAgICAgYjEgPSBidWZmLnNsaWNlKCAwICwgYnVmZi5ieXRlTGVuZ3RoLzIpO1xuICAgICAgICBiMiA9IGJ1ZmYuc2xpY2UoIGJ1ZmYuYnl0ZUxlbmd0aC8yLCBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaCggX2ZmdChiMSwgdHJ1ZSwgaW5UeXBlLCBcImphY29iaWFuXCIsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjIsIHRydWUsIGluVHlwZSwgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ2dlclR4dCkpO1xuXG4gICAgICAgIFtiMSwgYjJdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IHJlczEgPSBhd2FpdCBfZmZ0Sm9pbkV4dChiMSwgYjIsIFwiZmZ0Sm9pbkV4dEludlwiLCBGci5vbmUsIEZyLnNoaWZ0SW52LCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KTtcblxuICAgICAgICBsZXQgYnVmZk91dDtcbiAgICAgICAgaWYgKHJlczFbMF0uYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShyZXMxWzBdLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT3V0LnNldChyZXMxWzBdKTtcbiAgICAgICAgYnVmZk91dC5zZXQocmVzMVsxXSwgcmVzMVswXS5ieXRlTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gYnVmZk91dDtcbiAgICB9XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIF9mZnRKb2luRXh0KGJ1ZmYxLCBidWZmMiwgZm4sIGZpcnN0LCBpbmMsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgY29uc3QgTUFYX0NIVU5LX1NJWkUgPSAxPDwxNjtcbiAgICAgICAgY29uc3QgTUlOX0NIVU5LX1NJWkUgPSAxPDw0O1xuXG4gICAgICAgIGxldCBmbk5hbWU7XG4gICAgICAgIGxldCBmbkluMk1pZCwgZm5NaWQyT3V0O1xuICAgICAgICBsZXQgc091dCwgc0luLCBzTWlkO1xuXG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzFtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNNaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX1wiK2ZuO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTWlkMk91dCA9IFwiZzFtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzJtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX1wiK2ZuO1xuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTWlkMk91dCA9IFwiZzJtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBGci5uODtcbiAgICAgICAgICAgIHNPdXQgPSBGci5uODtcbiAgICAgICAgICAgIHNNaWQgPSBGci5uODtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZnJtX1wiICsgZm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmYxLmJ5dGVMZW5ndGggIT0gYnVmZjIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmMS5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKG5Qb2ludHMgIT0gMSA8PCBsb2cyKG5Qb2ludHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2h1bmtTaXplID0gTWF0aC5mbG9vcihuUG9pbnRzIC90bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGlmIChjaHVua1NpemUgPCBNSU5fQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUlOX0NIVU5LX1NJWkU7XG4gICAgICAgIGlmIChjaHVua1NpemUgPiBNQVhfQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUFYX0NIVU5LX1NJWkU7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdEpvaW5FeHQgU3RhcnQ6ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oblBvaW50cyAtIGksIGNodW5rU2l6ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2h1bmsgPSBGci5tdWwoZmlyc3QsIEZyLmV4cCggaW5jLCBpKSk7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGIxID0gYnVmZjEuc2xpY2UoaSpzSW4sIChpK24pKnNJbik7XG4gICAgICAgICAgICBjb25zdCBiMiA9IGJ1ZmYyLnNsaWNlKGkqc0luLCAoaStuKSpzSW4pO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDAsIGxlbjogc01pZCpufSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJTRVRcIiwgdmFyOiAwLCBidWZmOiBiMX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAxLCBsZW46IHNNaWQqbn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiU0VUXCIsIHZhcjogMSwgYnVmZjogYjJ9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZmlyc3RDaHVua30pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAzLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgIGlmIChmbkluMk1pZCkge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuSW4yTWlkLCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBufSwge3ZhcjogMH1dfSk7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5JbjJNaWQsIHBhcmFtczogW3t2YXI6MX0sIHt2YWw6IG59LCB7dmFyOiAxfV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgIHt2YWw6IEZyLnN9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgaWYgKGZuTWlkMk91dCkge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogbn0sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjoxfSwge3ZhbDogbn0sIHt2YXI6IDF9XX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IG4qc091dH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IG4qc091dH0pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spLnRoZW4oIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgJHtsb2dnZXJUeHR9OiBmZnRKb2luRXh0IEVuZDogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MTtcbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MjtcbiAgICAgICAgaWYgKG5Qb2ludHMgKiBzT3V0ID4gMTw8MjgpIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MSA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MSA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc091dCk7XG4gICAgICAgICAgICBmdWxsQnVmZk91dDIgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MS5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0Mi5zZXQocmVzdWx0W2ldWzFdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtmdWxsQnVmZk91dDEsIGZ1bGxCdWZmT3V0Ml07XG4gICAgfVxuXG5cbiAgICBHLmZmdCA9IGFzeW5jIGZ1bmN0aW9uKGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IF9mZnQoYnVmZiwgZmFsc2UsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgIH07XG5cbiAgICBHLmlmZnQgPSBhc3luYyBmdW5jdGlvbihidWZmLCBpblR5cGUsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBfZmZ0KGJ1ZmYsIHRydWUsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgIH07XG5cbiAgICBHLmxhZ3JhbmdlRXZhbHVhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICBpblR5cGUgPSBpblR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgb3V0VHlwZSA9IG91dFR5cGUgfHwgXCJhZmZpbmVcIjtcblxuICAgICAgICBsZXQgc0luO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBGci5uODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZi5ieXRlTGVuZ3RoIC9zSW47XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKG5Qb2ludHMpO1xuXG4gICAgICAgIGlmICgoMiAqKiBiaXRzKSpzSW4gIT0gYnVmZi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGlpbnZhbGlkIGlucHV0IHNpemVcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGludmFsaWQgSW5wdXQgc2l6ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXRzIDw9IEZyLnMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBHLmlmZnQoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0cyA+IEZyLnMrMSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwibGFncmFuZ2VFdmFsdWF0aW9ucyBpbnB1dCB0b28gYmlnXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGFncmFuZ2VFdmFsdWF0aW9ucyBpbnB1dCB0b28gYmlnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHQwID0gYnVmZi5zbGljZSgwLCBidWZmLmJ5dGVMZW5ndGgvMik7XG4gICAgICAgIGxldCB0MSA9IGJ1ZmYuc2xpY2UoYnVmZi5ieXRlTGVuZ3RoLzIsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cblxuICAgICAgICBjb25zdCBzaGlmdFRvU21hbGxNID0gRnIuZXhwKEZyLnNoaWZ0LCBuUG9pbnRzLzIpO1xuICAgICAgICBjb25zdCBzQ29uc3QgPSBGci5pbnYoIEZyLnN1YihGci5vbmUsIHNoaWZ0VG9TbWFsbE0pKTtcblxuICAgICAgICBbdDAsIHQxXSA9IGF3YWl0IF9mZnRKb2luRXh0KHQwLCB0MSwgXCJwcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uXCIsIHNDb25zdCwgRnIuc2hpZnRJbnYsIGluVHlwZSwgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ2dlclR4dCArIFwiIHByZXBcIik7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBwcm9taXNlcy5wdXNoKCBfZmZ0KHQwLCB0cnVlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0ICsgXCIgdDBcIikpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKCBfZmZ0KHQxLCB0cnVlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0ICsgXCIgdDFcIikpO1xuXG4gICAgICAgIFt0MCwgdDFdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBidWZmT3V0O1xuICAgICAgICBpZiAodDAuYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHQwLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkodDAuYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPdXQuc2V0KHQwKTtcbiAgICAgICAgYnVmZk91dC5zZXQodDEsIHQwLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgIH07XG5cbiAgICBHLmZmdE1peCA9IGFzeW5jIGZ1bmN0aW9uIGZmdE1peChidWZmKSB7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjM7XG4gICAgICAgIGxldCBmbk5hbWUsIGZuRkZUSm9pbjtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJnMW1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJnMm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZnJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHKTtcbiAgICAgICAgY29uc3QgcG93ZXIgPSBsb2cyKG5Qb2ludHMpO1xuXG4gICAgICAgIGxldCBuQ2h1bmtzID0gMSA8PCBsb2cyKHRtLmNvbmN1cnJlbmN5KTtcblxuICAgICAgICBpZiAoblBvaW50cyA8PSBuQ2h1bmtzKjIpIG5DaHVua3MgPSAxO1xuXG4gICAgICAgIGNvbnN0IHBvaW50c1BlckNodW5rID0gblBvaW50cyAvIG5DaHVua3M7XG5cbiAgICAgICAgY29uc3QgcG93ZXJDaHVuayA9IGxvZzIocG9pbnRzUGVyQ2h1bmspO1xuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYiA9IGJ1ZmYuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKChpKzEpKiBwb2ludHNQZXJDaHVuaykqc0cpO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBifSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTE7IGo8PXBvd2VyQ2h1bms7IGorKykge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBqfVxuICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIGNodW5rc1tpXSA9IHJlc3VsdFtpXVswXTtcblxuXG4gICAgICAgIGZvciAobGV0IGkgPSBwb3dlckNodW5rKzE7IGk8PXBvd2VyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5Hcm91cHMgPSAxIDw8IChwb3dlciAtIGkpO1xuICAgICAgICAgICAgY29uc3QgbkNodW5rc1Blckdyb3VwID0gbkNodW5rcyAvIG5Hcm91cHM7XG4gICAgICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkdyb3VwczsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrIDxuQ2h1bmtzUGVyR3JvdXAvMjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gRnIuZXhwKCBGci53W2ldLCBrKnBvaW50c1BlckNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5jID0gRnIud1tpXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzEgPSBqKm5DaHVua3NQZXJHcm91cCArIGs7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8yID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrICsgbkNodW5rc1Blckdyb3VwLzI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGNodW5rc1tvMV19KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBjaHVua3NbbzJdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZmlyc3R9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAzLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZUSm9pbiwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDEsIGxlbjogcG9pbnRzUGVyQ2h1bmsqc0d9KTtcbiAgICAgICAgICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5Hcm91cHM7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGs9MDsgayA8bkNodW5rc1Blckdyb3VwLzI7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMSA9IGoqbkNodW5rc1Blckdyb3VwICsgaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzIgPSBqKm5DaHVua3NQZXJHcm91cCArIGsgKyBuQ2h1bmtzUGVyR3JvdXAvMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQ2h1bmsgPSByZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW28xXSA9IHJlc0NodW5rWzBdO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzJdID0gcmVzQ2h1bmtbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQuc2V0KGNodW5rc1tpXSwgcCk7XG4gICAgICAgICAgICBwKz1jaHVua3NbaV0uYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdWxsQnVmZk91dDtcbiAgICB9O1xuXG4gICAgRy5mZnRKb2luID0gYXN5bmMgZnVuY3Rpb24gZmZ0Sm9pbihidWZmMSwgYnVmZjIsIGZpcnN0LCBpbmMpIHtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMztcbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2ZmdEpvaW5cIjtcbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImcybV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRnJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWZmMS5ieXRlTGVuZ3RoICE9IGJ1ZmYyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnVmZmVyIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZjEuYnl0ZUxlbmd0aCAvIHNHKTtcbiAgICAgICAgaWYgKG5Qb2ludHMgIT0gMSA8PCBsb2cyKG5Qb2ludHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbkNodW5rcyA9IDEgPDwgbG9nMih0bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGlmIChuUG9pbnRzIDw9IG5DaHVua3MqMikgbkNodW5rcyA9IDE7XG5cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBuUG9pbnRzIC8gbkNodW5rcztcblxuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdENodW5rID0gRnIubXVsKGZpcnN0LCBGci5leHAoaW5jLCBpKnBvaW50c1BlckNodW5rKSk7XG4gICAgICAgICAgICBjb25zdCBiMSA9IGJ1ZmYxLnNsaWNlKChpKiBwb2ludHNQZXJDaHVuaykqc0csICgoaSsxKSogcG9pbnRzUGVyQ2h1bmspKnNHKTtcbiAgICAgICAgICAgIGNvbnN0IGIyID0gYnVmZjIuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKChpKzEpKiBwb2ludHNQZXJDaHVuaykqc0cpO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBiMX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBiMn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBmaXJzdENodW5rfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDMsIGJ1ZmY6IGluY30pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzUGVyQ2h1bmsqc0d9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDEsIHZhcjogMSwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBmdWxsQnVmZk91dDE7XG4gICAgICAgIGxldCBmdWxsQnVmZk91dDI7XG4gICAgICAgIGlmIChidWZmMSBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzRyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dDEgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0cpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MS5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0Mi5zZXQocmVzdWx0W2ldWzFdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtmdWxsQnVmZk91dDEsIGZ1bGxCdWZmT3V0Ml07XG4gICAgfTtcblxuXG5cbiAgICBHLmZmdEZpbmFsID0gIGFzeW5jIGZ1bmN0aW9uIGZmdEZpbmFsKGJ1ZmYsIGZhY3Rvcikge1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCozO1xuICAgICAgICBjb25zdCBzR291dCA9IEcuRi5uOCoyO1xuICAgICAgICBsZXQgZm5OYW1lLCBmblRvQWZmaW5lO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIGZuVG9BZmZpbmUgPSBcImcxbV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIGZuVG9BZmZpbmUgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZi5ieXRlTGVuZ3RoIC8gc0cpO1xuICAgICAgICBpZiAoblBvaW50cyAhPSAxIDw8IGxvZzIoblBvaW50cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvaW50c1BlckNodW5rID0gTWF0aC5mbG9vcihuUG9pbnRzIC8gdG0uY29uY3VycmVuY3kpO1xuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBidWZmLnNsaWNlKChpKiBwb2ludHNQZXJDaHVuaykqc0csIChpKnBvaW50c1BlckNodW5rK24pKnNHKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMCwgYnVmZjogYn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBmYWN0b3J9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuVG9BZmZpbmUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IG4qc0dvdXR9KTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0bS5xdWV1ZUFjdGlvbih0YXNrKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0dvdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPXJlc3VsdC5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgV2FzbUZpZWxkMSBmcm9tIFwiLi93YXNtX2ZpZWxkMS5qc1wiO1xuaW1wb3J0IFdhc21GaWVsZDIgZnJvbSBcIi4vd2FzbV9maWVsZDIuanNcIjtcbmltcG9ydCBXYXNtRmllbGQzIGZyb20gXCIuL3dhc21fZmllbGQzLmpzXCI7XG5pbXBvcnQgV2FzbUN1cnZlIGZyb20gXCIuL3dhc21fY3VydmUuanNcIjtcbmltcG9ydCBidWlsZFRocmVhZE1hbmFnZXIgZnJvbSBcIi4vdGhyZWFkbWFuLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgYnVpbGRCYXRjaEFwcGx5S2V5IGZyb20gXCIuL2VuZ2luZV9hcHBseWtleS5qc1wiO1xuaW1wb3J0IGJ1aWxkUGFpcmluZyBmcm9tIFwiLi9lbmdpbmVfcGFpcmluZy5qc1wiO1xuaW1wb3J0IGJ1aWxkTXVsdGlFeHAgZnJvbSBcIi4vZW5naW5lX211bHRpZXhwLmpzXCI7XG5pbXBvcnQgYnVpbGRGRlQgZnJvbSBcIi4vZW5naW5lX2ZmdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZEVuZ2luZShwYXJhbXMpIHtcblxuICAgIGNvbnN0IHRtID0gYXdhaXQgYnVpbGRUaHJlYWRNYW5hZ2VyKHBhcmFtcy53YXNtLCBwYXJhbXMuc2luZ2xlVGhyZWFkKTtcblxuXG4gICAgY29uc3QgY3VydmUgPSB7fTtcblxuICAgIGN1cnZlLnEgPSBTY2FsYXIuZShwYXJhbXMud2FzbS5xLnRvU3RyaW5nKCkpO1xuICAgIGN1cnZlLnIgPSBTY2FsYXIuZShwYXJhbXMud2FzbS5yLnRvU3RyaW5nKCkpO1xuICAgIGN1cnZlLm5hbWUgPSBwYXJhbXMubmFtZTtcbiAgICBjdXJ2ZS50bSA9IHRtO1xuICAgIGN1cnZlLnByZVBTaXplID0gcGFyYW1zLndhc20ucHJlUFNpemU7XG4gICAgY3VydmUucHJlUVNpemUgPSBwYXJhbXMud2FzbS5wcmVRU2l6ZTtcbiAgICBjdXJ2ZS5GciA9IG5ldyBXYXNtRmllbGQxKHRtLCBcImZybVwiLCBwYXJhbXMubjhyLCBwYXJhbXMucik7XG4gICAgY3VydmUuRjEgPSBuZXcgV2FzbUZpZWxkMSh0bSwgXCJmMW1cIiwgcGFyYW1zLm44cSwgcGFyYW1zLnEpO1xuICAgIGN1cnZlLkYyID0gbmV3IFdhc21GaWVsZDIodG0sIFwiZjJtXCIsIGN1cnZlLkYxKTtcbiAgICBjdXJ2ZS5HMSA9IG5ldyBXYXNtQ3VydmUodG0sIFwiZzFtXCIsIGN1cnZlLkYxLCBwYXJhbXMud2FzbS5wRzFnZW4sIHBhcmFtcy53YXNtLnBHMWIsIHBhcmFtcy5jb2ZhY3RvckcxKTtcbiAgICBjdXJ2ZS5HMiA9IG5ldyBXYXNtQ3VydmUodG0sIFwiZzJtXCIsIGN1cnZlLkYyLCBwYXJhbXMud2FzbS5wRzJnZW4sIHBhcmFtcy53YXNtLnBHMmIsIHBhcmFtcy5jb2ZhY3RvckcyKTtcbiAgICBjdXJ2ZS5GNiA9IG5ldyBXYXNtRmllbGQzKHRtLCBcImY2bVwiLCBjdXJ2ZS5GMik7XG4gICAgY3VydmUuRjEyID0gbmV3IFdhc21GaWVsZDIodG0sIFwiZnRtXCIsIGN1cnZlLkY2KTtcblxuICAgIGN1cnZlLkd0ID0gY3VydmUuRjEyO1xuXG4gICAgYnVpbGRCYXRjaEFwcGx5S2V5KGN1cnZlLCBcIkcxXCIpO1xuICAgIGJ1aWxkQmF0Y2hBcHBseUtleShjdXJ2ZSwgXCJHMlwiKTtcbiAgICBidWlsZEJhdGNoQXBwbHlLZXkoY3VydmUsIFwiRnJcIik7XG5cbiAgICBidWlsZE11bHRpRXhwKGN1cnZlLCBcIkcxXCIpO1xuICAgIGJ1aWxkTXVsdGlFeHAoY3VydmUsIFwiRzJcIik7XG5cbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJHMVwiKTtcbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJHMlwiKTtcbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJGclwiKTtcblxuICAgIGJ1aWxkUGFpcmluZyhjdXJ2ZSk7XG5cbiAgICBjdXJ2ZS5hcnJheTJidWZmZXIgPSBmdW5jdGlvbihhcnIsIHNHKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRyphcnIubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBidWZmLnNldChhcnJbaV0sIGkqc0cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfTtcblxuICAgIGN1cnZlLmJ1ZmZlcjJhcnJheSA9IGZ1bmN0aW9uKGJ1ZmYgLCBzRykge1xuICAgICAgICBjb25zdCBuPSBidWZmLmJ5dGVMZW5ndGggLyBzRztcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBidWZmLnNsaWNlKGkqc0csIGkqc0crc0cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcblxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbWJ1aWxkZXJcblxuICAgIHdhc21idWlsZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbWJ1aWxkZXIuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIobikge1xuICAgIHJldHVybiBCaWdJbnQobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lZ2F0aXZlKG4pIHtcbiAgICByZXR1cm4gbiA8IDBuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNaZXJvKG4pIHtcbiAgICByZXR1cm4gbiA9PT0gMG47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRMZW5ndGgobikge1xuICAgIGlmIChpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aCAtIDE7IC8vIGRpc2NhcmQgdGhlIC0gc2lnblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1MzIobikge1xuICAgIGNvbnN0IGIgPSBbXTtcbiAgICBjb25zdCB2ID0gdG9OdW1iZXIobik7XG4gICAgYi5wdXNoKE51bWJlcih2ICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gOG4gJiAweEZGbikpO1xuICAgIGIucHVzaChOdW1iZXIodiA+PiAxNm4gJiAweEZGbikpO1xuICAgIGIucHVzaChOdW1iZXIodiA+PiAyNG4gJiAweEZGbikpO1xuICAgIHJldHVybiBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdTY0KG4pIHtcbiAgICBjb25zdCBiID0gW107XG4gICAgY29uc3QgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGIucHVzaChOdW1iZXIodiAmIDB4RkZuKSk7XG4gICAgYi5wdXNoKE51bWJlcih2ID4+IDhuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMTZuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMjRuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMzJuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNDBuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNDhuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNTZuICYgMHhGRm4pKTtcbiAgICByZXR1cm4gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVVRGOEFycmF5KHN0cikge1xuICAgIHZhciB1dGY4ID0gW107XG4gICAgZm9yICh2YXIgaT0wOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDgwKSB1dGY4LnB1c2goY2hhcmNvZGUpO1xuICAgICAgICBlbHNlIGlmIChjaGFyY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgICB1dGY4LnB1c2goMHhjMCB8IChjaGFyY29kZSA+PiA2KSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoYXJjb2RlIDwgMHhkODAwIHx8IGNoYXJjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgICAgdXRmOC5wdXNoKDB4ZTAgfCAoY2hhcmNvZGUgPj4gMTIpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlPj42KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAvLyBVVEYtMTYgZW5jb2RlcyAweDEwMDAwLTB4MTBGRkZGIGJ5XG4gICAgICAgICAgICAvLyBzdWJ0cmFjdGluZyAweDEwMDAwIGFuZCBzcGxpdHRpbmcgdGhlXG4gICAgICAgICAgICAvLyAyMCBiaXRzIG9mIDB4MC0weEZGRkZGIGludG8gdHdvIGhhbHZlc1xuICAgICAgICAgICAgY2hhcmNvZGUgPSAweDEwMDAwICsgKCgoY2hhcmNvZGUgJiAweDNmZik8PDEwKVxuICAgICAgICAgICAgICAgICAgICAgIHwgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGYwIHwgKGNoYXJjb2RlID4+MTgpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlPj4xMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZT4+NikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1dGY4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKHN0cikge1xuICAgIGNvbnN0IGJ5dGVzID0gdG9VVEY4QXJyYXkoc3RyKTtcbiAgICByZXR1cm4gWyAuLi52YXJ1aW50MzIoYnl0ZXMubGVuZ3RoKSwgLi4uYnl0ZXMgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcnVpbnQobikge1xuICAgIGNvbnN0IGNvZGUgPSBbXTtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmIChpc05lZ2F0aXZlKHYpKSB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgY2Fubm90IGJlIG5lZ2F0aXZlXCIpO1xuICAgIHdoaWxlICghaXNaZXJvKHYpKSB7XG4gICAgICAgIGNvZGUucHVzaChOdW1iZXIodiAmIDB4N0ZuKSk7XG4gICAgICAgIHYgPSB2ID4+IDduO1xuICAgIH1cbiAgICBpZiAoY29kZS5sZW5ndGg9PTApIGNvZGUucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8Y29kZS5sZW5ndGgtMTsgaSsrKSB7XG4gICAgICAgIGNvZGVbaV0gPSBjb2RlW2ldIHwgMHg4MDtcbiAgICB9XG4gICAgcmV0dXJuIGNvZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpbnQoX24pIHtcbiAgICBsZXQgbiwgc2lnbjtcbiAgICBjb25zdCBiaXRzID0gYml0TGVuZ3RoKF9uKTtcbiAgICBpZiAoX248MCkge1xuICAgICAgICBzaWduID0gdHJ1ZTtcbiAgICAgICAgbiA9ICgxbiA8PCBCaWdJbnQoYml0cykpICsgX247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbiA9IGZhbHNlO1xuICAgICAgICBuID0gdG9OdW1iZXIoX24pO1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nQml0cyA9IDcgLSAoYml0cyAlIDcpO1xuXG4gICAgY29uc3QgcGFkZGluZyA9ICgoMW4gPDwgQmlnSW50KHBhZGRpbmdCaXRzKSkgLSAxbikgPDwgQmlnSW50KGJpdHMpO1xuICAgIGNvbnN0IHBhZGRpbmdNYXNrID0gKCgxIDw8ICg3IC0gcGFkZGluZ0JpdHMpKS0xKSB8IDB4ODA7XG5cbiAgICBjb25zdCBjb2RlID0gdmFydWludChuICsgcGFkZGluZyk7XG5cbiAgICBpZiAoIXNpZ24pIHtcbiAgICAgICAgY29kZVtjb2RlLmxlbmd0aC0xXSA9IGNvZGVbY29kZS5sZW5ndGgtMV0gJiBwYWRkaW5nTWFzaztcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmludDMyKG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRm4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gYmlnXCIpO1xuICAgIGlmICh2ID4gMHg3RkZGRkZGRm4pIHYgPSB2IC0gMHgxMDAwMDAwMDBuO1xuICAgIC8vIGJpZ0ludChcIi04MDAwMDAwMFwiLCAxNikgYXMgYmFzZTEwXG4gICAgaWYgKHYgPCAtMjE0NzQ4MzY0OG4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gc21hbGxcIik7XG4gICAgcmV0dXJuIHZhcmludCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmludDY0KG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRkZGRkZGRkZGbikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBiaWdcIik7XG4gICAgaWYgKHYgPiAweDdGRkZGRkZGRkZGRkZGRkZuKSB2ID0gdiAtIDB4MTAwMDAwMDAwMDAwMDAwMDBuO1xuICAgIC8vIGJpZ0ludChcIi04MDAwMDAwMDAwMDAwMDAwXCIsIDE2KSBhcyBiYXNlMTBcbiAgICBpZiAodiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4bikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBzbWFsbFwiKTtcbiAgICByZXR1cm4gdmFyaW50KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFydWludDMyKG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRm4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gYmlnXCIpO1xuICAgIHJldHVybiB2YXJ1aW50KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFydWludDY0KG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRkZGRkZGRkZGbikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBiaWdcIik7XG4gICAgcmV0dXJuIHZhcnVpbnQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0hleFN0cmluZyhieXRlQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlQXJyYXksIGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgICAgcmV0dXJuIChcIjBcIiArIChieXRlICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGluZXNbaV0pIGxpbmVzW2ldID0gXCIgICAgXCIrbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0ZXh0Lmxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgdGV4dFtpXSA9IGlkZW50KHRleHRbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtYnVpbGRlclxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtYnVpbGRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtYnVpbGRlci4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoZnVuYykge1xuICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IGZ1bmMuZnVuY3Rpb25OYW1lO1xuICAgICAgICB0aGlzLm1vZHVsZSA9IGZ1bmMubW9kdWxlO1xuICAgIH1cblxuICAgIHNldExvY2FsKGxvY2FsTmFtZSwgdmFsQ29kZSkge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmMubG9jYWxJZHhCeU5hbWVbbG9jYWxOYW1lXTtcbiAgICAgICAgaWYgKGlkeCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBWYXJpYWJsZSBub3QgZGVmaW5lZDogRnVuY3Rpb246ICR7dGhpcy5mdW5jdGlvbk5hbWV9IGxvY2FsOiAke2xvY2FsTmFtZX0gYCk7XG4gICAgICAgIHJldHVybiBbLi4udmFsQ29kZSwgMHgyMSwgLi4udXRpbHMudmFydWludDMyKCBpZHggKV07XG4gICAgfVxuXG4gICAgdGVlTG9jYWwobG9jYWxOYW1lLCB2YWxDb2RlKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZnVuYy5sb2NhbElkeEJ5TmFtZVtsb2NhbE5hbWVdO1xuICAgICAgICBpZiAoaWR4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIFZhcmlhYmxlIG5vdCBkZWZpbmVkOiBGdW5jdGlvbjogJHt0aGlzLmZ1bmN0aW9uTmFtZX0gbG9jYWw6ICR7bG9jYWxOYW1lfSBgKTtcbiAgICAgICAgcmV0dXJuIFsuLi52YWxDb2RlLCAweDIyLCAuLi51dGlscy52YXJ1aW50MzIoIGlkeCApXTtcbiAgICB9XG5cbiAgICBnZXRMb2NhbChsb2NhbE5hbWUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5mdW5jLmxvY2FsSWR4QnlOYW1lW2xvY2FsTmFtZV07XG4gICAgICAgIGlmIChpZHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgVmFyaWFibGUgbm90IGRlZmluZWQ6IEZ1bmN0aW9uOiAke3RoaXMuZnVuY3Rpb25OYW1lfSBsb2NhbDogJHtsb2NhbE5hbWV9IGApO1xuICAgICAgICByZXR1cm4gWzB4MjAsIC4uLnV0aWxzLnZhcnVpbnQzMiggaWR4ICldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkOF9zKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDAgOiBfYWxpZ247ICAvLyA4IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDMwLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkOF91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDAgOiBfYWxpZ247ICAvLyA4IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDMxLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkMTZfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAxIDogX2FsaWduOyAgLy8gMTYgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MzIsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTY0X2xvYWQxNl91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiBfYWxpZ247ICAvLyAxNiBiaXRzIGFsaWdubWVudCBieSBkZWZhdWx0XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgMHgzMywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpNjRfbG9hZDMyX3MoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMiA6IF9hbGlnbjsgIC8vIDMyIGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDM0LCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkMzJfdShpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAyIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MzUsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTY0X2xvYWQoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMyA6IF9hbGlnbjsgIC8vIDY0IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDI5LCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuXG4gICAgaTY0X3N0b3JlKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAzO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAzO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzNywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpNjRfc3RvcmUzMihpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24sIF9jb2RlVmFsKSB7XG4gICAgICAgIGxldCBvZmZzZXQsIGFsaWduLCBjb2RlVmFsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfb2Zmc2V0KSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGFsaWduID0gMjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX2FsaWduKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gMjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfYWxpZ247XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfY29kZVZhbCkpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IF9vZmZzZXQ7XG4gICAgICAgICAgICBhbGlnbiA9IF9hbGlnbjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfY29kZVZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIC4uLmNvZGVWYWwsIDB4M2UsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG5cbiAgICBpNjRfc3RvcmUxNihpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24sIF9jb2RlVmFsKSB7XG4gICAgICAgIGxldCBvZmZzZXQsIGFsaWduLCBjb2RlVmFsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfb2Zmc2V0KSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGFsaWduID0gMTtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX2FsaWduKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gMTtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfYWxpZ247XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfY29kZVZhbCkpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IF9vZmZzZXQ7XG4gICAgICAgICAgICBhbGlnbiA9IF9hbGlnbjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfY29kZVZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIC4uLmNvZGVWYWwsIDB4M2QsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG5cbiAgICBpNjRfc3RvcmU4KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfbG9hZDhfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAwIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MmMsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX2xvYWQ4X3UoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMCA6IF9hbGlnbjsgIC8vIDMyIGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDJkLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGkzMl9sb2FkMTZfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAxIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MmUsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX2xvYWQxNl91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiBfYWxpZ247ICAvLyAzMiBiaXRzIGFsaWdubWVudCBieSBkZWZhdWx0XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgMHgyZiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfbG9hZChpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAyIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MjgsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX3N0b3JlKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAyO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAyO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzNiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cblxuICAgIGkzMl9zdG9yZTE2KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAxO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAxO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfc3RvcmU4KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYSwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBjYWxsKGZuTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLm1vZHVsZS5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdO1xuICAgICAgICBpZiAoaWR4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIG5vdCBkZWZpbmVkOiBGdW5jdGlvbjogJHtmbk5hbWV9YCk7XG4gICAgICAgIHJldHVybiBbLi4uW10uY29uY2F0KC4uLmFyZ3MpLCAweDEwLCAuLi51dGlscy52YXJ1aW50MzIoaWR4KV07XG4gICAgfVxuXG4gICAgY2FsbF9pbmRpcmVjdChmbklkeCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gWy4uLltdLmNvbmNhdCguLi5hcmdzKSwgLi4uZm5JZHgsIDB4MTEsIDAsIDBdO1xuICAgIH1cblxuICAgIGlmKGNvbmRDb2RlLCB0aGVuQ29kZSwgZWxzZUNvZGUpIHtcbiAgICAgICAgaWYgKGVsc2VDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmNvbmRDb2RlLCAweDA0LCAweDQwLCAuLi50aGVuQ29kZSwgMHgwNSwgLi4uZWxzZUNvZGUsIDB4MGJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5jb25kQ29kZSwgMHgwNCwgMHg0MCwgLi4udGhlbkNvZGUsIDB4MGJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmxvY2soYkNvZGUpIHsgcmV0dXJuIFsweDAyLCAweDQwLCAuLi5iQ29kZSwgMHgwYl07IH1cbiAgICBsb29wKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIFsweDAzLCAweDQwLCAuLi5bXS5jb25jYXQoLi4uWy4uLmFyZ3NdKSwgMHgwYl07XG4gICAgfVxuICAgIGJyX2lmKHJlbFBhdGgsIGNvbmRDb2RlKSB7IHJldHVybiBbLi4uY29uZENvZGUsIDB4MGQsIC4uLnV0aWxzLnZhcnVpbnQzMihyZWxQYXRoKV07IH1cbiAgICBicihyZWxQYXRoKSB7IHJldHVybiBbMHgwYywgLi4udXRpbHMudmFydWludDMyKHJlbFBhdGgpXTsgfVxuICAgIHJldChyQ29kZSkgeyByZXR1cm4gWy4uLnJDb2RlLCAweDBmXTsgfVxuICAgIGRyb3AoZENvZGUpIHsgcmV0dXJuIFsuLi5kQ29kZSwgIDB4MWFdOyB9XG5cbiAgICBpNjRfY29uc3QobnVtKSB7IHJldHVybiBbMHg0MiwgLi4udXRpbHMudmFyaW50NjQobnVtKV07IH1cbiAgICBpMzJfY29uc3QobnVtKSB7IHJldHVybiBbMHg0MSwgLi4udXRpbHMudmFyaW50MzIobnVtKV07IH1cblxuXG4gICAgaTY0X2VxeihvcGNvZGUpIHsgcmV0dXJuIFsuLi5vcGNvZGUsIDB4NTBdOyB9XG4gICAgaTY0X2VxKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDUxXTsgfVxuICAgIGk2NF9uZShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1Ml07IH1cbiAgICBpNjRfbHRfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1M107IH1cbiAgICBpNjRfbHRfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1NF07IH1cbiAgICBpNjRfZ3RfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1NV07IH1cbiAgICBpNjRfZ3RfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1Nl07IH1cbiAgICBpNjRfbGVfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1N107IH1cbiAgICBpNjRfbGVfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1OF07IH1cbiAgICBpNjRfZ2VfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1OV07IH1cbiAgICBpNjRfZ2VfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1YV07IH1cbiAgICBpNjRfYWRkKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDdjXTsgfVxuICAgIGk2NF9zdWIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4N2RdOyB9XG4gICAgaTY0X211bChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3ZV07IH1cbiAgICBpNjRfZGl2X3Mob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4N2ZdOyB9XG4gICAgaTY0X2Rpdl91KG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDgwXTsgfVxuICAgIGk2NF9yZW1fcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4MV07IH1cbiAgICBpNjRfcmVtX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODJdOyB9XG4gICAgaTY0X2FuZChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4M107IH1cbiAgICBpNjRfb3Iob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODRdOyB9XG4gICAgaTY0X3hvcihvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4NV07IH1cbiAgICBpNjRfc2hsKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDg2XTsgfVxuICAgIGk2NF9zaHJfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4N107IH1cbiAgICBpNjRfc2hyX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODhdOyB9XG4gICAgaTY0X2V4dGVuZF9pMzJfcyhvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHhhY107IH1cbiAgICBpNjRfZXh0ZW5kX2kzMl91KG9wMWNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAweGFkXTsgfVxuICAgIGk2NF9jbHoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NzldOyB9XG4gICAgaTY0X2N0eihvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHg3YV07IH1cblxuICAgIGkzMl9lcXoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NDVdOyB9XG4gICAgaTMyX2VxKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDQ2XTsgfVxuICAgIGkzMl9uZShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0N107IH1cbiAgICBpMzJfbHRfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0OF07IH1cbiAgICBpMzJfbHRfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0OV07IH1cbiAgICBpMzJfZ3RfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0YV07IH1cbiAgICBpMzJfZ3RfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Yl07IH1cbiAgICBpMzJfbGVfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Y107IH1cbiAgICBpMzJfbGVfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0ZF07IH1cbiAgICBpMzJfZ2VfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0ZV07IH1cbiAgICBpMzJfZ2VfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Zl07IH1cbiAgICBpMzJfYWRkKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDZhXTsgfVxuICAgIGkzMl9zdWIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NmJdOyB9XG4gICAgaTMyX211bChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg2Y107IH1cbiAgICBpMzJfZGl2X3Mob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NmRdOyB9XG4gICAgaTMyX2Rpdl91KG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDZlXTsgfVxuICAgIGkzMl9yZW1fcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg2Zl07IH1cbiAgICBpMzJfcmVtX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzBdOyB9XG4gICAgaTMyX2FuZChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3MV07IH1cbiAgICBpMzJfb3Iob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzJdOyB9XG4gICAgaTMyX3hvcihvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3M107IH1cbiAgICBpMzJfc2hsKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDc0XTsgfVxuICAgIGkzMl9zaHJfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3NV07IH1cbiAgICBpMzJfc2hyX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzZdOyB9XG4gICAgaTMyX3JvdGwob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzddOyB9XG4gICAgaTMyX3JvdHIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzhdOyB9XG4gICAgaTMyX3dyYXBfaTY0KG9wMWNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAweGE3XTsgfVxuICAgIGkzMl9jbHoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NjddOyB9XG4gICAgaTMyX2N0eihvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHg2OF07IH1cblxuICAgIHVucmVhY2hhYmxlKCkgeyByZXR1cm4gWyAweDAgXTsgfVxuXG4gICAgY3VycmVudF9tZW1vcnkoKSB7IHJldHVybiBbIDB4M2YsIDBdOyB9XG5cbiAgICBjb21tZW50KCkgeyByZXR1cm4gW107IH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtYnVpbGRlclxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtYnVpbGRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtYnVpbGRlci4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7IENvZGVCdWlsZGVyIH0gZnJvbSBcIi4vY29kZWJ1aWxkZXIuanNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmNvbnN0IHR5cGVDb2RlcyA9IHtcbiAgICBcImkzMlwiOiAweDdmLFxuICAgIFwiaTY0XCI6IDB4N2UsXG4gICAgXCJmMzJcIjogMHg3ZCxcbiAgICBcImY2NFwiOiAweDdjLFxuICAgIFwiYW55ZnVuY1wiOiAweDcwLFxuICAgIFwiZnVuY1wiOiAweDYwLFxuICAgIFwiZW1wdHlibG9ja1wiOiAweDQwXG59O1xuXG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIge1xuXG4gICAgY29uc3RydWN0b3IgKG1vZHVsZSwgZm5OYW1lLCBmblR5cGUsIG1vZHVsZU5hbWUsIGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAoZm5UeXBlID09IFwiaW1wb3J0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm5UeXBlID0gXCJpbXBvcnRcIjtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTmFtZSA9IGZpZWxkTmFtZTtcbiAgICAgICAgfSBlbHNlIGlmIChmblR5cGUgPT0gXCJpbnRlcm5hbFwiKSB7XG4gICAgICAgICAgICB0aGlzLmZuVHlwZSA9IFwiaW50ZXJuYWxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZnVuY3Rpb24gZm5UeXBlOiBcIiArIGZuVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XG4gICAgICAgIHRoaXMuZm5OYW1lID0gZm5OYW1lO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLmxvY2FscyA9IFtdO1xuICAgICAgICB0aGlzLmxvY2FsSWR4QnlOYW1lID0ge307XG4gICAgICAgIHRoaXMuY29kZSA9IFtdO1xuICAgICAgICB0aGlzLnJldHVyblR5cGUgPSBudWxsO1xuICAgICAgICB0aGlzLm5leHRMb2NhbCA9MDtcbiAgICB9XG5cbiAgICBhZGRQYXJhbShwYXJhbU5hbWUsIHBhcmFtVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5sb2NhbElkeEJ5TmFtZVtwYXJhbU5hbWVdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJhbSBhbHJlYWR5IGV4aXN0cy4gRnVuY3Rpb246ICR7dGhpcy5mbk5hbWV9LCBQYXJhbTogJHtwYXJhbU5hbWV9IGApO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLm5leHRMb2NhbCsrO1xuICAgICAgICB0aGlzLmxvY2FsSWR4QnlOYW1lW3BhcmFtTmFtZV0gPSBpZHg7XG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogcGFyYW1UeXBlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZExvY2FsKGxvY2FsTmFtZSwgbG9jYWxUeXBlLCBfbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgMTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxJZHhCeU5hbWVbbG9jYWxOYW1lXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbG9jYWwgYWxyZWFkeSBleGlzdHMuIEZ1bmN0aW9uOiAke3RoaXMuZm5OYW1lfSwgUGFyYW06ICR7bG9jYWxOYW1lfSBgKTtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5uZXh0TG9jYWwrKztcbiAgICAgICAgdGhpcy5sb2NhbElkeEJ5TmFtZVtsb2NhbE5hbWVdID0gaWR4O1xuICAgICAgICB0aGlzLmxvY2Fscy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsVHlwZSxcbiAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFJldHVyblR5cGUocmV0dXJuVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXR1cm5UeXBlIGFscmVhZHkgZGVmaW5lZC4gRnVuY3Rpb246ICR7dGhpcy5mbk5hbWV9YCk7XG4gICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IHJldHVyblR5cGU7XG4gICAgfVxuXG4gICAgZ2V0U2lnbmF0dXJlKCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBbLi4udXRpbHMudmFydWludDMyKHRoaXMucGFyYW1zLmxlbmd0aCksIC4uLnRoaXMucGFyYW1zLm1hcCgocCkgPT4gdHlwZUNvZGVzW3AudHlwZV0pXTtcbiAgICAgICAgY29uc3QgcmV0dXJucyA9IHRoaXMucmV0dXJuVHlwZSA/IFsweDAxLCB0eXBlQ29kZXNbdGhpcy5yZXR1cm5UeXBlXV0gOiBbMF07XG4gICAgICAgIHJldHVybiBbMHg2MCwgLi4ucGFyYW1zLCAuLi5yZXR1cm5zXTtcbiAgICB9XG5cbiAgICBnZXRCb2R5KCkge1xuICAgICAgICBjb25zdCBsb2NhbHMgPSB0aGlzLmxvY2Fscy5tYXAoKGwpID0+IFtcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMihsLmxlbmd0aCksXG4gICAgICAgICAgICB0eXBlQ29kZXNbbC50eXBlXVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCBib2R5ID0gW1xuICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMubG9jYWxzLmxlbmd0aCksXG4gICAgICAgICAgICAuLi5bXS5jb25jYXQoLi4ubG9jYWxzKSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29kZSxcbiAgICAgICAgICAgIDB4MGJcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMihib2R5Lmxlbmd0aCksXG4gICAgICAgICAgICAuLi5ib2R5XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYWRkQ29kZSguLi5jb2RlKSB7XG4gICAgICAgIHRoaXMuY29kZS5wdXNoKC4uLltdLmNvbmNhdCguLi5bLi4uY29kZV0pKTtcbiAgICB9XG5cbiAgICBnZXRDb2RlQnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRlcih0aGlzKTtcbiAgICB9XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbWJ1aWxkZXJcblxuICAgIHdhc21idWlsZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbWJ1aWxkZXIuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbmltcG9ydCB7IEZ1bmN0aW9uQnVpbGRlciB9IGZyb20gXCIuL2Z1bmN0aW9uYnVpbGRlci5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUJ1aWxkZXIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuZnVuY3Rpb25JZHhCeU5hbWUgPSB7fTtcbiAgICAgICAgdGhpcy5uSW1wb3J0RnVuY3Rpb25zID0gMDtcbiAgICAgICAgdGhpcy5uSW50ZXJuYWxGdW5jdGlvbnMgPTA7XG4gICAgICAgIHRoaXMubWVtb3J5ID0ge1xuICAgICAgICAgICAgcGFnZXNTaXplOiAxLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJlbnZcIixcbiAgICAgICAgICAgIGZpZWxkTmFtZTogXCJtZW1vcnlcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZyZWUgPSA4O1xuICAgICAgICB0aGlzLmRhdGFzID0gW107XG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xuICAgICAgICB0aGlzLmV4cG9ydHMgPSBbXTtcbiAgICAgICAgdGhpcy5mdW5jdGlvbnNUYWJsZSA9IFtdO1xuICAgIH1cblxuICAgIGJ1aWxkKCkge1xuICAgICAgICB0aGlzLl9zZXRTaWduYXR1cmVzKCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShbXG4gICAgICAgICAgICAuLi51dGlscy51MzIoMHg2ZDczNjEwMCksXG4gICAgICAgICAgICAuLi51dGlscy51MzIoMSksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZFR5cGUoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkSW1wb3J0KCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEZ1bmN0aW9uRGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEZ1bmN0aW9uc1RhYmxlKCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEV4cG9ydHMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkRWxlbWVudHMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkQ29kZSgpLFxuICAgICAgICAgICAgLi4udGhpcy5fYnVpbGREYXRhKClcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgYWRkRnVuY3Rpb24oZm5OYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gYWxyZWFkeSBkZWZpbmVkOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25JZHhCeU5hbWVbZm5OYW1lXSA9IGlkeDtcblxuICAgICAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKG5ldyBGdW5jdGlvbkJ1aWxkZXIodGhpcywgZm5OYW1lLCBcImludGVybmFsXCIpKTtcblxuICAgICAgICB0aGlzLm5JbnRlcm5hbEZ1bmN0aW9ucysrO1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNbaWR4XTtcbiAgICB9XG5cbiAgICBhZGRJaW1wb3J0RnVuY3Rpb24oZm5OYW1lLCBtb2R1bGVOYW1lLCBfZmllbGROYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gYWxyZWFkeSBkZWZpbmVkOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBpZiAoICAodGhpcy5mdW5jdGlvbnMubGVuZ3RoPjApXG4gICAgICAgICAgICAmJih0aGlzLmZ1bmN0aW9uc1t0aGlzLmZ1bmN0aW9ucy5sZW5ndGgtMV0udHlwZSA9PSBcImludGVybmFsXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVuY3Rpb25zIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGludGVybmFsOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBsZXQgZmllbGROYW1lID0gX2ZpZWxkTmFtZSB8fCBmbk5hbWU7XG5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5mdW5jdGlvbnMubGVuZ3RoO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV0gPSBpZHg7XG5cbiAgICAgICAgdGhpcy5mdW5jdGlvbnMucHVzaChuZXcgRnVuY3Rpb25CdWlsZGVyKHRoaXMsIGZuTmFtZSwgXCJpbXBvcnRcIiwgbW9kdWxlTmFtZSwgZmllbGROYW1lKSk7XG5cbiAgICAgICAgdGhpcy5uSW1wb3J0RnVuY3Rpb25zICsrO1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNbaWR4XTtcbiAgICB9XG5cbiAgICBzZXRNZW1vcnkocGFnZXNTaXplLCBtb2R1bGVOYW1lLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgdGhpcy5tZW1vcnkgPSB7XG4gICAgICAgICAgICBwYWdlc1NpemU6IHBhZ2VzU2l6ZSxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6IG1vZHVsZU5hbWUgfHwgXCJlbnZcIixcbiAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIHx8IFwibWVtb3J5XCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBvcnRGdW5jdGlvbihmbk5hbWUsIF9leHBvcnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE5hbWUgPSBfZXhwb3J0TmFtZSB8fCBmbk5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gbm90IGRlZmluZWQ6ICR7Zm5OYW1lfWApO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV07XG4gICAgICAgIGlmIChleHBvcnROYW1lICE9IGZuTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtleHBvcnROYW1lXSA9IGlkeDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydHMucHVzaCh7XG4gICAgICAgICAgICBleHBvcnROYW1lOiBleHBvcnROYW1lLFxuICAgICAgICAgICAgaWR4OiBpZHhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRnVuY3Rpb25Ub1RhYmxlKGZuTmFtZSkge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV07XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zVGFibGUucHVzaChpZHgpO1xuICAgIH1cblxuICAgIGFkZERhdGEob2Zmc2V0LCBieXRlcykge1xuICAgICAgICB0aGlzLmRhdGFzLnB1c2goe1xuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICBieXRlczogYnl0ZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWxsb2MoYSwgYikge1xuICAgICAgICBsZXQgc2l6ZTtcbiAgICAgICAgbGV0IGJ5dGVzO1xuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoYSkgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGEpKSAmJiAodHlwZW9mKGIpID09PSBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgICAgICAgc2l6ZSA9IGEubGVuZ3RoO1xuICAgICAgICAgICAgYnl0ZXMgPSBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l6ZSA9IGE7XG4gICAgICAgICAgICBieXRlcyA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgc2l6ZSA9ICgoKHNpemUtMSk+PjMpICsxKTw8MzsgICAgICAgLy8gQWxpZ24gdG8gNjQgYml0cy5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMuZnJlZTtcbiAgICAgICAgdGhpcy5mcmVlICs9IHNpemU7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgdGhpcy5hZGREYXRhKHAsIGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBhbGxvY1N0cmluZyhzKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgZ2xvYmFsVGhpcy5UZXh0RW5jb2RlcigpO1xuICAgICAgICBjb25zdCB1aW50OGFycmF5ID0gZW5jb2Rlci5lbmNvZGUocyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG9jKFsuLi51aW50OGFycmF5LCAwXSk7XG4gICAgfVxuXG4gICAgX3NldFNpZ25hdHVyZXMoKSB7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlcyA9IFtdO1xuICAgICAgICBjb25zdCBzaWduYXR1cmVJZHhCeU5hbWUgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuZnVuY3Rpb25zW3RoaXMuZnVuY3Rpb25zVGFibGVbMF1dLmdldFNpZ25hdHVyZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlTmFtZSA9IFwic19cIit1dGlscy50b0hleFN0cmluZyhzaWduYXR1cmUpO1xuICAgICAgICAgICAgc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZ1bmN0aW9uc1tpXS5nZXRTaWduYXR1cmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZU5hbWUgPSBcInNfXCIrdXRpbHMudG9IZXhTdHJpbmcoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHNpZ25hdHVyZUlkeEJ5TmFtZVtzaWduYXR1cmVOYW1lXSA9IHRoaXMuc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNbaV0uc2lnbmF0dXJlSWR4ID0gc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBfYnVpbGRTZWN0aW9uKHNlY3Rpb25UeXBlLCBzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBbc2VjdGlvblR5cGUsIC4uLnV0aWxzLnZhcnVpbnQzMihzZWN0aW9uLmxlbmd0aCksIC4uLnNlY3Rpb25dO1xuICAgIH1cblxuICAgIF9idWlsZFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZFNlY3Rpb24oXG4gICAgICAgICAgICAweDAxLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLnNpZ25hdHVyZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi5bXS5jb25jYXQoLi4udGhpcy5zaWduYXR1cmVzKVxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9idWlsZEltcG9ydCgpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBlbnRyaWVzLnB1c2goW1xuICAgICAgICAgICAgLi4udXRpbHMuc3RyaW5nKHRoaXMubWVtb3J5Lm1vZHVsZU5hbWUpLFxuICAgICAgICAgICAgLi4udXRpbHMuc3RyaW5nKHRoaXMubWVtb3J5LmZpZWxkTmFtZSksXG4gICAgICAgICAgICAweDAyLFxuICAgICAgICAgICAgMHgwMCwgICAvL0ZsYWdzIG5vIGluaXQgdmFsdWFcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLm1lbW9yeS5wYWdlc1NpemUpXG4gICAgICAgIF0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IHRoaXMubkltcG9ydEZ1bmN0aW9uczsgaSsrKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW1xuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnN0cmluZyh0aGlzLmZ1bmN0aW9uc1tpXS5tb2R1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAuLi51dGlscy5zdHJpbmcodGhpcy5mdW5jdGlvbnNbaV0uZmllbGROYW1lKSxcbiAgICAgICAgICAgICAgICAweDAwLFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1tpXS5zaWduYXR1cmVJZHgpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRTZWN0aW9uKFxuICAgICAgICAgICAgMHgwMixcbiAgICAgICAgICAgIHV0aWxzLnZhcnVpbnQzMihlbnRyaWVzLmxlbmd0aCkuY29uY2F0KC4uLmVudHJpZXMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT10aGlzLm5JbXBvcnRGdW5jdGlvbnM7IGk8IHRoaXMubkltcG9ydEZ1bmN0aW9ucyArIHRoaXMubkludGVybmFsRnVuY3Rpb25zOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCguLi51dGlscy52YXJ1aW50MzIodGhpcy5mdW5jdGlvbnNbaV0uc2lnbmF0dXJlSWR4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDMsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKGVudHJpZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi5bLi4uZW50cmllc11cbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYnVpbGRGdW5jdGlvbnNUYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDQsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKDEpLFxuICAgICAgICAgICAgICAgIDB4NzAsIDAsIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1RhYmxlLmxlbmd0aClcbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYnVpbGRFbGVtZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5mdW5jdGlvbnNUYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1RhYmxlW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKDEpLCAgICAgIC8vIDEgZW50cnlcbiAgICAgICAgICAgICAgICAuLi51dGlscy52YXJ1aW50MzIoMCksICAgICAgLy8gVGFibGUgKDAgaW4gTVZQKVxuICAgICAgICAgICAgICAgIDB4NDEsICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgMFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcmludDMyKDApLFxuICAgICAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoKSwgLy8gTnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLi4uWy4uLmVudHJpZXNdXG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkRXhwb3J0cygpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IHRoaXMuZXhwb3J0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgICAgICAuLi51dGlscy5zdHJpbmcodGhpcy5leHBvcnRzW2ldLmV4cG9ydE5hbWUpLFxuICAgICAgICAgICAgICAgIDB4MDAsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZXhwb3J0c1tpXS5pZHgpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRTZWN0aW9uKFxuICAgICAgICAgICAgMHgwNyxcbiAgICAgICAgICAgIHV0aWxzLnZhcnVpbnQzMihlbnRyaWVzLmxlbmd0aCkuY29uY2F0KC4uLmVudHJpZXMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkQ29kZSgpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPXRoaXMubkltcG9ydEZ1bmN0aW9uczsgaTwgdGhpcy5uSW1wb3J0RnVuY3Rpb25zICsgdGhpcy5uSW50ZXJuYWxGdW5jdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHRoaXMuZnVuY3Rpb25zW2ldLmdldEJvZHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MGEsXG4gICAgICAgICAgICB1dGlscy52YXJ1aW50MzIoZW50cmllcy5sZW5ndGgpLmNvbmNhdCguLi5lbnRyaWVzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9idWlsZERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgIDB4MDAsXG4gICAgICAgICAgICAweDQxLFxuICAgICAgICAgICAgMHgwMCxcbiAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAweDA0LFxuICAgICAgICAgICAgLi4udXRpbHMudTMyKHRoaXMuZnJlZSlcbiAgICAgICAgXSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgdGhpcy5kYXRhcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgICAgICAweDAwLFxuICAgICAgICAgICAgICAgIDB4NDEsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFyaW50MzIodGhpcy5kYXRhc1tpXS5vZmZzZXQpLFxuICAgICAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZGF0YXNbaV0uYnl0ZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmRhdGFzW2ldLmJ5dGVzLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICB1dGlscy52YXJ1aW50MzIoZW50cmllcy5sZW5ndGgpLmNvbmNhdCguLi5lbnRyaWVzKVxuICAgICAgICApO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgYnVpbGRCbjEyOCBhcyBidWlsZEJuMTI4d2FzbSB9IGZyb20gXCJ3YXNtY3VydmVzXCI7XG5pbXBvcnQgYnVpbGRFbmdpbmUgZnJvbSBcIi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgeyBNb2R1bGVCdWlsZGVyIH0gZnJvbSBcIndhc21idWlsZGVyXCI7XG5cbmdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuXG4gICAgY29uc3QgbW9kdWxlQnVpbGRlciA9IG5ldyBNb2R1bGVCdWlsZGVyKCk7XG4gICAgbW9kdWxlQnVpbGRlci5zZXRNZW1vcnkoMjUpO1xuICAgIGJ1aWxkQm4xMjh3YXNtKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgaWYgKHBsdWdpbnMpIHBsdWdpbnMobW9kdWxlQnVpbGRlcik7XG5cbiAgICBjb25zdCBibjEyOHdhc20gPSB7fTtcblxuICAgIGJuMTI4d2FzbS5jb2RlID0gbW9kdWxlQnVpbGRlci5idWlsZCgpO1xuICAgIGJuMTI4d2FzbS5wcSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mMW0ucHE7XG4gICAgYm4xMjh3YXNtLnByID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmZybS5wcTtcbiAgICBibjEyOHdhc20ucEcxZ2VuID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMWdlbjtcbiAgICBibjEyOHdhc20ucEcxemVybyA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzF6ZXJvO1xuICAgIGJuMTI4d2FzbS5wRzFiID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMWI7XG4gICAgYm4xMjh3YXNtLnBHMmdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzJnZW47XG4gICAgYm4xMjh3YXNtLnBHMnplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyemVybztcbiAgICBibjEyOHdhc20ucEcyYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzJiO1xuICAgIGJuMTI4d2FzbS5wT25lVCA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wT25lVDtcbiAgICBibjEyOHdhc20ucHJlUFNpemUgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucHJlUFNpemU7XG4gICAgYm4xMjh3YXNtLnByZVFTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnByZVFTaXplO1xuICAgIGJuMTI4d2FzbS5uOHEgPSAzMjtcbiAgICBibjEyOHdhc20ubjhyID0gMzI7XG4gICAgYm4xMjh3YXNtLnEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucTtcbiAgICBibjEyOHdhc20uciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5yO1xuXG4gICAgaWYgKCghc2luZ2xlVGhyZWFkKSAmJiAoZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyOCkpIHJldHVybiBnbG9iYWxUaGlzLmN1cnZlX2JuMTI4O1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbmFtZTogXCJibjEyOFwiLFxuICAgICAgICB3YXNtOiBibjEyOHdhc20sXG4gICAgICAgIHE6IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIiksXG4gICAgICAgIHI6IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIiksXG4gICAgICAgIG44cTogMzIsXG4gICAgICAgIG44cjogMzIsXG4gICAgICAgIGNvZmFjdG9yRzI6IFNjYWxhci5lKFwiMzA2NDRlNzJlMTMxYTAyOWI4NTA0NWI2ODE4MTU4NWUwNmNlZWNkYTU3MmEyNDg5MzQ1ZjIyOTljMGY5ZmE4ZFwiLCAxNiksXG4gICAgICAgIHNpbmdsZVRocmVhZDogc2luZ2xlVGhyZWFkID8gdHJ1ZSA6IGZhbHNlXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgYnVpbGRFbmdpbmUocGFyYW1zKTtcbiAgICBjdXJ2ZS50ZXJtaW5hdGUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghcGFyYW1zLnNpbmdsZVRocmVhZCkge1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyOCA9IG51bGw7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRtLnRlcm1pbmF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmICghc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBjdXJ2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbiIsImltcG9ydCB7IGJ1aWxkQmxzMTIzODEgYXMgYnVpbGRCbHMxMjM4MXdhc20gfSBmcm9tIFwid2FzbWN1cnZlc1wiO1xuaW1wb3J0IGJ1aWxkRW5naW5lIGZyb20gXCIuL2VuZ2luZS5qc1wiO1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHsgTW9kdWxlQnVpbGRlciB9IGZyb20gXCJ3YXNtYnVpbGRlclwiO1xuXG5nbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcblxuICAgIGNvbnN0IG1vZHVsZUJ1aWxkZXIgPSBuZXcgTW9kdWxlQnVpbGRlcigpO1xuICAgIG1vZHVsZUJ1aWxkZXIuc2V0TWVtb3J5KDI1KTtcbiAgICBidWlsZEJsczEyMzgxd2FzbShtb2R1bGVCdWlsZGVyKTtcblxuICAgIGlmIChwbHVnaW5zKSBwbHVnaW5zKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgY29uc3QgYmxzMTIzODF3YXNtID0ge307XG5cbiAgICBibHMxMjM4MXdhc20uY29kZSA9IG1vZHVsZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICBibHMxMjM4MXdhc20ucHEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZjFtLnBxO1xuICAgIGJsczEyMzgxd2FzbS5wciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mcm0ucHE7XG4gICAgYmxzMTIzODF3YXNtLnBHMWdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzFnZW47XG4gICAgYmxzMTIzODF3YXNtLnBHMXplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxemVybztcbiAgICBibHMxMjM4MXdhc20ucEcxYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzFiO1xuICAgIGJsczEyMzgxd2FzbS5wRzJnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcyZ2VuO1xuICAgIGJsczEyMzgxd2FzbS5wRzJ6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMnplcm87XG4gICAgYmxzMTIzODF3YXNtLnBHMmIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcyYjtcbiAgICBibHMxMjM4MXdhc20ucE9uZVQgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucE9uZVQ7XG4gICAgYmxzMTIzODF3YXNtLnByZVBTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnByZVBTaXplO1xuICAgIGJsczEyMzgxd2FzbS5wcmVRU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wcmVRU2l6ZTtcbiAgICBibHMxMjM4MXdhc20ubjhxID0gNDg7XG4gICAgYmxzMTIzODF3YXNtLm44ciA9IDMyO1xuICAgIGJsczEyMzgxd2FzbS5xID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnE7XG4gICAgYmxzMTIzODF3YXNtLnIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucjtcblxuXG4gICAgaWYgKCghc2luZ2xlVGhyZWFkKSAmJiAoZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSkpIHJldHVybiBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbmFtZTogXCJibHMxMjM4MVwiLFxuICAgICAgICB3YXNtOiBibHMxMjM4MXdhc20sXG4gICAgICAgIHE6IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KSxcbiAgICAgICAgcjogU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KSxcbiAgICAgICAgbjhxOiA0OCxcbiAgICAgICAgbjhyOiAzMixcbiAgICAgICAgY29mYWN0b3JHMTogU2NhbGFyLmUoXCIweDM5NmM4YzAwNTU1NWUxNTY4YzAwYWFhYjAwMDBhYWFiXCIsIDE2KSxcbiAgICAgICAgY29mYWN0b3JHMjogU2NhbGFyLmUoXCIweDVkNTQzYTk1NDE0ZTdmMTA5MWQ1MDc5Mjg3NmEyMDJjZDkxZGU0NTQ3MDg1YWJhYTY4YTIwNWIyZTVhN2RkZmE2MjhmMWNiNGQ5ZTgyZWYyMTUzN2UyOTNhNjY5MWFlMTYxNmVjNmU3ODZmMGM3MGNmMWMzOGUzMWM3MjM4ZTVcIiwgMTYpLFxuICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCA/IHRydWUgOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGJ1aWxkRW5naW5lKHBhcmFtcyk7XG4gICAgY3VydmUudGVybWluYXRlID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5zaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYmxzMTIzODEgPSBudWxsO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50bS50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXNpbmdsZVRocmVhZCkge1xuICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gY3VydmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbjEyOH0gZnJvbSBcIi4vYm4xMjguanNcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBidWlsZEJsczEyMzgxfSBmcm9tIFwiLi9ibHMxMjM4MS5qc1wiO1xuXG5jb25zdCBibHMxMjM4MXIgPSBTY2FsYXIuZShcIjczZWRhNzUzMjk5ZDdkNDgzMzM5ZDgwODA5YTFkODA1NTNiZGE0MDJmZmZlNWJmZWZmZmZmZmZmMDAwMDAwMDFcIiwgMTYpO1xuY29uc3QgYm4xMjhyID0gU2NhbGFyLmUoXCIyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODU0ODM2NDQwMDQxNjAzNDM0MzY5ODIwNDE4NjU3NTgwODQ5NTYxN1wiKTtcblxuY29uc3QgYmxzMTIzODFxID0gU2NhbGFyLmUoXCIxYTAxMTFlYTM5N2ZlNjlhNGIxYmE3YjY0MzRiYWNkNzY0Nzc0Yjg0ZjM4NTEyYmY2NzMwZDJhMGY2YjBmNjI0MWVhYmZmZmViMTUzZmZmZmI5ZmVmZmZmZmZmZmFhYWJcIiwgMTYpO1xuY29uc3QgYm4xMjhxID0gU2NhbGFyLmUoXCIyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODY5NjMxMTE1NzI5NzgyMzY2MjY4OTAzNzg5NDY0NTIyNjIwODU4M1wiKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbVIociwgc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEociwgYm4xMjhyKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShyLCBibHMxMjM4MXIpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocil9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbVEocSwgc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEocSwgYm4xMjhxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShxLCBibHMxMjM4MXEpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocSwgMTYpfWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21OYW1lKG5hbWUsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBjb25zdCBub3JtTmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgaWYgKFtcIkJOMTI4XCIsIFwiQk4yNTRcIiwgXCJBTFRCTjEyOFwiXS5pbmRleE9mKG5vcm1OYW1lKSA+PSAwKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOChzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSBpZiAoW1wiQkxTMTIzODFcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuKSB7XG4gICAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCkubWF0Y2goL1tBLVphLXowLTldKy9nKS5qb2luKFwiXCIpO1xuICAgIH1cblxufVxuIiwiXG5pbXBvcnQgKiBhcyBfU2NhbGFyICBmcm9tIFwiLi9zcmMvc2NhbGFyLmpzXCI7XG5leHBvcnQgY29uc3QgU2NhbGFyPV9TY2FsYXI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBQb2xGaWVsZH0gZnJvbSBcIi4vc3JjL3BvbGZpZWxkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgRjFGaWVsZH0gZnJvbSBcIi4vc3JjL2YxZmllbGQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBGMkZpZWxkfSBmcm9tIFwiLi9zcmMvZjJmaWVsZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEYzRmllbGR9IGZyb20gXCIuL3NyYy9mM2ZpZWxkLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBacUZpZWxkfSBmcm9tIFwiLi9zcmMvZjFmaWVsZC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgRUN9IGZyb20gXCIuL3NyYy9lYy5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbjEyOH0gZnJvbSBcIi4vc3JjL2JuMTI4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbHMxMjM4MX0gZnJvbSBcIi4vc3JjL2JsczEyMzgxLmpzXCI7XG5cbmltcG9ydCAqIGFzIF91dGlscyBmcm9tIFwiLi9zcmMvdXRpbHMuanNcIjtcbmV4cG9ydCBjb25zdCB1dGlscyA9IF91dGlscztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDaGFDaGF9IGZyb20gXCIuL3NyYy9jaGFjaGEuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIEJpZ0J1ZmZlcn0gZnJvbSBcIi4vc3JjL2JpZ2J1ZmZlci5qc1wiO1xuXG5leHBvcnQge2dldEN1cnZlRnJvbVIsIGdldEN1cnZlRnJvbVEsIGdldEN1cnZlRnJvbU5hbWV9IGZyb20gXCIuL3NyYy9jdXJ2ZXMuanNcIjtcblxuIiwiXG5pbXBvcnQgZnMgZnJvbVwiZnNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW4oZmlsZU5hbWUsIG9wZW5GbGFncywgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuICAgIGNhY2hlU2l6ZSA9IGNhY2hlU2l6ZSB8fCA0MDk2KjY0O1xuICAgIGlmICh0eXBlb2Ygb3BlbkZsYWdzICE9PSBcIm51bWJlclwiICYmIFtcIncrXCIsIFwid3grXCIsIFwiclwiLCBcImF4K1wiLCBcImErXCJdLmluZGV4T2Yob3BlbkZsYWdzKSA8MClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvcGVuIG9wdGlvblwiKTtcbiAgICBjb25zdCBmZCA9YXdhaXQgZnMucHJvbWlzZXMub3BlbihmaWxlTmFtZSwgb3BlbkZsYWdzKTtcblxuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZmQuc3RhdCgpO1xuXG4gICAgcmV0dXJuICBuZXcgRmFzdEZpbGUoZmQsIHN0YXRzLCBjYWNoZVNpemUsIHBhZ2VTaXplLCBmaWxlTmFtZSk7XG59XG5cblxuY2xhc3MgRmFzdEZpbGUge1xuXG4gICAgY29uc3RydWN0b3IoZmQsIHN0YXRzLCBjYWNoZVNpemUsIHBhZ2VTaXplLCBmaWxlTmFtZSkge1xuICAgICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7XG4gICAgICAgIHRoaXMuZmQgPSBmZDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemUgfHwgKDEgPDwgOCk7XG4gICAgICAgIHdoaWxlICh0aGlzLnBhZ2VTaXplIDwgc3RhdHMuYmxrc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxTaXplID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5mbG9vcigoc3RhdHMuc2l6ZSAtMSkgLyB0aGlzLnBhZ2VTaXplKSsxO1xuICAgICAgICB0aGlzLm1heFBhZ2VzTG9hZGVkID0gTWF0aC5mbG9vciggY2FjaGVTaXplIC8gdGhpcy5wYWdlU2l6ZSkrMTtcbiAgICAgICAgdGhpcy5wYWdlcyA9IHt9O1xuICAgICAgICB0aGlzLnBlbmRpbmdMb2FkcyA9IFtdO1xuICAgICAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXZCdWZmcyA9IFtdO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB9XG5cbiAgICBfbG9hZFBhZ2UocCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgUCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xuICAgICAgICAgICAgc2VsZi5wZW5kaW5nTG9hZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGFnZTogcCxcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgTG9hZCByZXF1ZXN0OiBcIiwgcCk7XG4gICAgICAgIHJldHVybiBQO1xuICAgIH1cblxuICAgIF9fc3RhdHVzUGFnZShzLCBwKSB7XG4gICAgICAgIGNvbnN0IGxvZ0VudHJ5ID0gW107XG4gICAgICAgIGNvbnN0IHNlbGY9dGhpcztcbiAgICAgICAgaWYgKCFzZWxmLmxvZ0hpc3RvcnkpIHJldHVybjtcbiAgICAgICAgbG9nRW50cnkucHVzaChcIj09XCIgKyBzKyBcIiBcIiArcCk7XG4gICAgICAgIGxldCBTID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHNbaV0ucGFnZSA9PSBwKSBTID0gUyArIFwiIFwiICsgaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUykgbG9nRW50cnkucHVzaChcIlBlbmRpbmcgbG9hZHM6XCIrUyk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5wYWdlc1twXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gc2VsZi5wYWdlc1twXTtcbiAgICAgICAgICAgIGxvZ0VudHJ5LnB1c2goXCJMb2FkZWRcIik7XG4gICAgICAgICAgICBsb2dFbnRyeS5wdXNoKFwicGVuZGluZ09wczogXCIrcGFnZS5wZW5kaW5nT3BzKTtcbiAgICAgICAgICAgIGlmIChwYWdlLmxvYWRpbmcpIGxvZ0VudHJ5LnB1c2goXCJsb2FkaW5nOiBcIitwYWdlLmxvYWRpbmcpO1xuICAgICAgICAgICAgaWYgKHBhZ2Uud3JpdGluZykgbG9nRW50cnkucHVzaChcIndyaXRpbmdcIik7XG4gICAgICAgICAgICBpZiAocGFnZS5kaXJ0eSkgbG9nRW50cnkucHVzaChcImRpcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ0VudHJ5LnB1c2goXCI9PVwiKTtcblxuICAgICAgICBpZiAoIXNlbGYuaGlzdG9yeVtwXSkgc2VsZi5oaXN0b3J5W3BdID0gW107XG4gICAgICAgIHNlbGYuaGlzdG9yeVtwXS5wdXNoKGxvZ0VudHJ5KTtcbiAgICB9XG5cbiAgICBfX3ByaW50SGlzdG9yeShwKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuaGlzdG9yeVtwXSkgY29uc29sZS5sb2coXCJFbXB0eSBIaXN0b3J5IFwiLCBwKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJIaXN0b3J5IFwiK3ApO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8c2VsZi5oaXN0b3J5W3BdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2VsZi5oaXN0b3J5W3BdW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCItPiBcIiArIHNlbGYuaGlzdG9yeVtwXVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgX3RyaWdnZXJMb2FkKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoc2VsZi5yZWFkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdMb2Fkcy5sZW5ndGg9PTApIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYWdlSWR4cyA9IE9iamVjdC5rZXlzKHNlbGYucGFnZXMpO1xuXG4gICAgICAgIGNvbnN0IGRlbGV0YWJsZVBhZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwYWdlSWR4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHNlbGYucGFnZXNbcGFyc2VJbnQocGFnZUlkeHNbaV0pXTtcbiAgICAgICAgICAgIGlmICgocGFnZS5kaXJ0eSA9PSBmYWxzZSkmJihwYWdlLnBlbmRpbmdPcHM9PTApJiYoIXBhZ2Uud3JpdGluZykmJighcGFnZS5sb2FkaW5nKSkgZGVsZXRhYmxlUGFnZXMucHVzaChwYXJzZUludChwYWdlSWR4c1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZyZWVQYWdlcyA9IHNlbGYubWF4UGFnZXNMb2FkZWQgLSBwYWdlSWR4cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3Qgb3BzID0gW107XG5cbiAgICAgICAgLy8gd2hpbGUgcGVuZGluZyBsb2FkcyBhbmRcbiAgICAgICAgLy8gICAgIHRoZSBwYWdlIGlzIGxvYWRlZCBvciBJIGNhbiByZWNvdmVyIG9uZS5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgKHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aD4wKSAmJlxuICAgICAgICAgICAgKCAgICh0eXBlb2Ygc2VsZi5wYWdlc1tzZWxmLnBlbmRpbmdMb2Fkc1swXS5wYWdlXSAhPSBcInVuZGVmaW5lZFwiIClcbiAgICAgICAgICAgICAgfHwoICAoZnJlZVBhZ2VzPjApXG4gICAgICAgICAgICAgICAgIHx8KGRlbGV0YWJsZVBhZ2VzLmxlbmd0aD4wKSkpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkID0gc2VsZi5wZW5kaW5nTG9hZHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5wYWdlc1tsb2FkLnBhZ2VdICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0ucGVuZGluZ09wcyArKztcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBkZWxldGFibGVQYWdlcy5pbmRleE9mKGxvYWQucGFnZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkeD49MCkgZGVsZXRhYmxlUGFnZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYucGFnZXNbbG9hZC5wYWdlXS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFnZXNbbG9hZC5wYWdlXS5sb2FkaW5nLnB1c2gobG9hZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgTG9hZCAoY2FjaGVkKTogXCIsIGxvYWQucGFnZSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGZyZWVQYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBmcmVlUGFnZXMtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcCA9IGRlbGV0YWJsZVBhZ2VzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQmVmb3JlIFVubG9hZDogXCIsIGZwKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hdkJ1ZmZzLnVuc2hpZnQoc2VsZi5wYWdlc1tmcF0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5wYWdlc1tmcF07XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgVW5sb2FkOiBcIiwgZnApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsb2FkLnBhZ2U+PXNlbGYudG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0gPSBnZXROZXdQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvYWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdHVzUGFnZShcIkFmdGVyIExvYWQgKG5ldyk6IFwiLCBsb2FkLnBhZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFnZXNbbG9hZC5wYWdlXSA9IGdldE5ld1BhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmcgPSBbbG9hZF07XG4gICAgICAgICAgICAgICAgICAgIG9wcy5wdXNoKHNlbGYuZmQucmVhZChzZWxmLnBhZ2VzW2xvYWQucGFnZV0uYnVmZiwgMCwgc2VsZi5wYWdlU2l6ZSwgbG9hZC5wYWdlKnNlbGYucGFnZVNpemUpLnRoZW4oKHJlcyk9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0uc2l6ZSA9IHJlcy5ieXRlc1JlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nID0gc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8bG9hZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdbaV0ucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBMb2FkIChsb2FkZWQpOiBcIiwgbG9hZC5wYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBMb2FkIChsb2FkaW5nKTogXCIsIGxvYWQucGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIChvcHMubGVuZ3RoPjEpIGNvbnNvbGUubG9nKG9wcy5sZW5ndGgpO1xuXG4gICAgICAgIFByb21pc2UuYWxsKG9wcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoPjApIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyTG9hZC5iaW5kKHNlbGYpKTtcbiAgICAgICAgICAgIHNlbGYuX3RyeUNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldE5ld1BhZ2UoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5hdkJ1ZmZzLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHNlbGYuYXZCdWZmcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHAuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwLnBlbmRpbmdPcHMgPSAxO1xuICAgICAgICAgICAgICAgIHAuc2l6ZSA9MDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGlydHk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBidWZmOiBuZXcgVWludDhBcnJheShzZWxmLnBhZ2VTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ09wczogMSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgX3RyaWdnZXJXcml0ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLndyaXRpbmcpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYWdlSWR4cyA9IE9iamVjdC5rZXlzKHNlbGYucGFnZXMpO1xuXG4gICAgICAgIGNvbnN0IG9wcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwYWdlSWR4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHNlbGYucGFnZXNbcGFyc2VJbnQocGFnZUlkeHNbaV0pXTtcbiAgICAgICAgICAgIGlmIChwYWdlLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgcGFnZS5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBhZ2Uud3JpdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VsZi53cml0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHMucHVzaCggc2VsZi5mZC53cml0ZShwYWdlLmJ1ZmYsIDAsIHBhZ2Uuc2l6ZSwgcGFyc2VJbnQocGFnZUlkeHNbaV0pKnNlbGYucGFnZVNpemUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYWdlLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFUlJPUiBXcml0aW5nOiBcIitlcnIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl90cnlDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxmLndyaXRpbmcpIHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKG9wcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYud3JpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyV3JpdGUuYmluZChzZWxmKSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fdHJ5Q2xvc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoPjApIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyTG9hZC5iaW5kKHNlbGYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldERpcnR5UGFnZSgpIHtcbiAgICAgICAgZm9yIChsZXQgcCBpbiB0aGlzLnBhZ2VzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1twXS5kaXJ0eSkgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKGJ1ZmYsIHBvcykge1xuICAgICAgICBpZiAoYnVmZi5ieXRlTGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4vKlxuICAgICAgICBpZiAoYnVmZi5ieXRlTGVuZ3RoID4gc2VsZi5wYWdlU2l6ZSpzZWxmLm1heFBhZ2VzTG9hZGVkKjAuOCkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVTaXplID0gTWF0aC5mbG9vcihidWZmLmJ5dGVMZW5ndGggKiAxLjEpO1xuICAgICAgICAgICAgdGhpcy5tYXhQYWdlc0xvYWRlZCA9IE1hdGguZmxvb3IoIGNhY2hlU2l6ZSAvIHNlbGYucGFnZVNpemUpKzE7XG4gICAgICAgIH1cbiovXG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBzZWxmLnBvcyA9IHBvcytidWZmLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChzZWxmLnRvdGFsU2l6ZSA8IHBvcyArIGJ1ZmYuYnl0ZUxlbmd0aCkgc2VsZi50b3RhbFNpemUgPSBwb3MgKyBidWZmLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyaXRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gc2VsZi5wYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigocG9zICsgYnVmZi5ieXRlTGVuZ3RoIC0xKSAvIHNlbGYucGFnZVNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPWZpcnN0UGFnZTsgaTw9bGFzdFBhZ2U7IGkrKykgcGFnZVByb21pc2VzLnB1c2goc2VsZi5fbG9hZFBhZ2UoaSkpO1xuICAgICAgICBzZWxmLl90cmlnZ2VyTG9hZCgpO1xuXG4gICAgICAgIGxldCBwID0gZmlyc3RQYWdlO1xuICAgICAgICBsZXQgbyA9IHBvcyAlIHNlbGYucGFnZVNpemU7XG4gICAgICAgIGxldCByID0gYnVmZi5ieXRlTGVuZ3RoO1xuICAgICAgICB3aGlsZSAocj4wKSB7XG4gICAgICAgICAgICBhd2FpdCBwYWdlUHJvbWlzZXNbcC1maXJzdFBhZ2VdO1xuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBzZWxmLnBhZ2VTaXplKSA/IChzZWxmLnBhZ2VTaXplIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gYnVmZi5zbGljZSggYnVmZi5ieXRlTGVuZ3RoIC0gciwgYnVmZi5ieXRlTGVuZ3RoIC0gciArIGwpO1xuICAgICAgICAgICAgY29uc3QgZHN0VmlldyA9IG5ldyBVaW50OEFycmF5KHNlbGYucGFnZXNbcF0uYnVmZi5idWZmZXIsIG8sIGwpO1xuICAgICAgICAgICAgZHN0Vmlldy5zZXQoc3JjVmlldyk7XG4gICAgICAgICAgICBzZWxmLnBhZ2VzW3BdLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYucGFnZXNbcF0ucGVuZGluZ09wcyAtLTtcbiAgICAgICAgICAgIHNlbGYucGFnZXNbcF0uc2l6ZSA9IE1hdGgubWF4KG8rbCwgc2VsZi5wYWdlc1twXS5zaXplKTtcbiAgICAgICAgICAgIGlmIChwPj1zZWxmLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRvdGFsUGFnZXMgPSBwKzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gci1sO1xuICAgICAgICAgICAgcCArKztcbiAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgaWYgKCFzZWxmLndyaXRpbmcpIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyV3JpdGUuYmluZChzZWxmKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZWFkKGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgYnVmZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGF3YWl0IHNlbGYucmVhZFRvQnVmZmVyKGJ1ZmYsIDAsIGxlbiwgcG9zKTtcblxuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVG9CdWZmZXIoYnVmZkRzdCwgb2Zmc2V0LCBsZW4sIHBvcykge1xuICAgICAgICBpZiAobGVuID09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKGxlbiA+IHNlbGYucGFnZVNpemUqc2VsZi5tYXhQYWdlc0xvYWRlZCowLjgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlU2l6ZSA9IE1hdGguZmxvb3IobGVuICogMS4xKTtcbiAgICAgICAgICAgIHRoaXMubWF4UGFnZXNMb2FkZWQgPSBNYXRoLmZsb29yKCBjYWNoZVNpemUgLyBzZWxmLnBhZ2VTaXplKSsxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBzZWxmLnBvcyA9IHBvcytsZW47XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gc2VsZi5wYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigocG9zICsgbGVuIC0xKSAvIHNlbGYucGFnZVNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPWZpcnN0UGFnZTsgaTw9bGFzdFBhZ2U7IGkrKykgcGFnZVByb21pc2VzLnB1c2goc2VsZi5fbG9hZFBhZ2UoaSkpO1xuXG4gICAgICAgIHNlbGYuX3RyaWdnZXJMb2FkKCk7XG5cbiAgICAgICAgbGV0IHAgPSBmaXJzdFBhZ2U7XG4gICAgICAgIGxldCBvID0gcG9zICUgc2VsZi5wYWdlU2l6ZTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBwb3MgKyBsZW4gPiBzZWxmLnRvdGFsU2l6ZSA/IGxlbiAtIChwb3MgKyBsZW4gLSBzZWxmLnRvdGFsU2l6ZSk6IGxlbjtcbiAgICAgICAgd2hpbGUgKHI+MCkge1xuICAgICAgICAgICAgYXdhaXQgcGFnZVByb21pc2VzW3AgLSBmaXJzdFBhZ2VdO1xuICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBBd2FpdCAocmVhZCk6IFwiLCBwKTtcblxuICAgICAgICAgICAgLy8gYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZVxuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBzZWxmLnBhZ2VTaXplKSA/IChzZWxmLnBhZ2VTaXplIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2VsZi5wYWdlc1twXS5idWZmLmJ1ZmZlciwgc2VsZi5wYWdlc1twXS5idWZmLmJ5dGVPZmZzZXQgKyBvLCBsKTtcbiAgICAgICAgICAgIGJ1ZmZEc3Quc2V0KHNyY1ZpZXcsIG9mZnNldCtsZW4tcik7XG4gICAgICAgICAgICBzZWxmLnBhZ2VzW3BdLnBlbmRpbmdPcHMgLS07XG5cbiAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgT3AgZG9uZTogXCIsIHApO1xuXG4gICAgICAgICAgICByID0gci1sO1xuICAgICAgICAgICAgcCArKztcbiAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgaWYgKHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aD4wKSBzZXRJbW1lZGlhdGUoc2VsZi5fdHJpZ2dlckxvYWQuYmluZChzZWxmKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcyA9IHBvcyArIGxlbjtcblxuICAgIH1cblxuXG4gICAgX3RyeUNsb3NlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFzZWxmLnBlbmRpbmdDbG9zZSkgcmV0dXJuO1xuICAgICAgICBpZiAoc2VsZi5lcnJvcikge1xuICAgICAgICAgICAgc2VsZi5wZW5kaW5nQ2xvc2VSZWplY3Qoc2VsZi5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IHNlbGYuX2dldERpcnR5UGFnZSgpO1xuICAgICAgICBpZiAoKHA+PTApIHx8IChzZWxmLndyaXRpbmcpIHx8IChzZWxmLnJlYWRpbmcpIHx8IChzZWxmLnBlbmRpbmdMb2Fkcy5sZW5ndGg+MCkpIHJldHVybjtcbiAgICAgICAgc2VsZi5wZW5kaW5nQ2xvc2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNsb3NpbmcgdGhlIGZpbGUgdHdpY2VcIik7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZWxmLnBlbmRpbmdDbG9zZSA9IHJlc29sdmU7XG4gICAgICAgICAgICBzZWxmLnBlbmRpbmdDbG9zZVJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHNlbGYuX3RyeUNsb3NlKCk7XG4gICAgICAgIH0pLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICBzZWxmLmZkLmNsb3NlKCk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZmQuY2xvc2UoKTtcbiAgICAgICAgICAgIHRocm93IChlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBkaXNjYXJkKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgYXdhaXQgc2VsZi5jbG9zZSgpO1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsodGhpcy5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVVTEUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCB0bXBCdWZmMzJ2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmYzMi5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIHRydWUpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVUJFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCB0bXBCdWZmMzJ2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmYzMi5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmYzMiwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFNjQodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgICAgICBjb25zdCB0bXBCdWZmNjR2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmY2NC5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmY2NHYuc2V0VWludDMyKDAsIHYgJiAweEZGRkZGRkZGLCB0cnVlKTtcbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoNCwgTWF0aC5mbG9vcih2IC8gMHgxMDAwMDAwMDApICwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmNjQsIHBvcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVMRTMyKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg0LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDMyQXJyYXkoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3WzBdO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRVQkUzMihwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoNCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIoMCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRVTEU2NChwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoOCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlld1sxXSAqIDB4MTAwMDAwMDAwICsgdmlld1swXTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkU3RyaW5nKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoc2VsZi5wZW5kaW5nQ2xvc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFBvc2l0aW9uID0gdHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiID8gc2VsZi5wb3MgOiBwb3M7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZSA9IE1hdGguZmxvb3IoY3VycmVudFBvc2l0aW9uIC8gc2VsZi5wYWdlU2l6ZSk7XG5cbiAgICAgICAgbGV0IGVuZE9mU3RyaW5nRm91bmQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICAgICAgd2hpbGUgKCFlbmRPZlN0cmluZ0ZvdW5kKSB7XG4gICAgICAgICAgICAvL1JlYWQgcGFnZVxuICAgICAgICAgICAgbGV0IHBhZ2VQcm9taXNlID0gc2VsZi5fbG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgc2VsZi5fdHJpZ2dlckxvYWQoKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2VQcm9taXNlO1xuICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBBd2FpdCAocmVhZCk6IFwiLCBjdXJyZW50UGFnZSk7XG5cbiAgICAgICAgICAgIGxldCBvZmZzZXRPblBhZ2UgPSBjdXJyZW50UG9zaXRpb24gJSBzZWxmLnBhZ2VTaXplO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhQXJyYXkgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2N1cnJlbnRQYWdlXS5idWZmLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2N1cnJlbnRQYWdlXS5idWZmLmJ5dGVPZmZzZXQgKyBvZmZzZXRPblBhZ2UsXG4gICAgICAgICAgICAgICAgc2VsZi5wYWdlU2l6ZSAtIG9mZnNldE9uUGFnZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGluZGV4RW5kT2ZTdHJpbmcgPSBkYXRhQXJyYXkuZmluZEluZGV4KGVsZW1lbnQgPT4gZWxlbWVudCA9PT0gMCk7XG4gICAgICAgICAgICBlbmRPZlN0cmluZ0ZvdW5kID0gaW5kZXhFbmRPZlN0cmluZyAhPT0gLTE7XG5cbiAgICAgICAgICAgIGlmIChlbmRPZlN0cmluZ0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkYXRhQXJyYXkuc2xpY2UoMCwgaW5kZXhFbmRPZlN0cmluZykpO1xuICAgICAgICAgICAgICAgIHNlbGYucG9zID0gY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplICsgb2Zmc2V0T25QYWdlICsgaW5kZXhFbmRPZlN0cmluZyArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5KTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSArIG9mZnNldE9uUGFnZSArIGRhdGFBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYucGFnZXNbY3VycmVudFBhZ2VdLnBlbmRpbmdPcHMtLTtcbiAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgT3AgZG9uZTogXCIsIGN1cnJlbnRQYWdlKTtcblxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gc2VsZi5wb3M7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSsrO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoID4gMCkgc2V0SW1tZWRpYXRlKHNlbGYuX3RyaWdnZXJMb2FkLmJpbmQoc2VsZikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3KG8pIHtcbiAgICBjb25zdCBpbml0aWFsU2l6ZSA9IG8uaW5pdGlhbFNpemUgfHwgMTw8MjA7XG4gICAgY29uc3QgZmQgPSBuZXcgTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLm8uZGF0YSA9IG5ldyBVaW50OEFycmF5KGluaXRpYWxTaXplKTtcbiAgICBmZC5hbGxvY1NpemUgPSBpbml0aWFsU2l6ZTtcbiAgICBmZC50b3RhbFNpemUgPSAwO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRXhpc3Rpbmcobykge1xuICAgIGNvbnN0IGZkID0gbmV3IE1lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBmZC5hbGxvY1NpemUgPSBvLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICBmZC50b3RhbFNpemUgPSBvLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICBmZC5yZWFkT25seSA9IHRydWU7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkV3JpdGVFeGlzdGluZyhvKSB7XG4gICAgY29uc3QgZmQgPSBuZXcgTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLmFsbG9jU2l6ZSA9IG8uZGF0YS5ieXRlTGVuZ3RoO1xuICAgIGZkLnRvdGFsU2l6ZSA9IG8uZGF0YS5ieXRlTGVuZ3RoO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuY29uc3QgdG1wQnVmZjMydiA9IG5ldyBEYXRhVmlldyh0bXBCdWZmMzIuYnVmZmVyKTtcbmNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuY29uc3QgdG1wQnVmZjY0diA9IG5ldyBEYXRhVmlldyh0bXBCdWZmNjQuYnVmZmVyKTtcblxuY2xhc3MgTWVtRmlsZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEgPDwgMTQ7ICAvLyBmb3IgY29tcGF0aWJpbGl0eVxuICAgIH1cblxuICAgIF9yZXNpemVJZk5lZWRlZChuZXdMZW4pIHtcbiAgICAgICAgaWYgKG5ld0xlbiA+IHRoaXMuYWxsb2NTaXplKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdBbGxvY1NpemUgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG9jU2l6ZSArICgxIDw8IDIwKSxcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKHRoaXMuYWxsb2NTaXplICogMS4xKSxcbiAgICAgICAgICAgICAgICBuZXdMZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3QWxsb2NTaXplKTtcbiAgICAgICAgICAgIG5ld0RhdGEuc2V0KHRoaXMuby5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuby5kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWxsb2NTaXplID0gbmV3QWxsb2NTaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGUoYnVmZiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPXRoaXM7XG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkgdGhyb3cgbmV3IEVycm9yKFwiV3JpdGluZyBhIHJlYWQgb25seSBmaWxlXCIpO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUlmTmVlZGVkKHBvcyArIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgdGhpcy5vLmRhdGEuc2V0KGJ1ZmYuc2xpY2UoKSwgcG9zKTtcblxuICAgICAgICBpZiAocG9zICsgYnVmZi5ieXRlTGVuZ3RoID4gdGhpcy50b3RhbFNpemUpIHRoaXMudG90YWxTaXplID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuXG4gICAgICAgIHRoaXMucG9zID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRUb0J1ZmZlcihidWZmRGVzdCwgb2Zmc2V0LCBsZW4sIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgPT0gXCJ1bmRlZmluZWRcIikgcG9zID0gc2VsZi5wb3M7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBpZiAocG9zICsgbGVuID4gdGhpcy50b3RhbFNpemUpIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIGJvdW5kc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MgKyBsZW4pO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmZTcmMgPSBuZXcgVWludDhBcnJheSh0aGlzLm8uZGF0YS5idWZmZXIsIHRoaXMuby5kYXRhLmJ5dGVPZmZzZXQgKyBwb3MsIGxlbik7XG5cbiAgICAgICAgYnVmZkRlc3Quc2V0KGJ1ZmZTcmMsIG9mZnNldCk7XG5cbiAgICAgICAgdGhpcy5wb3MgPSBwb3MgKyBsZW47XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZChsZW4sIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgYXdhaXQgc2VsZi5yZWFkVG9CdWZmZXIoYnVmZiwgMCwgbGVuLCBwb3MpO1xuXG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5vLmRhdGEuYnl0ZUxlbmd0aCAhPSB0aGlzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5vLmRhdGEgPSB0aGlzLm8uZGF0YS5zbGljZSgwLCB0aGlzLnRvdGFsU2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkaXNjYXJkKCkge1xuICAgIH1cblxuXG4gICAgYXN5bmMgd3JpdGVVTEUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjMydi5zZXRVaW50MzIoMCwgdiwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmMzIsIHBvcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVVQkUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjMydi5zZXRVaW50MzIoMCwgdiwgZmFsc2UpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgd3JpdGVVTEU2NCh2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoMCwgdiAmIDB4RkZGRkZGRkYsIHRydWUpO1xuICAgICAgICB0bXBCdWZmNjR2LnNldFVpbnQzMig0LCBNYXRoLmZsb29yKHYgLyAweDEwMDAwMDAwMCkgLCB0cnVlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmY2NCwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHJlYWRVTEUzMihwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoNCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlld1swXTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVUJFMzIocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDQsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKDAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVUxFNjQocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDgsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50MzJBcnJheShiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXdbMV0gKiAweDEwMDAwMDAwMCArIHZpZXdbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFN0cmluZyhwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRQb3NpdGlvbiA9IHR5cGVvZiBwb3MgPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYucG9zIDogcG9zO1xuXG4gICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPiB0aGlzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFkaW5nIG91dCBvZiBib3VuZHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgc2VsZi5vLmRhdGEuYnVmZmVyLFxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICAgICAgdGhpcy50b3RhbFNpemUgLSBjdXJyZW50UG9zaXRpb25cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgaW5kZXhFbmRPZlN0cmluZyA9IGRhdGFBcnJheS5maW5kSW5kZXgoZWxlbWVudCA9PiBlbGVtZW50ID09PSAwKTtcbiAgICAgICAgbGV0IGVuZE9mU3RyaW5nRm91bmQgPSBpbmRleEVuZE9mU3RyaW5nICE9PSAtMTtcblxuICAgICAgICBsZXQgc3RyID0gXCJcIjtcbiAgICAgICAgaWYgKGVuZE9mU3RyaW5nRm91bmQpIHtcbiAgICAgICAgICAgIHN0ciA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkYXRhQXJyYXkuc2xpY2UoMCwgaW5kZXhFbmRPZlN0cmluZykpO1xuICAgICAgICAgICAgc2VsZi5wb3MgPSBjdXJyZW50UG9zaXRpb24gKyBpbmRleEVuZE9mU3RyaW5nICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYucG9zID0gY3VycmVudFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufVxuIiwiY29uc3QgUEFHRV9TSVpFID0gMTw8MjI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXcobykge1xuICAgIGNvbnN0IGluaXRpYWxTaXplID0gby5pbml0aWFsU2l6ZSB8fCAwO1xuICAgIGNvbnN0IGZkID0gbmV3IEJpZ01lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBjb25zdCBuUGFnZXMgPSBpbml0aWFsU2l6ZSA/IE1hdGguZmxvb3IoKGluaXRpYWxTaXplIC0gMSkgLyBQQUdFX1NJWkUpKzEgOiAwO1xuICAgIGZkLm8uZGF0YSA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuUGFnZXMtMTsgaSsrKSB7XG4gICAgICAgIGZkLm8uZGF0YS5wdXNoKCBuZXcgVWludDhBcnJheShQQUdFX1NJWkUpKTtcbiAgICB9XG4gICAgaWYgKG5QYWdlcykgZmQuby5kYXRhLnB1c2goIG5ldyBVaW50OEFycmF5KGluaXRpYWxTaXplIC0gUEFHRV9TSVpFKihuUGFnZXMtMSkpKTtcbiAgICBmZC50b3RhbFNpemUgPSAwO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRXhpc3Rpbmcobykge1xuICAgIGNvbnN0IGZkID0gbmV3IEJpZ01lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBmZC50b3RhbFNpemUgPSAoby5kYXRhLmxlbmd0aC0xKSogUEFHRV9TSVpFICsgby5kYXRhW28uZGF0YS5sZW5ndGgtMV0uYnl0ZUxlbmd0aDtcbiAgICBmZC5yZWFkT25seSA9IHRydWU7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkV3JpdGVFeGlzdGluZyhvKSB7XG4gICAgY29uc3QgZmQgPSBuZXcgQmlnTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLnRvdGFsU2l6ZSA9IChvLmRhdGEubGVuZ3RoLTEpKiBQQUdFX1NJWkUgKyBvLmRhdGFbby5kYXRhLmxlbmd0aC0xXS5ieXRlTGVuZ3RoO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuY29uc3QgdG1wQnVmZjMydiA9IG5ldyBEYXRhVmlldyh0bXBCdWZmMzIuYnVmZmVyKTtcbmNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuY29uc3QgdG1wQnVmZjY0diA9IG5ldyBEYXRhVmlldyh0bXBCdWZmNjQuYnVmZmVyKTtcblxuY2xhc3MgQmlnTWVtRmlsZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEgPDwgMTQ7ICAvLyBmb3IgY29tcGF0aWJpbGl0eVxuICAgIH1cblxuICAgIF9yZXNpemVJZk5lZWRlZChuZXdMZW4pIHtcblxuICAgICAgICBpZiAobmV3TGVuIDw9IHRoaXMudG90YWxTaXplKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIGZpbGUgYm91bmRzXCIpO1xuXG4gICAgICAgIGNvbnN0IG5QYWdlcyA9IE1hdGguZmxvb3IoKG5ld0xlbiAtIDEpIC8gUEFHRV9TSVpFKSsxO1xuICAgICAgICBmb3IgKGxldCBpPSBNYXRoLm1heCh0aGlzLm8uZGF0YS5sZW5ndGgtMSwgMCk7IGk8blBhZ2VzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBpPG5QYWdlcy0xID8gUEFHRV9TSVpFIDogbmV3TGVuIC0gKG5QYWdlcy0xKSpQQUdFX1NJWkU7XG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFVpbnQ4QXJyYXkobmV3U2l6ZSk7XG4gICAgICAgICAgICBpZiAoaSA9PSB0aGlzLm8uZGF0YS5sZW5ndGgtMSkgcC5zZXQodGhpcy5vLmRhdGFbaV0pO1xuICAgICAgICAgICAgdGhpcy5vLmRhdGFbaV0gPSBwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxTaXplID0gbmV3TGVuO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKGJ1ZmYsIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID10aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiKSBwb3MgPSBzZWxmLnBvcztcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHRocm93IG5ldyBFcnJvcihcIldyaXRpbmcgYSByZWFkIG9ubHkgZmlsZVwiKTtcblxuICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MgKyBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gUEFHRV9TSVpFKTtcblxuICAgICAgICBsZXQgcCA9IGZpcnN0UGFnZTtcbiAgICAgICAgbGV0IG8gPSBwb3MgJSBQQUdFX1NJWkU7XG4gICAgICAgIGxldCByID0gYnVmZi5ieXRlTGVuZ3RoO1xuICAgICAgICB3aGlsZSAocj4wKSB7XG4gICAgICAgICAgICBjb25zdCBsID0gKG8rciA+IFBBR0VfU0laRSkgPyAoUEFHRV9TSVpFIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gYnVmZi5zbGljZShidWZmLmJ5dGVMZW5ndGggLSByLCBidWZmLmJ5dGVMZW5ndGggLSByICsgbCk7XG4gICAgICAgICAgICBjb25zdCBkc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2VsZi5vLmRhdGFbcF0uYnVmZmVyLCBvLCBsKTtcbiAgICAgICAgICAgIGRzdFZpZXcuc2V0KHNyY1ZpZXcpO1xuICAgICAgICAgICAgciA9IHItbDtcbiAgICAgICAgICAgIHAgKys7XG4gICAgICAgICAgICBvID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRUb0J1ZmZlcihidWZmRHN0LCBvZmZzZXQsIGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiKSBwb3MgPSBzZWxmLnBvcztcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGlmIChwb3MgKyBsZW4gPiB0aGlzLnRvdGFsU2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiUmVhZGluZyBvdXQgb2YgYm91bmRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUlmTmVlZGVkKHBvcyArIGxlbik7XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihwb3MgLyBQQUdFX1NJWkUpO1xuXG4gICAgICAgIGxldCBwID0gZmlyc3RQYWdlO1xuICAgICAgICBsZXQgbyA9IHBvcyAlIFBBR0VfU0laRTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBsZW47XG4gICAgICAgIHdoaWxlIChyPjApIHtcbiAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGwgPSAobytyID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLW8pIDogcjtcbiAgICAgICAgICAgIGNvbnN0IHNyY1ZpZXcgPSBuZXcgVWludDhBcnJheShzZWxmLm8uZGF0YVtwXS5idWZmZXIsIG8sIGwpO1xuICAgICAgICAgICAgYnVmZkRzdC5zZXQoc3JjVmlldywgb2Zmc2V0K2xlbi1yKTtcbiAgICAgICAgICAgIHIgPSByLWw7XG4gICAgICAgICAgICBwICsrO1xuICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcyA9IHBvcyArIGxlbjtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkKGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcblxuICAgICAgICBhd2FpdCBzZWxmLnJlYWRUb0J1ZmZlcihidWZmLCAwLCBsZW4sIHBvcyk7XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgZGlzY2FyZCgpIHtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIHRydWUpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVUJFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmYzMiwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFNjQodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmY2NHYuc2V0VWludDMyKDAsIHYgJiAweEZGRkZGRkZGLCB0cnVlKTtcbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoNCwgTWF0aC5mbG9vcih2IC8gMHgxMDAwMDAwMDApICwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmNjQsIHBvcyk7XG4gICAgfVxuXG5cbiAgICBhc3luYyByZWFkVUxFMzIocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDQsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50MzJBcnJheShiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXdbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVCRTMyKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg0LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVMRTY0KHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg4LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDMyQXJyYXkoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3WzFdICogMHgxMDAwMDAwMDAgKyB2aWV3WzBdO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRTdHJpbmcocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBmaXhlZFNpemUgPSAyMDQ4O1xuXG4gICAgICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSB0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIgPyBzZWxmLnBvcyA6IHBvcztcblxuICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uID4gdGhpcy50b3RhbFNpemUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhZGluZyBvdXQgb2YgYm91bmRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVzaXplSWZOZWVkZWQocG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbmRPZlN0cmluZ0ZvdW5kID0gZmFsc2U7XG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xuXG4gICAgICAgIHdoaWxlICghZW5kT2ZTdHJpbmdGb3VuZCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gTWF0aC5mbG9vcihjdXJyZW50UG9zaXRpb24gLyBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgbGV0IG9mZnNldE9uUGFnZSA9IGN1cnJlbnRQb3NpdGlvbiAlIFBBR0VfU0laRTtcblxuICAgICAgICAgICAgaWYgKHNlbGYuby5kYXRhW2N1cnJlbnRQYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRVJST1JcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZWFkTGVuZ3RoID0gTWF0aC5taW4oZml4ZWRTaXplLCBzZWxmLm8uZGF0YVtjdXJyZW50UGFnZV0ubGVuZ3RoIC0gb2Zmc2V0T25QYWdlKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KHNlbGYuby5kYXRhW2N1cnJlbnRQYWdlXS5idWZmZXIsIG9mZnNldE9uUGFnZSwgcmVhZExlbmd0aCk7XG5cbiAgICAgICAgICAgIGxldCBpbmRleEVuZE9mU3RyaW5nID0gZGF0YUFycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQgPT09IDApO1xuICAgICAgICAgICAgZW5kT2ZTdHJpbmdGb3VuZCA9IGluZGV4RW5kT2ZTdHJpbmcgIT09IC0xO1xuXG4gICAgICAgICAgICBpZiAoZW5kT2ZTdHJpbmdGb3VuZCkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5LnNsaWNlKDAsIGluZGV4RW5kT2ZTdHJpbmcpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogUEFHRV9TSVpFICsgb2Zmc2V0T25QYWdlICsgaW5kZXhFbmRPZlN0cmluZyArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5KTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogUEFHRV9TSVpFICsgb2Zmc2V0T25QYWdlICsgZGF0YUFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gc2VsZi5wb3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iLCIvKiBnbG9iYWwgZmV0Y2ggKi9cbmltcG9ydCB7IG9wZW4gfSBmcm9tIFwiLi9vc2ZpbGUuanNcIjtcbmltcG9ydCAqIGFzIG1lbUZpbGUgZnJvbSBcIi4vbWVtZmlsZS5qc1wiO1xuaW1wb3J0ICogYXMgYmlnTWVtRmlsZSBmcm9tIFwiLi9iaWdtZW1maWxlLmpzXCI7XG5pbXBvcnQgeyBPX1RSVU5DLCBPX0NSRUFULCBPX1JEV1IsIE9fRVhDTCwgT19SRE9OTFkgfSBmcm9tIFwiY29uc3RhbnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FDSEVfU0laRSA9ICgxIDw8IDE2KTtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gKDEgPDwgMTMpO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVPdmVycmlkZShvLCBiLCBjKSB7XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG8gPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgIGZpbGVOYW1lOiBvLFxuICAgICAgICAgICAgY2FjaGVTaXplOiBiIHx8IERFRkFVTFRfQ0FDSEVfU0laRSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wZW4oby5maWxlTmFtZSwgT19UUlVOQyB8IE9fQ1JFQVQgfCBPX1JEV1IsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBiaWdNZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm9PdmVycmlkZShvLCBiLCBjKSB7XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG8gPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgIGZpbGVOYW1lOiBvLFxuICAgICAgICAgICAgY2FjaGVTaXplOiBiIHx8IERFRkFVTFRfQ0FDSEVfU0laRSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIG9wZW4oby5maWxlTmFtZSwgT19UUlVOQyB8IE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYQ0wsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBiaWdNZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEV4aXN0aW5nKG8sIGIsIGMpIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgbyA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwibWVtXCIsXG4gICAgICAgICAgICBkYXRhOiBvXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmV0Y2gobykudGhlbiggZnVuY3Rpb24ocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoYWIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwibWVtXCIsXG4gICAgICAgICAgICAgICAgZGF0YTogYnVmZlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgICAgICBjYWNoZVNpemU6IGIgfHwgREVGQVVMVF9DQUNIRV9TSVpFLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wZW4oby5maWxlTmFtZSwgT19SRE9OTFksIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBtZW1GaWxlLnJlYWRFeGlzdGluZyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBiaWdNZW1GaWxlLnJlYWRFeGlzdGluZyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFdyaXRlRXhpc3RpbmcobywgYiwgYykge1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgIGNhY2hlU2l6ZTogYiB8fCBERUZBVUxUX0NBQ0hFX1NJWkUsXG4gICAgICAgICAgICBwYWdlU2l6ZTogYyB8fCBERUZBVUxUX1BBR0VfU0laRVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoby50eXBlID09IFwiZmlsZVwiKSB7XG4gICAgICAgIHJldHVybiBvcGVuKG8uZmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLnJlYWRXcml0ZUV4aXN0aW5nKG8pO1xuICAgIH0gZWxzZSBpZiAoby50eXBlID09IFwiYmlnTWVtXCIpIHtcbiAgICAgICAgcmV0dXJuIGJpZ01lbUZpbGUucmVhZFdyaXRlRXhpc3Rpbmcobyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBGYXN0RmlsZSB0eXBlOiBcIitvLnR5cGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRXcml0ZUV4aXN0aW5nT3JDcmVhdGUobywgYiwgYykge1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgIGNhY2hlU2l6ZTogYiB8fCBERUZBVUxUX0NBQ0hFX1NJWkUsXG4gICAgICAgICAgICBwYWdlU2l6ZTogYyB8fCBERUZBVUxUX1BBR0VfU0laRVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoby50eXBlID09IFwiZmlsZVwiKSB7XG4gICAgICAgIHJldHVybiBvcGVuKG8uZmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYQ0wsIG8uY2FjaGVTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLnJlYWRXcml0ZUV4aXN0aW5nKG8pO1xuICAgIH0gZWxzZSBpZiAoby50eXBlID09IFwiYmlnTWVtXCIpIHtcbiAgICAgICAgcmV0dXJuIGJpZ01lbUZpbGUucmVhZFdyaXRlRXhpc3Rpbmcobyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBGYXN0RmlsZSB0eXBlOiBcIitvLnR5cGUpO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0ICB7IFNjYWxhciwgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQmluRmlsZShmaWxlTmFtZSwgdHlwZSwgbWF4VmVyc2lvbiwgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuXG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3RpbmcoZmlsZU5hbWUsIGNhY2hlU2l6ZSwgcGFnZVNpemUpO1xuXG4gICAgY29uc3QgYiA9IGF3YWl0IGZkLnJlYWQoNCk7XG4gICAgbGV0IHJlYWRlZFR5cGUgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTw0OyBpKyspIHJlYWRlZFR5cGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiW2ldKTtcblxuICAgIGlmIChyZWFkZWRUeXBlICE9IHR5cGUpIHRocm93IG5ldyBFcnJvcihmaWxlTmFtZSArIFwiOiBJbnZhbGlkIEZpbGUgZm9ybWF0XCIpO1xuXG4gICAgbGV0IHYgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcblxuICAgIGlmICh2Pm1heFZlcnNpb24pIHRocm93IG5ldyBFcnJvcihcIlZlcnNpb24gbm90IHN1cHBvcnRlZFwiKTtcblxuICAgIGNvbnN0IG5TZWN0aW9ucyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgLy8gU2NhbiBzZWN0aW9uc1xuICAgIGxldCBzZWN0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuU2VjdGlvbnM7IGkrKykge1xuICAgICAgICBsZXQgaHQgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICAgICAgbGV0IGhsID0gYXdhaXQgZmQucmVhZFVMRTY0KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VjdGlvbnNbaHRdID09IFwidW5kZWZpbmVkXCIpIHNlY3Rpb25zW2h0XSA9IFtdO1xuICAgICAgICBzZWN0aW9uc1todF0ucHVzaCh7XG4gICAgICAgICAgICBwOiBmZC5wb3MsXG4gICAgICAgICAgICBzaXplOiBobFxuICAgICAgICB9KTtcbiAgICAgICAgZmQucG9zICs9IGhsO1xuICAgIH1cblxuICAgIHJldHVybiB7ZmQsIHNlY3Rpb25zfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJpbkZpbGUoZmlsZU5hbWUsIHR5cGUsIHZlcnNpb24sIG5TZWN0aW9ucywgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuXG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5jcmVhdGVPdmVycmlkZShmaWxlTmFtZSwgY2FjaGVTaXplLCBwYWdlU2l6ZSk7XG5cbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPDQ7IGkrKykgYnVmZltpXSA9IHR5cGUuY2hhckNvZGVBdChpKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmLCAwKTsgLy8gTWFnaWMgXCJyMWNzXCJcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIodmVyc2lvbik7IC8vIFZlcnNpb25cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKG5TZWN0aW9ucyk7IC8vIE51bWJlciBvZiBTZWN0aW9uc1xuXG4gICAgcmV0dXJuIGZkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXcml0ZVNlY3Rpb24oZmQsIGlkU2VjdGlvbikge1xuICAgIGlmICh0eXBlb2YgZmQud3JpdGluZ1NlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgd3JpdGluZyBhIHNlY3Rpb25cIik7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihpZFNlY3Rpb24pOyAvLyBIZWFkZXIgdHlwZVxuICAgIGZkLndyaXRpbmdTZWN0aW9uID0ge1xuICAgICAgICBwU2VjdGlvblNpemU6IGZkLnBvc1xuICAgIH07XG4gICAgYXdhaXQgZmQud3JpdGVVTEU2NCgwKTsgLy8gVGVtcG9yYWxseSBzZXQgdG8gMCBsZW5ndGhcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuZFdyaXRlU2VjdGlvbihmZCkge1xuICAgIGlmICh0eXBlb2YgZmQud3JpdGluZ1NlY3Rpb24gPT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIk5vdCB3cml0aW5nIGEgc2VjdGlvblwiKTtcblxuICAgIGNvbnN0IHNlY3Rpb25TaXplID0gZmQucG9zIC0gZmQud3JpdGluZ1NlY3Rpb24ucFNlY3Rpb25TaXplIC0gODtcbiAgICBjb25zdCBvbGRQb3MgPSBmZC5wb3M7XG4gICAgZmQucG9zID0gZmQud3JpdGluZ1NlY3Rpb24ucFNlY3Rpb25TaXplO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoc2VjdGlvblNpemUpO1xuICAgIGZkLnBvcyA9IG9sZFBvcztcbiAgICBkZWxldGUgZmQud3JpdGluZ1NlY3Rpb247XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgaWRTZWN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBmZC5yZWFkaW5nU2VjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikgdGhyb3cgbmV3IEVycm9yKFwiQWxyZWFkeSByZWFkaW5nIGEgc2VjdGlvblwiKTtcbiAgICBpZiAoIXNlY3Rpb25zW2lkU2VjdGlvbl0pICB0aHJvdyBuZXcgRXJyb3IoZmQuZmlsZU5hbWUgKyBcIjogTWlzc2luZyBzZWN0aW9uIFwiKyBpZFNlY3Rpb24gKTtcbiAgICBpZiAoc2VjdGlvbnNbaWRTZWN0aW9uXS5sZW5ndGg+MSkgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICtcIjogU2VjdGlvbiBEdXBsaWNhdGVkIFwiICtpZFNlY3Rpb24pO1xuXG4gICAgZmQucG9zID0gc2VjdGlvbnNbaWRTZWN0aW9uXVswXS5wO1xuXG4gICAgZmQucmVhZGluZ1NlY3Rpb24gPSBzZWN0aW9uc1tpZFNlY3Rpb25dWzBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5kUmVhZFNlY3Rpb24oZmQsIG5vQ2hlY2spIHtcbiAgICBpZiAodHlwZW9mIGZkLnJlYWRpbmdTZWN0aW9uID09PSBcInVuZGVmaW5lZFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgcmVhZGluZyBhIHNlY3Rpb25cIik7XG4gICAgaWYgKCFub0NoZWNrKSB7XG4gICAgICAgIGlmIChmZC5wb3MtZmQucmVhZGluZ1NlY3Rpb24ucCAhPSAgZmQucmVhZGluZ1NlY3Rpb24uc2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzZWN0aW9uIHNpemUgcmVhZGluZ1wiKTtcbiAgICB9XG4gICAgZGVsZXRlIGZkLnJlYWRpbmdTZWN0aW9uO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVCaWdJbnQoZmQsIG4sIG44LCBwb3MpIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobjgpO1xuICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIDAsIG4sIG44KTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmLCBwb3MpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEJpZ0ludChmZCwgbjgsIHBvcykge1xuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKG44LCBwb3MpO1xuICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKGJ1ZmYsIDAsIG44KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlTZWN0aW9uKGZkRnJvbSwgc2VjdGlvbnMsIGZkVG8sIHNlY3Rpb25JZCwgc2l6ZSkge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzaXplID0gc2VjdGlvbnNbc2VjdGlvbklkXVswXS5zaXplO1xuICAgIH1cbiAgICBjb25zdCBjaHVua1NpemUgPSBmZEZyb20ucGFnZVNpemU7XG4gICAgYXdhaXQgc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZEZyb20sIHNlY3Rpb25zLCBzZWN0aW9uSWQpO1xuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkVG8sIHNlY3Rpb25JZCk7XG4gICAgZm9yIChsZXQgcD0wOyBwPHNpemU7IHArPWNodW5rU2l6ZSkge1xuICAgICAgICBjb25zdCBsID0gTWF0aC5taW4oc2l6ZSAtcCwgY2h1bmtTaXplKTtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGwpO1xuICAgICAgICBhd2FpdCBmZFRvLndyaXRlKGJ1ZmYpO1xuICAgIH1cbiAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRUbyk7XG4gICAgYXdhaXQgZW5kUmVhZFNlY3Rpb24oZmRGcm9tLCBzaXplICE9IHNlY3Rpb25zW3NlY3Rpb25JZF1bMF0uc2l6ZSk7XG5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTZWN0aW9uKGZkLCBzZWN0aW9ucywgaWRTZWN0aW9uLCBvZmZzZXQsIGxlbmd0aCkge1xuXG4gICAgb2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09IFwidW5kZWZpbmVkXCIpID8gMCA6IG9mZnNldDtcbiAgICBsZW5ndGggPSAodHlwZW9mIGxlbmd0aCA9PT0gXCJ1bmRlZmluZWRcIikgPyBzZWN0aW9uc1tpZFNlY3Rpb25dWzBdLnNpemUgLSBvZmZzZXQgOiBsZW5ndGg7XG5cbiAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gc2VjdGlvbnNbaWRTZWN0aW9uXVswXS5zaXplKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIHRoZSByYW5nZSBvZiB0aGUgc2VjdGlvblwiKTtcbiAgICB9XG5cbiAgICBsZXQgYnVmZjtcbiAgICBpZiAobGVuZ3RoIDwgKDEgPDwgMzApICkge1xuICAgICAgICBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBidWZmID0gbmV3IEJpZ0J1ZmZlcihsZW5ndGgpO1xuICAgIH1cblxuICAgIGF3YWl0IGZkLnJlYWRUb0J1ZmZlcihidWZmLCAwLCBsZW5ndGgsIHNlY3Rpb25zW2lkU2VjdGlvbl1bMF0ucCArIG9mZnNldCk7XG4gICAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWN0aW9uSXNFcXVhbChmZDEsIHNlY3Rpb25zMSwgZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbikge1xuICAgIGNvbnN0IE1BWF9CVUZGX1NJWkUgPSBmZDEucGFnZVNpemUgKiAxNjtcbiAgICBhd2FpdCBzdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkMSwgc2VjdGlvbnMxLCBpZFNlY3Rpb24pO1xuICAgIGF3YWl0IHN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbik7XG4gICAgaWYgKHNlY3Rpb25zMVtpZFNlY3Rpb25dWzBdLnNpemUgIT0gc2VjdGlvbnMyW2lkU2VjdGlvbl1bMF0uc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHRvdGFsQnl0ZXM9c2VjdGlvbnMxW2lkU2VjdGlvbl1bMF0uc2l6ZTtcbiAgICBmb3IgKGxldCBpPTA7IGk8dG90YWxCeXRlczsgaSs9IE1BWF9CVUZGX1NJWkUpIHtcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKHRvdGFsQnl0ZXMtaSwgTUFYX0JVRkZfU0laRSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYxID0gYXdhaXQgZmQxLnJlYWQobik7XG4gICAgICAgIGNvbnN0IGJ1ZmYyID0gYXdhaXQgZmQyLnJlYWQobik7XG4gICAgICAgIGZvciAobGV0IGo9MDsgajxuOyBqKyspIGlmIChidWZmMVtqXSAhPSBidWZmMltqXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCBlbmRSZWFkU2VjdGlvbihmZDEpO1xuICAgIGF3YWl0IGVuZFJlYWRTZWN0aW9uKGZkMik7XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyBTY2FsYXIsIGJ1aWxkQm4xMjgsIGJ1aWxkQmxzMTIzODF9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmNvbnN0IGJsczEyMzgxcSA9IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KTtcbmNvbnN0IGJuMTI4cSA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21SKHIpIHtcbiAgICBsZXQgY3VydmU7XG4gICAgaWYgKFNjYWxhci5lcShyLCBibjEyOHIpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOCgpO1xuICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKHIsIGJsczEyMzgxcikpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJsczEyMzgxKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJ2ZSBub3Qgc3VwcG9ydGVkOiAke1NjYWxhci50b1N0cmluZyhyKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VydmVGcm9tUShxKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEocSwgYm4xMjhxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShxLCBibHMxMjM4MXEpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocSl9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbU5hbWUobmFtZSkge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBjb25zdCBub3JtTmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgaWYgKFtcIkJOMTI4XCIsIFwiQk4yNTRcIiwgXCJBTFRCTjEyOFwiXS5pbmRleE9mKG5vcm1OYW1lKSA+PSAwKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOCgpO1xuICAgIH0gZWxzZSBpZiAoW1wiQkxTMTIzODFcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuKSB7XG4gICAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCkubWF0Y2goL1tBLVphLXowLTldKy9nKS5qb2luKFwiXCIpO1xuICAgIH1cblxufVxuXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGFzc2VydFxuXG5jbGFzcyBBc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHt9XG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdBc3NlcnRpb25FcnJvcidcblxuLyoqXG4gKiBNaW5pbWFsIGFzc2VydCBmdW5jdGlvblxuICogQHBhcmFtICB7YW55fSB0IFZhbHVlIHRvIGNoZWNrIGlmIGZhbHN5XG4gKiBAcGFyYW0gIHtzdHJpbmc9fSBtIE9wdGlvbmFsIGFzc2VydGlvbiBlcnJvciBtZXNzYWdlXG4gKiBAdGhyb3dzIHtBc3NlcnRpb25FcnJvcn1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0ICh0LCBtKSB7XG4gIGlmICghdCkge1xuICAgIHZhciBlcnIgPSBuZXcgQXNzZXJ0aW9uRXJyb3IobSlcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgYXNzZXJ0KVxuICAgIHRocm93IGVyclxuICB9XG59XG4iLCJmdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlcikge1xuICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbaV0pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcpKSB7XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImNvbnN0IGFscGhhYmV0ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5cbmNvbnN0IGNvZGVzID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IGFscGhhYmV0Lmxlbmd0aDsgaSsrKSB7XG4gIGNvZGVzW2FscGhhYmV0LmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG5jb2Rlc1svKiAtICovIDB4MmRdID0gNjJcbmNvZGVzWy8qIF8gKi8gMHg1Zl0gPSA2M1xuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgbGV0IGxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQobGVuIC0gMSkgPT09IDB4M2QpIGxlbi0tXG4gIGlmIChsZW4gPiAxICYmIHN0cmluZy5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSAweDNkKSBsZW4tLVxuXG4gIHJldHVybiAobGVuICogMykgPj4+IDJcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlcikge1xuICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpIHtcbiAgICByZXN1bHQgKz0gKFxuICAgICAgYWxwaGFiZXRbYnVmZmVyW2ldID4+IDJdICtcbiAgICAgIGFscGhhYmV0WygoYnVmZmVyW2ldICYgMykgPDwgNCkgfCAoYnVmZmVyW2kgKyAxXSA+PiA0KV0gK1xuICAgICAgYWxwaGFiZXRbKChidWZmZXJbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ1ZmZlcltpICsgMl0gPj4gNildICtcbiAgICAgIGFscGhhYmV0W2J1ZmZlcltpICsgMl0gJiA2M11cbiAgICApXG4gIH1cblxuICBpZiAobGVuICUgMyA9PT0gMikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDEpICsgJz0nXG4gIH0gZWxzZSBpZiAobGVuICUgMyA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDIpICsgJz09J1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufTtcblxuZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgY29uc3QgbGVuID0gTWF0aC5taW4obGVuZ3RoLCBidWZmZXIuYnl0ZUxlbmd0aCAtIG9mZnNldClcblxuICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGogPCBsZW47IGkgKz0gNCkge1xuICAgIGNvbnN0IGEgPSBjb2Rlc1tzdHJpbmcuY2hhckNvZGVBdChpKV1cbiAgICBjb25zdCBiID0gY29kZXNbc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpXVxuICAgIGNvbnN0IGMgPSBjb2Rlc1tzdHJpbmcuY2hhckNvZGVBdChpICsgMildXG4gICAgY29uc3QgZCA9IGNvZGVzW3N0cmluZy5jaGFyQ29kZUF0KGkgKyAzKV1cblxuICAgIGJ1ZmZlcltqKytdID0gKGEgPDwgMikgfCAoYiA+PiA0KVxuICAgIGJ1ZmZlcltqKytdID0gKChiICYgMTUpIDw8IDQpIHwgKGMgPj4gMilcbiAgICBidWZmZXJbaisrXSA9ICgoYyAmIDMpIDw8IDYpIHwgKGQgJiA2MylcbiAgfVxuXG4gIHJldHVybiBsZW5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA+Pj4gMVxufVxuXG5mdW5jdGlvbiB0b1N0cmluZyAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgYnVmZmVyID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBsZW4pXG5cbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBpID0gMFxuXG4gIGZvciAobGV0IG4gPSBsZW4gLSAobGVuICUgNCk7IGkgPCBuOyBpICs9IDQpIHtcbiAgICByZXN1bHQgKz0gYnVmZmVyLmdldFVpbnQzMihpKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKVxuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHJlc3VsdCArPSBidWZmZXIuZ2V0VWludDgoaSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgY29uc3QgbGVuID0gTWF0aC5taW4obGVuZ3RoLCBidWZmZXIuYnl0ZUxlbmd0aCAtIG9mZnNldClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYSA9IGhleFZhbHVlKHN0cmluZy5jaGFyQ29kZUF0KGkgKiAyKSlcbiAgICBjb25zdCBiID0gaGV4VmFsdWUoc3RyaW5nLmNoYXJDb2RlQXQoaSAqIDIgKyAxKSlcblxuICAgIGlmIChhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGkpXG4gICAgfVxuXG4gICAgYnVmZmVyW29mZnNldCArIGldID0gKGEgPDwgNCkgfCBiXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cblxuZnVuY3Rpb24gaGV4VmFsdWUgKGNoYXIpIHtcbiAgaWYgKGNoYXIgPj0gMHgzMCAmJiBjaGFyIDw9IDB4MzkpIHJldHVybiBjaGFyIC0gMHgzMFxuICBpZiAoY2hhciA+PSAweDQxICYmIGNoYXIgPD0gMHg0NikgcmV0dXJuIGNoYXIgLSAweDQxICsgMTBcbiAgaWYgKGNoYXIgPj0gMHg2MSAmJiBjaGFyIDw9IDB4NjYpIHJldHVybiBjaGFyIC0gMHg2MSArIDEwXG59XG4iLCJmdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgbGV0IGxlbmd0aCA9IDBcblxuICBmb3IgKGxldCBpID0gMCwgbiA9IHN0cmluZy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZiAmJiBpICsgMSA8IG4pIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSlcblxuICAgICAgaWYgKGNvZGUgPj0gMHhkYzAwICYmIGNvZGUgPD0gMHhkZmZmKSB7XG4gICAgICAgIGxlbmd0aCArPSA0XG4gICAgICAgIGkrK1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlIDw9IDB4N2YpIGxlbmd0aCArPSAxXG4gICAgZWxzZSBpZiAoY29kZSA8PSAweDdmZikgbGVuZ3RoICs9IDJcbiAgICBlbHNlIGxlbmd0aCArPSAzXG4gIH1cblxuICByZXR1cm4gbGVuZ3RoXG59XG5cbmxldCB0b1N0cmluZ1xuXG5pZiAodHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJykge1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuICB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIpIHtcbiAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuICB9XG59IGVsc2Uge1xuICB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIpIHtcbiAgICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gICAgbGV0IG91dHB1dCA9ICcnXG4gICAgbGV0IGkgPSAwXG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgbGV0IGJ5dGUgPSBidWZmZXJbaV1cblxuICAgICAgaWYgKGJ5dGUgPD0gMHg3Zikge1xuICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuICAgICAgICBpKytcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgbGV0IGJ5dGVzTmVlZGVkID0gMFxuICAgICAgbGV0IGNvZGVQb2ludCA9IDBcblxuICAgICAgaWYgKGJ5dGUgPD0gMHhkZikge1xuICAgICAgICBieXRlc05lZWRlZCA9IDFcbiAgICAgICAgY29kZVBvaW50ID0gYnl0ZSAmIDB4MWZcbiAgICAgIH0gZWxzZSBpZiAoYnl0ZSA8PSAweGVmKSB7XG4gICAgICAgIGJ5dGVzTmVlZGVkID0gMlxuICAgICAgICBjb2RlUG9pbnQgPSBieXRlICYgMHgwZlxuICAgICAgfSBlbHNlIGlmIChieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgYnl0ZXNOZWVkZWQgPSAzXG4gICAgICAgIGNvZGVQb2ludCA9IGJ5dGUgJiAweDA3XG4gICAgICB9XG5cbiAgICAgIGlmIChsZW4gLSBpIC0gYnl0ZXNOZWVkZWQgPiAwKSB7XG4gICAgICAgIGxldCBrID0gMFxuXG4gICAgICAgIHdoaWxlIChrIDwgYnl0ZXNOZWVkZWQpIHtcbiAgICAgICAgICBieXRlID0gYnVmZmVyW2kgKyBrICsgMV1cbiAgICAgICAgICBjb2RlUG9pbnQgPSAoY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgICAgIGsgKz0gMVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlUG9pbnQgPSAweGZmZmRcbiAgICAgICAgYnl0ZXNOZWVkZWQgPSBsZW4gLSBpXG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpXG4gICAgICBpICs9IGJ5dGVzTmVlZGVkICsgMVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXRcbiAgfVxufVxuXG5sZXQgd3JpdGVcblxuaWYgKHR5cGVvZiBUZXh0RW5jb2RlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbiAgd3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCA9IDAsIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nKSkge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG4gICAgZW5jb2Rlci5lbmNvZGVJbnRvKHN0cmluZywgYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKSlcbiAgICByZXR1cm4gbGVuXG4gIH1cbn0gZWxzZSB7XG4gIHdyaXRlID0gZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihsZW5ndGgsIGJ1ZmZlci5ieXRlTGVuZ3RoIC0gb2Zmc2V0KVxuXG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKVxuXG4gICAgbGV0IGkgPSAwXG4gICAgbGV0IGogPSAwXG5cbiAgICB3aGlsZSAoaSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSlcblxuICAgICAgaWYgKGNvZGUgPD0gMHg3Zikge1xuICAgICAgICBidWZmZXJbaisrXSA9IGNvZGVcbiAgICAgICAgaSsrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBjb3VudCA9IDBcbiAgICAgIGxldCBiaXRzID0gMFxuXG4gICAgICBpZiAoY29kZSA8PSAweDdmZikge1xuICAgICAgICBjb3VudCA9IDZcbiAgICAgICAgYml0cyA9IDB4YzBcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgICAgY291bnQgPSAxMlxuICAgICAgICBiaXRzID0gMHhlMFxuICAgICAgfSBlbHNlIGlmIChjb2RlIDw9IDB4MWZmZmZmKSB7XG4gICAgICAgIGNvdW50ID0gMThcbiAgICAgICAgYml0cyA9IDB4ZjBcbiAgICAgIH1cblxuICAgICAgYnVmZmVyW2orK10gPSBiaXRzIHwgKGNvZGUgPj4gY291bnQpXG4gICAgICBjb3VudCAtPSA2XG5cbiAgICAgIHdoaWxlIChjb3VudCA+PSAwKSB7XG4gICAgICAgIGJ1ZmZlcltqKytdID0gMHg4MCB8ICgoY29kZSA+PiBjb3VudCkgJiAweDNmKVxuICAgICAgICBjb3VudCAtPSA2XG4gICAgICB9XG5cbiAgICAgIGkgKz0gY29kZSA+PSAweDEwMDAwID8gMiA6IDFcbiAgICB9XG5cbiAgICByZXR1cm4gbGVuXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJ5dGVMZW5ndGgsXG4gIHRvU3RyaW5nLFxuICB3cml0ZVxufVxuIiwiZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoICogMlxufVxuXG5mdW5jdGlvbiB0b1N0cmluZyAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpICs9IDIpIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbaV0gKyAoYnVmZmVyW2kgKyAxXSAqIDI1NikpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcpKSB7XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG5cbiAgbGV0IHVuaXRzID0gbGVuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGNvbnN0IGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuICAgIGNvbnN0IGhpID0gYyA+PiA4XG4gICAgY29uc3QgbG8gPSBjICUgMjU2XG5cbiAgICBidWZmZXJbb2Zmc2V0ICsgaSAqIDJdID0gbG9cbiAgICBidWZmZXJbb2Zmc2V0ICsgaSAqIDIgKyAxXSA9IGhpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImNvbnN0IGFzY2lpID0gcmVxdWlyZSgnLi9saWIvYXNjaWknKVxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnLi9saWIvYmFzZTY0JylcbmNvbnN0IGhleCA9IHJlcXVpcmUoJy4vbGliL2hleCcpXG5jb25zdCB1dGY4ID0gcmVxdWlyZSgnLi9saWIvdXRmOCcpXG5jb25zdCB1dGYxNmxlID0gcmVxdWlyZSgnLi9saWIvdXRmMTZsZScpXG5cbmNvbnN0IExFID0gbmV3IFVpbnQ4QXJyYXkoVWludDE2QXJyYXkub2YoMHhmZikuYnVmZmVyKVswXSA9PT0gMHhmZlxuXG5mdW5jdGlvbiBjb2RlY0ZvciAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChlbmNvZGluZykge1xuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIHJldHVybiBhc2NpaVxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXR1cm4gYmFzZTY0XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldHVybiBoZXhcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICByZXR1cm4gdXRmOFxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdXRmMTZsZVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW5jb2Rpbmc6ICR7ZW5jb2Rpbmd9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheVxufVxuXG5mdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICB0cnkge1xuICAgIGNvZGVjRm9yKGVuY29kaW5nKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSBleHBvcnRzLmZpbGwoYnVmZmVyLCBmaWxsLCAwLCBidWZmZXIuYnl0ZUxlbmd0aCwgZW5jb2RpbmcpXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpemUpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyAoc2l6ZSkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gY29kZWNGb3IoZW5jb2RpbmcpLmJ5dGVMZW5ndGgoc3RyaW5nKVxufVxuXG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGEuYnl0ZUxlbmd0aCwgYi5ieXRlTGVuZ3RoKVxuXG4gIGEgPSBuZXcgRGF0YVZpZXcoYS5idWZmZXIsIGEuYnl0ZU9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBiID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyLCBiLmJ5dGVPZmZzZXQsIGIuYnl0ZUxlbmd0aClcblxuICBsZXQgaSA9IDBcblxuICBmb3IgKGxldCBuID0gbGVuIC0gKGxlbiAlIDQpOyBpIDwgbjsgaSArPSA0KSB7XG4gICAgY29uc3QgeCA9IGEuZ2V0VWludDMyKGksIExFKVxuICAgIGNvbnN0IHkgPSBiLmdldFVpbnQzMihpLCBMRSlcbiAgICBpZiAoeCAhPT0geSkgYnJlYWtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gYS5nZXRVaW50OChpKVxuICAgIGNvbnN0IHkgPSBiLmdldFVpbnQ4KGkpXG4gICAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgICBpZiAoeCA+IHkpIHJldHVybiAxXG4gIH1cblxuICByZXR1cm4gYS5ieXRlTGVuZ3RoID4gYi5ieXRlTGVuZ3RoID8gMSA6IGEuYnl0ZUxlbmd0aCA8IGIuYnl0ZUxlbmd0aCA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBjb25jYXQgKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKSB7XG4gIGlmICh0b3RhbExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdG90YWxMZW5ndGggPSBidWZmZXJzLnJlZHVjZSgobGVuLCBidWZmZXIpID0+IGxlbiArIGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpXG5cbiAgYnVmZmVycy5yZWR1Y2UoXG4gICAgKG9mZnNldCwgYnVmZmVyKSA9PiB7XG4gICAgICByZXN1bHQuc2V0KGJ1ZmZlciwgb2Zmc2V0KVxuICAgICAgcmV0dXJuIG9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgfSxcbiAgICAwXG4gIClcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgdGFyZ2V0LCB0YXJnZXRTdGFydCA9IDAsIHN0YXJ0ID0gMCwgZW5kID0gc291cmNlLmJ5dGVMZW5ndGgpIHtcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIHJldHVybiAwXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAoc291cmNlLmJ5dGVMZW5ndGggPT09IDAgfHwgdGFyZ2V0LmJ5dGVMZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IGlzIG91dCBvZiByYW5nZScpXG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gc291cmNlLmJ5dGVMZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBpcyBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBpcyBvdXQgb2YgcmFuZ2UnKVxuXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQuYnl0ZUxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQuYnl0ZUxlbmd0aFxuICBpZiAoZW5kID4gc291cmNlLmJ5dGVMZW5ndGgpIGVuZCA9IHNvdXJjZS5ieXRlTGVuZ3RoXG4gIGlmICh0YXJnZXQuYnl0ZUxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcbiAgICB0YXJnZXQuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuc2V0KHNvdXJjZS5zdWJhcnJheShzdGFydCwgZW5kKSwgdGFyZ2V0U3RhcnQpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbmZ1bmN0aW9uIGVxdWFscyAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWVcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBsZW4gPSBhLmJ5dGVMZW5ndGhcblxuICBhID0gbmV3IERhdGFWaWV3KGEuYnVmZmVyLCBhLmJ5dGVPZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgYiA9IG5ldyBEYXRhVmlldyhiLmJ1ZmZlciwgYi5ieXRlT2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG5cbiAgbGV0IGkgPSAwXG5cbiAgZm9yIChsZXQgbiA9IGxlbiAtIChsZW4gJSA0KTsgaSA8IG47IGkgKz0gNCkge1xuICAgIGlmIChhLmdldFVpbnQzMihpLCBMRSkgIT09IGIuZ2V0VWludDMyKGksIExFKSkgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGEuZ2V0VWludDgoaSkgIT09IGIuZ2V0VWludDgoaSkpIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmlsbCAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZmlsbChidWZmZXIsIHN0cmluZywgZW5jb2RpbmcpXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgICAgb2Zmc2V0ID0gMFxuICAgICAgZW5kID0gYnVmZmVyLmJ5dGVMZW5ndGhcblxuICAgIC8vIGZpbGwoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSAmIDB4ZmZcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWx1ZSA9ICt2YWx1ZVxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDAgfHwgYnVmZmVyLmJ5dGVMZW5ndGggPCBvZmZzZXQgfHwgYnVmZmVyLmJ5dGVMZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGVuZCA8PSBvZmZzZXQpIHJldHVybiBidWZmZXJcblxuICBpZiAoIXZhbHVlKSB2YWx1ZSA9IDBcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgYnVmZmVyW2ldID0gdmFsdWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBpc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IGZyb20odmFsdWUsIGVuY29kaW5nKVxuXG4gICAgY29uc3QgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmQgLSBvZmZzZXQ7ICsraSkge1xuICAgICAgYnVmZmVyW2kgKyBvZmZzZXRdID0gdmFsdWVbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gZnJvbShzdHJpbmcsIGVuY29kaW5nKVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG5cbiAgLy8gZnJvbShhcnJheSlcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZnJvbUFycmF5KHZhbHVlKVxuXG4gIC8vIGZyb20oYnVmZmVyKVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkgcmV0dXJuIGZyb21CdWZmZXIodmFsdWUpXG5cbiAgLy8gZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGNvZGVjID0gY29kZWNGb3IoZW5jb2RpbmcpXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNvZGVjLmJ5dGVMZW5ndGgoc3RyaW5nKSlcbiAgY29kZWMud3JpdGUoYnVmZmVyLCBzdHJpbmcsIDAsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheSAoYXJyYXkpIHtcbiAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkubGVuZ3RoKVxuICBidWZmZXIuc2V0KGFycmF5KVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb21CdWZmZXIgKGJ1ZmZlcikge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ5dGVMZW5ndGgpXG4gIGNvcHkuc2V0KGJ1ZmZlcilcbiAgcmV0dXJuIGNvcHlcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheUJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZpcnN0KSB7XG4gIGlmIChidWZmZXIuYnl0ZUxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnl0ZU9mZnNldCA9IGZpcnN0ID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGJ5dGVPZmZzZXQgKz0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgaWYgKGZpcnN0KSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIuYnl0ZUxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChmaXJzdCkgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IGZyb20odmFsdWUsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9IHZhbHVlICYgMHhmZlxuXG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICByZXR1cm4gYnVmZmVyLmluZGV4T2YodmFsdWUsIGJ5dGVPZmZzZXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWZmZXIubGFzdEluZGV4T2YodmFsdWUsIGJ5dGVPZmZzZXQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlLmJ5dGVMZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIGlmIChmaXJzdCkge1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTFcblxuICAgIGZvciAobGV0IGkgPSBieXRlT2Zmc2V0OyBpIDwgYnVmZmVyLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gdmFsdWVbZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXhdKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsdWUuYnl0ZUxlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWx1ZS5ieXRlTGVuZ3RoID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGJ5dGVPZmZzZXQgPSBidWZmZXIuYnl0ZUxlbmd0aCAtIHZhbHVlLmJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWVcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5ieXRlTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGJ1ZmZlcltpICsgal0gIT09IHZhbHVlW2pdKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUgLyogZmlyc3QgKi8pXG59XG5cbmZ1bmN0aW9uIGxhc3RJbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlIC8qIGxhc3QgKi8pXG59XG5cbmZ1bmN0aW9uIHN3YXAgKGJ1ZmZlciwgbiwgbSkge1xuICBjb25zdCBpID0gYnVmZmVyW25dXG4gIGJ1ZmZlcltuXSA9IGJ1ZmZlclttXVxuICBidWZmZXJbbV0gPSBpXG59XG5cbmZ1bmN0aW9uIHN3YXAxNiAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDIgIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgc3dhcChidWZmZXIsIGksIGkgKyAxKVxuXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gc3dhcDMyIChidWZmZXIpIHtcbiAgY29uc3QgbGVuID0gYnVmZmVyLmJ5dGVMZW5ndGhcblxuICBpZiAobGVuICUgNCAhPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcChidWZmZXIsIGksIGkgKyAzKVxuICAgIHN3YXAoYnVmZmVyLCBpICsgMSwgaSArIDIpXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHN3YXA2NCAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDggIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAoYnVmZmVyLCBpLCBpICsgNylcbiAgICBzd2FwKGJ1ZmZlciwgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAoYnVmZmVyLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcChidWZmZXIsIGkgKyAzLCBpICsgNClcbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXIgKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIsIGVuY29kaW5nLCBzdGFydCA9IDAsIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKHN0YXJ0ID49IGxlbikgcmV0dXJuICcnXG4gIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiAnJ1xuICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgaWYgKHN0YXJ0ICE9PSAwIHx8IGVuZCA8IGxlbikgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG5cbiAgcmV0dXJuIGNvZGVjRm9yKGVuY29kaW5nKS50b1N0cmluZyhidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIHdyaXRlKGJ1ZmZlciwgc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIC8vIHdyaXRlKGJ1ZmZlciwgc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gdW5kZWZpbmVkXG5cbiAgLy8gd3JpdGUoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gY29kZWNGb3IoZW5jb2RpbmcpLndyaXRlKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSwgdHJ1ZSlcblxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0TEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbiAgdmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdmFsdWUsIHRydWUpXG5cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlLCB0cnVlKVxuXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIHRydWUpXG5cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZUxFIChidWZmZXIsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldCwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0TEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0LCB0cnVlKVxufVxuXG5mdW5jdGlvbiByZWFkVUludDMyTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpXG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMkxFIChidWZmZXIsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQsIHRydWUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IHtcbiAgaXNCdWZmZXIsXG4gIGlzRW5jb2RpbmcsXG4gIGFsbG9jLFxuICBhbGxvY1Vuc2FmZSxcbiAgYWxsb2NVbnNhZmVTbG93LFxuICBieXRlTGVuZ3RoLFxuICBjb21wYXJlLFxuICBjb25jYXQsXG4gIGNvcHksXG4gIGVxdWFscyxcbiAgZmlsbCxcbiAgZnJvbSxcbiAgaW5jbHVkZXMsXG4gIGluZGV4T2YsXG4gIGxhc3RJbmRleE9mLFxuICBzd2FwMTYsXG4gIHN3YXAzMixcbiAgc3dhcDY0LFxuICB0b0J1ZmZlcixcbiAgdG9TdHJpbmcsXG4gIHdyaXRlLFxuICB3cml0ZURvdWJsZUxFLFxuICB3cml0ZUZsb2F0TEUsXG4gIHdyaXRlVUludDMyTEUsXG4gIHdyaXRlSW50MzJMRSxcbiAgcmVhZERvdWJsZUxFLFxuICByZWFkRmxvYXRMRSxcbiAgcmVhZFVJbnQzMkxFLFxuICByZWFkSW50MzJMRVxufVxuIiwidmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICByZXR1cm4gbW9kIHx8ICgwLCBjYltPYmplY3Qua2V5cyhjYilbMF1dKSgobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cztcbn07XG52YXIgX190b0JpbmFyeSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICB2YXIgdGFibGUgPSBuZXcgVWludDhBcnJheSgxMjgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspXG4gICAgdGFibGVbaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpICogNCAtIDIwNV0gPSBpO1xuICByZXR1cm4gKGJhc2U2NCkgPT4ge1xuICAgIHZhciBuID0gYmFzZTY0Lmxlbmd0aCwgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoKG4gLSAoYmFzZTY0W24gLSAxXSA9PSBcIj1cIikgLSAoYmFzZTY0W24gLSAyXSA9PSBcIj1cIikpICogMyAvIDQgfCAwKTtcbiAgICBmb3IgKHZhciBpMiA9IDAsIGogPSAwOyBpMiA8IG47ICkge1xuICAgICAgdmFyIGMwID0gdGFibGVbYmFzZTY0LmNoYXJDb2RlQXQoaTIrKyldLCBjMSA9IHRhYmxlW2Jhc2U2NC5jaGFyQ29kZUF0KGkyKyspXTtcbiAgICAgIHZhciBjMiA9IHRhYmxlW2Jhc2U2NC5jaGFyQ29kZUF0KGkyKyspXSwgYzMgPSB0YWJsZVtiYXNlNjQuY2hhckNvZGVBdChpMisrKV07XG4gICAgICBieXRlczJbaisrXSA9IGMwIDw8IDIgfCBjMSA+PiA0O1xuICAgICAgYnl0ZXMyW2orK10gPSBjMSA8PCA0IHwgYzIgPj4gMjtcbiAgICAgIGJ5dGVzMltqKytdID0gYzIgPDwgNiB8IGMzO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXMyO1xuICB9O1xufSkoKTtcblxuLy8gd2FzbS1iaW5hcnk6Li9ibGFrZTJiLndhdFxudmFyIHJlcXVpcmVfYmxha2UyYiA9IF9fY29tbW9uSlMoe1xuICBcIndhc20tYmluYXJ5Oi4vYmxha2UyYi53YXRcIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IF9fdG9CaW5hcnkoXCJBR0Z6YlFFQUFBQUJFQU5nQW45L0FHQURmMzkvQUdBQmZ3QURCUVFBQVFJQ0JRVUJBUXJvQndkTkJRWnRaVzF2Y25rQ0FBeGliR0ZyWlRKaVgybHVhWFFBQUE1aWJHRnJaVEppWDNWd1pHRjBaUUFCRFdKc1lXdGxNbUpmWm1sdVlXd0FBaEJpYkdGclpUSmlYMk52YlhCeVpYTnpBQU1Ldno4RXdBSUFJQUJDQURjREFDQUFRZ0EzQXdnZ0FFSUFOd01RSUFCQ0FEY0RHQ0FBUWdBM0F5QWdBRUlBTndNb0lBQkNBRGNETUNBQVFnQTNBemdnQUVJQU53TkFJQUJDQURjRFNDQUFRZ0EzQTFBZ0FFSUFOd05ZSUFCQ0FEY0RZQ0FBUWdBM0EyZ2dBRUlBTndOd0lBQkNBRGNEZUNBQVFvaVM4NTMvelBtRTZnQkJBQ2tEQUlVM0E0QUJJQUJDdTg2cXB0alE2N083ZjBFSUtRTUFoVGNEaUFFZ0FFS3I4TlAwcis2OHR6eEJFQ2tEQUlVM0E1QUJJQUJDOGUzMCtLV24vYWVsZjBFWUtRTUFoVGNEbUFFZ0FFTFJoWnJ2K3MrVWg5RUFRU0FwQXdDRk53T2dBU0FBUXAvWStkbkNrZHFDbTM5QktDa0RBSVUzQTZnQklBQkM2L3FHMnIrMTlzRWZRVEFwQXdDRk53T3dBU0FBUXZuQytKdVJvN1B3MndCQk9Da0RBSVUzQTdnQklBQkNBRGNEd0FFZ0FFSUFOd1BJQVNBQVFnQTNBOUFCQzIwQkEzOGdBRUhBQVdvaEF5QUFRY2dCYWlFRUlBUXBBd0NuSVFVQ1FBTkFJQUVnQWtZTkFTQUZRWUFCUmdSQUlBTWdBeWtEQUNBRnJYdzNBd0JCQUNFRklBQVFBd3NnQUNBRmFpQUJMUUFBT2dBQUlBVkJBV29oQlNBQlFRRnFJUUVNQUFzTElBUWdCYTAzQXdBTFlRRURmeUFBUWNBQmFpRUJJQUJCeUFGcUlRSWdBU0FCS1FNQUlBSXBBd0I4TndNQUlBQkNmemNEMEFFZ0Fpa0RBS2NoQXdKQUEwQWdBMEdBQVVZTkFTQUFJQU5xUVFBNkFBQWdBMEVCYWlFRERBQUxDeUFDSUFPdE53TUFJQUFRQXd1cU93SWdmZ2wvSUFCQmdBRnFJU0VnQUVHSUFXb2hJaUFBUVpBQmFpRWpJQUJCbUFGcUlTUWdBRUdnQVdvaEpTQUFRYWdCYWlFbUlBQkJzQUZxSVNjZ0FFRzRBV29oS0NBaEtRTUFJUUVnSWlrREFDRUNJQ01wQXdBaEF5QWtLUU1BSVFRZ0pTa0RBQ0VGSUNZcEF3QWhCaUFuS1FNQUlRY2dLQ2tEQUNFSVFvaVM4NTMvelBtRTZnQWhDVUs3enFxbTJORHJzN3QvSVFwQ3EvRFQ5Sy91dkxjOElRdEM4ZTMwK0tXbi9hZWxmeUVNUXRHRm11LzZ6NVNIMFFBaERVS2YyUG5ad3BIYWdwdC9JUTVDNi9xRzJyKzE5c0VmSVE5QytjTDRtNUdqcy9EYkFDRVFJQUFwQXdBaEVTQUFLUU1JSVJJZ0FDa0RFQ0VUSUFBcEF4Z2hGQ0FBS1FNZ0lSVWdBQ2tES0NFV0lBQXBBekFoRnlBQUtRTTRJUmdnQUNrRFFDRVpJQUFwQTBnaEdpQUFLUU5RSVJzZ0FDa0RXQ0VjSUFBcEEyQWhIU0FBS1FOb0lSNGdBQ2tEY0NFZklBQXBBM2doSUNBTklBQXBBOEFCaFNFTklBOGdBQ2tEMEFHRklROGdBU0FGSUJGOGZDRUJJQTBnQVlWQ0lJb2hEU0FKSUExOElRa2dCU0FKaFVJWWlpRUZJQUVnQlNBU2ZId2hBU0FOSUFHRlFoQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ1A0b2hCU0FDSUFZZ0UzeDhJUUlnRGlBQ2hVSWdpaUVPSUFvZ0Rud2hDaUFHSUFxRlFoaUtJUVlnQWlBR0lCUjhmQ0VDSUE0Z0FvVkNFSW9oRGlBS0lBNThJUW9nQmlBS2hVSS9paUVHSUFNZ0J5QVZmSHdoQXlBUElBT0ZRaUNLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNHSW9oQnlBRElBY2dGbng4SVFNZ0R5QURoVUlRaWlFUElBc2dEM3doQ3lBSElBdUZRaitLSVFjZ0JDQUlJQmQ4ZkNFRUlCQWdCSVZDSUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUlZaWlFSUlBUWdDQ0FZZkh3aEJDQVFJQVNGUWhDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDUDRvaENDQUJJQVlnR1h4OElRRWdFQ0FCaFVJZ2lpRVFJQXNnRUh3aEN5QUdJQXVGUWhpS0lRWWdBU0FHSUJwOGZDRUJJQkFnQVlWQ0VJb2hFQ0FMSUJCOElRc2dCaUFMaFVJL2lpRUdJQUlnQnlBYmZId2hBaUFOSUFLRlFpQ0tJUTBnRENBTmZDRU1JQWNnRElWQ0dJb2hCeUFDSUFjZ0hIeDhJUUlnRFNBQ2hVSVFpaUVOSUF3Z0RYd2hEQ0FISUF5RlFqK0tJUWNnQXlBSUlCMThmQ0VESUE0Z0E0VkNJSW9oRGlBSklBNThJUWtnQ0NBSmhVSVlpaUVJSUFNZ0NDQWVmSHdoQXlBT0lBT0ZRaENLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNQNG9oQ0NBRUlBVWdIM3g4SVFRZ0R5QUVoVUlnaWlFUElBb2dEM3doQ2lBRklBcUZRaGlLSVFVZ0JDQUZJQ0I4ZkNFRUlBOGdCSVZDRUlvaER5QUtJQTk4SVFvZ0JTQUtoVUkvaWlFRklBRWdCU0FmZkh3aEFTQU5JQUdGUWlDS0lRMGdDU0FOZkNFSklBVWdDWVZDR0lvaEJTQUJJQVVnRzN4OElRRWdEU0FCaFVJUWlpRU5JQWtnRFh3aENTQUZJQW1GUWorS0lRVWdBaUFHSUJWOGZDRUNJQTRnQW9WQ0lJb2hEaUFLSUE1OElRb2dCaUFLaFVJWWlpRUdJQUlnQmlBWmZId2hBaUFPSUFLRlFoQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ1A0b2hCaUFESUFjZ0dueDhJUU1nRHlBRGhVSWdpaUVQSUFzZ0Qzd2hDeUFISUF1RlFoaUtJUWNnQXlBSElDQjhmQ0VESUE4Z0E0VkNFSW9oRHlBTElBOThJUXNnQnlBTGhVSS9paUVISUFRZ0NDQWVmSHdoQkNBUUlBU0ZRaUNLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNHSW9oQ0NBRUlBZ2dGM3g4SVFRZ0VDQUVoVUlRaWlFUUlBd2dFSHdoRENBSUlBeUZRaitLSVFnZ0FTQUdJQko4ZkNFQklCQWdBWVZDSUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUlZaWlFR0lBRWdCaUFkZkh3aEFTQVFJQUdGUWhDS0lSQWdDeUFRZkNFTElBWWdDNFZDUDRvaEJpQUNJQWNnRVh4OElRSWdEU0FDaFVJZ2lpRU5JQXdnRFh3aERDQUhJQXlGUWhpS0lRY2dBaUFISUJOOGZDRUNJQTBnQW9WQ0VJb2hEU0FNSUExOElRd2dCeUFNaFVJL2lpRUhJQU1nQ0NBY2ZId2hBeUFPSUFPRlFpQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ0dJb2hDQ0FESUFnZ0dIeDhJUU1nRGlBRGhVSVFpaUVPSUFrZ0Rud2hDU0FJSUFtRlFqK0tJUWdnQkNBRklCWjhmQ0VFSUE4Z0JJVkNJSW9oRHlBS0lBOThJUW9nQlNBS2hVSVlpaUVGSUFRZ0JTQVVmSHdoQkNBUElBU0ZRaENLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNQNG9oQlNBQklBVWdISHg4SVFFZ0RTQUJoVUlnaWlFTklBa2dEWHdoQ1NBRklBbUZRaGlLSVFVZ0FTQUZJQmw4ZkNFQklBMGdBWVZDRUlvaERTQUpJQTE4SVFrZ0JTQUpoVUkvaWlFRklBSWdCaUFkZkh3aEFpQU9JQUtGUWlDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDR0lvaEJpQUNJQVlnRVh4OElRSWdEaUFDaFVJUWlpRU9JQW9nRG53aENpQUdJQXFGUWorS0lRWWdBeUFISUJaOGZDRURJQThnQTRWQ0lJb2hEeUFMSUE5OElRc2dCeUFMaFVJWWlpRUhJQU1nQnlBVGZId2hBeUFQSUFPRlFoQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ1A0b2hCeUFFSUFnZ0lIeDhJUVFnRUNBRWhVSWdpaUVRSUF3Z0VId2hEQ0FJSUF5RlFoaUtJUWdnQkNBSUlCNThmQ0VFSUJBZ0JJVkNFSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSS9paUVJSUFFZ0JpQWJmSHdoQVNBUUlBR0ZRaUNLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNHSW9oQmlBQklBWWdIM3g4SVFFZ0VDQUJoVUlRaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaitLSVFZZ0FpQUhJQlI4ZkNFQ0lBMGdBb1ZDSUlvaERTQU1JQTE4SVF3Z0J5QU1oVUlZaWlFSElBSWdCeUFYZkh3aEFpQU5JQUtGUWhDS0lRMGdEQ0FOZkNFTUlBY2dESVZDUDRvaEJ5QURJQWdnR0h4OElRTWdEaUFEaFVJZ2lpRU9JQWtnRG53aENTQUlJQW1GUWhpS0lRZ2dBeUFJSUJKOGZDRURJQTRnQTRWQ0VJb2hEaUFKSUE1OElRa2dDQ0FKaFVJL2lpRUlJQVFnQlNBYWZId2hCQ0FQSUFTRlFpQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ0dJb2hCU0FFSUFVZ0ZYeDhJUVFnRHlBRWhVSVFpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFqK0tJUVVnQVNBRklCaDhmQ0VCSUEwZ0FZVkNJSW9oRFNBSklBMThJUWtnQlNBSmhVSVlpaUVGSUFFZ0JTQWFmSHdoQVNBTklBR0ZRaENLSVEwZ0NTQU5mQ0VKSUFVZ0NZVkNQNG9oQlNBQ0lBWWdGSHg4SVFJZ0RpQUNoVUlnaWlFT0lBb2dEbndoQ2lBR0lBcUZRaGlLSVFZZ0FpQUdJQko4ZkNFQ0lBNGdBb1ZDRUlvaERpQUtJQTU4SVFvZ0JpQUtoVUkvaWlFR0lBTWdCeUFlZkh3aEF5QVBJQU9GUWlDS0lROGdDeUFQZkNFTElBY2dDNFZDR0lvaEJ5QURJQWNnSFh4OElRTWdEeUFEaFVJUWlpRVBJQXNnRDN3aEN5QUhJQXVGUWorS0lRY2dCQ0FJSUJ4OGZDRUVJQkFnQklWQ0lJb2hFQ0FNSUJCOElRd2dDQ0FNaFVJWWlpRUlJQVFnQ0NBZmZId2hCQ0FRSUFTRlFoQ0tJUkFnRENBUWZDRU1JQWdnRElWQ1A0b2hDQ0FCSUFZZ0UzeDhJUUVnRUNBQmhVSWdpaUVRSUFzZ0VId2hDeUFHSUF1RlFoaUtJUVlnQVNBR0lCZDhmQ0VCSUJBZ0FZVkNFSW9oRUNBTElCQjhJUXNnQmlBTGhVSS9paUVHSUFJZ0J5QVdmSHdoQWlBTklBS0ZRaUNLSVEwZ0RDQU5mQ0VNSUFjZ0RJVkNHSW9oQnlBQ0lBY2dHM3g4SVFJZ0RTQUNoVUlRaWlFTklBd2dEWHdoRENBSElBeUZRaitLSVFjZ0F5QUlJQlY4ZkNFRElBNGdBNFZDSUlvaERpQUpJQTU4SVFrZ0NDQUpoVUlZaWlFSUlBTWdDQ0FSZkh3aEF5QU9JQU9GUWhDS0lRNGdDU0FPZkNFSklBZ2dDWVZDUDRvaENDQUVJQVVnSUh4OElRUWdEeUFFaFVJZ2lpRVBJQW9nRDN3aENpQUZJQXFGUWhpS0lRVWdCQ0FGSUJsOGZDRUVJQThnQklWQ0VJb2hEeUFLSUE5OElRb2dCU0FLaFVJL2lpRUZJQUVnQlNBYWZId2hBU0FOSUFHRlFpQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ0dJb2hCU0FCSUFVZ0VYeDhJUUVnRFNBQmhVSVFpaUVOSUFrZ0RYd2hDU0FGSUFtRlFqK0tJUVVnQWlBR0lCWjhmQ0VDSUE0Z0FvVkNJSW9oRGlBS0lBNThJUW9nQmlBS2hVSVlpaUVHSUFJZ0JpQVlmSHdoQWlBT0lBS0ZRaENLSVE0Z0NpQU9mQ0VLSUFZZ0NvVkNQNG9oQmlBRElBY2dFM3g4SVFNZ0R5QURoVUlnaWlFUElBc2dEM3doQ3lBSElBdUZRaGlLSVFjZ0F5QUhJQlY4ZkNFRElBOGdBNFZDRUlvaER5QUxJQTk4SVFzZ0J5QUxoVUkvaWlFSElBUWdDQ0FiZkh3aEJDQVFJQVNGUWlDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDR0lvaENDQUVJQWdnSUh4OElRUWdFQ0FFaFVJUWlpRVFJQXdnRUh3aERDQUlJQXlGUWorS0lRZ2dBU0FHSUI5OGZDRUJJQkFnQVlWQ0lJb2hFQ0FMSUJCOElRc2dCaUFMaFVJWWlpRUdJQUVnQmlBU2ZId2hBU0FRSUFHRlFoQ0tJUkFnQ3lBUWZDRUxJQVlnQzRWQ1A0b2hCaUFDSUFjZ0hIeDhJUUlnRFNBQ2hVSWdpaUVOSUF3Z0RYd2hEQ0FISUF5RlFoaUtJUWNnQWlBSElCMThmQ0VDSUEwZ0FvVkNFSW9oRFNBTUlBMThJUXdnQnlBTWhVSS9paUVISUFNZ0NDQVhmSHdoQXlBT0lBT0ZRaUNLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNHSW9oQ0NBRElBZ2dHWHg4SVFNZ0RpQURoVUlRaWlFT0lBa2dEbndoQ1NBSUlBbUZRaitLSVFnZ0JDQUZJQlI4ZkNFRUlBOGdCSVZDSUlvaER5QUtJQTk4SVFvZ0JTQUtoVUlZaWlFRklBUWdCU0FlZkh3aEJDQVBJQVNGUWhDS0lROGdDaUFQZkNFS0lBVWdDb1ZDUDRvaEJTQUJJQVVnRTN4OElRRWdEU0FCaFVJZ2lpRU5JQWtnRFh3aENTQUZJQW1GUWhpS0lRVWdBU0FGSUIxOGZDRUJJQTBnQVlWQ0VJb2hEU0FKSUExOElRa2dCU0FKaFVJL2lpRUZJQUlnQmlBWGZId2hBaUFPSUFLRlFpQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ0dJb2hCaUFDSUFZZ0czeDhJUUlnRGlBQ2hVSVFpaUVPSUFvZ0Rud2hDaUFHSUFxRlFqK0tJUVlnQXlBSElCRjhmQ0VESUE4Z0E0VkNJSW9oRHlBTElBOThJUXNnQnlBTGhVSVlpaUVISUFNZ0J5QWNmSHdoQXlBUElBT0ZRaENLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNQNG9oQnlBRUlBZ2dHWHg4SVFRZ0VDQUVoVUlnaWlFUUlBd2dFSHdoRENBSUlBeUZRaGlLSVFnZ0JDQUlJQlI4ZkNFRUlCQWdCSVZDRUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUkvaWlFSUlBRWdCaUFWZkh3aEFTQVFJQUdGUWlDS0lSQWdDeUFRZkNFTElBWWdDNFZDR0lvaEJpQUJJQVlnSG54OElRRWdFQ0FCaFVJUWlpRVFJQXNnRUh3aEN5QUdJQXVGUWorS0lRWWdBaUFISUJoOGZDRUNJQTBnQW9WQ0lJb2hEU0FNSUExOElRd2dCeUFNaFVJWWlpRUhJQUlnQnlBV2ZId2hBaUFOSUFLRlFoQ0tJUTBnRENBTmZDRU1JQWNnRElWQ1A0b2hCeUFESUFnZ0lIeDhJUU1nRGlBRGhVSWdpaUVPSUFrZ0Rud2hDU0FJSUFtRlFoaUtJUWdnQXlBSUlCOThmQ0VESUE0Z0E0VkNFSW9oRGlBSklBNThJUWtnQ0NBSmhVSS9paUVJSUFRZ0JTQVNmSHdoQkNBUElBU0ZRaUNLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNHSW9oQlNBRUlBVWdHbng4SVFRZ0R5QUVoVUlRaWlFUElBb2dEM3doQ2lBRklBcUZRaitLSVFVZ0FTQUZJQjE4ZkNFQklBMGdBWVZDSUlvaERTQUpJQTE4SVFrZ0JTQUpoVUlZaWlFRklBRWdCU0FXZkh3aEFTQU5JQUdGUWhDS0lRMGdDU0FOZkNFSklBVWdDWVZDUDRvaEJTQUNJQVlnRW54OElRSWdEaUFDaFVJZ2lpRU9JQW9nRG53aENpQUdJQXFGUWhpS0lRWWdBaUFHSUNCOGZDRUNJQTRnQW9WQ0VJb2hEaUFLSUE1OElRb2dCaUFLaFVJL2lpRUdJQU1nQnlBZmZId2hBeUFQSUFPRlFpQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ0dJb2hCeUFESUFjZ0hueDhJUU1nRHlBRGhVSVFpaUVQSUFzZ0Qzd2hDeUFISUF1RlFqK0tJUWNnQkNBSUlCVjhmQ0VFSUJBZ0JJVkNJSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSVlpaUVJSUFRZ0NDQWJmSHdoQkNBUUlBU0ZRaENLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNQNG9oQ0NBQklBWWdFWHg4SVFFZ0VDQUJoVUlnaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaGlLSVFZZ0FTQUdJQmg4ZkNFQklCQWdBWVZDRUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUkvaWlFR0lBSWdCeUFYZkh3aEFpQU5JQUtGUWlDS0lRMGdEQ0FOZkNFTUlBY2dESVZDR0lvaEJ5QUNJQWNnRkh4OElRSWdEU0FDaFVJUWlpRU5JQXdnRFh3aERDQUhJQXlGUWorS0lRY2dBeUFJSUJwOGZDRURJQTRnQTRWQ0lJb2hEaUFKSUE1OElRa2dDQ0FKaFVJWWlpRUlJQU1nQ0NBVGZId2hBeUFPSUFPRlFoQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ1A0b2hDQ0FFSUFVZ0dYeDhJUVFnRHlBRWhVSWdpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFoaUtJUVVnQkNBRklCeDhmQ0VFSUE4Z0JJVkNFSW9oRHlBS0lBOThJUW9nQlNBS2hVSS9paUVGSUFFZ0JTQWVmSHdoQVNBTklBR0ZRaUNLSVEwZ0NTQU5mQ0VKSUFVZ0NZVkNHSW9oQlNBQklBVWdISHg4SVFFZ0RTQUJoVUlRaWlFTklBa2dEWHdoQ1NBRklBbUZRaitLSVFVZ0FpQUdJQmg4ZkNFQ0lBNGdBb1ZDSUlvaERpQUtJQTU4SVFvZ0JpQUtoVUlZaWlFR0lBSWdCaUFmZkh3aEFpQU9JQUtGUWhDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDUDRvaEJpQURJQWNnSFh4OElRTWdEeUFEaFVJZ2lpRVBJQXNnRDN3aEN5QUhJQXVGUWhpS0lRY2dBeUFISUJKOGZDRURJQThnQTRWQ0VJb2hEeUFMSUE5OElRc2dCeUFMaFVJL2lpRUhJQVFnQ0NBVWZId2hCQ0FRSUFTRlFpQ0tJUkFnRENBUWZDRU1JQWdnRElWQ0dJb2hDQ0FFSUFnZ0dueDhJUVFnRUNBRWhVSVFpaUVRSUF3Z0VId2hEQ0FJSUF5RlFqK0tJUWdnQVNBR0lCWjhmQ0VCSUJBZ0FZVkNJSW9oRUNBTElCQjhJUXNnQmlBTGhVSVlpaUVHSUFFZ0JpQVJmSHdoQVNBUUlBR0ZRaENLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNQNG9oQmlBQ0lBY2dJSHg4SVFJZ0RTQUNoVUlnaWlFTklBd2dEWHdoRENBSElBeUZRaGlLSVFjZ0FpQUhJQlY4ZkNFQ0lBMGdBb1ZDRUlvaERTQU1JQTE4SVF3Z0J5QU1oVUkvaWlFSElBTWdDQ0FaZkh3aEF5QU9JQU9GUWlDS0lRNGdDU0FPZkNFSklBZ2dDWVZDR0lvaENDQURJQWdnRjN4OElRTWdEaUFEaFVJUWlpRU9JQWtnRG53aENTQUlJQW1GUWorS0lRZ2dCQ0FGSUJOOGZDRUVJQThnQklWQ0lJb2hEeUFLSUE5OElRb2dCU0FLaFVJWWlpRUZJQVFnQlNBYmZId2hCQ0FQSUFTRlFoQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ1A0b2hCU0FCSUFVZ0YzeDhJUUVnRFNBQmhVSWdpaUVOSUFrZ0RYd2hDU0FGSUFtRlFoaUtJUVVnQVNBRklDQjhmQ0VCSUEwZ0FZVkNFSW9oRFNBSklBMThJUWtnQlNBSmhVSS9paUVGSUFJZ0JpQWZmSHdoQWlBT0lBS0ZRaUNLSVE0Z0NpQU9mQ0VLSUFZZ0NvVkNHSW9oQmlBQ0lBWWdHbng4SVFJZ0RpQUNoVUlRaWlFT0lBb2dEbndoQ2lBR0lBcUZRaitLSVFZZ0F5QUhJQng4ZkNFRElBOGdBNFZDSUlvaER5QUxJQTk4SVFzZ0J5QUxoVUlZaWlFSElBTWdCeUFVZkh3aEF5QVBJQU9GUWhDS0lROGdDeUFQZkNFTElBY2dDNFZDUDRvaEJ5QUVJQWdnRVh4OElRUWdFQ0FFaFVJZ2lpRVFJQXdnRUh3aERDQUlJQXlGUWhpS0lRZ2dCQ0FJSUJsOGZDRUVJQkFnQklWQ0VJb2hFQ0FNSUJCOElRd2dDQ0FNaFVJL2lpRUlJQUVnQmlBZGZId2hBU0FRSUFHRlFpQ0tJUkFnQ3lBUWZDRUxJQVlnQzRWQ0dJb2hCaUFCSUFZZ0UzeDhJUUVnRUNBQmhVSVFpaUVRSUFzZ0VId2hDeUFHSUF1RlFqK0tJUVlnQWlBSElCNThmQ0VDSUEwZ0FvVkNJSW9oRFNBTUlBMThJUXdnQnlBTWhVSVlpaUVISUFJZ0J5QVlmSHdoQWlBTklBS0ZRaENLSVEwZ0RDQU5mQ0VNSUFjZ0RJVkNQNG9oQnlBRElBZ2dFbng4SVFNZ0RpQURoVUlnaWlFT0lBa2dEbndoQ1NBSUlBbUZRaGlLSVFnZ0F5QUlJQlY4ZkNFRElBNGdBNFZDRUlvaERpQUpJQTU4SVFrZ0NDQUpoVUkvaWlFSUlBUWdCU0FiZkh3aEJDQVBJQVNGUWlDS0lROGdDaUFQZkNFS0lBVWdDb1ZDR0lvaEJTQUVJQVVnRm54OElRUWdEeUFFaFVJUWlpRVBJQW9nRDN3aENpQUZJQXFGUWorS0lRVWdBU0FGSUJ0OGZDRUJJQTBnQVlWQ0lJb2hEU0FKSUExOElRa2dCU0FKaFVJWWlpRUZJQUVnQlNBVGZId2hBU0FOSUFHRlFoQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ1A0b2hCU0FDSUFZZ0dYeDhJUUlnRGlBQ2hVSWdpaUVPSUFvZ0Rud2hDaUFHSUFxRlFoaUtJUVlnQWlBR0lCVjhmQ0VDSUE0Z0FvVkNFSW9oRGlBS0lBNThJUW9nQmlBS2hVSS9paUVHSUFNZ0J5QVlmSHdoQXlBUElBT0ZRaUNLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNHSW9oQnlBRElBY2dGM3g4SVFNZ0R5QURoVUlRaWlFUElBc2dEM3doQ3lBSElBdUZRaitLSVFjZ0JDQUlJQko4ZkNFRUlCQWdCSVZDSUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUlZaWlFSUlBUWdDQ0FXZkh3aEJDQVFJQVNGUWhDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDUDRvaENDQUJJQVlnSUh4OElRRWdFQ0FCaFVJZ2lpRVFJQXNnRUh3aEN5QUdJQXVGUWhpS0lRWWdBU0FHSUJ4OGZDRUJJQkFnQVlWQ0VJb2hFQ0FMSUJCOElRc2dCaUFMaFVJL2lpRUdJQUlnQnlBYWZId2hBaUFOSUFLRlFpQ0tJUTBnRENBTmZDRU1JQWNnRElWQ0dJb2hCeUFDSUFjZ0gzeDhJUUlnRFNBQ2hVSVFpaUVOSUF3Z0RYd2hEQ0FISUF5RlFqK0tJUWNnQXlBSUlCUjhmQ0VESUE0Z0E0VkNJSW9oRGlBSklBNThJUWtnQ0NBSmhVSVlpaUVJSUFNZ0NDQWRmSHdoQXlBT0lBT0ZRaENLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNQNG9oQ0NBRUlBVWdIbng4SVFRZ0R5QUVoVUlnaWlFUElBb2dEM3doQ2lBRklBcUZRaGlLSVFVZ0JDQUZJQkY4ZkNFRUlBOGdCSVZDRUlvaER5QUtJQTk4SVFvZ0JTQUtoVUkvaWlFRklBRWdCU0FSZkh3aEFTQU5JQUdGUWlDS0lRMGdDU0FOZkNFSklBVWdDWVZDR0lvaEJTQUJJQVVnRW54OElRRWdEU0FCaFVJUWlpRU5JQWtnRFh3aENTQUZJQW1GUWorS0lRVWdBaUFHSUJOOGZDRUNJQTRnQW9WQ0lJb2hEaUFLSUE1OElRb2dCaUFLaFVJWWlpRUdJQUlnQmlBVWZId2hBaUFPSUFLRlFoQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ1A0b2hCaUFESUFjZ0ZYeDhJUU1nRHlBRGhVSWdpaUVQSUFzZ0Qzd2hDeUFISUF1RlFoaUtJUWNnQXlBSElCWjhmQ0VESUE4Z0E0VkNFSW9oRHlBTElBOThJUXNnQnlBTGhVSS9paUVISUFRZ0NDQVhmSHdoQkNBUUlBU0ZRaUNLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNHSW9oQ0NBRUlBZ2dHSHg4SVFRZ0VDQUVoVUlRaWlFUUlBd2dFSHdoRENBSUlBeUZRaitLSVFnZ0FTQUdJQmw4ZkNFQklCQWdBWVZDSUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUlZaWlFR0lBRWdCaUFhZkh3aEFTQVFJQUdGUWhDS0lSQWdDeUFRZkNFTElBWWdDNFZDUDRvaEJpQUNJQWNnRzN4OElRSWdEU0FDaFVJZ2lpRU5JQXdnRFh3aERDQUhJQXlGUWhpS0lRY2dBaUFISUJ4OGZDRUNJQTBnQW9WQ0VJb2hEU0FNSUExOElRd2dCeUFNaFVJL2lpRUhJQU1nQ0NBZGZId2hBeUFPSUFPRlFpQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ0dJb2hDQ0FESUFnZ0hueDhJUU1nRGlBRGhVSVFpaUVPSUFrZ0Rud2hDU0FJSUFtRlFqK0tJUWdnQkNBRklCOThmQ0VFSUE4Z0JJVkNJSW9oRHlBS0lBOThJUW9nQlNBS2hVSVlpaUVGSUFRZ0JTQWdmSHdoQkNBUElBU0ZRaENLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNQNG9oQlNBQklBVWdIM3g4SVFFZ0RTQUJoVUlnaWlFTklBa2dEWHdoQ1NBRklBbUZRaGlLSVFVZ0FTQUZJQnQ4ZkNFQklBMGdBWVZDRUlvaERTQUpJQTE4SVFrZ0JTQUpoVUkvaWlFRklBSWdCaUFWZkh3aEFpQU9JQUtGUWlDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDR0lvaEJpQUNJQVlnR1h4OElRSWdEaUFDaFVJUWlpRU9JQW9nRG53aENpQUdJQXFGUWorS0lRWWdBeUFISUJwOGZDRURJQThnQTRWQ0lJb2hEeUFMSUE5OElRc2dCeUFMaFVJWWlpRUhJQU1nQnlBZ2ZId2hBeUFQSUFPRlFoQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ1A0b2hCeUFFSUFnZ0hueDhJUVFnRUNBRWhVSWdpaUVRSUF3Z0VId2hEQ0FJSUF5RlFoaUtJUWdnQkNBSUlCZDhmQ0VFSUJBZ0JJVkNFSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSS9paUVJSUFFZ0JpQVNmSHdoQVNBUUlBR0ZRaUNLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNHSW9oQmlBQklBWWdIWHg4SVFFZ0VDQUJoVUlRaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaitLSVFZZ0FpQUhJQkY4ZkNFQ0lBMGdBb1ZDSUlvaERTQU1JQTE4SVF3Z0J5QU1oVUlZaWlFSElBSWdCeUFUZkh3aEFpQU5JQUtGUWhDS0lRMGdEQ0FOZkNFTUlBY2dESVZDUDRvaEJ5QURJQWdnSEh4OElRTWdEaUFEaFVJZ2lpRU9JQWtnRG53aENTQUlJQW1GUWhpS0lRZ2dBeUFJSUJoOGZDRURJQTRnQTRWQ0VJb2hEaUFKSUE1OElRa2dDQ0FKaFVJL2lpRUlJQVFnQlNBV2ZId2hCQ0FQSUFTRlFpQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ0dJb2hCU0FFSUFVZ0ZIeDhJUVFnRHlBRWhVSVFpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFqK0tJUVVnSVNBaEtRTUFJQUVnQ1lXRk53TUFJQ0lnSWlrREFDQUNJQXFGaFRjREFDQWpJQ01wQXdBZ0F5QUxoWVUzQXdBZ0pDQWtLUU1BSUFRZ0RJV0ZOd01BSUNVZ0pTa0RBQ0FGSUEyRmhUY0RBQ0FtSUNZcEF3QWdCaUFPaFlVM0F3QWdKeUFuS1FNQUlBY2dENFdGTndNQUlDZ2dLQ2tEQUNBSUlCQ0ZoVGNEQUFzPVwiKTtcbiAgfVxufSk7XG5cbi8vIHdhc20tbW9kdWxlOi4vYmxha2UyYi53YXRcbnZhciBieXRlcyA9IHJlcXVpcmVfYmxha2UyYigpO1xudmFyIGNvbXBpbGVkID0gV2ViQXNzZW1ibHkuY29tcGlsZShieXRlcyk7XG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIChpbXBvcnRzKSA9PiB7XG4gIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYXdhaXQgY29tcGlsZWQsIGltcG9ydHMpO1xuICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cztcbn07XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbmFub2Fzc2VydCcpXG52YXIgYjRhID0gcmVxdWlyZSgnYjRhJylcblxudmFyIHdhc20gPSBudWxsXG52YXIgd2FzbVByb21pc2UgPSB0eXBlb2YgV2ViQXNzZW1ibHkgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWlyZSgnLi9ibGFrZTJiJykoKS50aGVuKG1vZCA9PiB7XG4gIHdhc20gPSBtb2Rcbn0pXG5cbnZhciBoZWFkID0gNjRcbnZhciBmcmVlTGlzdCA9IFtdXG5cbm1vZHVsZS5leHBvcnRzID0gQmxha2UyYlxudmFyIEJZVEVTX01JTiA9IG1vZHVsZS5leHBvcnRzLkJZVEVTX01JTiA9IDE2XG52YXIgQllURVNfTUFYID0gbW9kdWxlLmV4cG9ydHMuQllURVNfTUFYID0gNjRcbnZhciBCWVRFUyA9IG1vZHVsZS5leHBvcnRzLkJZVEVTID0gMzJcbnZhciBLRVlCWVRFU19NSU4gPSBtb2R1bGUuZXhwb3J0cy5LRVlCWVRFU19NSU4gPSAxNlxudmFyIEtFWUJZVEVTX01BWCA9IG1vZHVsZS5leHBvcnRzLktFWUJZVEVTX01BWCA9IDY0XG52YXIgS0VZQllURVMgPSBtb2R1bGUuZXhwb3J0cy5LRVlCWVRFUyA9IDMyXG52YXIgU0FMVEJZVEVTID0gbW9kdWxlLmV4cG9ydHMuU0FMVEJZVEVTID0gMTZcbnZhciBQRVJTT05BTEJZVEVTID0gbW9kdWxlLmV4cG9ydHMuUEVSU09OQUxCWVRFUyA9IDE2XG5cbmZ1bmN0aW9uIEJsYWtlMmIgKGRpZ2VzdExlbmd0aCwga2V5LCBzYWx0LCBwZXJzb25hbCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJsYWtlMmIpKSByZXR1cm4gbmV3IEJsYWtlMmIoZGlnZXN0TGVuZ3RoLCBrZXksIHNhbHQsIHBlcnNvbmFsLCBub0Fzc2VydClcbiAgaWYgKCF3YXNtKSB0aHJvdyBuZXcgRXJyb3IoJ1dBU00gbm90IGxvYWRlZC4gV2FpdCBmb3IgQmxha2UyYi5yZWFkeShjYiknKVxuICBpZiAoIWRpZ2VzdExlbmd0aCkgZGlnZXN0TGVuZ3RoID0gMzJcblxuICBpZiAobm9Bc3NlcnQgIT09IHRydWUpIHtcbiAgICBhc3NlcnQoZGlnZXN0TGVuZ3RoID49IEJZVEVTX01JTiwgJ2RpZ2VzdExlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICcgKyBCWVRFU19NSU4gKyAnLCB3YXMgZ2l2ZW4gJyArIGRpZ2VzdExlbmd0aClcbiAgICBhc3NlcnQoZGlnZXN0TGVuZ3RoIDw9IEJZVEVTX01BWCwgJ2RpZ2VzdExlbmd0aCBtdXN0IGJlIGF0IG1vc3QgJyArIEJZVEVTX01BWCArICcsIHdhcyBnaXZlbiAnICsgZGlnZXN0TGVuZ3RoKVxuICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgYXNzZXJ0KGtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdrZXkgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gICAgICBhc3NlcnQoa2V5Lmxlbmd0aCA+PSBLRVlCWVRFU19NSU4sICdrZXkgbXVzdCBiZSBhdCBsZWFzdCAnICsgS0VZQllURVNfTUlOICsgJywgd2FzIGdpdmVuICcgKyBrZXkubGVuZ3RoKVxuICAgICAgYXNzZXJ0KGtleS5sZW5ndGggPD0gS0VZQllURVNfTUFYLCAna2V5IG11c3QgYmUgYXQgbGVhc3QgJyArIEtFWUJZVEVTX01BWCArICcsIHdhcyBnaXZlbiAnICsga2V5Lmxlbmd0aClcbiAgICB9XG4gICAgaWYgKHNhbHQgIT0gbnVsbCkge1xuICAgICAgYXNzZXJ0KHNhbHQgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAnc2FsdCBtdXN0IGJlIFVpbnQ4QXJyYXkgb3IgQnVmZmVyJylcbiAgICAgIGFzc2VydChzYWx0Lmxlbmd0aCA9PT0gU0FMVEJZVEVTLCAnc2FsdCBtdXN0IGJlIGV4YWN0bHkgJyArIFNBTFRCWVRFUyArICcsIHdhcyBnaXZlbiAnICsgc2FsdC5sZW5ndGgpXG4gICAgfVxuICAgIGlmIChwZXJzb25hbCAhPSBudWxsKSB7XG4gICAgICBhc3NlcnQocGVyc29uYWwgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAncGVyc29uYWwgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gICAgICBhc3NlcnQocGVyc29uYWwubGVuZ3RoID09PSBQRVJTT05BTEJZVEVTLCAncGVyc29uYWwgbXVzdCBiZSBleGFjdGx5ICcgKyBQRVJTT05BTEJZVEVTICsgJywgd2FzIGdpdmVuICcgKyBwZXJzb25hbC5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFmcmVlTGlzdC5sZW5ndGgpIHtcbiAgICBmcmVlTGlzdC5wdXNoKGhlYWQpXG4gICAgaGVhZCArPSAyMTZcbiAgfVxuXG4gIHRoaXMuZGlnZXN0TGVuZ3RoID0gZGlnZXN0TGVuZ3RoXG4gIHRoaXMuZmluYWxpemVkID0gZmFsc2VcbiAgdGhpcy5wb2ludGVyID0gZnJlZUxpc3QucG9wKClcbiAgdGhpcy5fbWVtb3J5ID0gbmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKVxuXG4gIHRoaXMuX21lbW9yeS5maWxsKDAsIDAsIDY0KVxuICB0aGlzLl9tZW1vcnlbMF0gPSB0aGlzLmRpZ2VzdExlbmd0aFxuICB0aGlzLl9tZW1vcnlbMV0gPSBrZXkgPyBrZXkubGVuZ3RoIDogMFxuICB0aGlzLl9tZW1vcnlbMl0gPSAxIC8vIGZhbm91dFxuICB0aGlzLl9tZW1vcnlbM10gPSAxIC8vIGRlcHRoXG5cbiAgaWYgKHNhbHQpIHRoaXMuX21lbW9yeS5zZXQoc2FsdCwgMzIpXG4gIGlmIChwZXJzb25hbCkgdGhpcy5fbWVtb3J5LnNldChwZXJzb25hbCwgNDgpXG5cbiAgaWYgKHRoaXMucG9pbnRlciArIDIxNiA+IHRoaXMuX21lbW9yeS5sZW5ndGgpIHRoaXMuX3JlYWxsb2ModGhpcy5wb2ludGVyICsgMjE2KSAvLyB3ZSBuZWVkIDIxNiBieXRlcyBmb3IgdGhlIHN0YXRlXG4gIHdhc20uYmxha2UyYl9pbml0KHRoaXMucG9pbnRlciwgdGhpcy5kaWdlc3RMZW5ndGgpXG5cbiAgaWYgKGtleSkge1xuICAgIHRoaXMudXBkYXRlKGtleSlcbiAgICB0aGlzLl9tZW1vcnkuZmlsbCgwLCBoZWFkLCBoZWFkICsga2V5Lmxlbmd0aCkgLy8gd2hpdGVvdXQga2V5XG4gICAgdGhpcy5fbWVtb3J5W3RoaXMucG9pbnRlciArIDIwMF0gPSAxMjhcbiAgfVxufVxuXG5CbGFrZTJiLnByb3RvdHlwZS5fcmVhbGxvYyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHdhc20ubWVtb3J5Lmdyb3coTWF0aC5tYXgoMCwgTWF0aC5jZWlsKE1hdGguYWJzKHNpemUgLSB0aGlzLl9tZW1vcnkubGVuZ3RoKSAvIDY1NTM2KSkpXG4gIHRoaXMuX21lbW9yeSA9IG5ldyBVaW50OEFycmF5KHdhc20ubWVtb3J5LmJ1ZmZlcilcbn1cblxuQmxha2UyYi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIGFzc2VydCh0aGlzLmZpbmFsaXplZCA9PT0gZmFsc2UsICdIYXNoIGluc3RhbmNlIGZpbmFsaXplZCcpXG4gIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdpbnB1dCBtdXN0IGJlIFVpbnQ4QXJyYXkgb3IgQnVmZmVyJylcblxuICBpZiAoaGVhZCArIGlucHV0Lmxlbmd0aCA+IHRoaXMuX21lbW9yeS5sZW5ndGgpIHRoaXMuX3JlYWxsb2MoaGVhZCArIGlucHV0Lmxlbmd0aClcbiAgdGhpcy5fbWVtb3J5LnNldChpbnB1dCwgaGVhZClcbiAgd2FzbS5ibGFrZTJiX3VwZGF0ZSh0aGlzLnBvaW50ZXIsIGhlYWQsIGhlYWQgKyBpbnB1dC5sZW5ndGgpXG4gIHJldHVybiB0aGlzXG59XG5cbkJsYWtlMmIucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgYXNzZXJ0KHRoaXMuZmluYWxpemVkID09PSBmYWxzZSwgJ0hhc2ggaW5zdGFuY2UgZmluYWxpemVkJylcbiAgdGhpcy5maW5hbGl6ZWQgPSB0cnVlXG5cbiAgZnJlZUxpc3QucHVzaCh0aGlzLnBvaW50ZXIpXG4gIHdhc20uYmxha2UyYl9maW5hbCh0aGlzLnBvaW50ZXIpXG5cbiAgaWYgKCFlbmMgfHwgZW5jID09PSAnYmluYXJ5Jykge1xuICAgIHJldHVybiB0aGlzLl9tZW1vcnkuc2xpY2UodGhpcy5wb2ludGVyICsgMTI4LCB0aGlzLnBvaW50ZXIgKyAxMjggKyB0aGlzLmRpZ2VzdExlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5jID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBiNGEudG9TdHJpbmcodGhpcy5fbWVtb3J5LCBlbmMsIHRoaXMucG9pbnRlciArIDEyOCwgdGhpcy5wb2ludGVyICsgMTI4ICsgdGhpcy5kaWdlc3RMZW5ndGgpXG4gIH1cblxuICBhc3NlcnQoZW5jIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBlbmMubGVuZ3RoID49IHRoaXMuZGlnZXN0TGVuZ3RoLCAnaW5wdXQgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaWdlc3RMZW5ndGg7IGkrKykge1xuICAgIGVuY1tpXSA9IHRoaXMuX21lbW9yeVt0aGlzLnBvaW50ZXIgKyAxMjggKyBpXVxuICB9XG5cbiAgcmV0dXJuIGVuY1xufVxuXG4vLyBsaWJzb2RpdW0gY29tcGF0XG5CbGFrZTJiLnByb3RvdHlwZS5maW5hbCA9IEJsYWtlMmIucHJvdG90eXBlLmRpZ2VzdFxuXG5CbGFrZTJiLldBU00gPSB3YXNtXG5CbGFrZTJiLlNVUFBPUlRFRCA9IHR5cGVvZiBXZWJBc3NlbWJseSAhPT0gJ3VuZGVmaW5lZCdcblxuQmxha2UyYi5yZWFkeSA9IGZ1bmN0aW9uIChjYikge1xuICBpZiAoIWNiKSBjYiA9IG5vb3BcbiAgaWYgKCF3YXNtUHJvbWlzZSkgcmV0dXJuIGNiKG5ldyBFcnJvcignV2ViQXNzZW1ibHkgbm90IHN1cHBvcnRlZCcpKVxuICByZXR1cm4gd2FzbVByb21pc2UudGhlbigoKSA9PiBjYigpLCBjYilcbn1cblxuQmxha2UyYi5wcm90b3R5cGUucmVhZHkgPSBCbGFrZTJiLnJlYWR5XG5cbkJsYWtlMmIucHJvdG90eXBlLmdldFBhcnRpYWxIYXNoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fbWVtb3J5LnNsaWNlKHRoaXMucG9pbnRlciwgdGhpcy5wb2ludGVyICsgMjE2KTtcbn1cblxuQmxha2UyYi5wcm90b3R5cGUuc2V0UGFydGlhbEhhc2ggPSBmdW5jdGlvbiAocGgpIHtcbiAgdGhpcy5fbWVtb3J5LnNldChwaCwgdGhpcy5wb2ludGVyKTtcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLyogZ2xvYmFsIHdpbmRvdyAqL1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xuaW1wb3J0IHsgQ2hhQ2hhIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5cbmNvbnN0IF9yZXZUYWJsZSA9IFtdO1xuZm9yIChsZXQgaT0wOyBpPDI1NjsgaSsrKSB7XG4gICAgX3JldlRhYmxlW2ldID0gX3JldlNsb3coaSwgOCk7XG59XG5cbmZ1bmN0aW9uIF9yZXZTbG93KGlkeCwgYml0cykge1xuICAgIGxldCByZXMgPTA7XG4gICAgbGV0IGEgPSBpZHg7XG4gICAgZm9yIChsZXQgaT0wOyBpPGJpdHM7IGkrKykge1xuICAgICAgICByZXMgPDw9IDE7XG4gICAgICAgIHJlcyA9IHJlcyB8IChhICYxKTtcbiAgICAgICAgYSA+Pj0xO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYml0UmV2ZXJzZShpZHgsIGJpdHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBfcmV2VGFibGVbaWR4ID4+PiAyNF0gfFxuICAgICAgICAoX3JldlRhYmxlWyhpZHggPj4+IDE2KSAmIDB4RkZdIDw8IDgpIHxcbiAgICAgICAgKF9yZXZUYWJsZVsoaWR4ID4+PiA4KSAmIDB4RkZdIDw8IDE2KSB8XG4gICAgICAgIChfcmV2VGFibGVbaWR4ICYgMHhGRl0gPDwgMjQpXG4gICAgKSA+Pj4gKDMyLWJpdHMpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cyKCBWIClcbntcbiAgICByZXR1cm4oICggKCBWICYgMHhGRkZGMDAwMCApICE9PSAwID8gKCBWICY9IDB4RkZGRjAwMDAsIDE2ICkgOiAwICkgfCAoICggViAmIDB4RkYwMEZGMDAgKSAhPT0gMCA/ICggViAmPSAweEZGMDBGRjAwLCA4ICkgOiAwICkgfCAoICggViAmIDB4RjBGMEYwRjAgKSAhPT0gMCA/ICggViAmPSAweEYwRjBGMEYwLCA0ICkgOiAwICkgfCAoICggViAmIDB4Q0NDQ0NDQ0MgKSAhPT0gMCA/ICggViAmPSAweENDQ0NDQ0NDLCAyICkgOiAwICkgfCAoICggViAmIDB4QUFBQUFBQUEgKSAhPT0gMCApICk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEhhc2goYiwgdGl0bGUpIHtcbiAgICBjb25zdCBhID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyLCBiLmJ5dGVPZmZzZXQsIGIuYnl0ZUxlbmd0aCk7XG4gICAgbGV0IFMgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTw0OyBpKyspIHtcbiAgICAgICAgaWYgKGk+MCkgUyArPSBcIlxcblwiO1xuICAgICAgICBTICs9IFwiXFx0XFx0XCI7XG4gICAgICAgIGZvciAobGV0IGo9MDsgajw0OyBqKyspIHtcbiAgICAgICAgICAgIGlmIChqPjApIFMgKz0gXCIgXCI7XG4gICAgICAgICAgICBTICs9IGEuZ2V0VWludDMyKGkqMTYraio0KS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0aXRsZSkgUyA9IHRpdGxlICsgXCJcXG5cIiArIFM7XG4gICAgcmV0dXJuIFM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoSXNFcXVhbChoMSwgaDIpIHtcbiAgICBpZiAoaDEuYnl0ZUxlbmd0aCAhPSBoMi5ieXRlTGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGR2MSA9IG5ldyBJbnQ4QXJyYXkoaDEpO1xuICAgIHZhciBkdjIgPSBuZXcgSW50OEFycmF5KGgyKTtcbiAgICBmb3IgKHZhciBpID0gMCA7IGkgIT0gaDEuYnl0ZUxlbmd0aCA7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChkdjFbaV0gIT0gZHYyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVIYXNoZXIoaCkge1xuICAgIGNvbnN0IHBoID0gaC5nZXRQYXJ0aWFsSGFzaCgpO1xuICAgIGNvbnN0IHJlcyA9IEJsYWtlMmIoNjQpO1xuICAgIHJlcy5zZXRQYXJ0aWFsSGFzaChwaCk7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbWVSYXRpbyhjdXJ2ZSwgZzFzLCBnMXN4LCBnMnMsIGcyc3gpIHtcbiAgICBpZiAoY3VydmUuRzEuaXNaZXJvKGcxcykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY3VydmUuRzEuaXNaZXJvKGcxc3gpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGN1cnZlLkcyLmlzWmVybyhnMnMpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGN1cnZlLkcyLmlzWmVybyhnMnN4KSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIHJldHVybiBjdXJ2ZS5GMTIuZXEoY3VydmUucGFpcmluZyhnMXMsIGcyc3gpLCBjdXJ2ZS5wYWlyaW5nKGcxc3gsIGcycykpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnBhaXJpbmdFcShnMXMsIGcyc3gsIGN1cnZlLkcxLm5lZyhnMXN4KSwgZzJzKTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc2tFbnRyb3B5KCkge1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5wcm9tcHQoXCJFbnRlciBhIHJhbmRvbSB0ZXh0LiAoRW50cm9weSk6IFwiLCBcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgICAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBybC5xdWVzdGlvbihcIkVudGVyIGEgcmFuZG9tIHRleHQuIChFbnRyb3B5KTogXCIsIChpbnB1dCkgPT4gcmVzb2x2ZShpbnB1dCkgKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tQnl0ZXMobikge1xuICAgIGxldCBhcnJheSA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHsgLy8gU3VwcG9ydGVkXG4gICAgICAgIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgfSBlbHNlIHsgLy8gTm9kZUpTXG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoYTI1NmRpZ2VzdChkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIFN1cHBvcnRlZFxuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBkYXRhLmJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIH0gZWxzZSB7IC8vIE5vZGVKU1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShkYXRhLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyKS5nZXRVaW50MzIob2Zmc2V0LCBmYWxzZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSYW5kb21SbmcoZW50cm9weSkge1xuICAgIC8vIEdlbmVyYXRlIGEgcmFuZG9tIFJuZ1xuICAgIHdoaWxlICghZW50cm9weSkge1xuICAgICAgICBlbnRyb3B5ID0gYXdhaXQgYXNrRW50cm9weSgpO1xuICAgIH1cbiAgICBjb25zdCBoYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBoYXNoZXIudXBkYXRlKGdldFJhbmRvbUJ5dGVzKDY0KSk7XG4gICAgY29uc3QgZW5jID0gbmV3IFRleHRFbmNvZGVyKCk7IC8vIGFsd2F5cyB1dGYtOFxuICAgIGhhc2hlci51cGRhdGUoZW5jLmVuY29kZShlbnRyb3B5KSk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hlci5kaWdlc3QoKTtcblxuICAgIGNvbnN0IHNlZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7aTw4O2krKykge1xuICAgICAgICBzZWVkW2ldID0gcmVhZFVJbnQzMkJFKGhhc2gsIGkqNCk7XG4gICAgfVxuICAgIGNvbnN0IHJuZyA9IG5ldyBDaGFDaGEoc2VlZCk7XG4gICAgcmV0dXJuIHJuZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJuZ0Zyb21CZWFjb25QYXJhbXMoYmVhY29uSGFzaCwgbnVtSXRlcmF0aW9uc0V4cCkge1xuICAgIGxldCBuSXRlcmF0aW9uc0lubmVyO1xuICAgIGxldCBuSXRlcmF0aW9uc091dGVyO1xuICAgIGlmIChudW1JdGVyYXRpb25zRXhwPDMyKSB7XG4gICAgICAgIG5JdGVyYXRpb25zSW5uZXIgPSAoMSA8PCBudW1JdGVyYXRpb25zRXhwKSA+Pj4gMDtcbiAgICAgICAgbkl0ZXJhdGlvbnNPdXRlciA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbkl0ZXJhdGlvbnNJbm5lciA9IDB4MTAwMDAwMDAwO1xuICAgICAgICBuSXRlcmF0aW9uc091dGVyID0gKDEgPDwgKG51bUl0ZXJhdGlvbnNFeHAtMzIpKSA+Pj4gMDtcbiAgICB9XG5cbiAgICBsZXQgY3VySGFzaCA9IGJlYWNvbkhhc2g7XG4gICAgZm9yIChsZXQgaT0wOyBpPG5JdGVyYXRpb25zT3V0ZXI7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkl0ZXJhdGlvbnNJbm5lcjsgaisrKSB7XG4gICAgICAgICAgICBjdXJIYXNoID0gYXdhaXQgc2hhMjU2ZGlnZXN0KGN1ckhhc2gpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VySGFzaFYgPSBuZXcgRGF0YVZpZXcoY3VySGFzaC5idWZmZXIsIGN1ckhhc2guYnl0ZU9mZnNldCwgY3VySGFzaC5ieXRlTGVuZ3RoKTtcbiAgICBjb25zdCBzZWVkID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPDg7IGkrKykge1xuICAgICAgICBzZWVkW2ldID0gY3VySGFzaFYuZ2V0VWludDMyKGkqNCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHJuZyA9IG5ldyBDaGFDaGEoc2VlZCk7XG5cbiAgICByZXR1cm4gcm5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4MkJ5dGVBcnJheShzKSB7XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gcztcbiAgICBpZiAocy5zbGljZSgwLDIpID09IFwiMHhcIikgcz0gcy5zbGljZSgyKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocy5tYXRjaCgvW1xcZGEtZl17Mn0vZ2kpLm1hcChmdW5jdGlvbiAoaCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaCwgMTYpO1xuICAgIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVBcnJheTJoZXgoYnl0ZUFycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChieXRlQXJyYXksIGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgICAgcmV0dXJuIChcIjBcIiArIChieXRlICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUJpZ0ludHNXaXRoRmllbGQoRnIsIG8pIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpICB7XG4gICAgICAgIHJldHVybiBGci50b1N0cmluZyhvKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgICAgcmV0dXJuIG8ubWFwKHN0cmluZ2lmeUJpZ0ludHNXaXRoRmllbGQuYmluZChudWxsLCBGcikpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goIChrKSA9PiB7XG4gICAgICAgICAgICByZXNba10gPSBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkKEZyLCBvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mKG8pID09IFwiYmlnaW50XCIpIHx8IG8uZXEgIT09IHVuZGVmaW5lZCkgIHtcbiAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn0iLCJleHBvcnQgY29uc3QgSEVBREVSX1pLRVlfU0VDVElPTiA9IDE7XG5cbmV4cG9ydCBjb25zdCBHUk9USDE2X1BST1RPQ09MX0lEID0gMTtcbmV4cG9ydCBjb25zdCBQTE9OS19QUk9UT0NPTF9JRCA9IDI7XG5leHBvcnQgY29uc3QgRkZMT05LX1BST1RPQ09MX0lEID0gMTA7XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBGRmxvbmsgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgRkZfVF9QT0xfREVHX01JTiA9IDM7XG5cbi8vIEZGbG9uayBBXG5leHBvcnQgY29uc3QgQSA9IDEyO1xuXG4vLyBaS0VZIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfTlNFQ1RJT05TID0gMTc7XG5cbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0hFQURFUl9TRUNUSU9OID0gMjtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OID0gMztcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0FfTUFQX1NFQ1RJT04gPSA0O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfQl9NQVBfU0VDVElPTiA9IDU7XG5leHBvcnQgY29uc3QgWktFWV9GRl9DX01BUF9TRUNUSU9OID0gNjtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FMX1NFQ1RJT04gPSA3O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfUVJfU0VDVElPTiA9IDg7XG5leHBvcnQgY29uc3QgWktFWV9GRl9RTV9TRUNUSU9OID0gOTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FPX1NFQ1RJT04gPSAxMDtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FDX1NFQ1RJT04gPSAxMTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1NJR01BMV9TRUNUSU9OID0gMTI7XG5leHBvcnQgY29uc3QgWktFWV9GRl9TSUdNQTJfU0VDVElPTiA9IDEzO1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04gPSAxNDtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0xBR1JBTkdFX1NFQ1RJT04gPSAxNTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1BUQVVfU0VDVElPTiA9IDE2O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfQzBfU0VDVElPTiA9IDE3O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLy8gRm9ybWF0XG4vLyA9PT09PT1cbi8vIEhlYWRlcigxKVxuLy8gICAgICBQcm92ZXIgVHlwZSAxIEdyb3RoXG4vLyBIZWFkZXJHcm90aCgyKVxuLy8gICAgICBuOHFcbi8vICAgICAgcVxuLy8gICAgICBuOHJcbi8vICAgICAgclxuLy8gICAgICBOVmFyc1xuLy8gICAgICBOUHViXG4vLyAgICAgIERvbWFpblNpemUgIChtdWx0aXBsZSBvZiAyXG4vLyAgICAgIGFscGhhMVxuLy8gICAgICBiZXRhMVxuLy8gICAgICBkZWx0YTFcbi8vICAgICAgYmV0YTJcbi8vICAgICAgZ2FtbWEyXG4vLyAgICAgIGRlbHRhMlxuLy8gSUMoMylcbi8vIENvZWZzKDQpXG4vLyBQb2ludHNBKDUpXG4vLyBQb2ludHNCMSg2KVxuLy8gUG9pbnRzQjIoNylcbi8vIFBvaW50c0MoOClcbi8vIFBvaW50c0goOSlcbi8vIENvbnRyaWJ1dGlvbnMoMTApXG5cbmltcG9ydCB7IFNjYWxhciwgRjFGaWVsZCB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyBsb2cyIH0gZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IHtGRkxPTktfUFJPVE9DT0xfSUQsIEdST1RIMTZfUFJPVE9DT0xfSUQsIFBMT05LX1BST1RPQ09MX0lEfSBmcm9tIFwiLi96a2V5X2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHtaS0VZX0ZGX0hFQURFUl9TRUNUSU9OfSBmcm9tIFwiLi9mZmxvbmtfY29uc3RhbnRzLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUhlYWRlcihmZCwgemtleSkge1xuXG4gICAgLy8gV3JpdGUgdGhlIGhlYWRlclxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDEpOyAvLyBHcm90aFxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgLy8gV3JpdGUgdGhlIEdyb3RoIGhlYWRlciBzZWN0aW9uXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMik7XG4gICAgY29uc3QgcHJpbWVRID0gY3VydmUucTtcbiAgICBjb25zdCBuOHEgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgY29uc3QgcHJpbWVSID0gY3VydmUucjtcbiAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVSKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihuOHEpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgcHJpbWVRLCBuOHEpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIobjhyKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMud3JpdGVCaWdJbnQoZmQsIHByaW1lUiwgbjhyKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHprZXkublZhcnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgYmFyc1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoemtleS5uUHVibGljKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiBwdWJsaWMgdmFycyAobm90IGluY2x1ZGluZyBPTkUpXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMih6a2V5LmRvbWFpblNpemUpOyAgICAgICAgICAgICAgICAgIC8vIGRvbWFpblNpemVcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS52a19hbHBoYV8xKTtcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS52a19iZXRhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoZmQsIGN1cnZlLCB6a2V5LnZrX2JldGFfMik7XG4gICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkudmtfZ2FtbWFfMik7XG4gICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkudmtfZGVsdGFfMSk7XG4gICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkudmtfZGVsdGFfMik7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVpLZXkoZmlsZU5hbWUsIHprZXkpIHtcblxuICAgIGxldCBjdXJ2ZSA9IGdldEN1cnZlKHprZXkucSk7XG5cbiAgICBjb25zdCBmZCA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKGZpbGVOYW1lLFwiemtleVwiLCAxLCA5KTtcblxuICAgIGF3YWl0IHdyaXRlSGVhZGVyKGZkLCB6a2V5KTtcbiAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgoemtleS5yKSAtIDEpIC8gNjQpICsxKSo4O1xuICAgIGNvbnN0IFJyID0gU2NhbGFyLm1vZChTY2FsYXIuc2hsKDEsIG44cio4KSwgemtleS5yKTtcbiAgICBjb25zdCBSMnIgPSBTY2FsYXIubW9kKFNjYWxhci5tdWwoUnIsUnIpLCB6a2V5LnIpO1xuXG4gICAgLy8gV3JpdGUgUG9scyAoQSBhbmQgQiAoQyBjYW4gYmUgb21taXRlZCkpXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIHprZXkuY2NvZWZzID0gemtleS5jY29lZnMuZmlsdGVyKGMgPT4gYy5tYXRyaXg8Mik7XG4gICAgemtleS5jY29lZnMuc29ydCggKGEsYikgPT4gYS5jb25zdHJhaW50IC0gYi5jb25zdHJhaW50ICk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA0KTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHprZXkuY2NvZWZzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPHprZXkuY2NvZWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZWYgPSB6a2V5LmNjb2Vmc1tpXTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb2VmLm1hdHJpeCk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY29lZi5jb25zdHJhaW50KTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb2VmLnNpZ25hbCk7XG4gICAgICAgIGF3YWl0IHdyaXRlRnIyKGNvZWYudmFsdWUpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gV3JpdGUgSUMgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAzKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS5JQ1tpXSApO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gV3JpdGUgQVxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA1KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uVmFyczsgaSsrKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoZmQsIGN1cnZlLCB6a2V5LkFbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIEIxXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDYpO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuQjFbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIEIyXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDcpO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkuQjJbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIENcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgOCk7XG4gICAgZm9yIChsZXQgaT16a2V5Lm5QdWJsaWMrMTsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuQ1tpXSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG5cbiAgICAvLyBXcml0ZSBIIHBvaW50c1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA5KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuaEV4cHNbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUZyMihuKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdG8gbW9udGdvbWVyeVxuICAgICAgICBuID0gU2NhbGFyLm1vZCggU2NhbGFyLm11bChuLCBSMnIpLCB6a2V5LnIpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgbiwgbjhyKTtcbiAgICB9XG5cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShmZCwgY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzEuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMS50b1JwckxFTShidWZmLCAwLCBwKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihmZCwgY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzIuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMi50b1JwckxFTShidWZmLCAwLCBwKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMS5GLm44KjIpO1xuICAgIGNvbnN0IHJlcyA9IGN1cnZlLkcxLmZyb21ScHJMRU0oYnVmZiwgMCk7XG4gICAgcmV0dXJuIHRvT2JqZWN0ID8gY3VydmUuRzEudG9PYmplY3QocmVzKSA6IHJlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEcyKGZkLCBjdXJ2ZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMi5GLm44KjIpO1xuICAgIGNvbnN0IHJlcyA9IGN1cnZlLkcyLmZyb21ScHJMRU0oYnVmZiwgMCk7XG4gICAgcmV0dXJuIHRvT2JqZWN0ID8gY3VydmUuRzIudG9PYmplY3QocmVzKSA6IHJlcztcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEhlYWRlcihmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KSB7XG4gICAgLy8gUmVhZCBIZWFkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDEpO1xuICAgIGNvbnN0IHByb3RvY29sSWQgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgaWYgKHByb3RvY29sSWQgPT09IEdST1RIMTZfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRIZWFkZXJHcm90aDE2KGZkLCBzZWN0aW9ucywgdG9PYmplY3QpO1xuICAgIH0gZWxzZSBpZiAocHJvdG9jb2xJZCA9PT0gUExPTktfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRIZWFkZXJQbG9uayhmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KTtcbiAgICB9IGVsc2UgaWYgKHByb3RvY29sSWQgPT09IEZGTE9OS19QUk9UT0NPTF9JRCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEhlYWRlckZGbG9uayhmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm90b2NvbCBub3Qgc3VwcG9ydGVkOiBcIik7XG4gICAgfVxufVxuXG5cblxuXG5hc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyR3JvdGgxNihmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KSB7XG4gICAgY29uc3QgemtleSA9IHt9O1xuXG4gICAgemtleS5wcm90b2NvbCA9IFwiZ3JvdGgxNlwiO1xuXG4gICAgLy8gUmVhZCBHcm90aCBIZWFkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDIpO1xuICAgIGNvbnN0IG44cSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkubjhxID0gbjhxO1xuICAgIHprZXkucSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCBuOHEpO1xuXG4gICAgY29uc3QgbjhyID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uOHIgPSBuOHI7XG4gICAgemtleS5yID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44cik7XG4gICAgemtleS5jdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG4gICAgemtleS5uVmFycyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkublB1YmxpYyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkuZG9tYWluU2l6ZSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkucG93ZXIgPSBsb2cyKHprZXkuZG9tYWluU2l6ZSk7XG4gICAgemtleS52a19hbHBoYV8xID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS52a19iZXRhXzEgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LnZrX2JldGFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZ2FtbWFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZGVsdGFfMSA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZGVsdGFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICByZXR1cm4gemtleTtcblxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyUGxvbmsoZmQsIHNlY3Rpb25zLCB0b09iamVjdCkge1xuICAgIGNvbnN0IHprZXkgPSB7fTtcblxuICAgIHprZXkucHJvdG9jb2wgPSBcInBsb25rXCI7XG5cbiAgICAvLyBSZWFkIFBsb25rIEhlYWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMik7XG4gICAgY29uc3QgbjhxID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uOHEgPSBuOHE7XG4gICAgemtleS5xID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44cSk7XG5cbiAgICBjb25zdCBuOHIgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm44ciA9IG44cjtcbiAgICB6a2V5LnIgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpZ0ludChmZCwgbjhyKTtcbiAgICB6a2V5LmN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcbiAgICB6a2V5Lm5WYXJzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uUHVibGljID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5kb21haW5TaXplID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5wb3dlciA9IGxvZzIoemtleS5kb21haW5TaXplKTtcbiAgICB6a2V5Lm5BZGRpdGlvbnMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm5Db25zdHJhaW5zID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5rMSA9IGF3YWl0IGZkLnJlYWQobjhyKTtcbiAgICB6a2V5LmsyID0gYXdhaXQgZmQucmVhZChuOHIpO1xuXG4gICAgemtleS5RbSA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkuUWwgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlFyID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS5RbyA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkuUWMgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlMxID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS5TMiA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkuUzMgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlhfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiB6a2V5O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyRkZsb25rKGZkLCBzZWN0aW9ucywgdG9PYmplY3QpIHtcbiAgICBjb25zdCB6a2V5ID0ge307XG5cbiAgICB6a2V5LnByb3RvY29sID0gXCJmZmxvbmtcIjtcbiAgICB6a2V5LnByb3RvY29sSWQgPSBGRkxPTktfUFJPVE9DT0xfSUQ7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIFpLRVlfRkZfSEVBREVSX1NFQ1RJT04pO1xuICAgIGNvbnN0IG44cSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkubjhxID0gbjhxO1xuICAgIHprZXkucSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCBuOHEpO1xuICAgIHprZXkuY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgY29uc3QgbjhyID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uOHIgPSBuOHI7XG4gICAgemtleS5yID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44cik7XG5cbiAgICB6a2V5Lm5WYXJzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uUHVibGljID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5kb21haW5TaXplID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5wb3dlciA9IGxvZzIoemtleS5kb21haW5TaXplKTtcbiAgICB6a2V5Lm5BZGRpdGlvbnMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm5Db25zdHJhaW50cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgemtleS5rMSA9IGF3YWl0IGZkLnJlYWQobjhyKTtcbiAgICB6a2V5LmsyID0gYXdhaXQgZmQucmVhZChuOHIpO1xuXG4gICAgemtleS53MyA9IGF3YWl0IGZkLnJlYWQobjhyKTtcbiAgICB6a2V5Lnc0ID0gYXdhaXQgZmQucmVhZChuOHIpO1xuICAgIHprZXkudzggPSBhd2FpdCBmZC5yZWFkKG44cik7XG4gICAgemtleS53ciA9IGF3YWl0IGZkLnJlYWQobjhyKTtcblxuICAgIHprZXkuWF8yID0gYXdhaXQgcmVhZEcyKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG5cbiAgICB6a2V5LkMwID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgcmV0dXJuIHprZXk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkWktleShmaWxlTmFtZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCB7ZmQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShmaWxlTmFtZSwgXCJ6a2V5XCIsIDEpO1xuXG4gICAgY29uc3QgemtleSA9IGF3YWl0IHJlYWRIZWFkZXIoZmQsIHNlY3Rpb25zLCB0b09iamVjdCk7XG5cbiAgICBjb25zdCBGciA9IG5ldyBGMUZpZWxkKHprZXkucik7XG4gICAgY29uc3QgUnIgPSBTY2FsYXIubW9kKFNjYWxhci5zaGwoMSwgemtleS5uOHIqOCksIHprZXkucik7XG4gICAgY29uc3QgUnJpID0gRnIuaW52KFJyKTtcbiAgICBjb25zdCBScmkyID0gRnIubXVsKFJyaSwgUnJpKTtcblxuICAgIGxldCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG5cbiAgICAvLyBSZWFkIElDIFNlY3Rpb25cbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMyk7XG4gICAgemtleS5JQyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw9IHprZXkublB1YmxpYzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFAgPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgICAgIHprZXkuSUMucHVzaChQKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gUmVhZCBDb2Vmc1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCA0KTtcbiAgICBjb25zdCBuQ0NvZWZzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5jY29lZnMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bkNDb2VmczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgICAgIGNvbnN0IHYgPSBhd2FpdCByZWFkRnIyKHRvT2JqZWN0KTtcbiAgICAgICAgemtleS5jY29lZnMucHVzaCh7XG4gICAgICAgICAgICBtYXRyaXg6IG0sXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjLFxuICAgICAgICAgICAgc2lnbmFsOiBzLFxuICAgICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICAvLyBSZWFkIEEgcG9pbnRzXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDUpO1xuICAgIHprZXkuQSA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgY29uc3QgQSA9IGF3YWl0IHJlYWRHMShmZCwgY3VydmUsIHRvT2JqZWN0KTtcbiAgICAgICAgemtleS5BW2ldID0gQTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gUmVhZCBCMVxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCA2KTtcbiAgICB6a2V5LkIxID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPHprZXkublZhcnM7IGkrKykge1xuICAgICAgICBjb25zdCBCMSA9IGF3YWl0IHJlYWRHMShmZCwgY3VydmUsIHRvT2JqZWN0KTtcblxuICAgICAgICB6a2V5LkIxW2ldID0gQjE7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cblxuICAgIC8vIFJlYWQgQjIgcG9pbnRzXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDcpO1xuICAgIHprZXkuQjIgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uVmFyczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IEIyID0gYXdhaXQgcmVhZEcyKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgICAgICB6a2V5LkIyW2ldID0gQjI7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cblxuICAgIC8vIFJlYWQgQyBwb2ludHNcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgOCk7XG4gICAgemtleS5DID0gW107XG4gICAgZm9yIChsZXQgaT16a2V5Lm5QdWJsaWMrMTsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IHJlYWRHMShmZCwgY3VydmUsIHRvT2JqZWN0KTtcblxuICAgICAgICB6a2V5LkNbaV0gPSBDO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG5cbiAgICAvLyBSZWFkIEggcG9pbnRzXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDkpO1xuICAgIHprZXkuaEV4cHMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgY29uc3QgSCA9IGF3YWl0IHJlYWRHMShmZCwgY3VydmUsIHRvT2JqZWN0KTtcbiAgICAgICAgemtleS5oRXhwcy5wdXNoKEgpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgYXdhaXQgZmQuY2xvc2UoKTtcblxuICAgIHJldHVybiB6a2V5O1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyMigvKiB0b09iamVjdCAqLykge1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIHprZXkubjhyKTtcbiAgICAgICAgcmV0dXJuIEZyLm11bChuLCBScmkyKTtcbiAgICB9XG5cbn1cblxuXG5hc3luYyBmdW5jdGlvbiByZWFkQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCBjID0ge2RlbHRhOnt9fTtcbiAgICBjLmRlbHRhQWZ0ZXIgPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgYy5kZWx0YS5nMV9zID0gYXdhaXQgcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGMuZGVsdGEuZzFfc3ggPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgYy5kZWx0YS5nMl9zcHggPSBhd2FpdCByZWFkRzIoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgYy50cmFuc2NyaXB0ID0gYXdhaXQgZmQucmVhZCg2NCk7XG4gICAgYy50eXBlID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG5cbiAgICBjb25zdCBwYXJhbUxlbmd0aCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IGN1clBvcyA9IGZkLnBvcztcbiAgICBsZXQgbGFzdFR5cGUgPTA7XG4gICAgd2hpbGUgKGZkLnBvcy1jdXJQb3MgPCBwYXJhbUxlbmd0aCkge1xuICAgICAgICBjb25zdCBidWZmVHlwZSA9IGF3YWl0IGZkLnJlYWQoMSk7XG4gICAgICAgIGlmIChidWZmVHlwZVswXTw9IGxhc3RUeXBlKSB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXJzIGluIHRoZSBjb250cmlidXRpb24gbXVzdCBiZSBzb3J0ZWRcIik7XG4gICAgICAgIGxhc3RUeXBlID0gYnVmZlR5cGVbMF07XG4gICAgICAgIGlmIChidWZmVHlwZVswXT09MSkgeyAgICAgLy8gTmFtZVxuICAgICAgICAgICAgY29uc3QgYnVmZkxlbiA9IGF3YWl0IGZkLnJlYWQoMSk7XG4gICAgICAgICAgICBjb25zdCBidWZmU3RyID0gYXdhaXQgZmQucmVhZChidWZmTGVuWzBdKTtcbiAgICAgICAgICAgIGMubmFtZSA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShidWZmU3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChidWZmVHlwZVswXT09Mikge1xuICAgICAgICAgICAgY29uc3QgYnVmZkV4cCA9IGF3YWl0IGZkLnJlYWQoMSk7XG4gICAgICAgICAgICBjLm51bUl0ZXJhdGlvbnNFeHAgPSBidWZmRXhwWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZUeXBlWzBdPT0zKSB7XG4gICAgICAgICAgICBjb25zdCBidWZmTGVuID0gYXdhaXQgZmQucmVhZCgxKTtcbiAgICAgICAgICAgIGMuYmVhY29uSGFzaCA9IGF3YWl0IGZkLnJlYWQoYnVmZkxlblswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZkLnBvcyAhPSBjdXJQb3MgKyBwYXJhbUxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXMgZG8gbm90IG1hdGNoXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xufVxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTVBDUGFyYW1zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpIHtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDEwKTtcbiAgICBjb25zdCByZXMgPSB7IGNvbnRyaWJ1dGlvbnM6IFtdfTtcbiAgICByZXMuY3NIYXNoID0gYXdhaXQgZmQucmVhZCg2NCk7XG4gICAgY29uc3QgbiA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGZvciAobGV0IGk9MDsgaTxuOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHJlYWRDb250cmlidXRpb24oZmQsIGN1cnZlKTtcbiAgICAgICAgcmVzLmNvbnRyaWJ1dGlvbnMucHVzaChjKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSwgYykge1xuICAgIGF3YWl0IHdyaXRlRzEoZmQsIGN1cnZlLCBjLmRlbHRhQWZ0ZXIpO1xuICAgIGF3YWl0IHdyaXRlRzEoZmQsIGN1cnZlLCBjLmRlbHRhLmcxX3MpO1xuICAgIGF3YWl0IHdyaXRlRzEoZmQsIGN1cnZlLCBjLmRlbHRhLmcxX3N4KTtcbiAgICBhd2FpdCB3cml0ZUcyKGZkLCBjdXJ2ZSwgYy5kZWx0YS5nMl9zcHgpO1xuICAgIGF3YWl0IGZkLndyaXRlKGMudHJhbnNjcmlwdCk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjLnR5cGUgfHwgMCk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICBpZiAoYy5uYW1lKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKDEpOyAgICAgIC8vIFBhcmFtIE5hbWVcbiAgICAgICAgY29uc3QgbmFtZURhdGEgPSBuZXcgVGV4dEVuY29kZXIoXCJ1dGYtOFwiKS5lbmNvZGUoYy5uYW1lLnN1YnN0cmluZygwLDY0KSk7XG4gICAgICAgIHBhcmFtcy5wdXNoKG5hbWVEYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bmFtZURhdGEuYnl0ZUxlbmd0aDsgaSsrKSBwYXJhbXMucHVzaChuYW1lRGF0YVtpXSk7XG4gICAgfVxuICAgIGlmIChjLnR5cGUgPT0gMSkge1xuICAgICAgICBwYXJhbXMucHVzaCgyKTsgICAgICAvLyBQYXJhbSBudW1JdGVyYXRpb25zRXhwXG4gICAgICAgIHBhcmFtcy5wdXNoKGMubnVtSXRlcmF0aW9uc0V4cCk7XG5cbiAgICAgICAgcGFyYW1zLnB1c2goMyk7ICAgICAgLy8gQmVhY29uIEhhc2hcbiAgICAgICAgcGFyYW1zLnB1c2goYy5iZWFjb25IYXNoLmJ5dGVMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Yy5iZWFjb25IYXNoLmJ5dGVMZW5ndGg7IGkrKykgcGFyYW1zLnB1c2goYy5iZWFjb25IYXNoW2ldKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sZW5ndGg+MCkge1xuICAgICAgICBjb25zdCBwYXJhbXNCdWZmID0gbmV3IFVpbnQ4QXJyYXkocGFyYW1zKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihwYXJhbXNCdWZmLmJ5dGVMZW5ndGgpO1xuICAgICAgICBhd2FpdCBmZC53cml0ZShwYXJhbXNCdWZmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDApO1xuICAgIH1cblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVNUENQYXJhbXMoZmQsIGN1cnZlLCBtcGNQYXJhbXMpIHtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDEwKTtcbiAgICBhd2FpdCBmZC53cml0ZShtcGNQYXJhbXMuY3NIYXNoKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKG1wY1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPG1wY1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSxtcGNQYXJhbXMuY29udHJpYnV0aW9uc1tpXSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaEcxKGhhc2hlciwgY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzEuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMS50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBwKTtcbiAgICBoYXNoZXIudXBkYXRlKGJ1ZmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaEcyKGhhc2hlcixjdXJ2ZSwgcCkge1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5HMi5GLm44KjIpO1xuICAgIGN1cnZlLkcyLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDAsIHApO1xuICAgIGhhc2hlci51cGRhdGUoYnVmZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUHViS2V5KGhhc2hlciwgY3VydmUsIGMpIHtcbiAgICBoYXNoRzEoaGFzaGVyLCBjdXJ2ZSwgYy5kZWx0YUFmdGVyKTtcbiAgICBoYXNoRzEoaGFzaGVyLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zKTtcbiAgICBoYXNoRzEoaGFzaGVyLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zeCk7XG4gICAgaGFzaEcyKGhhc2hlciwgY3VydmUsIGMuZGVsdGEuZzJfc3B4KTtcbiAgICBoYXNoZXIudXBkYXRlKGMudHJhbnNjcmlwdCk7XG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlKGZkLCB3aXRuZXNzLCBwcmltZSkge1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxKTtcbiAgICBjb25zdCBuOCA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZSkgLSAxKSAvIDY0KSArMSkqODtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKG44KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMud3JpdGVCaWdJbnQoZmQsIHByaW1lLCBuOCk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMih3aXRuZXNzLmxlbmd0aCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDIpO1xuICAgIGZvciAobGV0IGk9MDsgaTx3aXRuZXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgd2l0bmVzc1tpXSwgbjgpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkLCAyKTtcblxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUJpbihmZCwgd2l0bmVzc0JpbiwgcHJpbWUpIHtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMSk7XG4gICAgY29uc3QgbjggPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWUpIC0gMSkgLyA2NCkgKzEpKjg7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihuOCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLndyaXRlQmlnSW50KGZkLCBwcmltZSwgbjgpO1xuICAgIGlmICh3aXRuZXNzQmluLmJ5dGVMZW5ndGggJSBuOCAhPSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgd2l0bmVzcyBsZW5ndGhcIik7XG4gICAgfVxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIod2l0bmVzc0Jpbi5ieXRlTGVuZ3RoIC8gbjgpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDIpO1xuICAgIGF3YWl0IGZkLndyaXRlKHdpdG5lc3NCaW4pO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyKGZkLCBzZWN0aW9ucykge1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCAxKTtcbiAgICBjb25zdCBuOCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IHEgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpZ0ludChmZCwgbjgpO1xuICAgIGNvbnN0IG5XaXRuZXNzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiB7bjgsIHEsIG5XaXRuZXNzfTtcblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZChmaWxlTmFtZSkge1xuXG4gICAgY29uc3Qge2ZkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoZmlsZU5hbWUsIFwid3Ruc1wiLCAyKTtcblxuICAgIGNvbnN0IHtuOCwgbldpdG5lc3N9ID0gYXdhaXQgcmVhZEhlYWRlcihmZCwgc2VjdGlvbnMpO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCAyKTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bldpdG5lc3M7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44KTtcbiAgICAgICAgcmVzLnB1c2godik7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgd3Ruc1V0aWxzIGZyb20gXCIuL3d0bnNfdXRpbHMuanNcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgYXMgZ2V0Q3VydmUgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7IGxvZzIgfSBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIHV0aWxzLCBCaWdCdWZmZXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7c3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZ3JvdGgxNlByb3ZlKHprZXlGaWxlTmFtZSwgd2l0bmVzc0ZpbGVOYW1lLCBsb2dnZXIpIHtcbiAgICBjb25zdCB7ZmQ6IGZkV3Rucywgc2VjdGlvbnM6IHNlY3Rpb25zV3Ruc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUod2l0bmVzc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMTw8MjUsIDE8PDIzKTtcblxuICAgIGNvbnN0IHd0bnMgPSBhd2FpdCB3dG5zVXRpbHMucmVhZEhlYWRlcihmZFd0bnMsIHNlY3Rpb25zV3Rucyk7XG5cbiAgICBjb25zdCB7ZmQ6IGZkWktleSwgc2VjdGlvbnM6IHNlY3Rpb25zWktleX0gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleUZpbGVOYW1lLCBcInprZXlcIiwgMiwgMTw8MjUsIDE8PDIzKTtcblxuICAgIGNvbnN0IHprZXkgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZFpLZXksIHNlY3Rpb25zWktleSk7XG5cbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IGdyb3RoMTZcIik7XG4gICAgfVxuXG4gICAgaWYgKCFTY2FsYXIuZXEoemtleS5yLCAgd3Rucy5xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDdXJ2ZSBvZiB0aGUgd2l0bmVzcyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIHByb3Zpbmcga2V5XCIpO1xuICAgIH1cblxuICAgIGlmICh3dG5zLm5XaXRuZXNzICE9IHprZXkublZhcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpdG5lc3MgbGVuZ3RoLiBDaXJjdWl0OiAke3prZXkublZhcnN9LCB3aXRuZXNzOiAke3d0bnMubldpdG5lc3N9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSB6a2V5LmN1cnZlO1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBHMiA9IGN1cnZlLkcyO1xuXG4gICAgY29uc3QgcG93ZXIgPSBsb2cyKHprZXkuZG9tYWluU2l6ZSk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIFd0bnNcIik7XG4gICAgY29uc3QgYnVmZldpdG5lc3MgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRXdG5zLCBzZWN0aW9uc1d0bnMsIDIpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgQ29lZmZzXCIpO1xuICAgIGNvbnN0IGJ1ZmZDb2VmZnMgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDQpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQnVpbGRpbmcgQUJDXCIpO1xuICAgIGNvbnN0IFtidWZmQV9ULCBidWZmQl9ULCBidWZmQ19UXSA9IGF3YWl0IGJ1aWxkQUJDMShjdXJ2ZSwgemtleSwgYnVmZldpdG5lc3MsIGJ1ZmZDb2VmZnMsIGxvZ2dlcik7XG5cbiAgICBjb25zdCBpbmMgPSBwb3dlciA9PSBGci5zID8gY3VydmUuRnIuc2hpZnQgOiBjdXJ2ZS5Gci53W3Bvd2VyKzFdO1xuXG4gICAgY29uc3QgYnVmZkEgPSBhd2FpdCBGci5pZmZ0KGJ1ZmZBX1QsIFwiXCIsIFwiXCIsIGxvZ2dlciwgXCJJRkZUX0FcIik7XG4gICAgY29uc3QgYnVmZkFvZGQgPSBhd2FpdCBGci5iYXRjaEFwcGx5S2V5KGJ1ZmZBLCBGci5lKDEpLCBpbmMpO1xuICAgIGNvbnN0IGJ1ZmZBb2RkX1QgPSBhd2FpdCBGci5mZnQoYnVmZkFvZGQsIFwiXCIsIFwiXCIsIGxvZ2dlciwgXCJGRlRfQVwiKTtcblxuICAgIGNvbnN0IGJ1ZmZCID0gYXdhaXQgRnIuaWZmdChidWZmQl9ULCBcIlwiLCBcIlwiLCBsb2dnZXIsIFwiSUZGVF9CXCIpO1xuICAgIGNvbnN0IGJ1ZmZCb2RkID0gYXdhaXQgRnIuYmF0Y2hBcHBseUtleShidWZmQiwgRnIuZSgxKSwgaW5jKTtcbiAgICBjb25zdCBidWZmQm9kZF9UID0gYXdhaXQgRnIuZmZ0KGJ1ZmZCb2RkLCBcIlwiLCBcIlwiLCBsb2dnZXIsIFwiRkZUX0JcIik7XG5cbiAgICBjb25zdCBidWZmQyA9IGF3YWl0IEZyLmlmZnQoYnVmZkNfVCwgXCJcIiwgXCJcIiwgbG9nZ2VyLCBcIklGRlRfQ1wiKTtcbiAgICBjb25zdCBidWZmQ29kZCA9IGF3YWl0IEZyLmJhdGNoQXBwbHlLZXkoYnVmZkMsIEZyLmUoMSksIGluYyk7XG4gICAgY29uc3QgYnVmZkNvZGRfVCA9IGF3YWl0IEZyLmZmdChidWZmQ29kZCwgXCJcIiwgXCJcIiwgbG9nZ2VyLCBcIkZGVF9DXCIpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiSm9pbiBBQkNcIik7XG4gICAgY29uc3QgYnVmZlBvZGRfVCA9IGF3YWl0IGpvaW5BQkMoY3VydmUsIHprZXksIGJ1ZmZBb2RkX1QsIGJ1ZmZCb2RkX1QsIGJ1ZmZDb2RkX1QsIGxvZ2dlcik7XG5cbiAgICBsZXQgcHJvb2YgPSB7fTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgQSBQb2ludHNcIik7XG4gICAgY29uc3QgYnVmZkJhc2VzQSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNSk7XG4gICAgcHJvb2YucGlfYSA9IGF3YWl0IGN1cnZlLkcxLm11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlc0EsIGJ1ZmZXaXRuZXNzLCBsb2dnZXIsIFwibXVsdGlleHAgQVwiKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgQjEgUG9pbnRzXCIpO1xuICAgIGNvbnN0IGJ1ZmZCYXNlc0IxID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA2KTtcbiAgICBsZXQgcGliMSA9IGF3YWl0IGN1cnZlLkcxLm11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlc0IxLCBidWZmV2l0bmVzcywgbG9nZ2VyLCBcIm11bHRpZXhwIEIxXCIpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiUmVhZGluZyBCMiBQb2ludHNcIik7XG4gICAgY29uc3QgYnVmZkJhc2VzQjIgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDcpO1xuICAgIHByb29mLnBpX2IgPSBhd2FpdCBjdXJ2ZS5HMi5tdWx0aUV4cEFmZmluZShidWZmQmFzZXNCMiwgYnVmZldpdG5lc3MsIGxvZ2dlciwgXCJtdWx0aWV4cCBCMlwiKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgQyBQb2ludHNcIik7XG4gICAgY29uc3QgYnVmZkJhc2VzQyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgOCk7XG4gICAgcHJvb2YucGlfYyA9IGF3YWl0IGN1cnZlLkcxLm11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlc0MsIGJ1ZmZXaXRuZXNzLnNsaWNlKCh6a2V5Lm5QdWJsaWMrMSkqY3VydmUuRnIubjgpLCBsb2dnZXIsIFwibXVsdGlleHAgQ1wiKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgSCBQb2ludHNcIik7XG4gICAgY29uc3QgYnVmZkJhc2VzSCA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgOSk7XG4gICAgY29uc3QgcmVzSCA9IGF3YWl0IGN1cnZlLkcxLm11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlc0gsIGJ1ZmZQb2RkX1QsIGxvZ2dlciwgXCJtdWx0aWV4cCBIXCIpO1xuXG4gICAgY29uc3QgciA9IGN1cnZlLkZyLnJhbmRvbSgpO1xuICAgIGNvbnN0IHMgPSBjdXJ2ZS5Gci5yYW5kb20oKTtcblxuICAgIHByb29mLnBpX2EgID0gRzEuYWRkKCBwcm9vZi5waV9hLCB6a2V5LnZrX2FscGhhXzEgKTtcbiAgICBwcm9vZi5waV9hICA9IEcxLmFkZCggcHJvb2YucGlfYSwgRzEudGltZXNGciggemtleS52a19kZWx0YV8xLCByICkpO1xuXG4gICAgcHJvb2YucGlfYiAgPSBHMi5hZGQoIHByb29mLnBpX2IsIHprZXkudmtfYmV0YV8yICk7XG4gICAgcHJvb2YucGlfYiAgPSBHMi5hZGQoIHByb29mLnBpX2IsIEcyLnRpbWVzRnIoIHprZXkudmtfZGVsdGFfMiwgcyApKTtcblxuICAgIHBpYjEgPSBHMS5hZGQoIHBpYjEsIHprZXkudmtfYmV0YV8xICk7XG4gICAgcGliMSA9IEcxLmFkZCggcGliMSwgRzEudGltZXNGciggemtleS52a19kZWx0YV8xLCBzICkpO1xuXG4gICAgcHJvb2YucGlfYyA9IEcxLmFkZChwcm9vZi5waV9jLCByZXNIKTtcblxuXG4gICAgcHJvb2YucGlfYyAgPSBHMS5hZGQoIHByb29mLnBpX2MsIEcxLnRpbWVzRnIoIHByb29mLnBpX2EsIHMgKSk7XG4gICAgcHJvb2YucGlfYyAgPSBHMS5hZGQoIHByb29mLnBpX2MsIEcxLnRpbWVzRnIoIHBpYjEsIHIgKSk7XG4gICAgcHJvb2YucGlfYyAgPSBHMS5hZGQoIHByb29mLnBpX2MsIEcxLnRpbWVzRnIoIHprZXkudmtfZGVsdGFfMSwgRnIubmVnKEZyLm11bChyLHMpICkpKTtcblxuXG4gICAgbGV0IHB1YmxpY1NpZ25hbHMgPSBbXTtcblxuICAgIGZvciAobGV0IGk9MTsgaTw9IHprZXkublB1YmxpYzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGIgPSBidWZmV2l0bmVzcy5zbGljZShpKkZyLm44LCBpKkZyLm44K0ZyLm44KTtcbiAgICAgICAgcHVibGljU2lnbmFscy5wdXNoKFNjYWxhci5mcm9tUnByTEUoYikpO1xuICAgIH1cblxuICAgIHByb29mLnBpX2EgPSBHMS50b09iamVjdChHMS50b0FmZmluZShwcm9vZi5waV9hKSk7XG4gICAgcHJvb2YucGlfYiA9IEcyLnRvT2JqZWN0KEcyLnRvQWZmaW5lKHByb29mLnBpX2IpKTtcbiAgICBwcm9vZi5waV9jID0gRzEudG9PYmplY3QoRzEudG9BZmZpbmUocHJvb2YucGlfYykpO1xuXG4gICAgcHJvb2YucHJvdG9jb2wgPSBcImdyb3RoMTZcIjtcbiAgICBwcm9vZi5jdXJ2ZSA9IGN1cnZlLm5hbWU7XG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcblxuICAgIHByb29mID0gc3RyaW5naWZ5QmlnSW50cyhwcm9vZik7XG4gICAgcHVibGljU2lnbmFscyA9IHN0cmluZ2lmeUJpZ0ludHMocHVibGljU2lnbmFscyk7XG5cbiAgICByZXR1cm4ge3Byb29mLCBwdWJsaWNTaWduYWxzfTtcbn1cblxuXG5hc3luYyBmdW5jdGlvbiBidWlsZEFCQzEoY3VydmUsIHprZXksIHdpdG5lc3MsIGNvZWZmcywgbG9nZ2VyKSB7XG4gICAgY29uc3QgbjggPSBjdXJ2ZS5Gci5uODtcbiAgICBjb25zdCBzQ29lZiA9IDQqMyArIHprZXkubjhyO1xuICAgIGNvbnN0IG5Db2VmID0gKGNvZWZmcy5ieXRlTGVuZ3RoLTQpIC8gc0NvZWY7XG5cbiAgICBjb25zdCBvdXRCdWZmQSA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogbjgpO1xuICAgIGNvbnN0IG91dEJ1ZmZCID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUgKiBuOCk7XG4gICAgY29uc3Qgb3V0QnVmZkMgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIG44KTtcblxuICAgIGNvbnN0IG91dEJ1ZiA9IFsgb3V0QnVmZkEsIG91dEJ1ZmZCIF07XG4gICAgZm9yIChsZXQgaT0wOyBpPG5Db2VmOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYFFBUCBBQjogJHtpfS8ke25Db2VmfWApO1xuICAgICAgICBjb25zdCBidWZmQ29lZiA9IGNvZWZmcy5zbGljZSg0K2kqc0NvZWYsIDQraSpzQ29lZitzQ29lZik7XG4gICAgICAgIGNvbnN0IGJ1ZmZDb2VmViA9IG5ldyBEYXRhVmlldyhidWZmQ29lZi5idWZmZXIpO1xuICAgICAgICBjb25zdCBtPSBidWZmQ29lZlYuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgICAgICBjb25zdCBjPSBidWZmQ29lZlYuZ2V0VWludDMyKDQsIHRydWUpO1xuICAgICAgICBjb25zdCBzPSBidWZmQ29lZlYuZ2V0VWludDMyKDgsIHRydWUpO1xuICAgICAgICBjb25zdCBjb2VmID0gYnVmZkNvZWYuc2xpY2UoMTIsIDEyK244KTtcbiAgICAgICAgb3V0QnVmW21dLnNldChcbiAgICAgICAgICAgIGN1cnZlLkZyLmFkZChcbiAgICAgICAgICAgICAgICBvdXRCdWZbbV0uc2xpY2UoYypuOCwgYypuOCtuOCksXG4gICAgICAgICAgICAgICAgY3VydmUuRnIubXVsKGNvZWYsIHdpdG5lc3Muc2xpY2UocypuOCwgcypuOCtuOCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYypuOFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5LmRvbWFpblNpemU7IGkrKykge1xuICAgICAgICBpZiAoKGxvZ2dlcikmJihpJTEwMDAwMDAgPT0gMCkpIGxvZ2dlci5kZWJ1ZyhgUUFQIEM6ICR7aX0vJHt6a2V5LmRvbWFpblNpemV9YCk7XG4gICAgICAgIG91dEJ1ZmZDLnNldChcbiAgICAgICAgICAgIGN1cnZlLkZyLm11bChcbiAgICAgICAgICAgICAgICBvdXRCdWZmQS5zbGljZShpKm44LCBpKm44K244KSxcbiAgICAgICAgICAgICAgICBvdXRCdWZmQi5zbGljZShpKm44LCBpKm44K244KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpKm44XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtvdXRCdWZmQSwgb3V0QnVmZkIsIG91dEJ1ZmZDXTtcblxufVxuXG4vKlxuYXN5bmMgZnVuY3Rpb24gYnVsZEFCQyhjdXJ2ZSwgemtleSwgd2l0bmVzcywgY29lZmZzLCBsb2dnZXIpIHtcbiAgICBjb25zdCBjb25jdXJyZW5jeSA9IGN1cnZlLnRtLmNvbmN1cnJlbmN5O1xuICAgIGNvbnN0IHNDb2VmID0gNCozICsgemtleS5uOHI7XG5cbiAgICBsZXQgZ2V0VWludDMyO1xuXG4gICAgaWYgKGNvZWZmcyBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICBjb25zdCBjb2VmZnNEViA9IFtdO1xuICAgICAgICBjb25zdCBQQUdFX0xFTiA9IGNvZWZmcy5idWZmZXJzWzBdLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjb2VmZnMuYnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29lZmZzRFYucHVzaChuZXcgRGF0YVZpZXcoY29lZmZzLmJ1ZmZlcnNbaV0uYnVmZmVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0VWludDMyID0gZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvZWZmc0RWW01hdGguZmxvb3IocG9zL1BBR0VfTEVOKV0uZ2V0VWludDMyKHBvcyAlIFBBR0VfTEVOLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2VmZnNEViA9IG5ldyBEYXRhVmlldyhjb2VmZnMuYnVmZmVyLCBjb2VmZnMuYnl0ZU9mZnNldCwgY29lZmZzLmJ5dGVMZW5ndGgpO1xuICAgICAgICBnZXRVaW50MzIgPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgICAgICByZXR1cm4gY29lZmZzRFYuZ2V0VWludDMyKHBvcywgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHNQZXJDaHVuayA9IE1hdGguZmxvb3IoemtleS5kb21haW5TaXplL2NvbmN1cnJlbmN5KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgY29uc3QgY3V0UG9pbnRzID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgY3V0UG9pbnRzLnB1c2goIGdldEN1dFBvaW50KCBNYXRoLmZsb29yKGkqZWxlbWVudHNQZXJDaHVuaykgKSk7XG4gICAgfVxuICAgIGN1dFBvaW50cy5wdXNoKGNvZWZmcy5ieXRlTGVuZ3RoKTtcblxuICAgIGNvbnN0IGNodW5rU2l6ZSA9IDIqKjI2O1xuICAgIGZvciAobGV0IHM9MCA7IHM8emtleS5uVmFycyA7IHMrPSBjaHVua1NpemUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBRQVAgJHtzfTogJHtzfS8ke3prZXkublZhcnN9YCk7XG4gICAgICAgIGNvbnN0IG5zPSBNYXRoLm1pbih6a2V5Lm5WYXJzLXMsIGNodW5rU2l6ZSApO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxjb25jdXJyZW5jeTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChpPCBjb25jdXJyZW5jeS0xKSB7XG4gICAgICAgICAgICAgICAgbiA9IGVsZW1lbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSB6a2V5LmRvbWFpblNpemUgLSBpKmVsZW1lbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBjb2VmZnMuc2xpY2UoY3V0UG9pbnRzW2ldLCBjdXRQb2ludHNbaSsxXSl9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogd2l0bmVzcy5zbGljZShzKmN1cnZlLkZyLm44LCAocytucykqY3VydmUuRnIubjgpfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDIsIGxlbjogbipjdXJ2ZS5Gci5uOH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAzLCBsZW46IG4qY3VydmUuRnIubjh9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogNCwgbGVuOiBuKmN1cnZlLkZyLm44fSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJxYXBfYnVpbGRBQkNcIiwgcGFyYW1zOltcbiAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICB7dmFsOiAoY3V0UG9pbnRzW2krMV0gLSBjdXRQb2ludHNbaV0pL3NDb2VmfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgICAgICAgICB7dmFyOiA0fSxcbiAgICAgICAgICAgICAgICB7dmFsOiBpKmVsZW1lbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YWw6IHN9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG5zfVxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAyLCBsZW46IG4qY3VydmUuRnIubjh9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDEsIHZhcjogMywgbGVuOiBuKmN1cnZlLkZyLm44fSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAyLCB2YXI6IDQsIGxlbjogbipjdXJ2ZS5Gci5uOH0pO1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgY29uc3Qgbkdyb3VwcyA9IHJlc3VsdC5sZW5ndGggLyBjb25jdXJyZW5jeTtcbiAgICBpZiAobkdyb3Vwcz4xKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzMiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Y29uY3VycmVuY3k7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFzaz1bXTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMCwgbGVuOiByZXN1bHRbaV1bMF0uYnl0ZUxlbmd0aH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAxLCBsZW46IHJlc3VsdFtpXVswXS5ieXRlTGVuZ3RofSk7XG4gICAgICAgICAgICBmb3IgKGxldCBtPTA7IG08MzsgbSsrKSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiU0VUXCIsIHZhcjogMCwgYnVmZjogcmVzdWx0W2ldW21dfSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcz0xOyBzPG5Hcm91cHM7IHMrKykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJTRVRcIiwgdmFyOiAxLCBidWZmOiByZXN1bHRbcypjb25jdXJyZW5jeSArIGldW21dfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBcInFhcF9iYXRjaEFkZFwiLCBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IHJlc3VsdFtpXVttXS5sZW5ndGgvY3VydmUuRnIubjh9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMH1cbiAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiBtLCB2YXI6IDAsIGxlbjogcmVzdWx0W2ldW21dLmxlbmd0aH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZXMyLnB1c2goY3VydmUudG0ucXVldWVBY3Rpb24odGFzaykpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzMik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0QnVmZkEgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIGN1cnZlLkZyLm44KTtcbiAgICBjb25zdCBvdXRCdWZmQiA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogY3VydmUuRnIubjgpO1xuICAgIGNvbnN0IG91dEJ1ZmZDID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUgKiBjdXJ2ZS5Gci5uOCk7XG4gICAgbGV0IHA9MDtcbiAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dEJ1ZmZBLnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICBvdXRCdWZmQi5zZXQocmVzdWx0W2ldWzFdLCBwKTtcbiAgICAgICAgb3V0QnVmZkMuc2V0KHJlc3VsdFtpXVsyXSwgcCk7XG4gICAgICAgIHAgKz0gcmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtvdXRCdWZmQSwgb3V0QnVmZkIsIG91dEJ1ZmZDXTtcblxuICAgIGZ1bmN0aW9uIGdldEN1dFBvaW50KHYpIHtcbiAgICAgICAgbGV0IG0gPSAwO1xuICAgICAgICBsZXQgbiA9IGdldFVpbnQzMigwKTtcbiAgICAgICAgd2hpbGUgKG0gPCBuKSB7XG4gICAgICAgICAgICB2YXIgayA9IE1hdGguZmxvb3IoKG4gKyBtKSAvIDIpO1xuICAgICAgICAgICAgY29uc3QgdmEgPSBnZXRVaW50MzIoNCArIGsqc0NvZWYgKyA0KTtcbiAgICAgICAgICAgIGlmICh2YSA+IHYpIHtcbiAgICAgICAgICAgICAgICBuID0gayAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhIDwgdikge1xuICAgICAgICAgICAgICAgIG0gPSBrICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IGs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDQgKyBtKnNDb2VmO1xuICAgIH1cbn1cbiovXG5cbmFzeW5jIGZ1bmN0aW9uIGpvaW5BQkMoY3VydmUsIHprZXksIGEsIGIsIGMsIGxvZ2dlcikge1xuICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMSA8PCAyMjtcblxuICAgIGNvbnN0IG44ID0gY3VydmUuRnIubjg7XG4gICAgY29uc3QgbkVsZW1lbnRzID0gTWF0aC5mbG9vcihhLmJ5dGVMZW5ndGggLyBjdXJ2ZS5Gci5uOCk7XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPG5FbGVtZW50czsgaSArPSBNQVhfQ0hVTktfU0laRSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEpvaW5BQkM6ICR7aX0vJHtuRWxlbWVudHN9YCk7XG4gICAgICAgIGNvbnN0IG49IE1hdGgubWluKG5FbGVtZW50cyAtIGksIE1BWF9DSFVOS19TSVpFKTtcblxuICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgY29uc3QgYUNodW5rID0gYS5zbGljZShpKm44LCAoaSArIG4pKm44ICk7XG4gICAgICAgIGNvbnN0IGJDaHVuayA9IGIuc2xpY2UoaSpuOCwgKGkgKyBuKSpuOCApO1xuICAgICAgICBjb25zdCBjQ2h1bmsgPSBjLnNsaWNlKGkqbjgsIChpICsgbikqbjggKTtcblxuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGFDaHVua30pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGJDaHVua30pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDIsIGJ1ZmY6IGNDaHVua30pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDMsIGxlbjogbipuOH0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJxYXBfam9pbkFCQ1wiLCBwYXJhbXM6W1xuICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgXX0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeVwiLCBwYXJhbXM6W1xuICAgICAgICAgICAge3ZhcjogM30sXG4gICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgIF19KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAzLCBsZW46IG4qbjh9KTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgbGV0IG91dEJ1ZmY7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgb3V0QnVmZiA9IG5ldyBCaWdCdWZmZXIoYS5ieXRlTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRCdWZmID0gbmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgcD0wO1xuICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3V0QnVmZi5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgcCArPSByZXN1bHRbaV1bMF0uYnl0ZUxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0QnVmZjtcbn1cblxuIiwiLypcblxuQ29weXJpZ2h0IDIwMjAgMEtJTVMgYXNzb2NpYXRpb24uXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxhdEFycmF5KGEpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZmlsbEFycmF5KHJlcywgYSk7XG4gICAgcmV0dXJuIHJlcztcblxuICAgIGZ1bmN0aW9uIGZpbGxBcnJheShyZXMsIGEpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZmlsbEFycmF5KHJlcywgYVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaChhKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZudkhhc2goc3RyKSB7XG4gICAgY29uc3QgdWludDY0X21heCA9IEJpZ0ludCgyKSAqKiBCaWdJbnQoNjQpO1xuICAgIGxldCBoYXNoID0gQmlnSW50KFwiMHhDQkYyOUNFNDg0MjIyMzI1XCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCBePSBCaWdJbnQoc3RyW2ldLmNoYXJDb2RlQXQoKSk7XG4gICAgaGFzaCAqPSBCaWdJbnQoMHgxMDAwMDAwMDFCMyk7XG4gICAgaGFzaCAlPSB1aW50NjRfbWF4O1xuICAgIH1cbiAgICBsZXQgc2hhc2ggPSBoYXNoLnRvU3RyaW5nKDE2KTtcbiAgICBsZXQgbiA9IDE2IC0gc2hhc2gubGVuZ3RoO1xuICAgIHNoYXNoID0gJzAnLnJlcGVhdChuKS5jb25jYXQoc2hhc2gpO1xuICAgIHJldHVybiBzaGFzaDtcbn1cblxuLy8gTm90ZSB0aGF0IHRoaXMgcGFkcyB6ZXJvc1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkzMihzLHNpemUpIHtcbiAgICBjb25zdCByZXMgPSBbXTsgLy9uZXcgVWludDMyQXJyYXkoc2l6ZSk7IC8vaGFzIG5vIHVuc2hpZnRcbiAgICBsZXQgcmVtID0gQmlnSW50KHMpO1xuICAgIGNvbnN0IHJhZGl4ID0gQmlnSW50KDB4MTAwMDAwMDAwKTtcbiAgICB3aGlsZSAocmVtKSB7XG4gICAgICAgIHJlcy51bnNoaWZ0KCBOdW1iZXIocmVtICUgcmFkaXgpKTtcbiAgICAgICAgcmVtID0gcmVtIC8gcmFkaXg7XG4gICAgfVxuICAgIGlmIChzaXplKSB7XG4gICAgdmFyIGkgPSBzaXplIC0gcmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoaT4wKSB7XG4gICAgICAgIHJlcy51bnNoaWZ0KDApO1xuICAgICAgICBpLS07XG4gICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuIiwiLyogZ2xvYmFscyBXZWJBc3NlbWJseSAqL1xuLypcblxuQ29weXJpZ2h0IDIwMjAgMEtJTVMgYXNzb2NpYXRpb24uXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4qL1xuXG5pbXBvcnQgeyBmbGF0QXJyYXksIGZudkhhc2gsIHRvQXJyYXkzMiB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIEYxRmllbGQgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkZXIoY29kZSwgb3B0aW9ucykge1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBsZXQgbWVtb3J5U2l6ZSA9IDMyNzY3O1xuICAgIGxldCBtZW1vcnk7XG4gICAgbGV0IG1lbW9yeUFsbG9jYXRlZCA9IGZhbHNlO1xuICAgIHdoaWxlICghbWVtb3J5QWxsb2NhdGVkKXtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDptZW1vcnlTaXplfSk7XG4gICAgICAgICAgICBtZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuICAgICAgICB9IGNhdGNoKGVycil7XG4gICAgICAgICAgICBpZihtZW1vcnlTaXplID09PSAxKXtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJDb3VsZCBub3QgYWxsb2NhdGUgXCIgKyBtZW1vcnlTaXplICogMTAyNCAqIDY0ICsgXCIgYnl0ZXMuIFRoaXMgbWF5IGNhdXNlIHNldmVyZSBpbnN0YWJpbGl0eS4gVHJ5aW5nIHdpdGggXCIgKyBtZW1vcnlTaXplICogMTAyNCAqIDY0IC8gMiArIFwiIGJ5dGVzXCIpO1xuICAgICAgICAgICAgbWVtb3J5U2l6ZSA9IE1hdGguZmxvb3IobWVtb3J5U2l6ZS8yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdhc21Nb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGNvZGUpO1xuXG4gICAgbGV0IHdjO1xuXG4gICAgbGV0IGVyclN0ciA9IFwiXCI7XG4gICAgbGV0IG1zZ1N0ciA9IFwiXCI7XG5cbiAgICAvLyBPbmx5IGNpcmNvbSAyIGltcGxlbWVudHMgdmVyc2lvbiBsb29rdXAgdGhyb3VnaCBleHBvcnRzIGluIHRoZSBXQVNNXG4gICAgLy8gV2UgZGVmYXVsdCB0byBgMWAgYW5kIHVwZGF0ZSBpZiB3ZSBzZWUgdGhlIGBnZXRWZXJzaW9uYCBleHBvcnQgKG1ham9yIHZlcnNpb24pXG4gICAgLy8gVGhlc2UgYXJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGluc3RhbmNlIGlzIGluc3RhbnRpYXRlZCwgYXNzdW1pbmcgdGhlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlXG4gICAgbGV0IG1ham9yVmVyc2lvbiA9IDE7XG4gICAgLy8gQWZ0ZXIgQ2lyY29tIDIuMC43LCBCbGFpbmUgYWRkZWQgZXhwb3J0ZWQgZnVuY3Rpb25zIGZvciBnZXR0aW5nIG1pbm9yIGFuZCBwYXRjaCB2ZXJzaW9uc1xuICAgIGxldCBtaW5vclZlcnNpb24gPSAwO1xuICAgIC8vIElmIHdlIGNhbid0IGxvb2t1cCB0aGUgcGF0Y2ggdmVyc2lvbiwgYXNzdW1lIHRoZSBsb3dlc3RcbiAgICBsZXQgcGF0Y2hWZXJzaW9uID0gMDtcblxuICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUod2FzbU1vZHVsZSwge1xuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIFwibWVtb3J5XCI6IG1lbW9yeVxuICAgICAgICB9LFxuICAgICAgICBydW50aW1lOiB7XG4gICAgICAgICAgICBleGNlcHRpb25IYW5kbGVyOiBmdW5jdGlvbihjb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVycjtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiU2lnbmFsIG5vdCBmb3VuZC4gXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gXCJUb28gbWFueSBzaWduYWxzIHNldC4gXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gXCJTaWduYWwgYWxyZWFkeSBzZXQuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiQXNzZXJ0IEZhaWxlZC4gXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gXCJOb3QgZW5vdWdoIG1lbW9yeS4gXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gXCJJbnB1dCBzaWduYWwgYXJyYXkgYWNjZXNzIGV4Y2VlZHMgdGhlIHNpemUuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiVW5rbm93biBlcnJvci4gXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFUlJPUjogXCIsIGNvZGUsIGVyclN0cik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyciArIGVyclN0cik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQSBuZXcgd2F5IG9mIGxvZ2dpbmcgbWVzc2FnZXMgd2FzIGFkZGVkIGluIENpcmNvbSAyLjAuNyB0aGF0IHJlcXVpcmVzIDIgbmV3IGltcG9ydHNcbiAgICAgICAgICAgIC8vIGBwcmludEVycm9yTWVzc2FnZWAgYW5kIGB3cml0ZUJ1ZmZlck1lc3NhZ2VgLlxuICAgICAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGVyclN0ciArPSBnZXRNZXNzYWdlKCkgKyBcIlxcblwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdyaXRlQnVmZmVyTWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZ2V0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIC8vIEFueSBjYWxscyB0byBgbG9nKClgIHdpbGwgYWx3YXlzIGVuZCB3aXRoIGEgYFxcbmAsIHNvIHRoYXQncyB3aGVuIHdlIHByaW50IGFuZCByZXNldFxuICAgICAgICAgICAgICAgIGlmIChtc2cgPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobXNnU3RyKTtcbiAgICAgICAgICAgICAgICAgICAgbXNnU3RyID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBidWZmZXJlZCBvdGhlciBjb250ZW50LCBwdXQgYSBzcGFjZSBpbiBiZXR3ZWVuIHRoZSBpdGVtc1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnU3RyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2dTdHIgKz0gXCIgXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIGFwcGVuZCB0aGUgbWVzc2FnZSB0byB0aGUgbWVzc2FnZSB3ZSBhcmUgY3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgbXNnU3RyICs9IG1zZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd1NoYXJlZFJXTWVtb3J5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRfcndfbWVtb3J5X3NpemUgPSBpbnN0YW5jZS5leHBvcnRzLmdldEZpZWxkTnVtTGVuMzIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoc2hhcmVkX3J3X21lbW9yeV9zaXplKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2hhcmVkX3J3X21lbW9yeV9zaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyW3NoYXJlZF9yd19tZW1vcnlfc2l6ZS0xLWpdID0gaW5zdGFuY2UuZXhwb3J0cy5yZWFkU2hhcmVkUldNZW1vcnkoaik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSW4gY2lyY29tIDIuMC43LCB0aGV5IGNoYW5nZWQgdGhlIGxvZygpIGZ1bmN0aW9uIHRvIGFsbG93IHN0cmluZ3MgYW5kIGNoYW5nZWQgdGhlXG4gICAgICAgICAgICAgICAgLy8gb3V0cHV0IEFQSS4gVGhpcyBzbW9vdGhlcyBvdmVyIHRoZSBicmVha2luZyBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgaWYgKG1ham9yVmVyc2lvbiA+PSAyICYmIChtaW5vclZlcnNpb24gPj0gMSB8fCBwYXRjaFZlcnNpb24gPj0gNykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgYnVmZmVyZWQgb3RoZXIgY29udGVudCwgcHV0IGEgc3BhY2UgaW4gYmV0d2VlbiB0aGUgaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZ1N0ciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnU3RyICs9IFwiIFwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBhcHBlbmQgdGhlIHZhbHVlIHRvIHRoZSBtZXNzYWdlIHdlIGFyZSBjcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSAoU2NhbGFyLmZyb21BcnJheShhcnIsIDB4MTAwMDAwMDAwKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbXNnU3RyICs9IG1zZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhTY2FsYXIuZnJvbUFycmF5KGFyciwgMHgxMDAwMDAwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGNvZGUsIHBzdHIsIGEsYixjLGQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyU3RyO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyPXAyc3RyKHBzdHIpICsgXCIgXCIgKyB3Yy5nZXRGcihiKS50b1N0cmluZygpICsgXCIgIT0gXCIgKyB3Yy5nZXRGcihjKS50b1N0cmluZygpICsgXCIgXCIgK3Ayc3RyKGQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0cj1wMnN0cihwc3RyKSArIFwiIFwiICsgd2MuZ2V0RnIoYikudG9TdHJpbmcoKSArIFwiIFwiICtwMnN0cihjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjb2RlID09IDUpJiYob3B0aW9ucy5zeW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0cj1wMnN0cihwc3RyKSsgXCIgXCIgKyBvcHRpb25zLnN5bS5sYWJlbElkeDJOYW1lW2NdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0cj1wMnN0cihwc3RyKSsgXCIgXCIgKyBhICsgXCIgXCIgKyBiICsgXCIgXCIgKyBjICsgXCIgXCIgKyBkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SOiBcIiwgY29kZSwgZXJyU3RyKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyU3RyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2c6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh3Yy5nZXRGcihhKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dHZXRTaWduYWw6IGZ1bmN0aW9uKHNpZ25hbCwgcFZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvZ0dldFNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ0dldFNpZ25hbChzaWduYWwsIHdjLmdldEZyKHBWYWwpICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvZ1NldFNpZ25hbDogZnVuY3Rpb24oc2lnbmFsLCBwVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9nU2V0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nU2V0U2lnbmFsKHNpZ25hbCwgd2MuZ2V0RnIocFZhbCkgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nU3RhcnRDb21wb25lbnQ6IGZ1bmN0aW9uKGNJZHgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2dTdGFydENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ1N0YXJ0Q29tcG9uZW50KGNJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dGaW5pc2hDb21wb25lbnQ6IGZ1bmN0aW9uKGNJZHgpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2dGaW5pc2hDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dGaW5pc2hDb21wb25lbnQoY0lkeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmV4cG9ydHMuZ2V0VmVyc2lvbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1ham9yVmVyc2lvbiA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0VmVyc2lvbigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmV4cG9ydHMuZ2V0TWlub3JWZXJzaW9uID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbWlub3JWZXJzaW9uID0gaW5zdGFuY2UuZXhwb3J0cy5nZXRNaW5vclZlcnNpb24oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5leHBvcnRzLmdldFBhdGNoVmVyc2lvbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBhdGNoVmVyc2lvbiA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0UGF0Y2hWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2FuaXR5Q2hlY2sgPVxuICAgICAgICBvcHRpb25zICYmXG4gICAgICAgIChcbiAgICAgICAgICAgIG9wdGlvbnMuc2FuaXR5Q2hlY2sgfHxcbiAgICAgICAgICAgIG9wdGlvbnMubG9nR2V0U2lnbmFsIHx8XG4gICAgICAgICAgICBvcHRpb25zLmxvZ1NldFNpZ25hbCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5sb2dTdGFydENvbXBvbmVudCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5sb2dGaW5pc2hDb21wb25lbnRcbiAgICAgICAgKTtcblxuICAgIC8vIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIG1ham9yIHZlcnNpb24gMiBpbiBjYXNlIHRoZXJlJ3MgYSBjaXJjb20gdjMgaW4gdGhlIGZ1dHVyZVxuICAgIGlmIChtYWpvclZlcnNpb24gPT09IDIpIHtcbiAgICAgICAgd2MgPSBuZXcgV2l0bmVzc0NhbGN1bGF0b3JDaXJjb20yKGluc3RhbmNlLCBzYW5pdHlDaGVjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogTWF5YmUgd2Ugd2FudCB0byBjaGVjayBmb3IgdGhlIGV4cGxpY2l0IHZlcnNpb24gMSBiZWZvcmUgY2hvb3NpbmcgdGhpcz9cbiAgICAgICAgd2MgPSBuZXcgV2l0bmVzc0NhbGN1bGF0b3JDaXJjb20xKG1lbW9yeSwgaW5zdGFuY2UsIHNhbml0eUNoZWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIHdjO1xuXG4gICAgZnVuY3Rpb24gZ2V0TWVzc2FnZSgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICB2YXIgYyA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0TWVzc2FnZUNoYXIoKTtcbiAgICAgICAgd2hpbGUgKCBjICE9IDAgKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICBjID0gaW5zdGFuY2UuZXhwb3J0cy5nZXRNZXNzYWdlQ2hhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHAyc3RyKHApIHtcbiAgICAgICAgY29uc3QgaTggPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTtcblxuICAgICAgICBjb25zdCBieXRlcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaThbcCtpXT4wOyBpKyspICBieXRlcy5wdXNoKGk4W3AraV0pO1xuXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTtcbiAgICB9XG59O1xuXG5jbGFzcyBXaXRuZXNzQ2FsY3VsYXRvckNpcmNvbTEge1xuICAgIGNvbnN0cnVjdG9yKG1lbW9yeSwgaW5zdGFuY2UsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIHRoaXMubWVtb3J5ID0gbWVtb3J5O1xuICAgICAgICB0aGlzLmkzMiA9IG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXG4gICAgICAgIHRoaXMubjMyID0gKHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRGckxlbigpID4+IDIpIC0gMjtcbiAgICAgICAgY29uc3QgcFJhd1ByaW1lID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldFBSYXdQcmltZSgpO1xuXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0aGlzLm4zMik7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLm4zMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbdGhpcy5uMzItMS1pXSA9IHRoaXMuaTMyWyhwUmF3UHJpbWUgPj4gMikgKyBpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJpbWUgPSBTY2FsYXIuZnJvbUFycmF5KGFyciwgMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIHRoaXMuRnIgPSBuZXcgRjFGaWVsZCh0aGlzLnByaW1lKTtcblxuICAgICAgICB0aGlzLm1hc2szMiA9IFNjYWxhci5mcm9tU3RyaW5nKFwiRkZGRkZGRkZcIiwgMTYpO1xuICAgICAgICB0aGlzLk5WYXJzID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldE5WYXJzKCk7XG4gICAgICAgIHRoaXMubjY0ID0gTWF0aC5mbG9vcigodGhpcy5Gci5iaXRMZW5ndGggLSAxKSAvIDY0KSsxO1xuICAgICAgICB0aGlzLlIgPSB0aGlzLkZyLmUoIFNjYWxhci5zaGlmdExlZnQoMSAsIHRoaXMubjY0KjY0KSk7XG4gICAgICAgIHRoaXMuUkludiA9IHRoaXMuRnIuaW52KHRoaXMuUik7XG4gICAgICAgIHRoaXMuc2FuaXR5Q2hlY2sgPSBzYW5pdHlDaGVjaztcbiAgICB9XG5cbiAgICBjaXJjb21fdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgYXN5bmMgX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLmluaXQoKHRoaXMuc2FuaXR5Q2hlY2sgfHwgc2FuaXR5Q2hlY2spID8gMSA6IDApO1xuICAgICAgICBjb25zdCBwU2lnT2Zmc2V0ID0gdGhpcy5hbGxvY0ludCgpO1xuICAgICAgICBjb25zdCBwRnIgPSB0aGlzLmFsbG9jRnIoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGlucHV0KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKCAoaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaCA9IGZudkhhc2goayk7XG4gICAgICAgICAgICBjb25zdCBoTVNCID0gcGFyc2VJbnQoaC5zbGljZSgwLDgpLCAxNik7XG4gICAgICAgICAgICBjb25zdCBoTFNCID0gcGFyc2VJbnQoaC5zbGljZSg4LDE2KSwgMTYpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0U2lnbmFsT2Zmc2V0MzIocFNpZ09mZnNldCwgMCwgaE1TQiwgaExTQik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpZ25hbCAke2t9IGlzIG5vdCBhbiBpbnB1dCBvZiB0aGUgY2lyY3VpdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNpZ09mZnNldCA9IHRoaXMuZ2V0SW50KHBTaWdPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgZkFyciA9IGZsYXRBcnJheShpbnB1dFtrXSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZkFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RnIocEZyLCBmQXJyW2ldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuc2V0U2lnbmFsKDAsIDAsIHNpZ09mZnNldCArIGksIHBGcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IG9sZDAgPSBzZWxmLmkzMlswXTtcbiAgICAgICAgY29uc3QgdyA9IFtdO1xuXG4gICAgICAgIGF3YWl0IHNlbGYuX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxzZWxmLk5WYXJzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBXaXRuZXNzID0gc2VsZi5pbnN0YW5jZS5leHBvcnRzLmdldFBXaXRuZXNzKGkpO1xuICAgICAgICAgICAgdy5wdXNoKHNlbGYuZ2V0RnIocFdpdG5lc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuaTMyWzBdID0gb2xkMDtcbiAgICAgICAgcmV0dXJuIHc7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FsY3VsYXRlQmluV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgY29uc3Qgb2xkMCA9IHNlbGYuaTMyWzBdO1xuXG4gICAgICAgIGF3YWl0IHNlbGYuX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spO1xuXG4gICAgICAgIGNvbnN0IHBXaXRuZXNzQnVmZmVyID0gc2VsZi5pbnN0YW5jZS5leHBvcnRzLmdldFdpdG5lc3NCdWZmZXIoKTtcblxuICAgICAgICBzZWxmLmkzMlswXSA9IG9sZDA7XG5cbiAgICAgICAgY29uc3QgYnVmZiA9IHNlbGYubWVtb3J5LmJ1ZmZlci5zbGljZShwV2l0bmVzc0J1ZmZlciwgcFdpdG5lc3NCdWZmZXIgKyAoc2VsZi5OVmFycyAqIHNlbGYubjY0ICogOCkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZik7XG4gICAgfVxuXG4gICAgYWxsb2NJbnQoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLmkzMlswXTtcbiAgICAgICAgdGhpcy5pMzJbMF0gPSBwKzg7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGFsbG9jRnIoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLmkzMlswXTtcbiAgICAgICAgdGhpcy5pMzJbMF0gPSBwK3RoaXMubjMyKjQgKyA4O1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBnZXRJbnQocCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pMzJbcD4+Ml07XG4gICAgfVxuXG4gICAgc2V0SW50KHAsIHYpIHtcbiAgICAgICAgdGhpcy5pMzJbcD4+Ml0gPSB2O1xuICAgIH1cblxuICAgIGdldEZyKHApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGlkeCA9IChwPj4yKTtcblxuICAgICAgICBpZiAoc2VsZi5pMzJbaWR4ICsgMV0gJiAweDgwMDAwMDAwKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoc2VsZi5uMzIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHNlbGYubjMyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJbc2VsZi5uMzItMS1pXSA9IHNlbGYuaTMyW2lkeCsyK2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gc2VsZi5Gci5lKFNjYWxhci5mcm9tQXJyYXkoYXJyLCAweDEwMDAwMDAwMCkpO1xuICAgICAgICAgICAgaWYgKHNlbGYuaTMyW2lkeCArIDFdICYgMHg0MDAwMDAwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcm9tTW9udGdvbWVyeShyZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pMzJbaWR4XSAmIDB4ODAwMDAwMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5Gci5lKCBzZWxmLmkzMltpZHhdIC0gMHgxMDAwMDAwMDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5Gci5lKHNlbGYuaTMyW2lkeF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZnJvbU1vbnRnb21lcnkobikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuRnIubXVsKHNlbGYuUkludiwgbik7XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgc2V0RnIocCwgdikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICB2ID0gc2VsZi5Gci5lKHYpO1xuXG4gICAgICAgIGNvbnN0IG1pblNob3J0ID0gc2VsZi5Gci5uZWcoc2VsZi5Gci5lKFwiODAwMDAwMDBcIiwgMTYpKTtcbiAgICAgICAgY29uc3QgbWF4U2hvcnQgPSBzZWxmLkZyLmUoXCI3RkZGRkZGRlwiLCAxNik7XG5cbiAgICAgICAgaWYgKCAgKHNlbGYuRnIuZ2VxKHYsIG1pblNob3J0KSlcbiAgICAgICAgICAgICYmKHNlbGYuRnIubGVxKHYsIG1heFNob3J0KSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBhO1xuICAgICAgICAgICAgaWYgKHNlbGYuRnIuZ2VxKHYsIHNlbGYuRnIuemVybykpIHtcbiAgICAgICAgICAgICAgICBhID0gU2NhbGFyLnRvTnVtYmVyKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhID0gU2NhbGFyLnRvTnVtYmVyKCBzZWxmLkZyLnN1Yih2LCBtaW5TaG9ydCkpO1xuICAgICAgICAgICAgICAgIGEgPSBhIC0gMHg4MDAwMDAwMDtcbiAgICAgICAgICAgICAgICBhID0gMHgxMDAwMDAwMDAgKyBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5pMzJbKHAgPj4gMildID0gYTtcbiAgICAgICAgICAgIHNlbGYuaTMyWyhwID4+IDIpICsgMV0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5pMzJbKHAgPj4gMildID0gMDtcbiAgICAgICAgc2VsZi5pMzJbKHAgPj4gMikgKyAxXSA9IDB4ODAwMDAwMDA7XG4gICAgICAgIGNvbnN0IGFyciA9IFNjYWxhci50b0FycmF5KHYsIDB4MTAwMDAwMDAwKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHNlbGYubjMyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGFyci5sZW5ndGgtMS1pO1xuXG4gICAgICAgICAgICBpZiAoIGlkeCA+PTApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmkzMlsocCA+PiAyKSArIDIgKyBpXSA9IGFycltpZHhdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmkzMlsocCA+PiAyKSArIDIgKyBpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFdpdG5lc3NDYWxjdWxhdG9yQ2lyY29tMiB7XG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2UsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICB0aGlzLnZlcnNpb24gPSB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0VmVyc2lvbigpO1xuICAgICAgICB0aGlzLm4zMiA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRGaWVsZE51bUxlbjMyKCk7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldFJhd1ByaW1lKCk7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0aGlzLm4zMik7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLm4zMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbdGhpcy5uMzItMS1pXSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5yZWFkU2hhcmVkUldNZW1vcnkoaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmltZSA9IFNjYWxhci5mcm9tQXJyYXkoYXJyLCAweDEwMDAwMDAwMCk7XG5cbiAgICAgICAgdGhpcy53aXRuZXNzU2l6ZSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRXaXRuZXNzU2l6ZSgpO1xuXG4gICAgICAgIHRoaXMuc2FuaXR5Q2hlY2sgPSBzYW5pdHlDaGVjaztcbiAgICB9XG5cbiAgICBjaXJjb21fdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spIHtcbiAgICAgICAgLy9pbnB1dCBpcyBhc3N1bWVkIHRvIGJlIGEgbWFwIGZyb20gc2lnbmFscyB0byBhcnJheXMgb2YgYmlnaW50c1xuICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuaW5pdCgodGhpcy5zYW5pdHlDaGVjayB8fCBzYW5pdHlDaGVjaykgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnB1dCk7XG4gICAgICAgIHZhciBpbnB1dF9jb3VudGVyID0gMDtcbiAgICAgICAga2V5cy5mb3JFYWNoKCAoaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaCA9IGZudkhhc2goayk7XG4gICAgICAgICAgICBjb25zdCBoTVNCID0gcGFyc2VJbnQoaC5zbGljZSgwLDgpLCAxNik7XG4gICAgICAgICAgICBjb25zdCBoTFNCID0gcGFyc2VJbnQoaC5zbGljZSg4LDE2KSwgMTYpO1xuICAgICAgICAgICAgY29uc3QgZkFyciA9IGZsYXRBcnJheShpbnB1dFtrXSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZkFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhcnJGciA9IHRvQXJyYXkzMihmQXJyW2ldLHRoaXMubjMyKVxuICAgICAgICBmb3IgKGxldCBqPTA7IGo8dGhpcy5uMzI7IGorKykge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLndyaXRlU2hhcmVkUldNZW1vcnkoaixhcnJGclt0aGlzLm4zMi0xLWpdKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuc2V0SW5wdXRTaWduYWwoaE1TQiwgaExTQixpKTtcbiAgICAgICAgICAgIGlucHV0X2NvdW50ZXIrKztcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWZ0ZXIgYWRkaW5nIHNpZ25hbCAke2l9IG9mICR7a31gKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5wdXRfY291bnRlciA8IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRJbnB1dFNpemUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYWxsIGlucHV0cyBoYXZlIGJlZW4gc2V0LiBPbmx5ICR7aW5wdXRfY291bnRlcn0gb3V0IG9mICR7dGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldElucHV0U2l6ZSgpfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spIHtcbiAgICAgICAgY29uc3QgdyA9IFtdO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLndpdG5lc3NTaXplOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRXaXRuZXNzKGkpO1xuICAgICAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5uMzIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMubjMyOyBqKyspIHtcbiAgICAgICAgICAgIGFyclt0aGlzLm4zMi0xLWpdID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLnJlYWRTaGFyZWRSV01lbW9yeShqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHcucHVzaChTY2FsYXIuZnJvbUFycmF5KGFyciwgMHgxMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3O1xuICAgIH1cblxuICAgIGFzeW5jIGNhbGN1bGF0ZVdUTlNCaW4oaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLndpdG5lc3NTaXplKnRoaXMubjMyK3RoaXMubjMyKzExKTtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyAgVWludDhBcnJheSggYnVmZjMyLmJ1ZmZlcik7XG4gICAgICAgIGF3YWl0IHRoaXMuX2RvQ2FsY3VsYXRlV2l0bmVzcyhpbnB1dCwgc2FuaXR5Q2hlY2spO1xuXG4gICAgICAgIC8vXCJ3dG5zXCJcbiAgICAgICAgYnVmZlswXSA9IFwid1wiLmNoYXJDb2RlQXQoMClcbiAgICAgICAgYnVmZlsxXSA9IFwidFwiLmNoYXJDb2RlQXQoMClcbiAgICAgICAgYnVmZlsyXSA9IFwiblwiLmNoYXJDb2RlQXQoMClcbiAgICAgICAgYnVmZlszXSA9IFwic1wiLmNoYXJDb2RlQXQoMClcblxuICAgICAgICAvL3ZlcnNpb24gMlxuICAgICAgICBidWZmMzJbMV0gPSAyO1xuXG4gICAgICAgIC8vbnVtYmVyIG9mIHNlY3Rpb25zOiAyXG4gICAgICAgIGJ1ZmYzMlsyXSA9IDI7XG5cbiAgICAgICAgLy9pZCBzZWN0aW9uIDFcbiAgICAgICAgYnVmZjMyWzNdID0gMTtcblxuICAgICAgICBjb25zdCBuOCA9IHRoaXMubjMyKjQ7XG4gICAgICAgIC8vaWQgc2VjdGlvbiAxIGxlbmd0aCBpbiA2NGJ5dGVzXG4gICAgICAgIGNvbnN0IGlkU2VjdGlvbjFsZW5ndGggPSA4ICsgbjg7XG4gICAgICAgIGNvbnN0IGlkU2VjdGlvbjFsZW5ndGhIZXggPSBpZFNlY3Rpb24xbGVuZ3RoLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgIGJ1ZmYzMls0XSA9IHBhcnNlSW50KGlkU2VjdGlvbjFsZW5ndGhIZXguc2xpY2UoMCw4KSwgMTYpO1xuICAgICAgICAgICAgYnVmZjMyWzVdID0gcGFyc2VJbnQoaWRTZWN0aW9uMWxlbmd0aEhleC5zbGljZSg4LDE2KSwgMTYpO1xuXG4gICAgICAgIC8vdGhpcy5uMzJcbiAgICAgICAgYnVmZjMyWzZdID0gbjg7XG5cbiAgICAgICAgLy9wcmltZSBudW1iZXJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldFJhd1ByaW1lKCk7XG5cbiAgICAgICAgdmFyIHBvcyA9IDc7XG4gICAgICAgIGZvciAobGV0IGo9MDsgajx0aGlzLm4zMjsgaisrKSB7XG4gICAgICAgICAgICBidWZmMzJbcG9zK2pdID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLnJlYWRTaGFyZWRSV01lbW9yeShqKTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gdGhpcy5uMzI7XG5cbiAgICAgICAgLy8gd2l0bmVzcyBzaXplXG4gICAgICAgIGJ1ZmYzMltwb3NdID0gdGhpcy53aXRuZXNzU2l6ZTtcbiAgICAgICAgcG9zKys7XG5cbiAgICAgICAgLy9pZCBzZWN0aW9uIDJcbiAgICAgICAgYnVmZjMyW3Bvc10gPSAyO1xuICAgICAgICBwb3MrKztcblxuICAgICAgICAvLyBzZWN0aW9uIDIgbGVuZ3RoXG4gICAgICAgIGNvbnN0IGlkU2VjdGlvbjJsZW5ndGggPSBuOCp0aGlzLndpdG5lc3NTaXplO1xuICAgICAgICBjb25zdCBpZFNlY3Rpb24ybGVuZ3RoSGV4ID0gaWRTZWN0aW9uMmxlbmd0aC50b1N0cmluZygxNik7XG4gICAgICAgIGJ1ZmYzMltwb3NdID0gcGFyc2VJbnQoaWRTZWN0aW9uMmxlbmd0aEhleC5zbGljZSgwLDgpLCAxNik7XG4gICAgICAgIGJ1ZmYzMltwb3MrMV0gPSBwYXJzZUludChpZFNlY3Rpb24ybGVuZ3RoSGV4LnNsaWNlKDgsMTYpLCAxNik7XG5cbiAgICAgICAgcG9zICs9IDI7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLndpdG5lc3NTaXplOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRXaXRuZXNzKGkpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMubjMyOyBqKyspIHtcbiAgICAgICAgICAgICAgICBidWZmMzJbcG9zK2pdID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLnJlYWRTaGFyZWRSV01lbW9yeShqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvcyArPSB0aGlzLm4zMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgeyBXaXRuZXNzQ2FsY3VsYXRvckJ1aWxkZXIgfSBmcm9tIFwiY2lyY29tX3J1bnRpbWVcIjtcbmltcG9ydCAqIGFzIHd0bnNVdGlscyBmcm9tIFwiLi93dG5zX3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3QgeyB1bnN0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHd0bnNDYWxjdWxhdGUoX2lucHV0LCB3YXNtRmlsZU5hbWUsIHd0bnNGaWxlTmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0ID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9pbnB1dCk7XG5cbiAgICBjb25zdCBmZFdhc20gPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3Rpbmcod2FzbUZpbGVOYW1lKTtcbiAgICBjb25zdCB3YXNtID0gYXdhaXQgZmRXYXNtLnJlYWQoZmRXYXNtLnRvdGFsU2l6ZSk7XG4gICAgYXdhaXQgZmRXYXNtLmNsb3NlKCk7XG5cbiAgICBjb25zdCB3YyA9IGF3YWl0IFdpdG5lc3NDYWxjdWxhdG9yQnVpbGRlcih3YXNtKTtcbiAgICBpZiAod2MuY2lyY29tX3ZlcnNpb24oKSA9PSAxKSB7XG4gICAgICAgIGNvbnN0IHcgPSBhd2FpdCB3Yy5jYWxjdWxhdGVCaW5XaXRuZXNzKGlucHV0KTtcblxuICAgICAgICBjb25zdCBmZFd0bnMgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZSh3dG5zRmlsZU5hbWUsIFwid3Ruc1wiLCAyLCAyKTtcblxuICAgICAgICBhd2FpdCB3dG5zVXRpbHMud3JpdGVCaW4oZmRXdG5zLCB3LCB3Yy5wcmltZSk7XG4gICAgICAgIGF3YWl0IGZkV3Rucy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZkV3RucyA9IGF3YWl0IGZhc3RGaWxlLmNyZWF0ZU92ZXJyaWRlKHd0bnNGaWxlTmFtZSk7XG5cbiAgICAgICAgY29uc3QgdyA9IGF3YWl0IHdjLmNhbGN1bGF0ZVdUTlNCaW4oaW5wdXQpO1xuXG4gICAgICAgIGF3YWl0IGZkV3Rucy53cml0ZSh3KTtcbiAgICAgICAgYXdhaXQgZmRXdG5zLmNsb3NlKCk7XG4gICAgfVxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IGdyb3RoMTZfcHJvdmUgZnJvbSBcIi4vZ3JvdGgxNl9wcm92ZS5qc1wiO1xuaW1wb3J0IHd0bnNfY2FsY3VsYXRlIGZyb20gXCIuL3d0bnNfY2FsY3VsYXRlLmpzXCI7XG5pbXBvcnQge3V0aWxzfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7dW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBncm90aDE2RnVsbFByb3ZlKF9pbnB1dCwgd2FzbUZpbGUsIHprZXlGaWxlTmFtZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgaW5wdXQgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX2lucHV0KTtcblxuICAgIGNvbnN0IHd0bnM9IHtcbiAgICAgICAgdHlwZTogXCJtZW1cIlxuICAgIH07XG4gICAgYXdhaXQgd3Ruc19jYWxjdWxhdGUoaW5wdXQsIHdhc21GaWxlLCB3dG5zKTtcbiAgICByZXR1cm4gYXdhaXQgZ3JvdGgxNl9wcm92ZSh6a2V5RmlsZU5hbWUsIHd0bnMsIGxvZ2dlcik7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBraW1zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHBhcGVyOiBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDE2LzI2MC5wZGYgKi9cbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIGN1cnZlcyBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZ3JvdGgxNlZlcmlmeShfdmtfdmVyaWZpZXIsIF9wdWJsaWNTaWduYWxzLCBfcHJvb2YsIGxvZ2dlcikge1xuLypcbiAgICBsZXQgY3B1YiA9IHZrX3ZlcmlmaWVyLklDWzBdO1xuICAgIGZvciAobGV0IHM9IDA7IHM8IHZrX3ZlcmlmaWVyLm5QdWJsaWM7IHMrKykge1xuICAgICAgICBjcHViICA9IEcxLmFkZCggY3B1YiwgRzEudGltZXNTY2FsYXIoIHZrX3ZlcmlmaWVyLklDW3MrMV0sIHB1YmxpY1NpZ25hbHNbc10pKTtcbiAgICB9XG4qL1xuXG4gICAgY29uc3QgdmtfdmVyaWZpZXIgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3ZrX3ZlcmlmaWVyKTtcbiAgICBjb25zdCBwcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuICAgIGNvbnN0IHB1YmxpY1NpZ25hbHMgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3B1YmxpY1NpZ25hbHMpO1xuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBjdXJ2ZXMuZ2V0Q3VydmVGcm9tTmFtZSh2a192ZXJpZmllci5jdXJ2ZSk7XG5cbiAgICBjb25zdCBJQzAgPSBjdXJ2ZS5HMS5mcm9tT2JqZWN0KHZrX3ZlcmlmaWVyLklDWzBdKTtcbiAgICBjb25zdCBJQyA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkcxLkYubjgqMiAqIHB1YmxpY1NpZ25hbHMubGVuZ3RoKTtcbiAgICBjb25zdCB3ID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRnIubjggKiBwdWJsaWNTaWduYWxzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8cHVibGljU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBidWZmUCA9IGN1cnZlLkcxLmZyb21PYmplY3QodmtfdmVyaWZpZXIuSUNbaSsxXSk7XG4gICAgICAgIElDLnNldChidWZmUCwgaSpjdXJ2ZS5HMS5GLm44KjIpO1xuICAgICAgICBTY2FsYXIudG9ScHJMRSh3LCBjdXJ2ZS5Gci5uOCppLCBwdWJsaWNTaWduYWxzW2ldLCBjdXJ2ZS5Gci5uOCk7XG4gICAgfVxuXG4gICAgbGV0IGNwdWIgPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShJQywgdyk7XG4gICAgY3B1YiA9IGN1cnZlLkcxLmFkZChjcHViLCBJQzApO1xuXG4gICAgY29uc3QgcGlfYSA9IGN1cnZlLkcxLmZyb21PYmplY3QocHJvb2YucGlfYSk7XG4gICAgY29uc3QgcGlfYiA9IGN1cnZlLkcyLmZyb21PYmplY3QocHJvb2YucGlfYik7XG4gICAgY29uc3QgcGlfYyA9IGN1cnZlLkcxLmZyb21PYmplY3QocHJvb2YucGlfYyk7XG5cbiAgICBjb25zdCB2a19nYW1tYV8yID0gY3VydmUuRzIuZnJvbU9iamVjdCh2a192ZXJpZmllci52a19nYW1tYV8yKTtcbiAgICBjb25zdCB2a19kZWx0YV8yID0gY3VydmUuRzIuZnJvbU9iamVjdCh2a192ZXJpZmllci52a19kZWx0YV8yKTtcbiAgICBjb25zdCB2a19hbHBoYV8xID0gY3VydmUuRzEuZnJvbU9iamVjdCh2a192ZXJpZmllci52a19hbHBoYV8xKTtcbiAgICBjb25zdCB2a19iZXRhXzIgPSBjdXJ2ZS5HMi5mcm9tT2JqZWN0KHZrX3ZlcmlmaWVyLnZrX2JldGFfMik7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS5wYWlyaW5nRXEoXG4gICAgICAgIGN1cnZlLkcxLm5lZyhwaV9hKSAsIHBpX2IsXG4gICAgICAgIGNwdWIgLCB2a19nYW1tYV8yLFxuICAgICAgICBwaV9jICwgdmtfZGVsdGFfMixcblxuICAgICAgICB2a19hbHBoYV8xLCB2a19iZXRhXzJcbiAgICApO1xuXG4gICAgaWYgKCEgcmVzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgcHJvb2ZcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIk9LIVwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5pbXBvcnQgeyAgdXRpbHMgfSAgIGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmNvbnN0IHsgdW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5mdW5jdGlvbiBwMjU2KG4pIHtcbiAgICBsZXQgbnN0ciA9IG4udG9TdHJpbmcoMTYpO1xuICAgIHdoaWxlIChuc3RyLmxlbmd0aCA8IDY0KSBuc3RyID0gXCIwXCIrbnN0cjtcbiAgICBuc3RyID0gYFwiMHgke25zdHJ9XCJgO1xuICAgIHJldHVybiBuc3RyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBncm90aDE2RXhwb3J0U29saWRpdHlDYWxsRGF0YShfcHJvb2YsIF9wdWIpIHtcbiAgICBjb25zdCBwcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuICAgIGNvbnN0IHB1YiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHViKTtcblxuICAgIGxldCBpbnB1dHMgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTxwdWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlucHV0cyAhPSBcIlwiKSBpbnB1dHMgPSBpbnB1dHMgKyBcIixcIjtcbiAgICAgICAgaW5wdXRzID0gaW5wdXRzICsgcDI1NihwdWJbaV0pO1xuICAgIH1cblxuICAgIGxldCBTO1xuICAgIFM9YFske3AyNTYocHJvb2YucGlfYVswXSl9LCAke3AyNTYocHJvb2YucGlfYVsxXSl9XSxgICtcbiAgICAgICAgYFtbJHtwMjU2KHByb29mLnBpX2JbMF1bMV0pfSwgJHtwMjU2KHByb29mLnBpX2JbMF1bMF0pfV0sWyR7cDI1Nihwcm9vZi5waV9iWzFdWzFdKX0sICR7cDI1Nihwcm9vZi5waV9iWzFdWzBdKX1dXSxgICtcbiAgICAgICAgYFske3AyNTYocHJvb2YucGlfY1swXSl9LCAke3AyNTYocHJvb2YucGlfY1sxXSl9XSxgICtcbiAgICAgICAgYFske2lucHV0c31dYDtcblxuICAgIHJldHVybiBTO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHtkZWZhdWx0IGFzIGZ1bGxQcm92ZX0gZnJvbSBcIi4vZ3JvdGgxNl9mdWxscHJvdmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcm92ZX0gZnJvbSBcIi4vZ3JvdGgxNl9wcm92ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZlcmlmeX0gZnJvbSBcIi4vZ3JvdGgxNl92ZXJpZnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHBvcnRTb2xpZGl0eUNhbGxEYXRhfSBmcm9tIFwiLi9ncm90aDE2X2V4cG9ydHNvbGlkaXR5Y2FsbGRhdGEuanNcIjtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCBibGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcblxuaW1wb3J0IHsgQ2hhQ2hhIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFRvRzIoY3VydmUsIGhhc2gpIHtcbiAgICBjb25zdCBoYXNoViA9IG5ldyBEYXRhVmlldyhoYXNoLmJ1ZmZlciwgaGFzaC5ieXRlT2Zmc2V0LCBoYXNoLmJ5dGVMZW5ndGgpO1xuICAgIGNvbnN0IHNlZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgIHNlZWRbaV0gPSBoYXNoVi5nZXRVaW50MzIoaSo0KTtcbiAgICB9XG5cbiAgICBjb25zdCBybmcgPSBuZXcgQ2hhQ2hhKHNlZWQpO1xuXG4gICAgY29uc3QgZzJfc3AgPSBjdXJ2ZS5HMi5mcm9tUm5nKHJuZyk7XG5cbiAgICByZXR1cm4gZzJfc3A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHMnNwKGN1cnZlLCBwZXJzaW5hbGl6YXRpb24sIGNoYWxsZW5nZSwgZzFzLCBnMXN4KSB7XG5cbiAgICBjb25zdCBoID0gYmxha2UyYig2NCk7XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShbcGVyc2luYWxpemF0aW9uXSk7XG4gICAgaC51cGRhdGUoYjEpO1xuICAgIGgudXBkYXRlKGNoYWxsZW5nZSk7XG4gICAgY29uc3QgYjMgPSBjdXJ2ZS5HMS50b1VuY29tcHJlc3NlZChnMXMpO1xuICAgIGgudXBkYXRlKCBiMyk7XG4gICAgY29uc3QgYjQgPSBjdXJ2ZS5HMS50b1VuY29tcHJlc3NlZChnMXN4KTtcbiAgICBoLnVwZGF0ZSggYjQpO1xuICAgIGNvbnN0IGhhc2ggPWguZGlnZXN0KCk7XG5cbiAgICByZXR1cm4gaGFzaFRvRzIoY3VydmUsIGhhc2gpO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQdWJLZXkoaywgY3VydmUsIHBlcnNvbmFsaXphdGlvbiwgY2hhbGxlbmdlSGFzaCwgcm5nICkge1xuICAgIGsuZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgay5nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoay5nMV9zLCBrLnBydktleSkpO1xuICAgIGsuZzJfc3AgPSBjdXJ2ZS5HMi50b0FmZmluZShnZXRHMnNwKGN1cnZlLCBwZXJzb25hbGl6YXRpb24sIGNoYWxsZW5nZUhhc2gsIGsuZzFfcywgay5nMV9zeCkpO1xuICAgIGsuZzJfc3B4ID0gY3VydmUuRzIudG9BZmZpbmUoY3VydmUuRzIudGltZXNGcihrLmcyX3NwLCBrLnBydktleSkpO1xuICAgIHJldHVybiBrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUFRhdUtleShjdXJ2ZSwgY2hhbGxlbmdlSGFzaCwgcm5nKSB7XG4gICAgY29uc3Qga2V5ID0ge1xuICAgICAgICB0YXU6IHt9LFxuICAgICAgICBhbHBoYToge30sXG4gICAgICAgIGJldGE6IHt9XG4gICAgfTtcbiAgICBrZXkudGF1LnBydktleSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBrZXkuYWxwaGEucHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgIGtleS5iZXRhLnBydktleSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBjYWxjdWxhdGVQdWJLZXkoa2V5LnRhdSwgY3VydmUsIDAsIGNoYWxsZW5nZUhhc2gsIHJuZyk7XG4gICAgY2FsY3VsYXRlUHViS2V5KGtleS5hbHBoYSwgY3VydmUsIDEsIGNoYWxsZW5nZUhhc2gsIHJuZyk7XG4gICAgY2FsY3VsYXRlUHViS2V5KGtleS5iZXRhLCBjdXJ2ZSwgMiwgY2hhbGxlbmdlSGFzaCwgcm5nKTtcbiAgICByZXR1cm4ga2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVsdGFLZXkoY3VydmUsIHRyYW5zY3JpcHQsIHJuZykge1xuICAgIGNvbnN0IGRlbHRhID0ge307XG4gICAgZGVsdGEucHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgIGRlbHRhLmcxX3MgPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS5mcm9tUm5nKHJuZykpO1xuICAgIGRlbHRhLmcxX3N4ID0gY3VydmUuRzEudG9BZmZpbmUoY3VydmUuRzEudGltZXNTY2FsYXIoZGVsdGEuZzFfcywgZGVsdGEucHJ2S2V5KSk7XG4gICAgZGVsdGEuZzJfc3AgPSBoYXNoVG9HMihjdXJ2ZSwgdHJhbnNjcmlwdCk7XG4gICAgZGVsdGEuZzJfc3B4ID0gY3VydmUuRzIudG9BZmZpbmUoY3VydmUuRzIudGltZXNTY2FsYXIoZGVsdGEuZzJfc3AsIGRlbHRhLnBydktleSkpO1xuICAgIHJldHVybiBkZWx0YTtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIGtleVBhaXIgZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBUYXVIZWFkZXIoZmQsIGN1cnZlLCBwb3dlciwgY2VyZW1vbnlQb3dlcikge1xuICAgIC8vIFdyaXRlIHRoZSBoZWFkZXJcbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgaWYgKCEgY2VyZW1vbnlQb3dlcikgY2VyZW1vbnlQb3dlciA9IHBvd2VyO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoMSk7IC8vIEhlYWRlciB0eXBlXG4gICAgY29uc3QgcEhlYWRlclNpemUgPSBmZC5wb3M7XG4gICAgYXdhaXQgZmQud3JpdGVVTEU2NCgwKTsgLy8gVGVtcG9yYWxseSBzZXQgdG8gMCBsZW5ndGhcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY3VydmUuRjEubjY0KjgpO1xuXG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkYxLm44KTtcbiAgICBTY2FsYXIudG9ScHJMRShidWZmLCAwLCBjdXJ2ZS5xLCBjdXJ2ZS5GMS5uOCk7XG4gICAgYXdhaXQgZmQud3JpdGUoYnVmZik7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihwb3dlcik7ICAgICAgICAgICAgICAgICAgICAvLyBwb3dlclxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2VyZW1vbnlQb3dlcik7ICAgICAgICAgICAgICAgLy8gcG93ZXJcblxuICAgIGNvbnN0IGhlYWRlclNpemUgPSBmZC5wb3MgLSBwSGVhZGVyU2l6ZSAtIDg7XG5cbiAgICBjb25zdCBvbGRQb3MgPSBmZC5wb3M7XG5cbiAgICBhd2FpdCBmZC53cml0ZVVMRTY0KGhlYWRlclNpemUsIHBIZWFkZXJTaXplKTtcblxuICAgIGZkLnBvcyA9IG9sZFBvcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQVGF1SGVhZGVyKGZkLCBzZWN0aW9ucykge1xuICAgIGlmICghc2VjdGlvbnNbMV0pICB0aHJvdyBuZXcgRXJyb3IoZmQuZmlsZU5hbWUgKyBcIjogRmlsZSBoYXMgbm8gIGhlYWRlclwiKTtcbiAgICBpZiAoc2VjdGlvbnNbMV0ubGVuZ3RoPjEpIHRocm93IG5ldyBFcnJvcihmZC5maWxlTmFtZSArXCI6IEZpbGUgaGFzIG1vcmUgdGhhbiBvbmUgaGVhZGVyXCIpO1xuXG4gICAgZmQucG9zID0gc2VjdGlvbnNbMV1bMF0ucDtcbiAgICBjb25zdCBuOCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKG44KTtcbiAgICBjb25zdCBxID0gU2NhbGFyLmZyb21ScHJMRShidWZmKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmVGcm9tUShxKTtcblxuICAgIGlmIChjdXJ2ZS5GMS5uNjQqOCAhPSBuOCkgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICtcIjogSW52YWxpZCBzaXplXCIpO1xuXG4gICAgY29uc3QgcG93ZXIgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBjb25zdCBjZXJlbW9ueVBvd2VyID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG5cbiAgICBpZiAoZmQucG9zLXNlY3Rpb25zWzFdWzBdLnAgIT0gc2VjdGlvbnNbMV1bMF0uc2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBQVGF1IGhlYWRlciBzaXplXCIpO1xuXG4gICAgcmV0dXJuIHtjdXJ2ZSwgcG93ZXIsIGNlcmVtb255UG93ZXJ9O1xufVxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUHRhdVB1YktleShmZCwgY3VydmUsIG1vbnRnb21lcnkpIHtcblxuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKGN1cnZlLkYxLm44KjIqNiArIGN1cnZlLkYyLm44KjIqMyk7XG5cbiAgICByZXR1cm4gZnJvbVB0YXVQdWJLZXlScHIoYnVmZiwgMCwgY3VydmUsIG1vbnRnb21lcnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVB0YXVQdWJLZXlScHIoYnVmZiwgcG9zLCBjdXJ2ZSwgbW9udGdvbWVyeSkge1xuXG4gICAgY29uc3Qga2V5ID0ge1xuICAgICAgICB0YXU6IHt9LFxuICAgICAgICBhbHBoYToge30sXG4gICAgICAgIGJldGE6IHt9XG4gICAgfTtcblxuICAgIGtleS50YXUuZzFfcyA9IHJlYWRHMSgpO1xuICAgIGtleS50YXUuZzFfc3ggPSByZWFkRzEoKTtcbiAgICBrZXkuYWxwaGEuZzFfcyA9IHJlYWRHMSgpO1xuICAgIGtleS5hbHBoYS5nMV9zeCA9IHJlYWRHMSgpO1xuICAgIGtleS5iZXRhLmcxX3MgPSByZWFkRzEoKTtcbiAgICBrZXkuYmV0YS5nMV9zeCA9IHJlYWRHMSgpO1xuICAgIGtleS50YXUuZzJfc3B4ID0gcmVhZEcyKCk7XG4gICAga2V5LmFscGhhLmcyX3NweCA9IHJlYWRHMigpO1xuICAgIGtleS5iZXRhLmcyX3NweCA9IHJlYWRHMigpO1xuXG4gICAgcmV0dXJuIGtleTtcblxuICAgIGZ1bmN0aW9uIHJlYWRHMSgpIHtcbiAgICAgICAgbGV0IHA7XG4gICAgICAgIGlmIChtb250Z29tZXJ5KSB7XG4gICAgICAgICAgICBwID0gY3VydmUuRzEuZnJvbVJwckxFTSggYnVmZiwgcG9zICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gY3VydmUuRzEuZnJvbVJwclVuY29tcHJlc3NlZCggYnVmZiwgcG9zICk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zICs9IGN1cnZlLkcxLkYubjgqMjtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZEcyKCkge1xuICAgICAgICBsZXQgcDtcbiAgICAgICAgaWYgKG1vbnRnb21lcnkpIHtcbiAgICAgICAgICAgIHAgPSBjdXJ2ZS5HMi5mcm9tUnByTEVNKCBidWZmLCBwb3MgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSBjdXJ2ZS5HMi5mcm9tUnByVW5jb21wcmVzc2VkKCBidWZmLCBwb3MgKTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gY3VydmUuRzIuRi5uOCoyO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1B0YXVQdWJLZXlScHIoYnVmZiwgcG9zLCBjdXJ2ZSwga2V5LCBtb250Z29tZXJ5KSB7XG5cbiAgICB3cml0ZUcxKGtleS50YXUuZzFfcyk7XG4gICAgd3JpdGVHMShrZXkudGF1LmcxX3N4KTtcbiAgICB3cml0ZUcxKGtleS5hbHBoYS5nMV9zKTtcbiAgICB3cml0ZUcxKGtleS5hbHBoYS5nMV9zeCk7XG4gICAgd3JpdGVHMShrZXkuYmV0YS5nMV9zKTtcbiAgICB3cml0ZUcxKGtleS5iZXRhLmcxX3N4KTtcbiAgICB3cml0ZUcyKGtleS50YXUuZzJfc3B4KTtcbiAgICB3cml0ZUcyKGtleS5hbHBoYS5nMl9zcHgpO1xuICAgIHdyaXRlRzIoa2V5LmJldGEuZzJfc3B4KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlRzEocCkge1xuICAgICAgICBpZiAobW9udGdvbWVyeSkge1xuICAgICAgICAgICAgY3VydmUuRzEudG9ScHJMRU0oYnVmZiwgcG9zLCBwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnZlLkcxLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmYsIHBvcywgcCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zICs9IGN1cnZlLkYxLm44KjI7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihwKSB7XG4gICAgICAgIGlmIChtb250Z29tZXJ5KSB7XG4gICAgICAgICAgICBjdXJ2ZS5HMi50b1JwckxFTShidWZmLCBwb3MsIHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VydmUuRzIudG9ScHJVbmNvbXByZXNzZWQoYnVmZiwgcG9zLCBwKTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gY3VydmUuRjIubjgqMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHRhdVB1YktleShmZCwgY3VydmUsIGtleSwgbW9udGdvbWVyeSkge1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5GMS5uOCoyKjYgKyBjdXJ2ZS5GMi5uOCoyKjMpO1xuICAgIHRvUHRhdVB1YktleVJwcihidWZmLCAwLCBjdXJ2ZSwga2V5LCBtb250Z29tZXJ5KTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZENvbnRyaWJ1dGlvbihmZCwgY3VydmUpIHtcbiAgICBjb25zdCBjID0ge307XG5cbiAgICBjLnRhdUcxID0gYXdhaXQgcmVhZEcxKCk7XG4gICAgYy50YXVHMiA9IGF3YWl0IHJlYWRHMigpO1xuICAgIGMuYWxwaGFHMSA9IGF3YWl0IHJlYWRHMSgpO1xuICAgIGMuYmV0YUcxID0gYXdhaXQgcmVhZEcxKCk7XG4gICAgYy5iZXRhRzIgPSBhd2FpdCByZWFkRzIoKTtcbiAgICBjLmtleSA9IGF3YWl0IHJlYWRQdGF1UHViS2V5KGZkLCBjdXJ2ZSwgdHJ1ZSk7XG4gICAgYy5wYXJ0aWFsSGFzaCA9IGF3YWl0IGZkLnJlYWQoMjE2KTtcbiAgICBjLm5leHRDaGFsbGVuZ2UgPSBhd2FpdCBmZC5yZWFkKDY0KTtcbiAgICBjLnR5cGUgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcblxuICAgIGNvbnN0IGJ1ZmZWICA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkcxLkYubjgqMio2K2N1cnZlLkcyLkYubjgqMiozKTtcbiAgICB0b1B0YXVQdWJLZXlScHIoYnVmZlYsIDAsIGN1cnZlLCBjLmtleSwgZmFsc2UpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICByZXNwb25zZUhhc2hlci5zZXRQYXJ0aWFsSGFzaChjLnBhcnRpYWxIYXNoKTtcbiAgICByZXNwb25zZUhhc2hlci51cGRhdGUoYnVmZlYpO1xuICAgIGMucmVzcG9uc2VIYXNoID0gcmVzcG9uc2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICBjb25zdCBwYXJhbUxlbmd0aCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IGN1clBvcyA9IGZkLnBvcztcbiAgICBsZXQgbGFzdFR5cGUgPTA7XG4gICAgd2hpbGUgKGZkLnBvcy1jdXJQb3MgPCBwYXJhbUxlbmd0aCkge1xuICAgICAgICBjb25zdCBidWZmVHlwZSA9IGF3YWl0IHJlYWREVigxKTtcbiAgICAgICAgaWYgKGJ1ZmZUeXBlWzBdPD0gbGFzdFR5cGUpIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlcnMgaW4gdGhlIGNvbnRyaWJ1dGlvbiBtdXN0IGJlIHNvcnRlZFwiKTtcbiAgICAgICAgbGFzdFR5cGUgPSBidWZmVHlwZVswXTtcbiAgICAgICAgaWYgKGJ1ZmZUeXBlWzBdPT0xKSB7ICAgICAvLyBOYW1lXG4gICAgICAgICAgICBjb25zdCBidWZmTGVuID0gYXdhaXQgcmVhZERWKDEpO1xuICAgICAgICAgICAgY29uc3QgYnVmZlN0ciA9IGF3YWl0IHJlYWREVihidWZmTGVuWzBdKTtcbiAgICAgICAgICAgIGMubmFtZSA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShidWZmU3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChidWZmVHlwZVswXT09Mikge1xuICAgICAgICAgICAgY29uc3QgYnVmZkV4cCA9IGF3YWl0IHJlYWREVigxKTtcbiAgICAgICAgICAgIGMubnVtSXRlcmF0aW9uc0V4cCA9IGJ1ZmZFeHBbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoYnVmZlR5cGVbMF09PTMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMZW4gPSBhd2FpdCByZWFkRFYoMSk7XG4gICAgICAgICAgICBjLmJlYWNvbkhhc2ggPSBhd2FpdCByZWFkRFYoYnVmZkxlblswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZkLnBvcyAhPSBjdXJQb3MgKyBwYXJhbUxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXMgZG8gbm90IG1hdGNoXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEcxKCkge1xuICAgICAgICBjb25zdCBwQnVmZiA9IGF3YWl0IGZkLnJlYWQoY3VydmUuRzEuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGN1cnZlLkcxLmZyb21ScHJMRU0oIHBCdWZmICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEcyKCkge1xuICAgICAgICBjb25zdCBwQnVmZiA9IGF3YWl0IGZkLnJlYWQoY3VydmUuRzIuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGN1cnZlLkcyLmZyb21ScHJMRU0oIHBCdWZmICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZERWKG4pIHtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IGZkLnJlYWQobik7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJpYnV0aW9ucyhmZCwgY3VydmUsIHNlY3Rpb25zKSB7XG4gICAgaWYgKCFzZWN0aW9uc1s3XSkgIHRocm93IG5ldyBFcnJvcihmZC5maWxlTmFtZSArIFwiOiBGaWxlIGhhcyBubyAgY29udHJpYnV0aW9uc1wiKTtcbiAgICBpZiAoc2VjdGlvbnNbN11bMF0ubGVuZ3RoPjEpIHRocm93IG5ldyBFcnJvcihmZC5maWxlTmFtZSArXCI6IEZpbGUgaGFzIG1vcmUgdGhhbiBvbmUgY29udHJpYnV0aW9ucyBzZWN0aW9uXCIpO1xuXG4gICAgZmQucG9zID0gc2VjdGlvbnNbN11bMF0ucDtcbiAgICBjb25zdCBuQ29udHJpYnV0aW9ucyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bkNvbnRyaWJ1dGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgcmVhZENvbnRyaWJ1dGlvbihmZCwgY3VydmUpO1xuICAgICAgICBjLmlkID0gaSsxO1xuICAgICAgICBjb250cmlidXRpb25zLnB1c2goYyk7XG4gICAgfVxuXG4gICAgaWYgKGZkLnBvcy1zZWN0aW9uc1s3XVswXS5wICE9IHNlY3Rpb25zWzddWzBdLnNpemUpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29udHJpYnV0aW9uIHNlY3Rpb24gc2l6ZVwiKTtcblxuICAgIHJldHVybiBjb250cmlidXRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUNvbnRyaWJ1dGlvbihmZCwgY3VydmUsIGNvbnRyaWJ1dGlvbikge1xuXG4gICAgY29uc3QgYnVmZkcxID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjEubjgqMik7XG4gICAgY29uc3QgYnVmZkcyID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjIubjgqMik7XG4gICAgYXdhaXQgd3JpdGVHMShjb250cmlidXRpb24udGF1RzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoY29udHJpYnV0aW9uLnRhdUcyKTtcbiAgICBhd2FpdCB3cml0ZUcxKGNvbnRyaWJ1dGlvbi5hbHBoYUcxKTtcbiAgICBhd2FpdCB3cml0ZUcxKGNvbnRyaWJ1dGlvbi5iZXRhRzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoY29udHJpYnV0aW9uLmJldGFHMik7XG4gICAgYXdhaXQgd3JpdGVQdGF1UHViS2V5KGZkLCBjdXJ2ZSwgY29udHJpYnV0aW9uLmtleSwgdHJ1ZSk7XG4gICAgYXdhaXQgZmQud3JpdGUoY29udHJpYnV0aW9uLnBhcnRpYWxIYXNoKTtcbiAgICBhd2FpdCBmZC53cml0ZShjb250cmlidXRpb24ubmV4dENoYWxsZW5nZSk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb250cmlidXRpb24udHlwZSB8fCAwKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgIGlmIChjb250cmlidXRpb24ubmFtZSkge1xuICAgICAgICBwYXJhbXMucHVzaCgxKTsgICAgICAvLyBQYXJhbSBOYW1lXG4gICAgICAgIGNvbnN0IG5hbWVEYXRhID0gbmV3IFRleHRFbmNvZGVyKFwidXRmLThcIikuZW5jb2RlKGNvbnRyaWJ1dGlvbi5uYW1lLnN1YnN0cmluZygwLDY0KSk7XG4gICAgICAgIHBhcmFtcy5wdXNoKG5hbWVEYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bmFtZURhdGEuYnl0ZUxlbmd0aDsgaSsrKSBwYXJhbXMucHVzaChuYW1lRGF0YVtpXSk7XG4gICAgfVxuICAgIGlmIChjb250cmlidXRpb24udHlwZSA9PSAxKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKDIpOyAgICAgIC8vIFBhcmFtIG51bUl0ZXJhdGlvbnNFeHBcbiAgICAgICAgcGFyYW1zLnB1c2goY29udHJpYnV0aW9uLm51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgICAgIHBhcmFtcy5wdXNoKDMpOyAgICAgIC8vIEJlYWNvbiBIYXNoXG4gICAgICAgIHBhcmFtcy5wdXNoKGNvbnRyaWJ1dGlvbi5iZWFjb25IYXNoLmJ5dGVMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Y29udHJpYnV0aW9uLmJlYWNvbkhhc2guYnl0ZUxlbmd0aDsgaSsrKSBwYXJhbXMucHVzaChjb250cmlidXRpb24uYmVhY29uSGFzaFtpXSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubGVuZ3RoPjApIHtcbiAgICAgICAgY29uc3QgcGFyYW1zQnVmZiA9IG5ldyBVaW50OEFycmF5KHBhcmFtcyk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlVUxFMzIocGFyYW1zQnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUocGFyYW1zQnVmZik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMigwKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlRzEocCkge1xuICAgICAgICBjdXJ2ZS5HMS50b1JwckxFTShidWZmRzEsIDAsIHApO1xuICAgICAgICBhd2FpdCBmZC53cml0ZShidWZmRzEpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlRzIocCkge1xuICAgICAgICBjdXJ2ZS5HMi50b1JwckxFTShidWZmRzIsIDAsIHApO1xuICAgICAgICBhd2FpdCBmZC53cml0ZShidWZmRzIpO1xuICAgIH1cblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVDb250cmlidXRpb25zKGZkLCBjdXJ2ZSwgY29udHJpYnV0aW9ucykge1xuXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMig3KTsgLy8gSGVhZGVyIHR5cGVcbiAgICBjb25zdCBwQ29udHJpYnV0aW9uc1NpemUgPSBmZC5wb3M7XG4gICAgYXdhaXQgZmQud3JpdGVVTEU2NCgwKTsgLy8gVGVtcG9yYWxseSBzZXQgdG8gMCBsZW5ndGhcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY29udHJpYnV0aW9ucy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGk9MDsgaTwgY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhd2FpdCB3cml0ZUNvbnRyaWJ1dGlvbihmZCwgY3VydmUsIGNvbnRyaWJ1dGlvbnNbaV0pO1xuICAgIH1cbiAgICBjb25zdCBjb250cmlidXRpb25zU2l6ZSA9IGZkLnBvcyAtIHBDb250cmlidXRpb25zU2l6ZSAtIDg7XG5cbiAgICBjb25zdCBvbGRQb3MgPSBmZC5wb3M7XG5cbiAgICBhd2FpdCBmZC53cml0ZVVMRTY0KGNvbnRyaWJ1dGlvbnNTaXplLCBwQ29udHJpYnV0aW9uc1NpemUpO1xuICAgIGZkLnBvcyA9IG9sZFBvcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaChjdXJ2ZSwgcG93ZXIsIGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkNhbGN1bGF0aW5nIEZpcnN0IENoYWxsZW5nZSBIYXNoXCIpO1xuXG4gICAgY29uc3QgaGFzaGVyID0gbmV3IEJsYWtlMmIoNjQpO1xuXG4gICAgY29uc3QgdkcxID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzEuRi5uOCoyKTtcbiAgICBjb25zdCB2RzIgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5HMi5GLm44KjIpO1xuICAgIGN1cnZlLkcxLnRvUnByVW5jb21wcmVzc2VkKHZHMSwgMCwgY3VydmUuRzEuZyk7XG4gICAgY3VydmUuRzIudG9ScHJVbmNvbXByZXNzZWQodkcyLCAwLCBjdXJ2ZS5HMi5nKTtcblxuICAgIGhhc2hlci51cGRhdGUoQmxha2UyYig2NCkuZGlnZXN0KCkpO1xuXG4gICAgbGV0IG47XG5cbiAgICBuPSgyICoqIHBvd2VyKSoyIC0xO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkNhbGN1bGF0ZSBJbml0aWFsIEhhc2g6IHRhdUcxXCIpO1xuICAgIGhhc2hCbG9jayh2RzEsIG4pO1xuICAgIG49IDIgKiogcG93ZXI7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQ2FsY3VsYXRlIEluaXRpYWwgSGFzaDogdGF1RzJcIik7XG4gICAgaGFzaEJsb2NrKHZHMiwgbik7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQ2FsY3VsYXRlIEluaXRpYWwgSGFzaDogYWxwaGFUYXVHMVwiKTtcbiAgICBoYXNoQmxvY2sodkcxLCBuKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJDYWxjdWxhdGUgSW5pdGlhbCBIYXNoOiBiZXRhVGF1RzFcIik7XG4gICAgaGFzaEJsb2NrKHZHMSwgbik7XG4gICAgaGFzaGVyLnVwZGF0ZSh2RzIpO1xuXG4gICAgcmV0dXJuIGhhc2hlci5kaWdlc3QoKTtcblxuICAgIGZ1bmN0aW9uIGhhc2hCbG9jayhidWZmLCBuKSB7XG4gICAgICAgIC8vIHRoaXMgYmxvY2sgc2l6ZSBpcyBhIGdvb2QgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCB0aGUgbWF4aW11bVxuICAgICAgICAvLyBpbnB1dCBzaXplIG9mIHRoZSBCbGFrZTJiIHVwZGF0ZSBtZXRob2QgKDY1LDUzNSw3MjAgYnl0ZXMpLlxuICAgICAgICBjb25zdCBibG9ja1NpemUgPSAzNDEwMDA7XG4gICAgICAgIGNvbnN0IG5CbG9ja3MgPSBNYXRoLmZsb29yKG4gLyBibG9ja1NpemUpO1xuICAgICAgICBjb25zdCByZW0gPSBuICUgYmxvY2tTaXplO1xuICAgICAgICBjb25zdCBiaWdCdWZmID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tTaXplICogYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGJsb2NrU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBiaWdCdWZmLnNldChidWZmLCBpKmJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5CbG9ja3M7IGkrKykge1xuICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShiaWdCdWZmKTtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkluaXRpYWwgaGFzaDogXCIgK2kqYmxvY2tTaXplKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVtOyBpKyspIHtcbiAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYnVmZik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtleUZyb21CZWFjb24oY3VydmUsIGNoYWxsZW5nZUhhc2gsIGJlYWNvbkhhc2gsIG51bUl0ZXJhdGlvbnNFeHApIHtcblxuICAgIGNvbnN0IHJuZyA9IGF3YWl0IG1pc2Mucm5nRnJvbUJlYWNvblBhcmFtcyhiZWFjb25IYXNoLCBudW1JdGVyYXRpb25zRXhwKTtcblxuICAgIGNvbnN0IGtleSA9IGtleVBhaXIuY3JlYXRlUFRhdUtleShjdXJ2ZSwgY2hhbGxlbmdlSGFzaCwgcm5nKTtcblxuICAgIHJldHVybiBrZXk7XG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qXG5IZWFkZXIoMSlcbiAgICBuOFxuICAgIHByaW1lXG4gICAgcG93ZXJcbnRhdUcxKDIpXG4gICAgeygyICoqIHBvd2VyKSoyLTF9IFtcbiAgICAgICAgRzEsIHRhdSpHMSwgdGF1XjIgKiBHMSwgLi4uLlxuICAgIF1cbnRhdUcyKDMpXG4gICAgezIgKiogcG93ZXJ9W1xuICAgICAgICBHMiwgdGF1KkcyLCB0YXVeMiAqIEcyLCAuLi5cbiAgICBdXG5hbHBoYVRhdUcxKDQpXG4gICAgezIgKiogcG93ZXJ9W1xuICAgICAgICBhbHBoYSpHMSwgYWxwaGEqdGF1KkcxLCBhbHBoYSp0YXVeMipHMSwuLi4uXG4gICAgXVxuYmV0YVRhdUcxKDUpXG4gICAgezIgKiogcG93ZXJ9IFtdXG4gICAgICAgIGJldGEqRzEsIGJldGEqdGF1KkcxLCBiZXRhKnRhdV4yKkcxLCAuLi4uXG4gICAgXVxuYmV0YUcyKDYpXG4gICAgezF9W1xuICAgICAgICBiZXRhKkcyXG4gICAgXVxuY29udHJpYnV0aW9ucyg3KVxuICAgIE5Db250cmlidXRpb25zXG4gICAge05Db250cmlidXRpb25zfVtcbiAgICAgICAgdGF1KkcxXG4gICAgICAgIHRhdSpHMlxuICAgICAgICBhbHBoYSpHMVxuICAgICAgICBiZXRhKkcxXG4gICAgICAgIGJldGEqRzJcbiAgICAgICAgcHViS2V5XG4gICAgICAgICAgICB0YXVfZzFzXG4gICAgICAgICAgICB0YXVfZzFzeFxuICAgICAgICAgICAgdGF1X2cyc3B4XG4gICAgICAgICAgICBhbHBoYV9nMXNcbiAgICAgICAgICAgIGFscGhhX2cxc3hcbiAgICAgICAgICAgIGFscGhhX2cxc3B4XG4gICAgICAgICAgICBiZXRhX2cxc1xuICAgICAgICAgICAgYmV0YV9nMXN4XG4gICAgICAgICAgICBiZXRhX2cxc3B4XG4gICAgICAgIHBhcnRpYWxIYXNoICgyMTYgYnl0ZXMpIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2JsYWtlMmItd2FzbS9ibG9iLzIzYmVlMDY5NDU4MDYzMDk5NzdhZjgwMmJjMzc0NzI3NTQyNjE3YzcvYmxha2UyYi53YXQjTDlcbiAgICAgICAgaGFzaE5ld0NoYWxsZW5nZVxuICAgIF1cbiAqL1xuXG5pbXBvcnQgKiBhcyBwdGF1VXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG5ld0FjY3VtdWxhdG9yKGN1cnZlLCBwb3dlciwgZmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3QgZmQgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZShmaWxlTmFtZSwgXCJwdGF1XCIsIDEsIDcpO1xuXG4gICAgYXdhaXQgcHRhdVV0aWxzLndyaXRlUFRhdUhlYWRlcihmZCwgY3VydmUsIHBvd2VyLCAwKTtcblxuICAgIGNvbnN0IGJ1ZmZHMSA9IGN1cnZlLkcxLm9uZUFmZmluZTtcbiAgICBjb25zdCBidWZmRzIgPSBjdXJ2ZS5HMi5vbmVBZmZpbmU7XG5cbiAgICAvLyBXcml0ZSB0YXVHMVxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAyKTtcbiAgICBjb25zdCBuVGF1RzEgPSAoMiAqKiBwb3dlcikgKiAyIC0xO1xuICAgIGZvciAobGV0IGk9MDsgaTwgblRhdUcxOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUoYnVmZkcxKTtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoKGklMTAwMDAwKSA9PSAwKSYmaSkgbG9nZ2VyLmxvZyhcInRhdUcxOiBcIiArIGkpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIHRhdUcyXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDMpO1xuICAgIGNvbnN0IG5UYXVHMiA9ICgyICoqIHBvd2VyKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8IG5UYXVHMjsgaSsrKSB7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlKGJ1ZmZHMik7XG4gICAgICAgIGlmICgobG9nZ2VyKSYmKChpJTEwMDAwMCkgPT0gMCkmJmkpIGxvZ2dlci5sb2coXCJ0YXVHMjogXCIgKyBpKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cbiAgICAvLyBXcml0ZSBhbHBoYVRhdUcxXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDQpO1xuICAgIGNvbnN0IG5BbGZhVGF1RzEgPSAoMiAqKiBwb3dlcik7XG4gICAgZm9yIChsZXQgaT0wOyBpPCBuQWxmYVRhdUcxOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUoYnVmZkcxKTtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoKGklMTAwMDAwKSA9PSAwKSYmaSkgbG9nZ2VyLmxvZyhcImFscGhhVGF1RzE6IFwiICsgaSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgLy8gV3JpdGUgYmV0YVRhdUcxXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDUpO1xuICAgIGNvbnN0IG5CZXRhVGF1RzEgPSAoMiAqKiBwb3dlcik7XG4gICAgZm9yIChsZXQgaT0wOyBpPCBuQmV0YVRhdUcxOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUoYnVmZkcxKTtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoKGklMTAwMDAwKSA9PSAwKSYmaSkgbG9nZ2VyLmxvZyhcImJldGFUYXVHMTogXCIgKyBpKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cbiAgICAvLyBXcml0ZSBiZXRhRzJcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgNik7XG4gICAgYXdhaXQgZmQud3JpdGUoYnVmZkcyKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIENvbnRyaWJ1dGlvbnNcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgNyk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMigwKTsgLy8gMCBDb250cmlidXRpb25zXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgY29uc3QgZmlyc3RDaGFsbGVuZ2VIYXNoID0gcHRhdVV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaChjdXJ2ZSwgcG93ZXIsIGxvZ2dlcik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcobWlzYy5mb3JtYXRIYXNoKEJsYWtlMmIoNjQpLmRpZ2VzdCgpLCBcIkJsYW5rIENvbnRyaWJ1dGlvbiBIYXNoOlwiKSk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goZmlyc3RDaGFsbGVuZ2VIYXNoLCBcIkZpcnN0IENvbnRyaWJ1dGlvbiBIYXNoOlwiKSk7XG5cbiAgICByZXR1cm4gZmlyc3RDaGFsbGVuZ2VIYXNoO1xuXG59XG4iLCIvLyBGb3JtYXQgb2YgdGhlIG91dHB1XG4vLyAgICAgSGFzaCBvZiB0aGUgbGFzdCBjb250cmlidXRpb24gIDY0Qnl0ZXNcbi8vICAgICAyXk4gKiAyIC0xICBUYXVHMSBwb2ludHMgKHVuY29tcHJlc3NlZClcbi8vICAgICAyXk4gIFRhdUcyIFBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgIDJeTiAgQWxwaGFUYXVHMSBQb2ludHMgKHVuY29tcHJlc3NlZClcbi8vICAgICAyXk4gIEJldGFUYXVHMSBQb2ludHMgKHVuY29tcHJlc3NlZClcbi8vICAgICBCZXRhRzIgKHVuY29tcHJlc3NlZClcblxuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZXhwb3J0Q2hhbGxlbmdlKHBUYXVGaWxlbmFtZSwgY2hhbGxlbmdlRmlsZW5hbWUsIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcbiAgICBjb25zdCB7ZmQ6IGZkRnJvbSwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHBUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuXG4gICAgY29uc3Qge2N1cnZlLCBwb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZEZyb20sIHNlY3Rpb25zKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBhd2FpdCB1dGlscy5yZWFkQ29udHJpYnV0aW9ucyhmZEZyb20sIGN1cnZlLCBzZWN0aW9ucyk7XG4gICAgbGV0IGxhc3RSZXNwb25zZUhhc2gsIGN1ckNoYWxsZW5nZUhhc2g7XG4gICAgaWYgKGNvbnRyaWJ1dGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlSGFzaCA9IEJsYWtlMmIoNjQpLmRpZ2VzdCgpO1xuICAgICAgICBjdXJDaGFsbGVuZ2VIYXNoID0gdXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBwb3dlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFJlc3BvbnNlSGFzaCA9IGNvbnRyaWJ1dGlvbnNbY29udHJpYnV0aW9ucy5sZW5ndGgtMV0ucmVzcG9uc2VIYXNoO1xuICAgICAgICBjdXJDaGFsbGVuZ2VIYXNoID0gY29udHJpYnV0aW9uc1tjb250cmlidXRpb25zLmxlbmd0aC0xXS5uZXh0Q2hhbGxlbmdlO1xuICAgIH1cblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChsYXN0UmVzcG9uc2VIYXNoLCBcIkxhc3QgUmVzcG9uc2UgSGFzaDogXCIpKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjdXJDaGFsbGVuZ2VIYXNoLCBcIk5ldyBDaGFsbGVuZ2UgSGFzaDogXCIpKTtcblxuXG4gICAgY29uc3QgZmRUbyA9IGF3YWl0IGZhc3RGaWxlLmNyZWF0ZU92ZXJyaWRlKGNoYWxsZW5nZUZpbGVuYW1lKTtcblxuICAgIGNvbnN0IHRvSGFzaCA9IEJsYWtlMmIoNjQpO1xuICAgIGF3YWl0IGZkVG8ud3JpdGUobGFzdFJlc3BvbnNlSGFzaCk7XG4gICAgdG9IYXNoLnVwZGF0ZShsYXN0UmVzcG9uc2VIYXNoKTtcblxuICAgIGF3YWl0IGV4cG9ydFNlY3Rpb24oMiwgXCJHMVwiLCAoMiAqKiBwb3dlcikgKiAyIC0xLCBcInRhdUcxXCIpO1xuICAgIGF3YWl0IGV4cG9ydFNlY3Rpb24oMywgXCJHMlwiLCAoMiAqKiBwb3dlcikgICAgICAgLCBcInRhdUcyXCIpO1xuICAgIGF3YWl0IGV4cG9ydFNlY3Rpb24oNCwgXCJHMVwiLCAoMiAqKiBwb3dlcikgICAgICAgLCBcImFscGhhVGF1RzFcIik7XG4gICAgYXdhaXQgZXhwb3J0U2VjdGlvbig1LCBcIkcxXCIsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYmV0YVRhdUcxXCIpO1xuICAgIGF3YWl0IGV4cG9ydFNlY3Rpb24oNiwgXCJHMlwiLCAxICAgICAgICAgICAgICAgICAgLCBcImJldGFHMlwiKTtcblxuICAgIGF3YWl0IGZkRnJvbS5jbG9zZSgpO1xuICAgIGF3YWl0IGZkVG8uY2xvc2UoKTtcblxuICAgIGNvbnN0IGNhbGNDdXJDaGFsbGVuZ2VIYXNoID0gdG9IYXNoLmRpZ2VzdCgpO1xuXG4gICAgaWYgKCFtaXNjLmhhc2hJc0VxdWFsIChjdXJDaGFsbGVuZ2VIYXNoLCBjYWxjQ3VyQ2hhbGxlbmdlSGFzaCkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGNhbGNDdXJDaGFsbGVuZ2VIYXNoLCBcIkNhbGMgQ3VycmV0IENoYWxsZW5nZSBIYXNoOiBcIikpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIlBUYXUgZmlsZSBpcyBjb3JydXB0ZWQuIENhbGN1bGF0ZWQgbmV3IGNoYWxsZW5nZSBoYXNoIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGVjbGFyZWQgb25lXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQVGF1IGZpbGUgaXMgY29ycnVwdGVkLiBDYWxjdWxhdGVkIG5ldyBjaGFsbGVuZ2UgaGFzaCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBlY2xhcmVkIG9uZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyQ2hhbGxlbmdlSGFzaDtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNlY3Rpb24oc2VjdGlvbklkLCBncm91cE5hbWUsIG5Qb2ludHMsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc0cpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkRnJvbSwgc2VjdGlvbnMsIHNlY3Rpb25JZCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgblBvaW50czsgaSs9IG5Qb2ludHNDaHVuaykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBFeHBvcnRpbmcgJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKG5Qb2ludHMtaSwgblBvaW50c0NodW5rKTtcbiAgICAgICAgICAgIGxldCBidWZmO1xuICAgICAgICAgICAgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKG4qc0cpO1xuICAgICAgICAgICAgYnVmZiA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYnVmZik7XG4gICAgICAgICAgICBhd2FpdCBmZFRvLndyaXRlKGJ1ZmYpO1xuICAgICAgICAgICAgdG9IYXNoLnVwZGF0ZShidWZmKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmRGcm9tKTtcbiAgICB9XG5cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBpbXBvcnRSZXNwb25zZShvbGRQdGF1RmlsZW5hbWUsIGNvbnRyaWJ1dGlvbkZpbGVuYW1lLCBuZXdQVGF1RmlsZW5hbWUsIG5hbWUsIGltcG9ydFBvaW50cywgbG9nZ2VyKSB7XG5cbiAgICBhd2FpdCBCbGFrZTJiLnJlYWR5KCk7XG5cbiAgICBjb25zdCBub0hhc2ggPSBuZXcgVWludDhBcnJheSg2NCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPDY0OyBpKyspIG5vSGFzaFtpXSA9IDB4RkY7XG5cbiAgICBjb25zdCB7ZmQ6IGZkT2xkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUob2xkUHRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSk7XG4gICAgY29uc3Qge2N1cnZlLCBwb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZE9sZCwgc2VjdGlvbnMpO1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBhd2FpdCB1dGlscy5yZWFkQ29udHJpYnV0aW9ucyhmZE9sZCwgY3VydmUsIHNlY3Rpb25zKTtcbiAgICBjb25zdCBjdXJyZW50Q29udHJpYnV0aW9uID0ge307XG5cbiAgICBpZiAobmFtZSkgY3VycmVudENvbnRyaWJ1dGlvbi5uYW1lID0gbmFtZTtcblxuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkYxLm44KjI7XG4gICAgY29uc3Qgc2NHMSA9IGN1cnZlLkYxLm44OyAvLyBDb21wcmVzZWQgc2l6ZVxuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkYyLm44KjI7XG4gICAgY29uc3Qgc2NHMiA9IGN1cnZlLkYyLm44OyAvLyBDb21wcmVzZWQgc2l6ZVxuXG4gICAgY29uc3QgZmRSZXNwb25zZSA9IGF3YWl0IGZhc3RGaWxlLnJlYWRFeGlzdGluZyhjb250cmlidXRpb25GaWxlbmFtZSk7XG5cbiAgICBpZiAgKGZkUmVzcG9uc2UudG90YWxTaXplICE9XG4gICAgICAgIDY0ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2xkIEhhc2hcbiAgICAgICAgKCgyICoqIHBvd2VyKSoyLTEpKnNjRzEgK1xuICAgICAgICAoMiAqKiBwb3dlcikqc2NHMiArXG4gICAgICAgICgyICoqIHBvd2VyKSpzY0cxICtcbiAgICAgICAgKDIgKiogcG93ZXIpKnNjRzEgK1xuICAgICAgICBzY0cyICtcbiAgICAgICAgc0cxKjYgKyBzRzIqMylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2l6ZSBvZiB0aGUgY29udHJpYnV0aW9uIGlzIGludmFsaWRcIik7XG5cbiAgICBsZXQgbGFzdENoYWxsZW5nZUhhc2g7XG5cbiAgICBpZiAoY29udHJpYnV0aW9ucy5sZW5ndGg+MCkge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IGNvbnRyaWJ1dGlvbnNbY29udHJpYnV0aW9ucy5sZW5ndGgtMV0ubmV4dENoYWxsZW5nZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IHV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaChjdXJ2ZSwgcG93ZXIsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgY29uc3QgZmROZXcgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZShuZXdQVGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxLCBpbXBvcnRQb2ludHMgPyA3OiAyKTtcbiAgICBhd2FpdCB1dGlscy53cml0ZVBUYXVIZWFkZXIoZmROZXcsIGN1cnZlLCBwb3dlcik7XG5cbiAgICBjb25zdCBjb250cmlidXRpb25QcmV2aW91c0hhc2ggPSBhd2FpdCBmZFJlc3BvbnNlLnJlYWQoNjQpO1xuXG4gICAgaWYgKG1pc2MuaGFzaElzRXF1YWwobm9IYXNoLGxhc3RDaGFsbGVuZ2VIYXNoKSkge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IGNvbnRyaWJ1dGlvblByZXZpb3VzSGFzaDtcbiAgICAgICAgY29udHJpYnV0aW9uc1tjb250cmlidXRpb25zLmxlbmd0aC0xXS5uZXh0Q2hhbGxlbmdlID0gbGFzdENoYWxsZW5nZUhhc2g7XG4gICAgfVxuXG4gICAgaWYoIW1pc2MuaGFzaElzRXF1YWwoY29udHJpYnV0aW9uUHJldmlvdXNIYXNoLGxhc3RDaGFsbGVuZ2VIYXNoKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgY29udHJpYnV0aW9uLiB0aGlzIGNvbnRyaWJ1dGlvbiBpcyBub3QgYmFzZWQgb24gdGhlIHByZXZpdXMgaGFzaFwiKTtcblxuICAgIGNvbnN0IGhhc2hlclJlc3BvbnNlID0gbmV3IEJsYWtlMmIoNjQpO1xuICAgIGhhc2hlclJlc3BvbnNlLnVwZGF0ZShjb250cmlidXRpb25QcmV2aW91c0hhc2gpO1xuXG4gICAgY29uc3Qgc3RhcnRTZWN0aW9ucyA9IFtdO1xuICAgIGxldCByZXM7XG4gICAgcmVzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oZmRSZXNwb25zZSwgZmROZXcsIFwiRzFcIiwgMiwgKDIgKiogcG93ZXIpICogMiAtMSwgWzFdLCBcInRhdUcxXCIpO1xuICAgIGN1cnJlbnRDb250cmlidXRpb24udGF1RzEgPSByZXNbMF07XG4gICAgcmVzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oZmRSZXNwb25zZSwgZmROZXcsIFwiRzJcIiwgMywgKDIgKiogcG93ZXIpICAgICAgICwgWzFdLCBcInRhdUcyXCIpO1xuICAgIGN1cnJlbnRDb250cmlidXRpb24udGF1RzIgPSByZXNbMF07XG4gICAgcmVzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oZmRSZXNwb25zZSwgZmROZXcsIFwiRzFcIiwgNCwgKDIgKiogcG93ZXIpICAgICAgICwgWzBdLCBcImFscGhhRzFcIik7XG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi5hbHBoYUcxID0gcmVzWzBdO1xuICAgIHJlcyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKGZkUmVzcG9uc2UsIGZkTmV3LCBcIkcxXCIsIDUsICgyICoqIHBvd2VyKSAgICAgICAsIFswXSwgXCJiZXRhRzFcIik7XG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi5iZXRhRzEgPSByZXNbMF07XG4gICAgcmVzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oZmRSZXNwb25zZSwgZmROZXcsIFwiRzJcIiwgNiwgMSAgICAgICAgICAgICAgICAgICwgWzBdLCBcImJldGFHMlwiKTtcbiAgICBjdXJyZW50Q29udHJpYnV0aW9uLmJldGFHMiA9IHJlc1swXTtcblxuICAgIGN1cnJlbnRDb250cmlidXRpb24ucGFydGlhbEhhc2ggPSBoYXNoZXJSZXNwb25zZS5nZXRQYXJ0aWFsSGFzaCgpO1xuXG5cbiAgICBjb25zdCBidWZmS2V5ID0gYXdhaXQgZmRSZXNwb25zZS5yZWFkKGN1cnZlLkYxLm44KjIqNitjdXJ2ZS5GMi5uOCoyKjMpO1xuXG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi5rZXkgPSB1dGlscy5mcm9tUHRhdVB1YktleVJwcihidWZmS2V5LCAwLCBjdXJ2ZSwgZmFsc2UpO1xuXG4gICAgaGFzaGVyUmVzcG9uc2UudXBkYXRlKG5ldyBVaW50OEFycmF5KGJ1ZmZLZXkpKTtcbiAgICBjb25zdCBoYXNoUmVzcG9uc2UgPSBoYXNoZXJSZXNwb25zZS5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChoYXNoUmVzcG9uc2UsIFwiQ29udHJpYnV0aW9uIFJlc3BvbnNlIEhhc2ggaW1wb3J0ZWQ6IFwiKSk7XG5cbiAgICBpZiAoaW1wb3J0UG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFsbGVuZ2VIYXNoZXIgPSBuZXcgQmxha2UyYig2NCk7XG4gICAgICAgIG5leHRDaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGhhc2hSZXNwb25zZSk7XG5cbiAgICAgICAgYXdhaXQgaGFzaFNlY3Rpb24obmV4dENoYWxsZW5nZUhhc2hlciwgZmROZXcsIFwiRzFcIiwgMiwgKDIgKiogcG93ZXIpICogMiAtMSwgXCJ0YXVHMVwiLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCBoYXNoU2VjdGlvbihuZXh0Q2hhbGxlbmdlSGFzaGVyLCBmZE5ldywgXCJHMlwiLCAzLCAoMiAqKiBwb3dlcikgICAgICAgLCBcInRhdUcyXCIsIGxvZ2dlcik7XG4gICAgICAgIGF3YWl0IGhhc2hTZWN0aW9uKG5leHRDaGFsbGVuZ2VIYXNoZXIsIGZkTmV3LCBcIkcxXCIsIDQsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYWxwaGFUYXVHMVwiLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCBoYXNoU2VjdGlvbihuZXh0Q2hhbGxlbmdlSGFzaGVyLCBmZE5ldywgXCJHMVwiLCA1LCAoMiAqKiBwb3dlcikgICAgICAgLCBcImJldGFUYXVHMVwiLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCBoYXNoU2VjdGlvbihuZXh0Q2hhbGxlbmdlSGFzaGVyLCBmZE5ldywgXCJHMlwiLCA2LCAxICAgICAgICAgICAgICAgICAgLCBcImJldGFHMlwiLCBsb2dnZXIpO1xuXG4gICAgICAgIGN1cnJlbnRDb250cmlidXRpb24ubmV4dENoYWxsZW5nZSA9IG5leHRDaGFsbGVuZ2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGN1cnJlbnRDb250cmlidXRpb24ubmV4dENoYWxsZW5nZSwgXCJOZXh0IENoYWxsZW5nZSBIYXNoOiBcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRDb250cmlidXRpb24ubmV4dENoYWxsZW5nZSA9IG5vSGFzaDtcbiAgICB9XG5cbiAgICBjb250cmlidXRpb25zLnB1c2goY3VycmVudENvbnRyaWJ1dGlvbik7XG5cbiAgICBhd2FpdCB1dGlscy53cml0ZUNvbnRyaWJ1dGlvbnMoZmROZXcsIGN1cnZlLCBjb250cmlidXRpb25zKTtcblxuICAgIGF3YWl0IGZkUmVzcG9uc2UuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gY3VycmVudENvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb24oZmRGcm9tLCBmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2luZ3VsYXJQb2ludEluZGV4ZXMsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGlmIChpbXBvcnRQb2ludHMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzU2VjdGlvbkltcG9ydFBvaW50cyhmZEZyb20sIGZkVG8sIGdyb3VwTmFtZSwgc2VjdGlvbklkLCBuUG9pbnRzLCBzaW5ndWxhclBvaW50SW5kZXhlcywgc2VjdGlvbk5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHByb2Nlc3NTZWN0aW9uTm9JbXBvcnRQb2ludHMoZmRGcm9tLCBmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2luZ3VsYXJQb2ludEluZGV4ZXMsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uSW1wb3J0UG9pbnRzKGZkRnJvbSwgZmRUbywgZ3JvdXBOYW1lLCBzZWN0aW9uSWQsIG5Qb2ludHMsIHNpbmd1bGFyUG9pbnRJbmRleGVzLCBzZWN0aW9uTmFtZSkge1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzY0cgPSBHLkYubjg7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG5cbiAgICAgICAgY29uc3Qgc2luZ3VsYXJQb2ludHMgPSBbXTtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmRUbywgc2VjdGlvbklkKTtcbiAgICAgICAgY29uc3QgblBvaW50c0NodW5rID0gTWF0aC5mbG9vcigoMTw8MjQpL3NHKTtcblxuICAgICAgICBzdGFydFNlY3Rpb25zW3NlY3Rpb25JZF0gPSBmZFRvLnBvcztcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkgKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEltcG9ydGluZyAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oblBvaW50cy1pLCBuUG9pbnRzQ2h1bmspO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmQyA9IGF3YWl0IGZkRnJvbS5yZWFkKG4gKiBzY0cpO1xuICAgICAgICAgICAgaGFzaGVyUmVzcG9uc2UudXBkYXRlKGJ1ZmZDKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkxFTSA9IGF3YWl0IEcuYmF0Y2hDdG9MRU0oYnVmZkMpO1xuXG4gICAgICAgICAgICBhd2FpdCBmZFRvLndyaXRlKGJ1ZmZMRU0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHNpbmd1bGFyUG9pbnRJbmRleGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3AgPSBzaW5ndWxhclBvaW50SW5kZXhlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNwID49aSkgJiYgKHNwIDwgaStuKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBQID0gRy5mcm9tUnByTEVNKGJ1ZmZMRU0sIChzcC1pKSpzRyk7XG4gICAgICAgICAgICAgICAgICAgIHNpbmd1bGFyUG9pbnRzLnB1c2goUCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZFRvKTtcblxuICAgICAgICByZXR1cm4gc2luZ3VsYXJQb2ludHM7XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbk5vSW1wb3J0UG9pbnRzKGZkRnJvbSwgZmRUbywgZ3JvdXBOYW1lLCBzZWN0aW9uSWQsIG5Qb2ludHMsIHNpbmd1bGFyUG9pbnRJbmRleGVzLCBzZWN0aW9uTmFtZSkge1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzY0cgPSBHLkYubjg7XG5cbiAgICAgICAgY29uc3Qgc2luZ3VsYXJQb2ludHMgPSBbXTtcblxuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc2NHKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkgKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEltcG9ydGluZyAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oblBvaW50cy1pLCBuUG9pbnRzQ2h1bmspO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmQyA9IGF3YWl0IGZkRnJvbS5yZWFkKG4gKiBzY0cpO1xuICAgICAgICAgICAgaGFzaGVyUmVzcG9uc2UudXBkYXRlKGJ1ZmZDKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHNpbmd1bGFyUG9pbnRJbmRleGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3AgPSBzaW5ndWxhclBvaW50SW5kZXhlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNwID49aSkgJiYgKHNwIDwgaStuKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBQID0gRy5mcm9tUnByQ29tcHJlc3NlZChidWZmQywgKHNwLWkpKnNjRyk7XG4gICAgICAgICAgICAgICAgICAgIHNpbmd1bGFyUG9pbnRzLnB1c2goUCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNpbmd1bGFyUG9pbnRzO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaFNlY3Rpb24obmV4dENoYWxsZW5nZUhhc2hlciwgZmRUbywgZ3JvdXBOYW1lLCBzZWN0aW9uSWQsIG5Qb2ludHMsIHNlY3Rpb25OYW1lLCBsb2dnZXIpIHtcblxuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3QgblBvaW50c0NodW5rID0gTWF0aC5mbG9vcigoMTw8MjQpL3NHKTtcblxuICAgICAgICBjb25zdCBvbGRQb3MgPSBmZFRvLnBvcztcbiAgICAgICAgZmRUby5wb3MgPSBzdGFydFNlY3Rpb25zW3NlY3Rpb25JZF07XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBuUG9pbnRzOyBpICs9IG5Qb2ludHNDaHVuaykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBIYXNoaW5nICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzLWksIG5Qb2ludHNDaHVuayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMRU0gPSBhd2FpdCBmZFRvLnJlYWQobiAqIHNHKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZlUgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKGJ1ZmZMRU0pO1xuXG4gICAgICAgICAgICBuZXh0Q2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShidWZmVSk7XG4gICAgICAgIH1cblxuICAgICAgICBmZFRvLnBvcyA9IG9sZFBvcztcbiAgICB9XG5cbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIGtleVBhaXIgZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgeyBDaGFDaGEsIEJpZ0J1ZmZlciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuY29uc3Qgc2FtZVJhdGlvID0gbWlzYy5zYW1lUmF0aW87XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUNvbnRyaWJ1dGlvbihjdXJ2ZSwgY3VyLCBwcmV2LCBsb2dnZXIpIHtcbiAgICBsZXQgc3I7XG4gICAgaWYgKGN1ci50eXBlID09IDEpIHsgICAgLy8gVmVyaWZ5IHRoZSBiZWFjb24uXG4gICAgICAgIGNvbnN0IGJlYWNvbktleSA9IGF3YWl0IHV0aWxzLmtleUZyb21CZWFjb24oY3VydmUsIHByZXYubmV4dENoYWxsZW5nZSwgY3VyLmJlYWNvbkhhc2gsIGN1ci5udW1JdGVyYXRpb25zRXhwKTtcblxuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ci5rZXkudGF1LmcxX3MsIGJlYWNvbktleS50YXUuZzFfcykpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAodGF1RzFfcykgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXIua2V5LnRhdS5nMV9zeCwgYmVhY29uS2V5LnRhdS5nMV9zeCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAodGF1RzFfc3gpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VydmUuRzIuZXEoY3VyLmtleS50YXUuZzJfc3B4LCBiZWFjb25LZXkudGF1LmcyX3NweCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAodGF1RzJfc3B4KSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoY3VyLmtleS5hbHBoYS5nMV9zLCBiZWFjb25LZXkuYWxwaGEuZzFfcykpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYWxwaGFHMV9zKSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ci5rZXkuYWxwaGEuZzFfc3gsIGJlYWNvbktleS5hbHBoYS5nMV9zeCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYWxwaGFHMV9zeCkgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMi5lcShjdXIua2V5LmFscGhhLmcyX3NweCwgYmVhY29uS2V5LmFscGhhLmcyX3NweCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYWxwaGFHMl9zcHgpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXIua2V5LmJldGEuZzFfcywgYmVhY29uS2V5LmJldGEuZzFfcykpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYmV0YUcxX3MpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoY3VyLmtleS5iZXRhLmcxX3N4LCBiZWFjb25LZXkuYmV0YS5nMV9zeCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYmV0YUcxX3N4KSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnZlLkcyLmVxKGN1ci5rZXkuYmV0YS5nMl9zcHgsIGJlYWNvbktleS5iZXRhLmcyX3NweCkpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgQkVBQ09OIGtleSAoYmV0YUcyX3NweCkgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjdXIua2V5LnRhdS5nMl9zcCA9IGN1cnZlLkcyLnRvQWZmaW5lKGtleVBhaXIuZ2V0RzJzcChjdXJ2ZSwgMCwgcHJldi5uZXh0Q2hhbGxlbmdlLCBjdXIua2V5LnRhdS5nMV9zLCBjdXIua2V5LnRhdS5nMV9zeCkpO1xuICAgIGN1ci5rZXkuYWxwaGEuZzJfc3AgPSBjdXJ2ZS5HMi50b0FmZmluZShrZXlQYWlyLmdldEcyc3AoY3VydmUsIDEsIHByZXYubmV4dENoYWxsZW5nZSwgY3VyLmtleS5hbHBoYS5nMV9zLCBjdXIua2V5LmFscGhhLmcxX3N4KSk7XG4gICAgY3VyLmtleS5iZXRhLmcyX3NwID0gY3VydmUuRzIudG9BZmZpbmUoa2V5UGFpci5nZXRHMnNwKGN1cnZlLCAyLCBwcmV2Lm5leHRDaGFsbGVuZ2UsIGN1ci5rZXkuYmV0YS5nMV9zLCBjdXIua2V5LmJldGEuZzFfc3gpKTtcblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBjdXIua2V5LnRhdS5nMV9zLCBjdXIua2V5LnRhdS5nMV9zeCwgY3VyLmtleS50YXUuZzJfc3AsIGN1ci5rZXkudGF1LmcyX3NweCk7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQga2V5ICh0YXUpIGluIGNoYWxsZW5nZSAjXCIrY3VyLmlkKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBjdXIua2V5LmFscGhhLmcxX3MsIGN1ci5rZXkuYWxwaGEuZzFfc3gsIGN1ci5rZXkuYWxwaGEuZzJfc3AsIGN1ci5rZXkuYWxwaGEuZzJfc3B4KTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRCBrZXkgKGFscGhhKSBpbiBjaGFsbGVuZ2UgI1wiK2N1ci5pZCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgY3VyLmtleS5iZXRhLmcxX3MsIGN1ci5rZXkuYmV0YS5nMV9zeCwgY3VyLmtleS5iZXRhLmcyX3NwLCBjdXIua2V5LmJldGEuZzJfc3B4KTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRCBrZXkgKGJldGEpIGluIGNoYWxsZW5nZSAjXCIrY3VyLmlkKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBwcmV2LnRhdUcxLCBjdXIudGF1RzEsIGN1ci5rZXkudGF1LmcyX3NwLCBjdXIua2V5LnRhdS5nMl9zcHgpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIHRhdSpHMS4gY2hhbGxlbmdlICNcIitjdXIuaWQrXCIgSXQgZG9lcyBub3QgZm9sbG93IHRoZSBwcmV2aW91cyBjb250cmlidXRpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgIGN1ci5rZXkudGF1LmcxX3MsIGN1ci5rZXkudGF1LmcxX3N4LCBwcmV2LnRhdUcyLCBjdXIudGF1RzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIHRhdSpHMi4gY2hhbGxlbmdlICNcIitjdXIuaWQrXCIgSXQgZG9lcyBub3QgZm9sbG93IHRoZSBwcmV2aW91cyBjb250cmlidXRpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgcHJldi5hbHBoYUcxLCBjdXIuYWxwaGFHMSwgY3VyLmtleS5hbHBoYS5nMl9zcCwgY3VyLmtleS5hbHBoYS5nMl9zcHgpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIGFscGhhKkcxLiBjaGFsbGVuZ2UgI1wiK2N1ci5pZCtcIiBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHByZXZpb3VzIGNvbnRyaWJ1dGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBwcmV2LmJldGFHMSwgY3VyLmJldGFHMSwgY3VyLmtleS5iZXRhLmcyX3NwLCBjdXIua2V5LmJldGEuZzJfc3B4KTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRCBiZXRhKkcxLiBjaGFsbGVuZ2UgI1wiK2N1ci5pZCtcIiBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHByZXZpb3VzIGNvbnRyaWJ1dGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCAgY3VyLmtleS5iZXRhLmcxX3MsIGN1ci5rZXkuYmV0YS5nMV9zeCwgcHJldi5iZXRhRzIsIGN1ci5iZXRhRzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIGJldGEqRzIuIGNoYWxsZW5nZSAjXCIrY3VyLmlkK1wiSXQgZG9lcyBub3QgZm9sbG93IHRoZSBwcmV2aW91cyBjb250cmlidXRpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlBvd2VycyBPZiB0YXUgZmlsZSBPSyFcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeSh0YXVGaWxlbmFtZSwgbG9nZ2VyKSB7XG4gICAgbGV0IHNyO1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSk7XG4gICAgY29uc3Qge2N1cnZlLCBwb3dlciwgY2VyZW1vbnlQb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZCwgc2VjdGlvbnMpO1xuICAgIGNvbnN0IGNvbnRycyA9IGF3YWl0IHV0aWxzLnJlYWRDb250cmlidXRpb25zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwicG93ZXI6IDIqKlwiICsgcG93ZXIpO1xuICAgIC8vIFZlcmlmeSBMYXN0IGNvbnRyaWJ1dGlvblxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQ29tcHV0aW5nIGluaXRpYWwgY29udHJpYnV0aW9uIGhhc2hcIik7XG4gICAgY29uc3QgaW5pdGlhbENvbnRyaWJ1dGlvbiA9IHtcbiAgICAgICAgdGF1RzE6IGN1cnZlLkcxLmcsXG4gICAgICAgIHRhdUcyOiBjdXJ2ZS5HMi5nLFxuICAgICAgICBhbHBoYUcxOiBjdXJ2ZS5HMS5nLFxuICAgICAgICBiZXRhRzE6IGN1cnZlLkcxLmcsXG4gICAgICAgIGJldGFHMjogY3VydmUuRzIuZyxcbiAgICAgICAgbmV4dENoYWxsZW5nZTogdXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBjZXJlbW9ueVBvd2VyLCBsb2dnZXIpLFxuICAgICAgICByZXNwb25zZUhhc2g6IEJsYWtlMmIoNjQpLmRpZ2VzdCgpXG4gICAgfTtcblxuICAgIGlmIChjb250cnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiVGhpcyBmaWxlIGhhcyBubyBjb250cmlidXRpb24hIEl0IGNhbm5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcHJldkNvbnRyO1xuICAgIGlmIChjb250cnMubGVuZ3RoPjEpIHtcbiAgICAgICAgcHJldkNvbnRyID0gY29udHJzW2NvbnRycy5sZW5ndGgtMl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJldkNvbnRyID0gaW5pdGlhbENvbnRyaWJ1dGlvbjtcbiAgICB9XG4gICAgY29uc3QgY3VyQ29udHIgPSBjb250cnNbY29udHJzLmxlbmd0aC0xXTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJWYWxpZGF0aW5nIGNvbnRyaWJ1dGlvbiAjXCIrY29udHJzW2NvbnRycy5sZW5ndGgtMV0uaWQpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHZlcmlmeUNvbnRyaWJ1dGlvbihjdXJ2ZSwgY3VyQ29udHIsIHByZXZDb250ciwgbG9nZ2VyKTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuXG5cbiAgICBjb25zdCBuZXh0Q29udHJpYnV0aW9uSGFzaGVyID0gQmxha2UyYig2NCk7XG4gICAgbmV4dENvbnRyaWJ1dGlvbkhhc2hlci51cGRhdGUoY3VyQ29udHIucmVzcG9uc2VIYXNoKTtcblxuICAgIC8vIFZlcmlmeSBwb3dlcnMgYW5kIGNvbXB1dGUgbmV4dENoYWxsZW5nZUhhc2hcblxuICAgIC8vIGF3YWl0IHRlc3QoKTtcblxuICAgIC8vIFZlcmlmeSBTZWN0aW9uIHRhdSpHMVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlZlcmlmeWluZyBwb3dlcnMgaW4gdGF1KkcxIHNlY3Rpb25cIik7XG4gICAgY29uc3QgclRhdTEgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigyLCBcIkcxXCIsIFwidGF1RzFcIiwgKDIgKiogcG93ZXIpKjItMSwgWzAsIDFdLCBsb2dnZXIpO1xuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCByVGF1MS5SMSwgclRhdTEuUjIsIGN1cnZlLkcyLmcsIGN1ckNvbnRyLnRhdUcyKTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwidGF1RzEgc2VjdGlvbi4gUG93ZXJzIGRvIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnZlLkcxLmVxKGN1cnZlLkcxLmcsIHJUYXUxLnNpbmd1bGFyUG9pbnRzWzBdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJGaXJzdCBlbGVtZW50IG9mIHRhdSpHMSBzZWN0aW9uIG11c3QgYmUgdGhlIGdlbmVyYXRvclwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ckNvbnRyLnRhdUcxLCByVGF1MS5zaW5ndWxhclBvaW50c1sxXSkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiU2Vjb25kIGVsZW1lbnQgb2YgdGF1KkcxIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2ggdGhlIG9uZSBpbiB0aGUgY29udHJpYnV0aW9uIHNlY3Rpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBhd2FpdCB0ZXN0KCk7XG5cbiAgICAvLyBWZXJpZnkgU2VjdGlvbiB0YXUqRzJcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJWZXJpZnlpbmcgcG93ZXJzIGluIHRhdSpHMiBzZWN0aW9uXCIpO1xuICAgIGNvbnN0IHJUYXUyID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oMywgXCJHMlwiLCBcInRhdUcyXCIsIDIgKiogcG93ZXIsIFswLCAxXSwgIGxvZ2dlcik7XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1cnZlLkcxLmcsIGN1ckNvbnRyLnRhdUcxLCByVGF1Mi5SMSwgclRhdTIuUjIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJ0YXVHMiBzZWN0aW9uLiBQb3dlcnMgZG8gbm90IG1hdGNoXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzIuZXEoY3VydmUuRzIuZywgclRhdTIuc2luZ3VsYXJQb2ludHNbMF0pKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkZpcnN0IGVsZW1lbnQgb2YgdGF1KkcyIHNlY3Rpb24gbXVzdCBiZSB0aGUgZ2VuZXJhdG9yXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzIuZXEoY3VyQ29udHIudGF1RzIsIHJUYXUyLnNpbmd1bGFyUG9pbnRzWzFdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJTZWNvbmQgZWxlbWVudCBvZiB0YXUqRzIgc2VjdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgb25lIGluIHRoZSBjb250cmlidXRpb24gc2VjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSBTZWN0aW9uIGFscGhhKnRhdSpHMVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlZlcmlmeWluZyBwb3dlcnMgaW4gYWxwaGEqdGF1KkcxIHNlY3Rpb25cIik7XG4gICAgY29uc3QgckFscGhhVGF1RzEgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbig0LCBcIkcxXCIsIFwiYWxwaGF0YXVHMVwiLCAyICoqIHBvd2VyLCBbMF0sIGxvZ2dlcik7XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIHJBbHBoYVRhdUcxLlIxLCByQWxwaGFUYXVHMS5SMiwgY3VydmUuRzIuZywgY3VyQ29udHIudGF1RzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJhbHBoYVRhdUcxIHNlY3Rpb24uIFBvd2VycyBkbyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXJDb250ci5hbHBoYUcxLCByQWxwaGFUYXVHMS5zaW5ndWxhclBvaW50c1swXSkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiRmlyc3QgZWxlbWVudCBvZiBhbHBoYSp0YXUqRzEgc2VjdGlvbiAoYWxwaGEqRzEpIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgaW4gdGhlIGNvbnRyaWJ1dGlvbiBzZWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IFNlY3Rpb24gYmV0YSp0YXUqRzFcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJWZXJpZnlpbmcgcG93ZXJzIGluIGJldGEqdGF1KkcxIHNlY3Rpb25cIik7XG4gICAgY29uc3QgckJldGFUYXVHMSA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDUsIFwiRzFcIiwgXCJiZXRhdGF1RzFcIiwgMiAqKiBwb3dlciwgWzBdLCBsb2dnZXIpO1xuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCByQmV0YVRhdUcxLlIxLCByQmV0YVRhdUcxLlIyLCBjdXJ2ZS5HMi5nLCBjdXJDb250ci50YXVHMik7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcImJldGFUYXVHMSBzZWN0aW9uLiBQb3dlcnMgZG8gbm90IG1hdGNoXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzEuZXEoY3VyQ29udHIuYmV0YUcxLCByQmV0YVRhdUcxLnNpbmd1bGFyUG9pbnRzWzBdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJGaXJzdCBlbGVtZW50IG9mIGJldGEqdGF1KkcxIHNlY3Rpb24gKGJldGEqRzEpIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgaW4gdGhlIGNvbnRyaWJ1dGlvbiBzZWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9WZXJpZnkgQmV0YSBHMlxuICAgIGNvbnN0IGJldGFHMiA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uQmV0YUcyKGxvZ2dlcik7XG4gICAgaWYgKCFjdXJ2ZS5HMi5lcShjdXJDb250ci5iZXRhRzIsIGJldGFHMikpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiYmV0YUcyIGVsZW1lbnQgaW4gYmV0YUcyIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2ggdGhlIG9uZSBpbiB0aGUgY29udHJpYnV0aW9uIHNlY3Rpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIGNvbnN0IG5leHRDb250cmlidXRpb25IYXNoID0gbmV4dENvbnRyaWJ1dGlvbkhhc2hlci5kaWdlc3QoKTtcblxuICAgIC8vIENoZWNrIHRoZSBuZXh0Q2hhbGxlbmdlSGFzaFxuICAgIGlmIChwb3dlciA9PSBjZXJlbW9ueVBvd2VyKSB7XG4gICAgICAgIGlmICghbWlzYy5oYXNoSXNFcXVhbChuZXh0Q29udHJpYnV0aW9uSGFzaCxjdXJDb250ci5uZXh0Q2hhbGxlbmdlKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSGFzaCBvZiB0aGUgdmFsdWVzIGRvZXMgbm90IG1hdGNoIHRoZSBuZXh0IGNoYWxsZW5nZSBvZiB0aGUgbGFzdCBjb250cmlidXRvciBpbiB0aGUgY29udHJpYnV0aW9ucyBzZWN0aW9uXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKG5leHRDb250cmlidXRpb25IYXNoLCBcIk5leHQgY2hhbGxlbmdlIGhhc2g6IFwiKSk7XG5cbiAgICAvLyBWZXJpZnkgUHJldmlvdXMgY29udHJpYnV0aW9uc1xuXG4gICAgcHJpbnRDb250cmlidXRpb24oY3VyQ29udHIsIHByZXZDb250cik7XG4gICAgZm9yIChsZXQgaSA9IGNvbnRycy5sZW5ndGgtMjsgaT49MDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGN1ckNvbnRyID0gY29udHJzW2ldO1xuICAgICAgICBjb25zdCBwcmV2Q29udHIgPSAgKGk+MCkgPyBjb250cnNbaS0xXSA6IGluaXRpYWxDb250cmlidXRpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHZlcmlmeUNvbnRyaWJ1dGlvbihjdXJ2ZSwgY3VyQ29udHIsIHByZXZDb250ciwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcHJpbnRDb250cmlidXRpb24oY3VyQ29udHIsIHByZXZDb250ciwgbG9nZ2VyKTtcbiAgICB9XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiKTtcblxuICAgIGlmICgoIXNlY3Rpb25zWzEyXSkgfHwgKCFzZWN0aW9uc1sxM10pIHx8ICghc2VjdGlvbnNbMTRdKSB8fCAoIXNlY3Rpb25zWzE1XSkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBcInRoaXMgZmlsZSBkb2VzIG5vdCBjb250YWluIHBoYXNlMiBwcmVjYWxjdWxhdGVkIHZhbHVlcy4gUGxlYXNlIHJ1bjogXFxuXCIgK1xuICAgICAgICAgICAgXCIgICBzbmFya2pzIFxcXCJwb3dlcnNvZnRhdSBwcmVwYXJlcGhhc2UyXFxcIiB0byBwcmVwYXJlIHRoaXMgZmlsZSB0byBiZSB1c2VkIGluIHRoZSBwaGFzZTIgY2VyZW1vbnkuXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzO1xuICAgICAgICByZXMgPSBhd2FpdCB2ZXJpZnlMYWdyYW5nZUV2YWx1YXRpb25zKFwiRzFcIiwgMiwgMTIsIFwidGF1RzFcIiwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmVzID0gYXdhaXQgdmVyaWZ5TGFncmFuZ2VFdmFsdWF0aW9ucyhcIkcyXCIsIDMsIDEzLCBcInRhdUcyXCIsIGxvZ2dlcik7XG4gICAgICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJlcyA9IGF3YWl0IHZlcmlmeUxhZ3JhbmdlRXZhbHVhdGlvbnMoXCJHMVwiLCA0LCAxNCwgXCJhbHBoYVRhdUcxXCIsIGxvZ2dlcik7XG4gICAgICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJlcyA9IGF3YWl0IHZlcmlmeUxhZ3JhbmdlRXZhbHVhdGlvbnMoXCJHMVwiLCA1LCAxNSwgXCJiZXRhVGF1RzFcIiwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJQb3dlcnMgb2YgVGF1IE9rIVwiKTtcblxuICAgIHJldHVybiB0cnVlO1xuXG4gICAgZnVuY3Rpb24gcHJpbnRDb250cmlidXRpb24oY3VyQ29udHIsIHByZXZDb250cikge1xuICAgICAgICBpZiAoIWxvZ2dlcikgcmV0dXJuO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29udHJpYnV0aW9uICMke2N1ckNvbnRyLmlkfTogJHtjdXJDb250ci5uYW1lIHx8XCJcIn1gKTtcblxuICAgICAgICBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY3VyQ29udHIubmV4dENoYWxsZW5nZSwgXCJOZXh0IENoYWxsZW5nZTogXCIpKTtcblxuICAgICAgICBjb25zdCBidWZmViAgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5HMS5GLm44KjIqNitjdXJ2ZS5HMi5GLm44KjIqMyk7XG4gICAgICAgIHV0aWxzLnRvUHRhdVB1YktleVJwcihidWZmViwgMCwgY3VydmUsIGN1ckNvbnRyLmtleSwgZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSGFzaGVyID0gQmxha2UyYig2NCk7XG4gICAgICAgIHJlc3BvbnNlSGFzaGVyLnNldFBhcnRpYWxIYXNoKGN1ckNvbnRyLnBhcnRpYWxIYXNoKTtcbiAgICAgICAgcmVzcG9uc2VIYXNoZXIudXBkYXRlKGJ1ZmZWKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIYXNoID0gcmVzcG9uc2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICAgICAgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKHJlc3BvbnNlSGFzaCwgXCJSZXNwb25zZSBIYXNoOlwiKSk7XG5cbiAgICAgICAgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKHByZXZDb250ci5uZXh0Q2hhbGxlbmdlLCBcIlJlc3BvbnNlIEhhc2g6XCIpKTtcblxuICAgICAgICBpZiAoY3VyQ29udHIudHlwZSA9PSAxKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgQmVhY29uIGdlbmVyYXRvcjogJHttaXNjLmJ5dGVBcnJheTJoZXgoY3VyQ29udHIuYmVhY29uSGFzaCl9YCk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgQmVhY29uIGl0ZXJhdGlvbnMgRXhwOiAke2N1ckNvbnRyLm51bUl0ZXJhdGlvbnNFeHB9YCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uQmV0YUcyKGxvZ2dlcikge1xuICAgICAgICBjb25zdCBHID0gY3VydmUuRzI7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgICAgIGNvbnN0IGJ1ZmZVdiA9IG5ldyBVaW50OEFycmF5KHNHKTtcblxuICAgICAgICBpZiAoIXNlY3Rpb25zWzZdKSAge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRmlsZSBoYXMgbm8gQmV0YUcyIHNlY3Rpb25cIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGhhcyBubyBCZXRhRzIgc2VjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdGlvbnNbNl0ubGVuZ3RoPjEpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkZpbGUgaGFzIG5vIEJldGFHMiBzZWN0aW9uXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBoYXMgbW9yZSB0aGFuIG9uZSBHZXRhRzIgc2VjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBmZC5wb3MgPSBzZWN0aW9uc1s2XVswXS5wO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKHNHKTtcbiAgICAgICAgY29uc3QgUCA9IEcuZnJvbVJwckxFTShidWZmKTtcblxuICAgICAgICBHLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmZVdiwgMCwgUCk7XG4gICAgICAgIG5leHRDb250cmlidXRpb25IYXNoZXIudXBkYXRlKGJ1ZmZVdik7XG5cbiAgICAgICAgcmV0dXJuIFA7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb24oaWRTZWN0aW9uLCBncm91cE5hbWUsIHNlY3Rpb25OYW1lLCBuUG9pbnRzLCBzaW5ndWxhclBvaW50SW5kZXhlcywgbG9nZ2VyKSB7XG4gICAgICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMTw8MTY7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIGlkU2VjdGlvbik7XG5cbiAgICAgICAgY29uc3Qgc2luZ3VsYXJQb2ludHMgPSBbXTtcblxuICAgICAgICBsZXQgUjEgPSBHLnplcm87XG4gICAgICAgIGxldCBSMiA9IEcuemVybztcblxuICAgICAgICBsZXQgbGFzdEJhc2UgPSBHLnplcm87XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgcG9pbnRzIHJlbGF0aW9uczogJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfSBgKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzIC0gaSwgTUFYX0NIVU5LX1NJWkUpO1xuICAgICAgICAgICAgY29uc3QgYmFzZXMgPSBhd2FpdCBmZC5yZWFkKG4qc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBiYXNlc1UgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKGJhc2VzKTtcbiAgICAgICAgICAgIG5leHRDb250cmlidXRpb25IYXNoZXIudXBkYXRlKGJhc2VzVSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxhcnMgPSBtaXNjLmdldFJhbmRvbUJ5dGVzKDQqKG4tMSkpO1xuXG4gICAgICAgICAgICBpZiAoaT4wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RCYXNlID0gRy5mcm9tUnByTEVNKGJhc2VzLCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gbWlzYy5yZWFkVUludDMyQkUobWlzYy5nZXRSYW5kb21CeXRlcyg0KSwgMCk7XG5cbiAgICAgICAgICAgICAgICBSMSA9IEcuYWRkKFIxLCBHLnRpbWVzU2NhbGFyKGxhc3RCYXNlLCByKSk7XG4gICAgICAgICAgICAgICAgUjIgPSBHLmFkZChSMiwgRy50aW1lc1NjYWxhcihmaXJzdEJhc2UsIHIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcjEgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJhc2VzLnNsaWNlKDAsIChuLTEpKnNHKSwgc2NhbGFycyk7XG4gICAgICAgICAgICBjb25zdCByMiA9IGF3YWl0IEcubXVsdGlFeHBBZmZpbmUoYmFzZXMuc2xpY2Uoc0cpLCBzY2FsYXJzKTtcblxuICAgICAgICAgICAgUjEgPSBHLmFkZChSMSwgcjEpO1xuICAgICAgICAgICAgUjIgPSBHLmFkZChSMiwgcjIpO1xuXG4gICAgICAgICAgICBsYXN0QmFzZSA9IEcuZnJvbVJwckxFTSggYmFzZXMsIChuLTEpKnNHKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHNpbmd1bGFyUG9pbnRJbmRleGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3AgPSBzaW5ndWxhclBvaW50SW5kZXhlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNwID49aSkgJiYgKHNwIDwgaStuKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBQID0gRy5mcm9tUnByTEVNKGJhc2VzLCAoc3AtaSkqc0cpO1xuICAgICAgICAgICAgICAgICAgICBzaW5ndWxhclBvaW50cy5wdXNoKFApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFIxOiBSMSxcbiAgICAgICAgICAgIFIyOiBSMixcbiAgICAgICAgICAgIHNpbmd1bGFyUG9pbnRzOiBzaW5ndWxhclBvaW50c1xuICAgICAgICB9O1xuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TGFncmFuZ2VFdmFsdWF0aW9ucyhnTmFtZSwgdGF1U2VjdGlvbiwgbGFncmFuZ2VTZWN0aW9uLCBzZWN0aW9uTmFtZSwgbG9nZ2VyKSB7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBWZXJpZnlpbmcgcGhhc2UyIGNhbGN1bGF0ZWQgdmFsdWVzICR7c2VjdGlvbk5hbWV9Li4uYCk7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtnTmFtZV07XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG5cbiAgICAgICAgY29uc3Qgc2VlZD0gbmV3IEFycmF5KDgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldID0gbWlzYy5yZWFkVUludDMyQkUobWlzYy5nZXRSYW5kb21CeXRlcyg0KSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBwPTA7IHA8PSBwb3dlcjsgcCArKykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdmVyaWZ5UG93ZXIocCk7XG4gICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhdVNlY3Rpb24gPT0gMikge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdmVyaWZ5UG93ZXIocG93ZXIrMSk7XG4gICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5UG93ZXIocCkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBQb3dlciAke3B9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBuOHIgPSBjdXJ2ZS5Gci5uODtcbiAgICAgICAgICAgIGNvbnN0IG5Qb2ludHMgPSAyICoqIHA7XG4gICAgICAgICAgICBsZXQgYnVmZl9yID0gbmV3IFVpbnQzMkFycmF5KG5Qb2ludHMpO1xuICAgICAgICAgICAgbGV0IGJ1ZmZHO1xuXG4gICAgICAgICAgICBsZXQgcm5nID0gbmV3IENoYUNoYShzZWVkKTtcblxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBDcmVhdGluZyByYW5kb20gbnVtYmVycyBQb3dlcnMke3B9Li4uYCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwID09IHBvd2VyKzEpJiYoaSA9PSBuUG9pbnRzLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZfcltpXSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZl9yW2ldID0gcm5nLm5leHRVMzIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJ1ZmZfciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZfci5idWZmZXIsIGJ1ZmZfci5ieXRlT2Zmc2V0LCBidWZmX3IuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgcmVhZGluZyBwb2ludHMgUG93ZXJzJHtwfS4uLmApO1xuICAgICAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCB0YXVTZWN0aW9uKTtcbiAgICAgICAgICAgIGJ1ZmZHID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGlmIChwID09IHBvd2VyKzEpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZC5yZWFkVG9CdWZmZXIoYnVmZkcsIDAsIChuUG9pbnRzLTEpKnNHKTtcbiAgICAgICAgICAgICAgICBidWZmRy5zZXQoY3VydmUuRzEuemVyb0FmZmluZSwgKG5Qb2ludHMtMSkqc0cpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZC5yZWFkVG9CdWZmZXIoYnVmZkcsIDAsIG5Qb2ludHMqc0cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkLCB0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzVGF1ID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShidWZmRywgYnVmZl9yLCBsb2dnZXIsIHNlY3Rpb25OYW1lICsgXCJfXCIgKyBwKTtcblxuICAgICAgICAgICAgYnVmZl9yID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzICogbjhyKTtcblxuICAgICAgICAgICAgcm5nID0gbmV3IENoYUNoYShzZWVkKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZjQgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmY0ViA9IG5ldyBEYXRhVmlldyhidWZmNC5idWZmZXIpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYENyZWF0aW5nIHJhbmRvbSBudW1iZXJzIFBvd2VycyR7cH0uLi5gKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoKGkgIT0gblBvaW50cy0xKSB8fCAocCAhPSBwb3dlcisxKSkge1xuICAgICAgICAgICAgICAgICAgICBidWZmNFYuc2V0VWludDMyKDAsIHJuZy5uZXh0VTMyKCksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBidWZmX3Iuc2V0KGJ1ZmY0LCBpKm44cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYGJhdGNoVG9Nb250Z29tZXJ5ICR7cH0uLi5gKTtcbiAgICAgICAgICAgIGJ1ZmZfciA9IGF3YWl0IGN1cnZlLkZyLmJhdGNoVG9Nb250Z29tZXJ5KGJ1ZmZfcik7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYGZmdCAke3B9Li4uYCk7XG4gICAgICAgICAgICBidWZmX3IgPSBhd2FpdCBjdXJ2ZS5Gci5mZnQoYnVmZl9yKTtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgYmF0Y2hGcm9tTW9udGdvbWVyeSAke3B9Li4uYCk7XG4gICAgICAgICAgICBidWZmX3IgPSBhd2FpdCBjdXJ2ZS5Gci5iYXRjaEZyb21Nb250Z29tZXJ5KGJ1ZmZfcik7XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgcmVhZGluZyBwb2ludHMgTGFncmFuZ2Uke3B9Li4uYCk7XG4gICAgICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIGxhZ3JhbmdlU2VjdGlvbik7XG4gICAgICAgICAgICBmZC5wb3MgKz0gc0cqKCgyICoqIHApLTEpO1xuICAgICAgICAgICAgYXdhaXQgZmQucmVhZFRvQnVmZmVyKGJ1ZmZHLCAwLCBuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc0xhZ3JhbmdlID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShidWZmRywgYnVmZl9yLCBsb2dnZXIsIHNlY3Rpb25OYW1lICsgXCJfXCIgKyBwICsgXCJfdHJhbnNmb3JtZWRcIik7XG5cbiAgICAgICAgICAgIGlmICghRy5lcShyZXNUYXUsIHJlc0xhZ3JhbmdlKSkge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIlBoYXNlMiBjYWNsdXRhdGlvbiBkb2VzIG5vdCBtYXRjaCB3aXRoIHBvd2VycyBvZiB0YXVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG4vKlxuICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBzZWN0aW9uIGluIHRoZSBmZFRvIGZpbGUgd2l0aCBpZCBpZFNlY3Rpb24uXG4gICAgSXQgbXVsdGlwbGllcyB0aGUgcG9vaW50cyBpbiBmZEZyb20gYnkgZmlyc3QsIGZpcnN0KmluYywgZmlyc3QqaW5jXjIsIC4uLi5cbiAgICBuUG9pbnQgVGltZXMuXG4gICAgSXQgYWxzbyB1cGRhdGVzIHRoZSBuZXdDaGFsbGVuZ2VIYXNoZXIgd2l0aCB0aGUgbmV3IHBvaW50c1xuKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIGlkU2VjdGlvbiwgY3VydmUsIGdyb3VwTmFtZSwgZmlyc3QsIGluYywgc2VjdGlvbk5hbWUsIGxvZ2dlcikge1xuICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMSA8PCAxNjtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgIGNvbnN0IG5Qb2ludHMgPSBzZWN0aW9uc1tpZFNlY3Rpb25dWzBdLnNpemUgLyBzRztcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucyxpZFNlY3Rpb24gKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmROZXcsIGlkU2VjdGlvbik7XG5cbiAgICBsZXQgdCA9IGZpcnN0O1xuICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpICs9IE1BWF9DSFVOS19TSVpFKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgQXBwbHlpbmcga2V5OiAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgIGNvbnN0IG49IE1hdGgubWluKG5Qb2ludHMgLSBpLCBNQVhfQ0hVTktfU0laRSk7XG4gICAgICAgIGxldCBidWZmO1xuICAgICAgICBidWZmID0gYXdhaXQgZmRPbGQucmVhZChuKnNHKTtcbiAgICAgICAgYnVmZiA9IGF3YWl0IEcuYmF0Y2hBcHBseUtleShidWZmLCB0LCBpbmMpO1xuICAgICAgICBhd2FpdCBmZE5ldy53cml0ZShidWZmKTtcbiAgICAgICAgdCA9IGN1cnZlLkZyLm11bCh0LCBjdXJ2ZS5Gci5leHAoaW5jLCBuKSk7XG4gICAgfVxuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZE5ldyk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkT2xkKTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZE9sZCwgZmROZXcsIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgZ3JvdXBOYW1lLCBuUG9pbnRzLCBmaXJzdCwgaW5jLCBmb3JtYXRPdXQsIHNlY3Rpb25OYW1lLCBsb2dnZXIpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IE1hdGguZmxvb3IoKDE8PDIwKSAvIHNHKTsgICAvLyAxMjhNYiBjaHVua3NcbiAgICBsZXQgdCA9IGZpcnN0O1xuICAgIGZvciAobGV0IGk9MCA7IGk8blBvaW50cyA7IGkrPSBjaHVua1NpemUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBBcHBseWluZyBrZXkgJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICBjb25zdCBuPSBNYXRoLm1pbihuUG9pbnRzLWksIGNodW5rU2l6ZSApO1xuICAgICAgICBjb25zdCBidWZmSW5VID0gYXdhaXQgZmRPbGQucmVhZChuICogc0cpO1xuICAgICAgICBjb25zdCBidWZmSW5MRU0gPSBhd2FpdCBHLmJhdGNoVXRvTEVNKGJ1ZmZJblUpO1xuICAgICAgICBjb25zdCBidWZmT3V0TEVNID0gYXdhaXQgRy5iYXRjaEFwcGx5S2V5KGJ1ZmZJbkxFTSwgdCwgaW5jKTtcbiAgICAgICAgbGV0IGJ1ZmZPdXQ7XG4gICAgICAgIGlmIChmb3JtYXRPdXQgPT0gXCJDT01QUkVTU0VEXCIpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBhd2FpdCBHLmJhdGNoTEVNdG9DKGJ1ZmZPdXRMRU0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZk91dCA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYnVmZk91dExFTSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2VIYXNoZXIpIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShidWZmT3V0KTtcbiAgICAgICAgYXdhaXQgZmROZXcud3JpdGUoYnVmZk91dCk7XG4gICAgICAgIHQgPSBjdXJ2ZS5Gci5tdWwodCwgY3VydmUuRnIuZXhwKGluYywgbikpO1xuICAgIH1cbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLy8gRm9ybWF0IG9mIHRoZSBvdXRwdXRcbi8vICAgICAgSGFzaCBvZiB0aGUgbGFzdCBjb250cmlidXRpb24gIDY0IEJ5dGVzXG4vLyAgICAgIDJeTioyLTEgVGF1RzEgUG9pbnRzIChjb21wcmVzc2VkKVxuLy8gICAgICAyXk4gVGF1RzIgUG9pbnRzIChjb21wcmVzc2VkKVxuLy8gICAgICAyXk4gQWxwaGFUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBCZXRhVGF1RzEgUG9pbnRzIChjb21wcmVzc2VkKVxuLy8gICAgICBQdWJsaWMgS2V5XG4vLyAgICAgICAgICBCZXRhRzIgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSpzIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzEqcyp0YXUgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSp0IChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzEqdCphbHBoYSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnUgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSp1KmJldGEgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMipzcCp0YXUgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMip0cCphbHBoYSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnVwKmJldGEgKGNvbXByZXNzZWQpXG5cbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IHsgYXBwbHlLZXlUb0NoYWxsZW5nZVNlY3Rpb24gfSBmcm9tIFwiLi9tcGNfYXBwbHlrZXkuanNcIjtcbmltcG9ydCAqIGFzIGtleVBhaXIgZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjaGFsbGVuZ2VDb250cmlidXRlKGN1cnZlLCBjaGFsbGVuZ2VGaWxlbmFtZSwgcmVzcG9uZXNGaWxlTmFtZSwgZW50cm9weSwgbG9nZ2VyKSB7XG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3QgZmRGcm9tID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKGNoYWxsZW5nZUZpbGVuYW1lKTtcblxuXG4gICAgY29uc3Qgc0cxID0gY3VydmUuRjEubjY0KjgqMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5GMi5uNjQqOCoyO1xuICAgIGNvbnN0IGRvbWFpblNpemUgPSAoZmRGcm9tLnRvdGFsU2l6ZSArIHNHMSAtIDY0IC0gc0cyKSAvICg0KnNHMSArIHNHMik7XG4gICAgbGV0IGUgPSBkb21haW5TaXplO1xuICAgIGxldCBwb3dlciA9IDA7XG4gICAgd2hpbGUgKGU+MSkge1xuICAgICAgICBlID0gZSAvMjtcbiAgICAgICAgcG93ZXIgKz0gMTtcbiAgICB9XG5cbiAgICBpZiAoMiAqKiBwb3dlciAhPSBkb21haW5TaXplKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGZpbGUgc2l6ZVwiKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJQb3dlciB0byB0YXUgc2l6ZTogXCIrcG93ZXIpO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5nZXRSYW5kb21SbmcoZW50cm9weSk7XG5cbiAgICBjb25zdCBmZFRvID0gYXdhaXQgZmFzdEZpbGUuY3JlYXRlT3ZlcnJpZGUocmVzcG9uZXNGaWxlTmFtZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGhhc2hcbiAgICBjb25zdCBjaGFsbGVuZ2VIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8ZmRGcm9tLnRvdGFsU2l6ZTsgaSs9IGZkRnJvbS5wYWdlU2l6ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEhhc2hpbmcgY2hhbGxlbmdlICR7aX0vJHtmZEZyb20udG90YWxTaXplfWApO1xuICAgICAgICBjb25zdCBzID0gTWF0aC5taW4oZmRGcm9tLnRvdGFsU2l6ZSAtIGksIGZkRnJvbS5wYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZEZyb20ucmVhZChzKTtcbiAgICAgICAgY2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShidWZmKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbWVkSGFzaCA9IGF3YWl0IGZkRnJvbS5yZWFkKDY0LCAwKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY2xhaW1lZEhhc2gsIFwiQ2xhaW1lZCBQcmV2aW91cyBSZXNwb25zZSBIYXNoOiBcIikpO1xuXG4gICAgY29uc3QgY2hhbGxlbmdlSGFzaCA9IGNoYWxsZW5nZUhhc2hlci5kaWdlc3QoKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY2hhbGxlbmdlSGFzaCwgXCJDdXJyZW50IENoYWxsZW5nZSBIYXNoOiBcIikpO1xuXG4gICAgY29uc3Qga2V5ID0ga2V5UGFpci5jcmVhdGVQVGF1S2V5KGN1cnZlLCBjaGFsbGVuZ2VIYXNoLCBybmcpO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBbXCJ0YXVcIiwgXCJhbHBoYVwiLCBcImJldGFcIl0uZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhrICsgXCIuZzFfczogXCIgKyBjdXJ2ZS5HMS50b1N0cmluZyhrZXlba10uZzFfcywgMTYpKTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhrICsgXCIuZzFfc3g6IFwiICsgY3VydmUuRzEudG9TdHJpbmcoa2V5W2tdLmcxX3N4LCAxNikpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGsgKyBcIi5nMl9zcDogXCIgKyBjdXJ2ZS5HMi50b1N0cmluZyhrZXlba10uZzJfc3AsIDE2KSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoayArIFwiLmcyX3NweDogXCIgKyBjdXJ2ZS5HMi50b1N0cmluZyhrZXlba10uZzJfc3B4LCAxNikpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZUhhc2hlciA9IEJsYWtlMmIoNjQpO1xuXG4gICAgYXdhaXQgZmRUby53cml0ZShjaGFsbGVuZ2VIYXNoKTtcbiAgICByZXNwb25zZUhhc2hlci51cGRhdGUoY2hhbGxlbmdlSGFzaCk7XG5cbiAgICBhd2FpdCBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZEZyb20sIGZkVG8sIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgXCJHMVwiLCAoMiAqKiBwb3dlcikqMi0xLCBjdXJ2ZS5Gci5vbmUgICAgLCBrZXkudGF1LnBydktleSwgXCJDT01QUkVTU0VEXCIsIFwidGF1RzFcIiAgICAgLCBsb2dnZXIgKTtcbiAgICBhd2FpdCBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZEZyb20sIGZkVG8sIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgXCJHMlwiLCAoMiAqKiBwb3dlcikgICAgLCBjdXJ2ZS5Gci5vbmUgICAgLCBrZXkudGF1LnBydktleSwgXCJDT01QUkVTU0VEXCIsIFwidGF1RzJcIiAgICAgLCBsb2dnZXIgKTtcbiAgICBhd2FpdCBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZEZyb20sIGZkVG8sIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgXCJHMVwiLCAoMiAqKiBwb3dlcikgICAgLCBrZXkuYWxwaGEucHJ2S2V5LCBrZXkudGF1LnBydktleSwgXCJDT01QUkVTU0VEXCIsIFwiYWxwaGFUYXVHMVwiLCBsb2dnZXIgKTtcbiAgICBhd2FpdCBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZEZyb20sIGZkVG8sIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgXCJHMVwiLCAoMiAqKiBwb3dlcikgICAgLCBrZXkuYmV0YS5wcnZLZXkgLCBrZXkudGF1LnBydktleSwgXCJDT01QUkVTU0VEXCIsIFwiYmV0YVRhdUcxXCIgLCBsb2dnZXIgKTtcbiAgICBhd2FpdCBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbihmZEZyb20sIGZkVG8sIHJlc3BvbnNlSGFzaGVyLCBjdXJ2ZSwgXCJHMlwiLCAxICAgICAgICAgICAgICwga2V5LmJldGEucHJ2S2V5ICwga2V5LnRhdS5wcnZLZXksIFwiQ09NUFJFU1NFRFwiLCBcImJldGFUYXVHMlwiICwgbG9nZ2VyICk7XG5cbiAgICAvLyBXcml0ZSBhbmQgaGFzaCBrZXlcbiAgICBjb25zdCBidWZmS2V5ID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjEubjgqMio2K2N1cnZlLkYyLm44KjIqMyk7XG4gICAgdXRpbHMudG9QdGF1UHViS2V5UnByKGJ1ZmZLZXksIDAsIGN1cnZlLCBrZXksIGZhbHNlKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlKGJ1ZmZLZXkpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShidWZmS2V5KTtcbiAgICBjb25zdCByZXNwb25zZUhhc2ggPSByZXNwb25zZUhhc2hlci5kaWdlc3QoKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gocmVzcG9uc2VIYXNoLCBcIkNvbnRyaWJ1dGlvbiBSZXNwb25zZSBIYXNoOiBcIikpO1xuXG4gICAgYXdhaXQgZmRUby5jbG9zZSgpO1xuICAgIGF3YWl0IGZkRnJvbS5jbG9zZSgpO1xufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYmVhY29uKG9sZFB0YXVGaWxlbmFtZSwgbmV3UFRhdUZpbGVuYW1lLCBuYW1lLCAgYmVhY29uSGFzaFN0cixudW1JdGVyYXRpb25zRXhwLCBsb2dnZXIpIHtcbiAgICBjb25zdCBiZWFjb25IYXNoID0gbWlzYy5oZXgyQnl0ZUFycmF5KGJlYWNvbkhhc2hTdHIpO1xuICAgIGlmICggICAoYmVhY29uSGFzaC5ieXRlTGVuZ3RoID09IDApXG4gICAgICAgIHx8IChiZWFjb25IYXNoLmJ5dGVMZW5ndGgqMiAhPWJlYWNvbkhhc2hTdHIubGVuZ3RoKSlcbiAgICB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgQmVhY29uIEhhc2guIChJdCBtdXN0IGJlIGEgdmFsaWQgaGV4YWRlY2ltYWwgc2VxdWVuY2UpXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChiZWFjb25IYXNoLmxlbmd0aD49MjU2KSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIk1heGltdW0gbGVuZ2h0IG9mIGJlYWNvbiBoYXNoIGlzIDI1NSBieXRlc1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG51bUl0ZXJhdGlvbnNFeHAgPSBwYXJzZUludChudW1JdGVyYXRpb25zRXhwKTtcbiAgICBpZiAoKG51bUl0ZXJhdGlvbnNFeHA8MTApfHwobnVtSXRlcmF0aW9uc0V4cD42MykpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBudW1JdGVyYXRpb25zRXhwLiAoTXVzdCBiZSBiZXR3ZWVuIDEwIGFuZCA2MylcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShvbGRQdGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyLCBjZXJlbW9ueVBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkT2xkLCBzZWN0aW9ucyk7XG4gICAgaWYgKHBvd2VyICE9IGNlcmVtb255UG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiVGhpcyBmaWxlIGhhcyBiZWVuIHJlZHVjZWQuIFlvdSBjYW5ub3QgY29udHJpYnV0ZSBpbnRvIGEgcmVkdWNlZCBmaWxlLlwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc2VjdGlvbnNbMTJdKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci53YXJuKFwiQ29udHJpYnV0aW5nIGludG8gYSBmaWxlIHRoYXQgaGFzIHBoYXNlMiBjYWxjdWxhdGVkLiBZb3Ugd2lsbCBoYXZlIHRvIHByZXBhcmUgcGhhc2UyIGFnYWluLlwiKTtcbiAgICB9XG4gICAgY29uc3QgY29udHJpYnV0aW9ucyA9IGF3YWl0IHV0aWxzLnJlYWRDb250cmlidXRpb25zKGZkT2xkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuICAgIGNvbnN0IGN1ckNvbnRyaWJ1dGlvbiA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdHlwZTogMSwgLy8gQmVhY29uXG4gICAgICAgIG51bUl0ZXJhdGlvbnNFeHA6IG51bUl0ZXJhdGlvbnNFeHAsXG4gICAgICAgIGJlYWNvbkhhc2g6IGJlYWNvbkhhc2hcbiAgICB9O1xuXG4gICAgbGV0IGxhc3RDaGFsbGVuZ2VIYXNoO1xuXG4gICAgaWYgKGNvbnRyaWJ1dGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgbGFzdENoYWxsZW5nZUhhc2ggPSBjb250cmlidXRpb25zW2NvbnRyaWJ1dGlvbnMubGVuZ3RoLTFdLm5leHRDaGFsbGVuZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdENoYWxsZW5nZUhhc2ggPSB1dGlscy5jYWxjdWxhdGVGaXJzdENoYWxsZW5nZUhhc2goY3VydmUsIHBvd2VyLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGN1ckNvbnRyaWJ1dGlvbi5rZXkgPSBhd2FpdCB1dGlscy5rZXlGcm9tQmVhY29uKGN1cnZlLCBsYXN0Q2hhbGxlbmdlSGFzaCwgYmVhY29uSGFzaCwgbnVtSXRlcmF0aW9uc0V4cCk7XG5cbiAgICBjb25zdCByZXNwb25zZUhhc2hlciA9IG5ldyBCbGFrZTJiKDY0KTtcbiAgICByZXNwb25zZUhhc2hlci51cGRhdGUobGFzdENoYWxsZW5nZUhhc2gpO1xuXG4gICAgY29uc3QgZmROZXcgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZShuZXdQVGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxLCA3KTtcbiAgICBhd2FpdCB1dGlscy53cml0ZVBUYXVIZWFkZXIoZmROZXcsIGN1cnZlLCBwb3dlcik7XG5cbiAgICBjb25zdCBzdGFydFNlY3Rpb25zID0gW107XG5cbiAgICBsZXQgZmlyc3RQb2ludHM7XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigyLCBcIkcxXCIsICAoMiAqKiBwb3dlcikgKiAyIC0xLCBjdXJ2ZS5Gci5lKDEpLCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwidGF1RzFcIiwgbG9nZ2VyICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLnRhdUcxID0gZmlyc3RQb2ludHNbMV07XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigzLCBcIkcyXCIsICAoMiAqKiBwb3dlcikgLCBjdXJ2ZS5Gci5lKDEpLCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwidGF1RzJcIiwgbG9nZ2VyICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLnRhdUcyID0gZmlyc3RQb2ludHNbMV07XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbig0LCBcIkcxXCIsICAoMiAqKiBwb3dlcikgLCBjdXJDb250cmlidXRpb24ua2V5LmFscGhhLnBydktleSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcImFscGhhVGF1RzFcIiwgbG9nZ2VyICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmFscGhhRzEgPSBmaXJzdFBvaW50c1swXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDUsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAsIGN1ckNvbnRyaWJ1dGlvbi5rZXkuYmV0YS5wcnZLZXksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJiZXRhVGF1RzFcIiwgbG9nZ2VyICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmJldGFHMSA9IGZpcnN0UG9pbnRzWzBdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNiwgXCJHMlwiLCAgMSwgY3VyQ29udHJpYnV0aW9uLmtleS5iZXRhLnBydktleSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcImJldGFUYXVHMlwiLCBsb2dnZXIgKTtcbiAgICBjdXJDb250cmlidXRpb24uYmV0YUcyID0gZmlyc3RQb2ludHNbMF07XG5cbiAgICBjdXJDb250cmlidXRpb24ucGFydGlhbEhhc2ggPSByZXNwb25zZUhhc2hlci5nZXRQYXJ0aWFsSGFzaCgpO1xuXG4gICAgY29uc3QgYnVmZktleSA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkYxLm44KjIqNitjdXJ2ZS5GMi5uOCoyKjMpO1xuXG4gICAgdXRpbHMudG9QdGF1UHViS2V5UnByKGJ1ZmZLZXksIDAsIGN1cnZlLCBjdXJDb250cmlidXRpb24ua2V5LCBmYWxzZSk7XG5cbiAgICByZXNwb25zZUhhc2hlci51cGRhdGUobmV3IFVpbnQ4QXJyYXkoYnVmZktleSkpO1xuICAgIGNvbnN0IGhhc2hSZXNwb25zZSA9IHJlc3BvbnNlSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGhhc2hSZXNwb25zZSwgXCJDb250cmlidXRpb24gUmVzcG9uc2UgSGFzaCBpbXBvcnRlZDogXCIpKTtcblxuICAgIGNvbnN0IG5leHRDaGFsbGVuZ2VIYXNoZXIgPSBuZXcgQmxha2UyYig2NCk7XG4gICAgbmV4dENoYWxsZW5nZUhhc2hlci51cGRhdGUoaGFzaFJlc3BvbnNlKTtcblxuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcxXCIsIDIsICgyICoqIHBvd2VyKSAqIDIgLTEsIFwidGF1RzFcIiwgbG9nZ2VyKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMlwiLCAzLCAoMiAqKiBwb3dlcikgICAgICAgLCBcInRhdUcyXCIsIGxvZ2dlcik7XG4gICAgYXdhaXQgaGFzaFNlY3Rpb24oZmROZXcsIFwiRzFcIiwgNCwgKDIgKiogcG93ZXIpICAgICAgICwgXCJhbHBoYVRhdUcxXCIsIGxvZ2dlcik7XG4gICAgYXdhaXQgaGFzaFNlY3Rpb24oZmROZXcsIFwiRzFcIiwgNSwgKDIgKiogcG93ZXIpICAgICAgICwgXCJiZXRhVGF1RzFcIiwgbG9nZ2VyKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMlwiLCA2LCAxICAgICAgICAgICAgICAgICAgLCBcImJldGFHMlwiLCBsb2dnZXIpO1xuXG4gICAgY3VyQ29udHJpYnV0aW9uLm5leHRDaGFsbGVuZ2UgPSBuZXh0Q2hhbGxlbmdlSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGN1ckNvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlLCBcIk5leHQgQ2hhbGxlbmdlIEhhc2g6IFwiKSk7XG5cbiAgICBjb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHV0aWxzLndyaXRlQ29udHJpYnV0aW9ucyhmZE5ldywgY3VydmUsIGNvbnRyaWJ1dGlvbnMpO1xuXG4gICAgYXdhaXQgZmRPbGQuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIGhhc2hSZXNwb25zZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uKHNlY3Rpb25JZCwgZ3JvdXBOYW1lLCBOUG9pbnRzLCBmaXJzdCwgaW5jLCBzZWN0aW9uTmFtZSwgbG9nZ2VyKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICBmZE9sZC5wb3MgPSBzZWN0aW9uc1tzZWN0aW9uSWRdWzBdLnA7XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkTmV3LCBzZWN0aW9uSWQpO1xuXG4gICAgICAgIHN0YXJ0U2VjdGlvbnNbc2VjdGlvbklkXSA9IGZkTmV3LnBvcztcblxuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5mbG9vcigoMTw8MjApIC8gc0cpOyAgIC8vIDEyOE1iIGNodW5rc1xuICAgICAgICBsZXQgdCA9IGZpcnN0O1xuICAgICAgICBmb3IgKGxldCBpPTAgOyBpPE5Qb2ludHMgOyBpKz0gY2h1bmtTaXplKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYGFwcGx5aW5nIGtleSR7c2VjdGlvbk5hbWV9OiAke2l9LyR7TlBvaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG49IE1hdGgubWluKE5Qb2ludHMtaSwgY2h1bmtTaXplICk7XG4gICAgICAgICAgICBjb25zdCBidWZmSW4gPSBhd2FpdCBmZE9sZC5yZWFkKG4gKiBzRyk7XG4gICAgICAgICAgICBjb25zdCBidWZmT3V0TEVNID0gYXdhaXQgRy5iYXRjaEFwcGx5S2V5KGJ1ZmZJbiwgdCwgaW5jKTtcblxuICAgICAgICAgICAgLyogQ29kZSB0byB0ZXN0IHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgdGhlIDJebS0yIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKHNlY3Rpb25OYW1lPT0gXCJ0YXVHMVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnogPSBuZXcgVWludDhBcnJheSg2NCk7XG4gICAgICAgICAgICAgICAgYnVmZk91dExFTS5zZXQoYnosIDY0KigoMiAqKiBwb3dlcikgLSAxICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZVdyaXRlID0gZmROZXcud3JpdGUoYnVmZk91dExFTSk7XG4gICAgICAgICAgICBjb25zdCBidWZmT3V0QyA9IGF3YWl0IEcuYmF0Y2hMRU10b0MoYnVmZk91dExFTSk7XG5cbiAgICAgICAgICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShidWZmT3V0Qyk7XG4gICAgICAgICAgICBhd2FpdCBwcm9taXNlV3JpdGU7XG4gICAgICAgICAgICBpZiAoaT09MCkgICAvLyBSZXR1cm4gdGhlIDIgZmlyc3QgcG9pbnRzLlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxNYXRoLm1pbigyLCBOUG9pbnRzKTsgaisrKVxuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChHLmZyb21ScHJMRU0oYnVmZk91dExFTSwgaipzRykpO1xuICAgICAgICAgICAgdCA9IGN1cnZlLkZyLm11bCh0LCBjdXJ2ZS5Gci5leHAoaW5jLCBuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkTmV3KTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaFNlY3Rpb24oZmRUbywgZ3JvdXBOYW1lLCBzZWN0aW9uSWQsIG5Qb2ludHMsIHNlY3Rpb25OYW1lLCBsb2dnZXIpIHtcblxuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3QgblBvaW50c0NodW5rID0gTWF0aC5mbG9vcigoMTw8MjQpL3NHKTtcblxuICAgICAgICBjb25zdCBvbGRQb3MgPSBmZFRvLnBvcztcbiAgICAgICAgZmRUby5wb3MgPSBzdGFydFNlY3Rpb25zW3NlY3Rpb25JZF07XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBuUG9pbnRzOyBpICs9IG5Qb2ludHNDaHVuaykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBIYXNoaW5nICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzLWksIG5Qb2ludHNDaHVuayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMRU0gPSBhd2FpdCBmZFRvLnJlYWQobiAqIHNHKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZlUgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKGJ1ZmZMRU0pO1xuXG4gICAgICAgICAgICBuZXh0Q2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShidWZmVSk7XG4gICAgICAgIH1cblxuICAgICAgICBmZFRvLnBvcyA9IG9sZFBvcztcbiAgICB9XG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIEZvcm1hdCBvZiB0aGUgb3V0cHV0XG4vLyAgICAgIEhhc2ggb2YgdGhlIGxhc3QgY29udHJpYnV0aW9uICA2NCBCeXRlc1xuLy8gICAgICAyXk4qMi0xIFRhdUcxIFBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgICAyXk4gVGF1RzIgUG9pbnRzICh1bmNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBBbHBoYVRhdUcxIFBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgICAyXk4gQmV0YVRhdUcxIFBvaW50cyAodW5jb21wcmVzc2VkKVxuXG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMga2V5UGFpciBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjb250cmlidXRlKG9sZFB0YXVGaWxlbmFtZSwgbmV3UFRhdUZpbGVuYW1lLCBuYW1lLCBlbnRyb3B5LCBsb2dnZXIpIHtcbiAgICBhd2FpdCBCbGFrZTJiLnJlYWR5KCk7XG5cbiAgICBjb25zdCB7ZmQ6IGZkT2xkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUob2xkUHRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSk7XG4gICAgY29uc3Qge2N1cnZlLCBwb3dlciwgY2VyZW1vbnlQb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZE9sZCwgc2VjdGlvbnMpO1xuICAgIGlmIChwb3dlciAhPSBjZXJlbW9ueVBvd2VyKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIlRoaXMgZmlsZSBoYXMgYmVlbiByZWR1Y2VkLiBZb3UgY2Fubm90IGNvbnRyaWJ1dGUgaW50byBhIHJlZHVjZWQgZmlsZS5cIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmlsZSBoYXMgYmVlbiByZWR1Y2VkLiBZb3UgY2Fubm90IGNvbnRyaWJ1dGUgaW50byBhIHJlZHVjZWQgZmlsZS5cIik7XG4gICAgfVxuICAgIGlmIChzZWN0aW9uc1sxMl0pIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLndhcm4oXCJXQVJOSU5HOiBDb250cmlidXRpbmcgaW50byBhIGZpbGUgdGhhdCBoYXMgcGhhc2UyIGNhbGN1bGF0ZWQuIFlvdSB3aWxsIGhhdmUgdG8gcHJlcGFyZSBwaGFzZTIgYWdhaW4uXCIpO1xuICAgIH1cbiAgICBjb25zdCBjb250cmlidXRpb25zID0gYXdhaXQgdXRpbHMucmVhZENvbnRyaWJ1dGlvbnMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG4gICAgY29uc3QgY3VyQ29udHJpYnV0aW9uID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiAwLCAvLyBCZWFjb25cbiAgICB9O1xuXG4gICAgbGV0IGxhc3RDaGFsbGVuZ2VIYXNoO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5nZXRSYW5kb21SbmcoZW50cm9weSk7XG5cbiAgICBpZiAoY29udHJpYnV0aW9ucy5sZW5ndGg+MCkge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IGNvbnRyaWJ1dGlvbnNbY29udHJpYnV0aW9ucy5sZW5ndGgtMV0ubmV4dENoYWxsZW5nZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IHV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaChjdXJ2ZSwgcG93ZXIsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSByYW5kb20ga2V5XG5cblxuICAgIGN1ckNvbnRyaWJ1dGlvbi5rZXkgPSBrZXlQYWlyLmNyZWF0ZVBUYXVLZXkoY3VydmUsIGxhc3RDaGFsbGVuZ2VIYXNoLCBybmcpO1xuXG5cbiAgICBjb25zdCByZXNwb25zZUhhc2hlciA9IG5ldyBCbGFrZTJiKDY0KTtcbiAgICByZXNwb25zZUhhc2hlci51cGRhdGUobGFzdENoYWxsZW5nZUhhc2gpO1xuXG4gICAgY29uc3QgZmROZXcgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZShuZXdQVGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxLCA3KTtcbiAgICBhd2FpdCB1dGlscy53cml0ZVBUYXVIZWFkZXIoZmROZXcsIGN1cnZlLCBwb3dlcik7XG5cbiAgICBjb25zdCBzdGFydFNlY3Rpb25zID0gW107XG5cbiAgICBsZXQgZmlyc3RQb2ludHM7XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigyLCBcIkcxXCIsICAoMiAqKiBwb3dlcikgKiAyIC0xLCBjdXJ2ZS5Gci5lKDEpLCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwidGF1RzFcIiApO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi50YXVHMSA9IGZpcnN0UG9pbnRzWzFdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oMywgXCJHMlwiLCAgKDIgKiogcG93ZXIpICwgY3VydmUuRnIuZSgxKSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcInRhdUcyXCIgKTtcbiAgICBjdXJDb250cmlidXRpb24udGF1RzIgPSBmaXJzdFBvaW50c1sxXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDQsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAsIGN1ckNvbnRyaWJ1dGlvbi5rZXkuYWxwaGEucHJ2S2V5LCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwiYWxwaGFUYXVHMVwiICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmFscGhhRzEgPSBmaXJzdFBvaW50c1swXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDUsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAsIGN1ckNvbnRyaWJ1dGlvbi5rZXkuYmV0YS5wcnZLZXksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJiZXRhVGF1RzFcIiApO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5iZXRhRzEgPSBmaXJzdFBvaW50c1swXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDYsIFwiRzJcIiwgIDEsIGN1ckNvbnRyaWJ1dGlvbi5rZXkuYmV0YS5wcnZLZXksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJiZXRhVGF1RzJcIiApO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5iZXRhRzIgPSBmaXJzdFBvaW50c1swXTtcblxuICAgIGN1ckNvbnRyaWJ1dGlvbi5wYXJ0aWFsSGFzaCA9IHJlc3BvbnNlSGFzaGVyLmdldFBhcnRpYWxIYXNoKCk7XG5cbiAgICBjb25zdCBidWZmS2V5ID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjEubjgqMio2K2N1cnZlLkYyLm44KjIqMyk7XG5cbiAgICB1dGlscy50b1B0YXVQdWJLZXlScHIoYnVmZktleSwgMCwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5rZXksIGZhbHNlKTtcblxuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShuZXcgVWludDhBcnJheShidWZmS2V5KSk7XG4gICAgY29uc3QgaGFzaFJlc3BvbnNlID0gcmVzcG9uc2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goaGFzaFJlc3BvbnNlLCBcIkNvbnRyaWJ1dGlvbiBSZXNwb25zZSBIYXNoIGltcG9ydGVkOiBcIikpO1xuXG4gICAgY29uc3QgbmV4dENoYWxsZW5nZUhhc2hlciA9IG5ldyBCbGFrZTJiKDY0KTtcbiAgICBuZXh0Q2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShoYXNoUmVzcG9uc2UpO1xuXG4gICAgYXdhaXQgaGFzaFNlY3Rpb24oZmROZXcsIFwiRzFcIiwgMiwgKDIgKiogcG93ZXIpICogMiAtMSwgXCJ0YXVHMVwiKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMlwiLCAzLCAoMiAqKiBwb3dlcikgICAgICAgLCBcInRhdUcyXCIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcxXCIsIDQsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYWxwaGFUYXVHMVwiKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMVwiLCA1LCAoMiAqKiBwb3dlcikgICAgICAgLCBcImJldGFUYXVHMVwiKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMlwiLCA2LCAxICAgICAgICAgICAgICAgICAgLCBcImJldGFHMlwiKTtcblxuICAgIGN1ckNvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlID0gbmV4dENoYWxsZW5nZUhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjdXJDb250cmlidXRpb24ubmV4dENoYWxsZW5nZSwgXCJOZXh0IENoYWxsZW5nZSBIYXNoOiBcIikpO1xuXG4gICAgY29udHJpYnV0aW9ucy5wdXNoKGN1ckNvbnRyaWJ1dGlvbik7XG5cbiAgICBhd2FpdCB1dGlscy53cml0ZUNvbnRyaWJ1dGlvbnMoZmROZXcsIGN1cnZlLCBjb250cmlidXRpb25zKTtcblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG4gICAgYXdhaXQgZmROZXcuY2xvc2UoKTtcblxuICAgIHJldHVybiBoYXNoUmVzcG9uc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbihzZWN0aW9uSWQsIGdyb3VwTmFtZSwgTlBvaW50cywgZmlyc3QsIGluYywgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGZkT2xkLnBvcyA9IHNlY3Rpb25zW3NlY3Rpb25JZF1bMF0ucDtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmROZXcsIHNlY3Rpb25JZCk7XG5cbiAgICAgICAgc3RhcnRTZWN0aW9uc1tzZWN0aW9uSWRdID0gZmROZXcucG9zO1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBjaHVua1NpemUgPSBNYXRoLmZsb29yKCgxPDwyMCkgLyBzRyk7ICAgLy8gMTI4TWIgY2h1bmtzXG4gICAgICAgIGxldCB0ID0gZmlyc3Q7XG4gICAgICAgIGZvciAobGV0IGk9MCA7IGk8TlBvaW50cyA7IGkrPSBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgcHJvY2Vzc2luZzogJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtOUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oTlBvaW50cy1pLCBjaHVua1NpemUgKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZJbiA9IGF3YWl0IGZkT2xkLnJlYWQobiAqIHNHKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZPdXRMRU0gPSBhd2FpdCBHLmJhdGNoQXBwbHlLZXkoYnVmZkluLCB0LCBpbmMpO1xuXG4gICAgICAgICAgICAvKiBDb2RlIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSB0aGUgMl5tLTIgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAoc2VjdGlvbk5hbWU9PSBcInRhdUcxXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieiA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgICAgICAgICAgICAgICBidWZmT3V0TEVNLnNldChieiwgNjQqKCgyICoqIHBvd2VyKSAtIDEgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlV3JpdGUgPSBmZE5ldy53cml0ZShidWZmT3V0TEVNKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZPdXRDID0gYXdhaXQgRy5iYXRjaExFTXRvQyhidWZmT3V0TEVNKTtcblxuICAgICAgICAgICAgcmVzcG9uc2VIYXNoZXIudXBkYXRlKGJ1ZmZPdXRDKTtcbiAgICAgICAgICAgIGF3YWl0IHByb21pc2VXcml0ZTtcbiAgICAgICAgICAgIGlmIChpPT0wKSAgIC8vIFJldHVybiB0aGUgMiBmaXJzdCBwb2ludHMuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPE1hdGgubWluKDIsIE5Qb2ludHMpOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKEcuZnJvbVJwckxFTShidWZmT3V0TEVNLCBqKnNHKSk7XG4gICAgICAgICAgICB0ID0gY3VydmUuRnIubXVsKHQsIGN1cnZlLkZyLmV4cChpbmMsIG4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmROZXcpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBoYXNoU2VjdGlvbihmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2VjdGlvbk5hbWUpIHtcblxuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3QgblBvaW50c0NodW5rID0gTWF0aC5mbG9vcigoMTw8MjQpL3NHKTtcblxuICAgICAgICBjb25zdCBvbGRQb3MgPSBmZFRvLnBvcztcbiAgICAgICAgZmRUby5wb3MgPSBzdGFydFNlY3Rpb25zW3NlY3Rpb25JZF07XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBuUG9pbnRzOyBpICs9IG5Qb2ludHNDaHVuaykge1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpJiZpKSBsb2dnZXIuZGVidWcoYEhhc2hpbmcgJHtzZWN0aW9uTmFtZX06IGAgKyBpKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzLWksIG5Qb2ludHNDaHVuayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMRU0gPSBhd2FpdCBmZFRvLnJlYWQobiAqIHNHKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZlUgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKGJ1ZmZMRU0pO1xuXG4gICAgICAgICAgICBuZXh0Q2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShidWZmVSk7XG4gICAgICAgIH1cblxuICAgICAgICBmZFRvLnBvcyA9IG9sZFBvcztcbiAgICB9XG5cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQge0JpZ0J1ZmZlcn0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlUGhhc2UyKG9sZFB0YXVGaWxlbmFtZSwgbmV3UFRhdUZpbGVuYW1lLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShvbGRQdGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkT2xkLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKG5ld1BUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIDExKTtcbiAgICBhd2FpdCB1dGlscy53cml0ZVBUYXVIZWFkZXIoZmROZXcsIGN1cnZlLCBwb3dlcik7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDMpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA0KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uKDIsIDEyLCBcIkcxXCIsIFwidGF1RzFcIiApO1xuICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uKDMsIDEzLCBcIkcyXCIsIFwidGF1RzJcIiApO1xuICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uKDQsIDE0LCBcIkcxXCIsIFwiYWxwaGFUYXVHMVwiICk7XG4gICAgYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNSwgMTUsIFwiRzFcIiwgXCJiZXRhVGF1RzFcIiApO1xuXG4gICAgYXdhaXQgZmRPbGQuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuXG4gICAgLy8gYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKG5ld1BUYXVGaWxlbmFtZSsgXCIudG1wXCIpO1xuXG4gICAgcmV0dXJuO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb24ob2xkU2VjdGlvbklkLCBuZXdTZWN0aW9uSWQsIEdzdHIsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlN0YXJ0aW5nIHNlY3Rpb246IFwiK3NlY3Rpb25OYW1lKTtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmROZXcsIG5ld1NlY3Rpb25JZCk7XG5cbiAgICAgICAgZm9yIChsZXQgcD0wOyBwPD1wb3dlcjsgcCsrKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9jZXNzU2VjdGlvblBvd2VyKHApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZFNlY3Rpb25JZCA9PSAyKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9jZXNzU2VjdGlvblBvd2VyKHBvd2VyKzEpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZE5ldyk7XG5cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvblBvd2VyKHApIHtcbiAgICAgICAgICAgIGNvbnN0IG5Qb2ludHMgPSAyICoqIHA7XG4gICAgICAgICAgICBjb25zdCBHID0gY3VydmVbR3N0cl07XG4gICAgICAgICAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgICAgICAgICAgY29uc3Qgc0dpbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgY29uc3Qgc0dtaWQgPSBHLkYubjgqMztcblxuICAgICAgICAgICAgbGV0IGJ1ZmY7XG4gICAgICAgICAgICBidWZmID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHaW4pO1xuXG4gICAgICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIG9sZFNlY3Rpb25JZCk7XG4gICAgICAgICAgICBpZiAoKG9sZFNlY3Rpb25JZCA9PSAyKSYmKHA9PXBvd2VyKzEpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmRPbGQucmVhZFRvQnVmZmVyKGJ1ZmYsIDAsKG5Qb2ludHMtMSkqc0dpbiApO1xuICAgICAgICAgICAgICAgIGJ1ZmYuc2V0KGN1cnZlLkcxLnplcm9BZmZpbmUsIChuUG9pbnRzLTEpKnNHaW4gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmRPbGQucmVhZFRvQnVmZmVyKGJ1ZmYsIDAsblBvaW50cypzR2luICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmRPbGQsIHRydWUpO1xuXG5cbiAgICAgICAgICAgIGJ1ZmYgPSBhd2FpdCBHLmxhZ3JhbmdlRXZhbHVhdGlvbnMoYnVmZiwgXCJhZmZpbmVcIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZShidWZmKTtcblxuLypcbiAgICAgICAgICAgIGlmIChwIDw9IGN1cnZlLkZyLnMpIHtcbiAgICAgICAgICAgICAgICBidWZmID0gYXdhaXQgRy5pZmZ0KGJ1ZmYsIFwiYWZmaW5lXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwID09IGN1cnZlLkZyLnMrMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNtYWxsTSA9IDE8PGN1cnZlLkZyLnM7XG4gICAgICAgICAgICAgICAgbGV0IHQwID0gbmV3IEJpZ0J1ZmZlciggc21hbGxNICogc0dtaWQgKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBuZXcgQmlnQnVmZmVyKCBzbWFsbE0gKiBzR21pZCApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRfdG9fc21hbGxfbSA9IEZyLmV4cChGci5zaGlmdCwgc21hbGxNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbmVfb3Zlcl9kZW5vbSA9IEZyLmludihGci5zdWIoc2hpZnRfdG9fc21hbGxfbSwgRnIub25lKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc0ludkFjYyA9IEZyLm9uZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8c21hbGxNOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGkgPSAgYnVmZi5zbGljZShpKnNHaW4sIChpKzEpKnNHaW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bWkgPSBidWZmLnNsaWNlKChpK3NtYWxsTSkqc0dpbiwgKGkrc21hbGxNKzEpKnNHaW4pO1xuXG4gICAgICAgICAgICAgICAgICAgIHQwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIEcudGltZXNGcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLnN1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRy50aW1lc0ZyKHRpICwgc2hpZnRfdG9fc21hbGxfbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lX292ZXJfZGVub21cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBpKnNHbWlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHQxLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIEcudGltZXNGcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLnN1YiggdG1pLCB0aSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnIubXVsKHNJbnZBY2MsIG9uZV9vdmVyX2Rlbm9tKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqc0dtaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIHNJbnZBY2MgPSBGci5tdWwoc0ludkFjYywgRnIuc2hpZnRJbnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0MCA9IGF3YWl0IEcuaWZmdCh0MCwgXCJqYWNvYmlhblwiLCBcImFmZmluZVwiLCBsb2dnZXIsIHNlY3Rpb25OYW1lICsgXCIgdDBcIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmROZXcud3JpdGUodDApO1xuICAgICAgICAgICAgICAgIHQwID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0MSA9IGF3YWl0IEcuaWZmdCh0MSwgXCJqYWNvYmlhblwiLCBcImFmZmluZVwiLCBsb2dnZXIsIHNlY3Rpb25OYW1lICsgXCIgdDBcIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmROZXcud3JpdGUodDEpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIlBvd2VyIHRvbyBiaWdcIik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG93ZXIgdG8gYmlnXCIpO1xuICAgICAgICAgICAgfVxuKi9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB0cnVuY2F0ZShwdGF1RmlsZW5hbWUsIHRlbXBsYXRlLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShwdGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyLCBjZXJlbW9ueVBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkT2xkLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44KjI7XG4gICAgY29uc3Qgc0cyID0gY3VydmUuRzIuRi5uOCoyO1xuXG4gICAgZm9yIChsZXQgcD0xOyBwPHBvd2VyOyBwKyspIHtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUcnVuY2F0ZShwKTtcbiAgICB9XG5cbiAgICBhd2FpdCBmZE9sZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRydW5jYXRlKHApIHtcblxuICAgICAgICBsZXQgc1AgPSBwLnRvU3RyaW5nKCk7XG4gICAgICAgIHdoaWxlIChzUC5sZW5ndGg8Mikgc1AgPSBcIjBcIiArIHNQO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIldyaXRpbmcgUG93ZXI6IFwiK3NQKTtcblxuICAgICAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHRlbXBsYXRlICsgc1AgKyBcIi5wdGF1XCIsIFwicHRhdVwiLCAxLCAxMSk7XG4gICAgICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHAsIGNlcmVtb255UG93ZXIpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAyLCAoKDIgKiogcCkqMi0xKSAqIHNHMSApOyAvLyB0YWdHMVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMywgKDIgKiogcCkgKiBzRzIpOyAvLyB0YXVHMlxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNCwgKDIgKiogcCkgKiBzRzEpOyAvLyBhbGZhVGF1RzFcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDUsICgyICoqIHApICogc0cxKTsgLy8gYmV0YVRhdUcxXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA2LCAgc0cyKTsgLy8gYmV0YVRhdUcyXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTsgLy8gY29udHJpYnV0aW9uc1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMTIsICgoMiAqKiAocCsxKSkqMiAtMSkgKiBzRzEpOyAvLyBMX3RhdUcxXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxMywgKCgyICoqIHApKjIgLTEpICogc0cyKTsgLy8gTF90YXVHMlxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMTQsICgoMiAqKiBwKSoyIC0xKSAqIHNHMSk7IC8vIExfYWxmYVRhdUcxXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxNSwgKCgyICoqIHApKjIgLTEpICogc0cxKTsgLy8gTF9iZXRhVGF1RzFcblxuICAgICAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuICAgIH1cblxuXG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcbmltcG9ydCB7QmlnQnVmZmVyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNvbnZlcnQob2xkUHRhdUZpbGVuYW1lLCBuZXdQVGF1RmlsZW5hbWUsIGxvZ2dlcikge1xuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKG9sZFB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcblxuICAgIGNvbnN0IGZkTmV3ID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUobmV3UFRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSwgMTEpO1xuICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHBvd2VyKTtcblxuICAgIC8vIGNvbnN0IGZkVG1wID0gYXdhaXQgZmFzdEZpbGUuY3JlYXRlT3ZlcnJpZGUobmV3UFRhdUZpbGVuYW1lKyBcIi50bXBcIik7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDMpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA0KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uKDIsIDEyLCBcIkcxXCIsIFwidGF1RzFcIiApO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxMyk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDE0KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMTUpO1xuXG4gICAgYXdhaXQgZmRPbGQuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuXG4gICAgLy8gYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKG5ld1BUYXVGaWxlbmFtZSsgXCIudG1wXCIpO1xuXG4gICAgcmV0dXJuO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb24ob2xkU2VjdGlvbklkLCBuZXdTZWN0aW9uSWQsIEdzdHIsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlN0YXJ0aW5nIHNlY3Rpb246IFwiK3NlY3Rpb25OYW1lKTtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmROZXcsIG5ld1NlY3Rpb25JZCk7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHNlY3Rpb25zW25ld1NlY3Rpb25JZF1bMF0uc2l6ZTtcbiAgICAgICAgY29uc3QgY2h1bmtTaXplID0gZmRPbGQucGFnZVNpemU7XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgbmV3U2VjdGlvbklkKTtcbiAgICAgICAgZm9yIChsZXQgcD0wOyBwPHNpemU7IHArPWNodW5rU2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbCA9IE1hdGgubWluKHNpemUgLXAsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmRPbGQucmVhZChsKTtcbiAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZE9sZCk7XG5cbiAgICAgICAgaWYgKG9sZFNlY3Rpb25JZCA9PSAyKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9jZXNzU2VjdGlvblBvd2VyKHBvd2VyKzEpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZE5ldyk7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb25Qb3dlcihwKSB7XG4gICAgICAgICAgICBjb25zdCBuUG9pbnRzID0gMiAqKiBwO1xuICAgICAgICAgICAgY29uc3QgRyA9IGN1cnZlW0dzdHJdO1xuICAgICAgICAgICAgY29uc3Qgc0dpbiA9IEcuRi5uOCoyO1xuXG4gICAgICAgICAgICBsZXQgYnVmZjtcbiAgICAgICAgICAgIGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0dpbik7XG5cbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgb2xkU2VjdGlvbklkKTtcbiAgICAgICAgICAgIGlmICgob2xkU2VjdGlvbklkID09IDIpJiYocD09cG93ZXIrMSkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE9sZC5yZWFkVG9CdWZmZXIoYnVmZiwgMCwoblBvaW50cy0xKSpzR2luICk7XG4gICAgICAgICAgICAgICAgYnVmZi5zZXQoY3VydmUuRzEuemVyb0FmZmluZSwgKG5Qb2ludHMtMSkqc0dpbiApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE9sZC5yZWFkVG9CdWZmZXIoYnVmZiwgMCxuUG9pbnRzKnNHaW4gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZE9sZCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGJ1ZmYgPSBhd2FpdCBHLmxhZ3JhbmdlRXZhbHVhdGlvbnMoYnVmZiwgXCJhZmZpbmVcIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZShidWZmKTtcblxuLypcbiAgICAgICAgICAgIGlmIChwIDw9IGN1cnZlLkZyLnMpIHtcbiAgICAgICAgICAgICAgICBidWZmID0gYXdhaXQgRy5pZmZ0KGJ1ZmYsIFwiYWZmaW5lXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwID09IGN1cnZlLkZyLnMrMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNtYWxsTSA9IDE8PGN1cnZlLkZyLnM7XG4gICAgICAgICAgICAgICAgbGV0IHQwID0gbmV3IEJpZ0J1ZmZlciggc21hbGxNICogc0dtaWQgKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBuZXcgQmlnQnVmZmVyKCBzbWFsbE0gKiBzR21pZCApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRfdG9fc21hbGxfbSA9IEZyLmV4cChGci5zaGlmdCwgc21hbGxNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbmVfb3Zlcl9kZW5vbSA9IEZyLmludihGci5zdWIoc2hpZnRfdG9fc21hbGxfbSwgRnIub25lKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc0ludkFjYyA9IEZyLm9uZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8c21hbGxNOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGklMTAwMDApIGxvZ2dlci5kZWJ1Zyhgc2VjdGlvbk5hbWUgcHJlcGFyZSBMIGNhbGM6ICR7c2VjdGlvbk5hbWV9LCAke2l9LyR7c21hbGxNfWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aSA9ICBidWZmLnNsaWNlKGkqc0dpbiwgKGkrMSkqc0dpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtaSA9IGJ1ZmYuc2xpY2UoKGkrc21hbGxNKSpzR2luLCAoaStzbWFsbE0rMSkqc0dpbik7XG5cbiAgICAgICAgICAgICAgICAgICAgdDAuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgRy50aW1lc0ZyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcuc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLnRpbWVzRnIodGkgLCBzaGlmdF90b19zbWFsbF9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVfb3Zlcl9kZW5vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqc0dtaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdDEuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgRy50aW1lc0ZyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcuc3ViKCB0bWksIHRpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGci5tdWwoc0ludkFjYywgb25lX292ZXJfZGVub20pXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSpzR21pZFxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgc0ludkFjYyA9IEZyLm11bChzSW52QWNjLCBGci5zaGlmdEludik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQwID0gYXdhaXQgRy5pZmZ0KHQwLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIiB0MFwiKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZSh0MCk7XG4gICAgICAgICAgICAgICAgdDAgPSBudWxsO1xuICAgICAgICAgICAgICAgIHQxID0gYXdhaXQgRy5pZmZ0KHQxLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIiB0MVwiKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZSh0MSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUG93ZXIgdG9vIGJpZ1wiKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3dlciB0byBiaWdcIik7XG4gICAgICAgICAgICB9XG4qL1xuICAgICAgICB9XG5cblxuICAgIH1cbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0IHsgc3RyaW5naWZ5QmlnSW50c1dpdGhGaWVsZCB9IGZyb20gXCIuL21pc2MuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZXhwb3J0SnNvbihwVGF1RmlsZW5hbWUsIHZlcmJvc2UpIHtcbiAgICBjb25zdCB7ZmQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShwVGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcblxuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmQsIHNlY3Rpb25zKTtcblxuICAgIGNvbnN0IHBUYXUgPSB7fTtcbiAgICBwVGF1LnEgPSBjdXJ2ZS5xO1xuICAgIHBUYXUucG93ZXIgPSBwb3dlcjtcbiAgICBwVGF1LmNvbnRyaWJ1dGlvbnMgPSBhd2FpdCB1dGlscy5yZWFkQ29udHJpYnV0aW9ucyhmZCwgY3VydmUsIHNlY3Rpb25zKTtcblxuICAgIHBUYXUudGF1RzEgPSBhd2FpdCBleHBvcnRTZWN0aW9uKDIsIFwiRzFcIiwgKDIgKiogcG93ZXIpKjIgLTEsIFwidGF1RzFcIik7XG4gICAgcFRhdS50YXVHMiA9IGF3YWl0IGV4cG9ydFNlY3Rpb24oMywgXCJHMlwiLCAoMiAqKiBwb3dlciksIFwidGF1RzJcIik7XG4gICAgcFRhdS5hbHBoYVRhdUcxID0gYXdhaXQgZXhwb3J0U2VjdGlvbig0LCBcIkcxXCIsICgyICoqIHBvd2VyKSwgXCJhbHBoYVRhdUcxXCIpO1xuICAgIHBUYXUuYmV0YVRhdUcxID0gYXdhaXQgZXhwb3J0U2VjdGlvbig1LCBcIkcxXCIsICgyICoqIHBvd2VyKSwgXCJiZXRhVGF1RzFcIik7XG4gICAgcFRhdS5iZXRhRzIgPSBhd2FpdCBleHBvcnRTZWN0aW9uKDYsIFwiRzJcIiwgMSwgXCJiZXRhRzJcIik7XG5cbiAgICBwVGF1LmxUYXVHMSA9IGF3YWl0IGV4cG9ydExhZ3JhbmdlKDEyLCBcIkcxXCIsIFwibFRhdUcxXCIpO1xuICAgIHBUYXUubFRhdUcyID0gYXdhaXQgZXhwb3J0TGFncmFuZ2UoMTMsIFwiRzJcIiwgXCJsVGF1RzJcIik7XG4gICAgcFRhdS5sQWxwaGFUYXVHMSA9IGF3YWl0IGV4cG9ydExhZ3JhbmdlKDE0LCBcIkcxXCIsIFwibEFscGhhVGF1RzJcIik7XG4gICAgcFRhdS5sQmV0YVRhdUcxID0gYXdhaXQgZXhwb3J0TGFncmFuZ2UoMTUsIFwiRzFcIiwgXCJsQmV0YVRhdUcyXCIpO1xuXG4gICAgYXdhaXQgZmQuY2xvc2UoKTtcblxuICAgIHJldHVybiBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkKGN1cnZlLkZyLCBwVGF1KTtcblxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBleHBvcnRTZWN0aW9uKHNlY3Rpb25JZCwgZ3JvdXBOYW1lLCBuUG9pbnRzLCBzZWN0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcblxuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCBzZWN0aW9uSWQpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkrKykge1xuICAgICAgICAgICAgaWYgKCh2ZXJib3NlKSYmaSYmKGklMTAwMDAgPT0gMCkpIGNvbnNvbGUubG9nKGAke3NlY3Rpb25OYW1lfTogYCArIGkpO1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoc0cpO1xuICAgICAgICAgICAgcmVzLnB1c2goRy5mcm9tUnByTEVNKGJ1ZmYsIDApKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZXhwb3J0TGFncmFuZ2Uoc2VjdGlvbklkLCBncm91cE5hbWUsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIHNlY3Rpb25JZCk7XG4gICAgICAgIGZvciAobGV0IHA9MDsgcDw9cG93ZXI7IHArKykge1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIGNvbnNvbGUubG9nKGAke3NlY3Rpb25OYW1lfTogUG93ZXI6ICR7cH1gKTtcbiAgICAgICAgICAgIHJlc1twXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgblBvaW50cyA9ICgyICoqIHApO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICgodmVyYm9zZSkmJmkmJihpJTEwMDAwID09IDApKSBjb25zb2xlLmxvZyhgJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKHNHKTtcbiAgICAgICAgICAgICAgICByZXNbcF0ucHVzaChHLmZyb21ScHJMRU0oYnVmZiwgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG5cbn1cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQge2RlZmF1bHQgYXMgbmV3QWNjdW11bGF0b3J9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X25ldy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydENoYWxsZW5nZX0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfZXhwb3J0X2NoYWxsZW5nZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGltcG9ydFJlc3BvbnNlfSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9pbXBvcnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB2ZXJpZnl9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X3ZlcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNoYWxsZW5nZUNvbnRyaWJ1dGV9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2NoYWxsZW5nZV9jb250cmlidXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYmVhY29ufSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9iZWFjb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjb250cmlidXRlfSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9jb250cmlidXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJlcGFyZVBoYXNlMn0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfcHJlcGFyZXBoYXNlMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRydW5jYXRlfSBmcm9tIFwiLi9wb3dlcnNvZnRhdV90cnVuY2F0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNvbnZlcnR9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2NvbnZlcnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHBvcnRKc29ufSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9leHBvcnRfanNvbi5qc1wiO1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcjFjc1ByaW50KHIxY3MsIHN5bXMsIGxvZ2dlcikge1xuICAgIGZvciAobGV0IGk9MDsgaTxyMWNzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHByaW50Q29zdHJhaW50KHIxY3MuY29uc3RyYWludHNbaV0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmludENvc3RyYWludChjKSB7XG4gICAgICAgIGNvbnN0IGxjMnN0ciA9IChsYykgPT4ge1xuICAgICAgICAgICAgbGV0IFMgPSBcIlwiO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGxjKTtcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IHN5bXMudmFySWR4Mk5hbWVba107XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gXCJvbmVcIikgbmFtZSA9IFwiMVwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZzID0gcjFjcy5jdXJ2ZS5Gci50b1N0cmluZyhsY1trXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZzID09IFwiMVwiKSB2cyA9IFwiXCI7ICAvLyBEbyBub3Qgc2hvdyBvbmVzXG4gICAgICAgICAgICAgICAgaWYgKHZzID09IFwiLTFcIikgdnMgPSBcIi1cIjsgIC8vIERvIG5vdCBzaG93IG9uZXNcbiAgICAgICAgICAgICAgICBpZiAoKFMhPVwiXCIpJiYodnNbMF0hPVwiLVwiKSkgdnMgPSBcIitcIit2cztcbiAgICAgICAgICAgICAgICBpZiAoUyE9XCJcIikgdnMgPSBcIiBcIit2cztcbiAgICAgICAgICAgICAgICBTPSBTICsgdnMgICArIG5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBTO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBTID0gYFsgJHtsYzJzdHIoY1swXSl9IF0gKiBbICR7bGMyc3RyKGNbMV0pfSBdIC0gWyAke2xjMnN0cihjWzJdKX0gXSA9IDBgO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhTKTtcbiAgICB9XG5cbn1cbiIsImNvbnN0IFNVQkFSUkFZX1NJWkUgPSAweDQwMDAwO1xuXG5jb25zdCBCaWdBcnJheUhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRFbGVtZW50KHByb3ApO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG9ialtwcm9wXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnNldEVsZW1lbnQocHJvcCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNsYXNzIF9CaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IgKGluaXRTaXplKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gaW5pdFNpemUgfHwgMDtcbiAgICAgICAgdGhpcy5hcnIgPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGluaXRTaXplOyBpKz1TVUJBUlJBWV9TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmFycltpL1NVQkFSUkFZX1NJWkVdID0gbmV3IEFycmF5KE1hdGgubWluKFNVQkFSUkFZX1NJWkUsIGluaXRTaXplIC0gaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoICgpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50ICh0aGlzLmxlbmd0aCwgYXJndW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNsaWNlIChmLCB0KSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0LWYpO1xuICAgICAgICBmb3IgKGxldCBpPWY7IGk8IHQ7IGkrKykgYXJyW2ktZl0gPSB0aGlzLmdldEVsZW1lbnQoaSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGdldEVsZW1lbnQoaWR4KSB7XG4gICAgICAgIGlkeCA9IHBhcnNlSW50KGlkeCk7XG4gICAgICAgIGNvbnN0IGlkeDEgPSBNYXRoLmZsb29yKGlkeCAvIFNVQkFSUkFZX1NJWkUpO1xuICAgICAgICBjb25zdCBpZHgyID0gaWR4ICUgU1VCQVJSQVlfU0laRTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyW2lkeDFdID8gdGhpcy5hcnJbaWR4MV1baWR4Ml0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldEVsZW1lbnQoaWR4LCB2YWx1ZSkge1xuICAgICAgICBpZHggPSBwYXJzZUludChpZHgpO1xuICAgICAgICBjb25zdCBpZHgxID0gTWF0aC5mbG9vcihpZHggLyBTVUJBUlJBWV9TSVpFKTtcbiAgICAgICAgaWYgKCF0aGlzLmFycltpZHgxXSkge1xuICAgICAgICAgICAgdGhpcy5hcnJbaWR4MV0gPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWR4MiA9IGlkeCAlIFNVQkFSUkFZX1NJWkU7XG4gICAgICAgIHRoaXMuYXJyW2lkeDFdW2lkeDJdID0gdmFsdWU7XG4gICAgICAgIGlmIChpZHggPj0gdGhpcy5sZW5ndGgpIHRoaXMubGVuZ3RoID0gaWR4KzE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRLZXlzKCkge1xuICAgICAgICBjb25zdCBuZXdBID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLmFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJyW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuYXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcnJbaV1bal0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0EucHVzaChpKlNVQkFSUkFZX1NJWkUraik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0E7XG4gICAgfVxufVxuXG5jbGFzcyBCaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IoIGluaXRTaXplICkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgX0JpZ0FycmF5KGluaXRTaXplKTtcbiAgICAgICAgY29uc3QgZXh0T2JqID0gbmV3IFByb3h5KG9iaiwgQmlnQXJyYXlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV4dE9iajtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJpZ0FycmF5O1xuIiwiaW1wb3J0IHtGMUZpZWxkLCBnZXRDdXJ2ZUZyb21SfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgIEJpZ0FycmF5IGZyb20gXCJAaWRlbjMvYmlnYXJyYXlcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5leHBvcnQgY29uc3QgUjFDU19GSUxFX0hFQURFUl9TRUNUSU9OID0gMTtcbmV4cG9ydCBjb25zdCBSMUNTX0ZJTEVfQ09OU1RSQUlOVFNfU0VDVElPTiA9IDI7XG5leHBvcnQgY29uc3QgUjFDU19GSUxFX1dJUkUyTEFCRUxJRF9TRUNUSU9OID0gMztcbmV4cG9ydCBjb25zdCBSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgUjFDU19GSUxFX0NVU1RPTV9HQVRFU19VU0VTX1NFQ1RJT04gPSA1O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFIxY3NIZWFkZXIoZmQsc2VjdGlvbnMsc2luZ2xlVGhyZWFkKSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBzaW5nbGVUaHJlYWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNpbmdsZVRocmVhZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaW5nbGVUaHJlYWQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge1xuICAgICAgICAgICAgc2luZ2xlVGhyZWFkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgc2luZ2xlVGhyZWFkOiBzaW5nbGVUaHJlYWQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0ge307XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCAxKTtcbiAgICAvLyBSZWFkIEhlYWRlclxuICAgIHJlcy5uOCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy5wcmltZSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCByZXMubjgpO1xuXG4gICAgaWYgKG9wdGlvbnMuRikge1xuICAgICAgICBpZiAob3B0aW9ucy5GLnAgIT0gcmVzLnByaW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJEaWZmZXJlbnQgUHJpbWVcIik7XG4gICAgICAgIHJlcy5GID0gb3B0aW9ucy5GO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZXRGaWVsZEZyb21QcmltZSkge1xuICAgICAgICByZXMuRiA9IGF3YWl0IG9wdGlvbnMuZ2V0RmllbGRGcm9tUHJpbWUocmVzLnByaW1lLCBvcHRpb25zLnNpbmdsZVRocmVhZCk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmdldEN1cnZlRnJvbVByaW1lKSB7XG4gICAgICAgIHJlcy5jdXJ2ZSA9IGF3YWl0IG9wdGlvbnMuZ2V0Q3VydmVGcm9tUHJpbWUocmVzLnByaW1lLCBvcHRpb25zLnNpbmdsZVRocmVhZCk7XG4gICAgICAgIHJlcy5GID0gcmVzLmN1cnZlLkZyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXMuY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZUZyb21SKHJlcy5wcmltZSwgb3B0aW9ucy5zaW5nbGVUaHJlYWQpO1xuICAgICAgICAgICAgcmVzLkYgPSByZXMuY3VydmUuRnI7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVzLkYgPSBuZXcgRjFGaWVsZChyZXMucHJpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzLm5WYXJzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgcmVzLm5PdXRwdXRzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgcmVzLm5QdWJJbnB1dHMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICByZXMublBydklucHV0cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy5uTGFiZWxzID0gYXdhaXQgZmQucmVhZFVMRTY0KCk7XG4gICAgcmVzLm5Db25zdHJhaW50cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy51c2VDdXN0b21HYXRlcyA9IHR5cGVvZiBzZWN0aW9uc1tSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTl0gIT09IFwidW5kZWZpbmVkXCIgJiYgc2VjdGlvbnNbUjFDU19GSUxFX0NVU1RPTV9HQVRFU19MSVNUX1NFQ1RJT05dICE9PSBudWxsXG4gICAgICAgICYmIHR5cGVvZiBzZWN0aW9uc1tSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX1VTRVNfU0VDVElPTl0gIT09IFwidW5kZWZpbmVkXCIgJiYgc2VjdGlvbnNbUjFDU19GSUxFX0NVU1RPTV9HQVRFU19VU0VTX1NFQ1RJT05dICE9PSBudWxsO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ29uc3RyYWludHMoZmQsc2VjdGlvbnMsIHIxY3MsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IGxvZ2dlcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHgsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgYlIxY3MgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmQsIHNlY3Rpb25zLCAyKTtcbiAgICBsZXQgYlIxY3NQb3MgPSAwO1xuICAgIGxldCBjb25zdHJhaW50cztcbiAgICBpZiAocjFjcy5uQ29uc3RyYWludHM+MTw8MjApIHtcbiAgICAgICAgY29uc3RyYWludHMgPSBuZXcgQmlnQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdHJhaW50cyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8cjFjcy5uQ29uc3RyYWludHM7IGkrKykge1xuICAgICAgICBpZiAoKG9wdGlvbnMubG9nZ2VyKSYmKGklMTAwMDAwID09IDApKSBvcHRpb25zLmxvZ2dlci5pbmZvKGAke29wdGlvbnMubG9nZ2VyQ3R4fTogTG9hZGluZyBjb25zdHJhaW50czogJHtpfS8ke3IxY3MubkNvbnN0cmFpbnRzfWApO1xuICAgICAgICBjb25zdCBjID0gcmVhZENvbnN0cmFpbnQoKTtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChjKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuXG5cbiAgICBmdW5jdGlvbiByZWFkQ29uc3RyYWludCgpIHtcbiAgICAgICAgY29uc3QgYyA9IFtdO1xuICAgICAgICBjWzBdID0gcmVhZExDKCk7XG4gICAgICAgIGNbMV0gPSByZWFkTEMoKTtcbiAgICAgICAgY1syXSA9IHJlYWRMQygpO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkTEMoKSB7XG4gICAgICAgIGNvbnN0IGxjPSB7fTtcblxuICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1Bvcys0KTtcbiAgICAgICAgYlIxY3NQb3MgKz0gNDtcbiAgICAgICAgY29uc3QgYnVmZlVMMzJWID0gbmV3IERhdGFWaWV3KGJ1ZmZVTDMyLmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IG5JZHggPSBidWZmVUwzMlYuZ2V0VWludDMyKDAsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBiUjFjcy5zbGljZShiUjFjc1BvcywgYlIxY3NQb3MgKyAoNCtyMWNzLm44KSpuSWR4ICk7XG4gICAgICAgIGJSMWNzUG9zICs9ICg0K3IxY3MubjgpKm5JZHg7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5JZHg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gYnVmZlYuZ2V0VWludDMyKGkqKDQrcjFjcy5uOCksIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcjFjcy5GLmZyb21ScHJMRShidWZmLCBpKig0K3IxY3MubjgpKzQpO1xuICAgICAgICAgICAgbGNbaWR4XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGM7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1hcChmZCwgc2VjdGlvbnMsIHIxY3MsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IGxvZ2dlcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJNYXAgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmQsIHNlY3Rpb25zLCAzKTtcbiAgICBsZXQgYk1hcFBvcyA9IDA7XG4gICAgbGV0IG1hcDtcblxuICAgIGlmIChyMWNzLm5WYXJzPjE8PDIwKSB7XG4gICAgICAgIG1hcCA9IG5ldyBCaWdBcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcCA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8cjFjcy5uVmFyczsgaSsrKSB7XG4gICAgICAgIGlmICgob3B0aW9ucy5sb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgb3B0aW9ucy5sb2dnZXIuaW5mbyhgJHtvcHRpb25zLmxvZ2dlckN0eH06IExvYWRpbmcgbWFwOiAke2l9LyR7cjFjcy5uVmFyc31gKTtcbiAgICAgICAgY29uc3QgaWR4ID0gcmVhZFVMRTY0KCk7XG4gICAgICAgIG1hcC5wdXNoKGlkeCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcblxuICAgIGZ1bmN0aW9uIHJlYWRVTEU2NCgpIHtcbiAgICAgICAgY29uc3QgYnVmZlVMRTY0ID0gYk1hcC5zbGljZShiTWFwUG9zLCBiTWFwUG9zKzgpO1xuICAgICAgICBiTWFwUG9zICs9IDg7XG4gICAgICAgIGNvbnN0IGJ1ZmZVTEU2NFYgPSBuZXcgRGF0YVZpZXcoYnVmZlVMRTY0LmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IExTQiA9IGJ1ZmZVTEU2NFYuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgICAgICBjb25zdCBNU0IgPSBidWZmVUxFNjRWLmdldFVpbnQzMig0LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gTVNCICogMHgxMDAwMDAwMDAgKyBMU0I7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUjFjc0ZkKGZkLCBzZWN0aW9ucywgb3B0aW9ucykge1xuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgcHJvcGVydGllczpcbiAgICAgKiAgbG9hZENvbnN0cmFpbnRzOiA8Ym9vbD4gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICogIGxvYWRNYXA6ICAgICAgICAgPGJvb2w+IGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgKiAgbG9hZEN1c3RvbUdhdGVzOiA8Ym9vbD4gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICovXG5cbiAgICBpZih0eXBlb2Ygb3B0aW9ucyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWFkUjFjc0ZkOiBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIG9wdGlvbnMubG9hZENvbnN0cmFpbnRzID0gXCJsb2FkQ29uc3RyYWludHNcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5sb2FkQ29uc3RyYWludHMgOiB0cnVlO1xuICAgIG9wdGlvbnMubG9hZE1hcCA9IFwibG9hZE1hcFwiIGluIG9wdGlvbnMgPyBvcHRpb25zLmxvYWRNYXAgOiBmYWxzZTtcbiAgICBvcHRpb25zLmxvYWRDdXN0b21HYXRlcyA9IFwibG9hZEN1c3RvbUdhdGVzXCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMubG9hZEN1c3RvbUdhdGVzIDogdHJ1ZTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlYWRSMWNzSGVhZGVyKGZkLCBzZWN0aW9ucywgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5sb2FkQ29uc3RyYWludHMpIHtcbiAgICAgICAgcmVzLmNvbnN0cmFpbnRzID0gYXdhaXQgcmVhZENvbnN0cmFpbnRzKGZkLCBzZWN0aW9ucywgcmVzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIExhYmVsc1xuXG4gICAgaWYgKG9wdGlvbnMubG9hZE1hcCkge1xuICAgICAgICByZXMubWFwID0gYXdhaXQgcmVhZE1hcChmZCwgc2VjdGlvbnMsIHJlcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubG9hZEN1c3RvbUdhdGVzKSB7XG4gICAgICAgIGlmIChyZXMudXNlQ3VzdG9tR2F0ZXMpIHtcbiAgICAgICAgICAgIHJlcy5jdXN0b21HYXRlcyA9IGF3YWl0IHJlYWRDdXN0b21HYXRlc0xpc3RTZWN0aW9uKGZkLCBzZWN0aW9ucywgcmVzKTtcbiAgICAgICAgICAgIHJlcy5jdXN0b21HYXRlc1VzZXMgPSBhd2FpdCByZWFkQ3VzdG9tR2F0ZXNVc2VzU2VjdGlvbihmZCwgc2VjdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmN1c3RvbUdhdGVzID0gW107XG4gICAgICAgICAgICByZXMuY3VzdG9tR2F0ZXNVc2VzID0gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSMWNzKGZpbGVOYW1lLCBsb2FkQ29uc3RyYWludHMsIGxvYWRNYXAsIHNpbmdsZVRocmVhZCwgbG9nZ2VyLCBsb2dnZXJDdHgpIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIGxvYWRDb25zdHJhaW50cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBvcHRpb25zID0gbG9hZENvbnN0cmFpbnRzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvYWRDb25zdHJhaW50cyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvcHRpb25zPSB7XG4gICAgICAgICAgICBsb2FkQ29uc3RyYWludHM6IHRydWUsXG4gICAgICAgICAgICBsb2FkTWFwOiBmYWxzZSxcbiAgICAgICAgICAgIGxvYWRDdXN0b21HYXRlczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBsb2FkQ29uc3RyYWludHM6IGxvYWRDb25zdHJhaW50cyxcbiAgICAgICAgICAgIGxvYWRNYXA6IGxvYWRNYXAsXG4gICAgICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCxcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7ZmQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShmaWxlTmFtZSwgXCJyMWNzXCIsIDEsIDE8PDI1LCAxPDwyMik7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCByZWFkUjFjc0ZkKGZkLCBzZWN0aW9ucywgb3B0aW9ucyk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDdXN0b21HYXRlc0xpc3RTZWN0aW9uKGZkLCBzZWN0aW9ucywgcmVzKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCBSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTik7XG5cbiAgICBsZXQgbnVtID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG5cbiAgICBsZXQgY3VzdG9tR2F0ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIGxldCBjdXN0b21HYXRlID0ge307XG4gICAgICAgIGN1c3RvbUdhdGUudGVtcGxhdGVOYW1lID0gYXdhaXQgZmQucmVhZFN0cmluZygpO1xuICAgICAgICBsZXQgbnVtUGFyYW1ldGVycyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgICAgIGN1c3RvbUdhdGUucGFyYW1ldGVycyA9IEFycmF5KG51bVBhcmFtZXRlcnMpO1xuICAgICAgICBsZXQgYnVmZiA9IGF3YWl0IGZkLnJlYWQocmVzLm44ICogbnVtUGFyYW1ldGVycyk7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1QYXJhbWV0ZXJzOyBqKyspIHtcbiAgICAgICAgICAgIGN1c3RvbUdhdGUucGFyYW1ldGVyc1tqXSA9IHJlcy5GLmZyb21ScHJMRShidWZmLCBqICogcmVzLm44LCByZXMubjgpOztcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21HYXRlcy5wdXNoKGN1c3RvbUdhdGUpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdhdGVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEN1c3RvbUdhdGVzVXNlc1NlY3Rpb24oZmQsc2VjdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBiUjFjcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZCwgc2VjdGlvbnMsIFIxQ1NfRklMRV9DVVNUT01fR0FURVNfVVNFU19TRUNUSU9OKTtcbiAgICBjb25zdCBiUjFjczMyID0gbmV3IFVpbnQzMkFycmF5KGJSMWNzLmJ1ZmZlciwgYlIxY3MuYnl0ZU9mZnNldCwgYlIxY3MuYnl0ZUxlbmd0aC80KTtcbiAgICBjb25zdCBuQ3VzdG9tR2F0ZVVzZXMgPSBiUjFjczMyWzBdO1xuICAgIGxldCBiUjFjc1BvcyA9IDE7XG4gICAgbGV0IGN1c3RvbUdhdGVzVXNlcztcbiAgICBpZiAobkN1c3RvbUdhdGVVc2VzPjE8PDIwKSB7XG4gICAgICAgIGN1c3RvbUdhdGVzVXNlcyA9IG5ldyBCaWdBcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGN1c3RvbUdhdGVzVXNlcyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8bkN1c3RvbUdhdGVVc2VzOyBpKyspIHtcbiAgICAgICAgaWYgKChvcHRpb25zLmxvZ2dlcikmJihpJTEwMDAwMCA9PSAwKSkgb3B0aW9ucy5sb2dnZXIuaW5mbyhgJHtvcHRpb25zLmxvZ2dlckN0eH06IExvYWRpbmcgY3VzdG9tIGdhdGUgdXNlczogJHtpfS8ke25DdXN0b21HYXRlVXNlc31gKTtcbiAgICAgICAgbGV0IGMgPSB7fTtcbiAgICAgICAgYy5pZCA9IGJSMWNzMzJbYlIxY3NQb3MrK107XG4gICAgICAgIGxldCBudW1TaWduYWxzID0gYlIxY3MzMltiUjFjc1BvcysrXTtcbiAgICAgICAgYy5zaWduYWxzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtU2lnbmFsczsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBMU0IgPSBiUjFjczMyW2JSMWNzUG9zKytdO1xuICAgICAgICAgICAgY29uc3QgTVNCID0gYlIxY3MzMltiUjFjc1BvcysrXTtcbiAgICAgICAgICAgIGMuc2lnbmFscy5wdXNoKE1TQiAqIDB4MTAwMDAwMDAwICsgTFNCKTtcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21HYXRlc1VzZXMucHVzaChjKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1c3RvbUdhdGVzVXNlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc0hlYWRlcihmZCwgY2lyKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKGNpci5uOCk7IC8vIFRlbXBvcmFsbHkgc2V0IHRvIDAgbGVuZ3RoXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLndyaXRlQmlnSW50KGZkLCBjaXIucHJpbWUsIGNpci5uOCk7XG5cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKGNpci5uVmFycyk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjaXIubk91dHB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLm5QdWJJbnB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLm5QcnZJbnB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoY2lyLm5MYWJlbHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLmNvbnN0cmFpbnRzLmxlbmd0aCk7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc0NvbnN0cmFpbnRzKGZkLCBjaXIsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAyKTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxjaXIuY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgbG9nZ2VyLmluZm8oYCR7bG9nZ2VyQ3R4fTogd3JpdGluZyBjb25zdHJhaW50OiAke2l9LyR7Y2lyLmNvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDb25zdHJhaW50KGNpci5jb25zdHJhaW50c1tpXSk7XG4gICAgfVxuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cblxuICAgIGZ1bmN0aW9uIHdyaXRlQ29uc3RyYWludChjKSB7XG4gICAgICAgIGNvbnN0IG44ID0gY2lyLm44O1xuICAgICAgICBjb25zdCBGID0gY2lyLkYgfHwgY2lyLmN1cnZlLkZyO1xuICAgICAgICBjb25zdCBpZHhBID0gT2JqZWN0LmtleXMoY1swXSk7XG4gICAgICAgIGNvbnN0IGlkeEIgPSBPYmplY3Qua2V5cyhjWzFdKTtcbiAgICAgICAgY29uc3QgaWR4QyA9IE9iamVjdC5rZXlzKGNbMl0pO1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoKGlkeEEubGVuZ3RoK2lkeEIubGVuZ3RoK2lkeEMubGVuZ3RoKSoobjgrNCkgKyAxMik7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgbGV0IG89MDtcblxuICAgICAgICBidWZmVi5zZXRVaW50MzIobywgaWR4QS5sZW5ndGgsIHRydWUpOyBvKz00O1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8aWR4QS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29lZiA9IGlkeEFbaV07XG4gICAgICAgICAgICBidWZmVi5zZXRVaW50MzIobywgY29lZiwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgICAgICBGLnRvUnByTEUoYnVmZiwgbywgY1swXVtjb2VmXSk7IG8rPW44O1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIGlkeEIubGVuZ3RoLCB0cnVlKTsgbys9NDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGlkeEIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZWYgPSBpZHhCW2ldO1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIGNvZWYsIHRydWUpOyBvKz00O1xuICAgICAgICAgICAgRi50b1JwckxFKGJ1ZmYsIG8sIGNbMV1bY29lZl0pOyBvKz1uODtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBpZHhDLmxlbmd0aCwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxpZHhDLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gaWR4Q1tpXTtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBjb2VmLCB0cnVlKTsgbys9NDtcbiAgICAgICAgICAgIEYudG9ScHJMRShidWZmLCBvLCBjWzJdW2NvZWZdKTsgbys9bjg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmQud3JpdGUoYnVmZik7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc01hcChmZCwgY2lyLCBsb2dnZXIsIGxvZ2dlckN0eCkge1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMyk7XG5cbiAgICBpZiAoY2lyLm1hcC5sZW5ndGggIT0gY2lyLm5WYXJzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1hcCBzaXplXCIpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjaXIublZhcnM7IGkrKykge1xuICAgICAgICBpZiAoKGxvZ2dlcikmJihpJTEwMDAwID09IDApKSBsb2dnZXIuaW5mbyhgJHtsb2dnZXJDdHh9OiB3cml0aW5nIG1hcDogJHtpfS8ke2Npci5uVmFyc31gKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEU2NChjaXIubWFwW2ldKTtcbiAgICB9XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVIxY3MoZmlsZU5hbWUsIGNpciwgbG9nZ2VyLCBsb2dnZXJDdHgpIHtcblxuICAgIGNvbnN0IGZkID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUoZmlsZU5hbWUsIFwicjFjc1wiLCAxLCAzLCAxPDwyNSwgMTw8MjIpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzSGVhZGVyKGZkLCBjaXIpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzQ29uc3RyYWludHMoZmQsIGNpciwgbG9nZ2VyLCBsb2dnZXJDdHgpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzTWFwKGZkLCBjaXIsIGxvZ2dlciwgbG9nZ2VyQ3R4KTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyByZWFkUjFjcyB9ICBmcm9tIFwicjFjc2ZpbGVcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHIxY3NJbmZvKHIxY3NOYW1lLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IGNpciA9IGF3YWl0IHJlYWRSMWNzKHIxY3NOYW1lKTtcblxuICAgIGlmIChTY2FsYXIuZXEoY2lyLnByaW1lLCBibjEyOHIpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiQ3VydmU6IGJuLTEyOFwiKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShjaXIucHJpbWUsIGJsczEyMzgxcikpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJDdXJ2ZTogYmxzMTItMzgxXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGBVbmtub3duIEN1cnZlLiBQcmltZTogJHtTY2FsYXIudG9TdHJpbmcoY2lyLnByaW1lKX1gKTtcbiAgICB9XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgV2lyZXM6ICR7Y2lyLm5WYXJzfWApO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGAjIG9mIENvbnN0cmFpbnRzOiAke2Npci5uQ29uc3RyYWludHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgUHJpdmF0ZSBJbnB1dHM6ICR7Y2lyLm5QcnZJbnB1dHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgUHVibGljIElucHV0czogJHtjaXIublB1YklucHV0c31gKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgIyBvZiBMYWJlbHM6ICR7Y2lyLm5MYWJlbHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgT3V0cHV0czogJHtjaXIubk91dHB1dHN9YCk7XG5cbiAgICByZXR1cm4gY2lyO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtyZWFkUjFjc30gIGZyb20gXCJyMWNzZmlsZVwiO1xuaW1wb3J0IHsgc3RyaW5naWZ5QmlnSW50c1dpdGhGaWVsZCB9IGZyb20gXCIuL21pc2MuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiByMWNzRXhwb3J0SnNvbihyMWNzRmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgY29uc3QgY2lyID0gYXdhaXQgcmVhZFIxY3MocjFjc0ZpbGVOYW1lLCB0cnVlLCB0cnVlLCB0cnVlLCBsb2dnZXIpO1xuICAgIGNvbnN0IEZyPWNpci5jdXJ2ZS5GcjtcbiAgICBkZWxldGUgY2lyLmN1cnZlO1xuICAgIGRlbGV0ZSBjaXIuRjtcblxuICAgIHJldHVybiBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkKEZyLCBjaXIpO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHtkZWZhdWx0IGFzIHByaW50fSBmcm9tIFwiLi9yMWNzX3ByaW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW5mb30gZnJvbSBcIi4vcjFjc19pbmZvLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZXhwb3J0SnNvbn0gZnJvbSBcIi4vcjFjc19leHBvcnRfanNvbi5qc1wiO1xuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gbG9hZFN5bWJvbHMoc3ltRmlsZU5hbWUpIHtcbiAgICBjb25zdCBzeW0gPSB7XG4gICAgICAgIGxhYmVsSWR4Mk5hbWU6IFsgXCJvbmVcIiBdLFxuICAgICAgICB2YXJJZHgyTmFtZTogWyBcIm9uZVwiIF0sXG4gICAgICAgIGNvbXBvbmVudElkeDJOYW1lOiBbXVxuICAgIH07XG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3Rpbmcoc3ltRmlsZU5hbWUpO1xuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKGZkLnRvdGFsU2l6ZSk7XG4gICAgY29uc3Qgc3ltc1N0ciA9IG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShidWZmKTtcbiAgICBjb25zdCBsaW5lcyA9IHN5bXNTdHIuc3BsaXQoXCJcXG5cIik7XG4gICAgZm9yIChsZXQgaT0wOyBpPGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IGxpbmVzW2ldLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgaWYgKGFyci5sZW5ndGghPTQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoc3ltLnZhcklkeDJOYW1lW2FyclsxXV0pIHtcbiAgICAgICAgICAgIHN5bS52YXJJZHgyTmFtZVthcnJbMV1dICs9IFwifFwiICsgYXJyWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ltLnZhcklkeDJOYW1lW2FyclsxXV0gPSBhcnJbM107XG4gICAgICAgIH1cbiAgICAgICAgc3ltLmxhYmVsSWR4Mk5hbWVbYXJyWzBdXSA9IGFyclszXTtcbiAgICAgICAgaWYgKCFzeW0uY29tcG9uZW50SWR4Mk5hbWVbYXJyWzJdXSkge1xuICAgICAgICAgICAgc3ltLmNvbXBvbmVudElkeDJOYW1lW2FyclsyXV0gPSBleHRyYWN0Q29tcG9uZW50KGFyclszXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHN5bTtcblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RDb21wb25lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgYXJyLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3IgZWxlbWVudFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXCIuXCIpO1xuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IHsgV2l0bmVzc0NhbGN1bGF0b3JCdWlsZGVyIH0gZnJvbSBcImNpcmNvbV9ydW50aW1lXCI7XG5pbXBvcnQgKiBhcyB3dG5zVXRpbHMgZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgbG9hZFN5bXMgZnJvbSBcIi4vbG9hZHN5bXMuanNcIjtcbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB3dG5zRGVidWcoX2lucHV0LCB3YXNtRmlsZU5hbWUsIHd0bnNGaWxlTmFtZSwgc3ltTmFtZSwgb3B0aW9ucywgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCBpbnB1dCA9IHVuc3RyaW5naWZ5QmlnSW50cyhfaW5wdXQpO1xuXG4gICAgY29uc3QgZmRXYXNtID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKHdhc21GaWxlTmFtZSk7XG4gICAgY29uc3Qgd2FzbSA9IGF3YWl0IGZkV2FzbS5yZWFkKGZkV2FzbS50b3RhbFNpemUpO1xuICAgIGF3YWl0IGZkV2FzbS5jbG9zZSgpO1xuXG5cbiAgICBsZXQgd2NPcHMgPSB7XG4gICAgICAgIHNhbml0eUNoZWNrOiB0cnVlXG4gICAgfTtcbiAgICBsZXQgc3ltID0gYXdhaXQgbG9hZFN5bXMoc3ltTmFtZSk7XG4gICAgaWYgKG9wdGlvbnMuc2V0KSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nU2V0U2lnbmFsPSBmdW5jdGlvbihsYWJlbElkeCwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBsaW5lIGJlbG93IHNwbGl0cyB0aGUgYXJyb3cgbG9nIGludG8gMiBzdHJpbmdzIHRvIGF2b2lkIHNvbWUgU2VjdXJlIEVDTUFTY3JpcHQgaXNzdWVzXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlNFVCBcIiArIHN5bS5sYWJlbElkeDJOYW1lW2xhYmVsSWR4XSArIFwiIDxcIiArIFwiLS0gXCIgKyB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZ2V0KSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nR2V0U2lnbmFsPSBmdW5jdGlvbih2YXJJZHgsIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBUaGUgbGluZSBiZWxvdyBzcGxpdHMgdGhlIGFycm93IGxvZyBpbnRvIDIgc3RyaW5ncyB0byBhdm9pZCBzb21lIFNlY3VyZSBFQ01BU2NyaXB0IGlzc3Vlc1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJHRVQgXCIgKyBzeW0ubGFiZWxJZHgyTmFtZVt2YXJJZHhdICsgXCIgLS1cIiArIFwiPiBcIiArIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmlnZ2VyKSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nU3RhcnRDb21wb25lbnQ9IGZ1bmN0aW9uKGNJZHgpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiU1RBUlQ6IFwiICsgc3ltLmNvbXBvbmVudElkeDJOYW1lW2NJZHhdKTtcbiAgICAgICAgfTtcbiAgICAgICAgd2NPcHMubG9nRmluaXNoQ29tcG9uZW50PSBmdW5jdGlvbihjSWR4KSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZJTklTSDogXCIgKyBzeW0uY29tcG9uZW50SWR4Mk5hbWVbY0lkeF0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB3Y09wcy5zeW0gPSBzeW07XG5cbiAgICBjb25zdCB3YyA9IGF3YWl0IFdpdG5lc3NDYWxjdWxhdG9yQnVpbGRlcih3YXNtLCB3Y09wcyk7XG4gICAgY29uc3QgdyA9IGF3YWl0IHdjLmNhbGN1bGF0ZVdpdG5lc3MoaW5wdXQpO1xuXG4gICAgY29uc3QgZmRXdG5zID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUod3Ruc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMik7XG5cbiAgICBhd2FpdCB3dG5zVXRpbHMud3JpdGUoZmRXdG5zLCB3LCB3Yy5wcmltZSk7XG5cbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7cmVhZH0gZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB3dG5zRXhwb3J0SnNvbih3dG5zRmlsZU5hbWUpIHtcblxuICAgIGNvbnN0IHcgPSBhd2FpdCByZWFkKHd0bnNGaWxlTmFtZSk7XG5cbiAgICByZXR1cm4gdztcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgd3Ruc1V0aWxzIGZyb20gXCIuL3d0bnNfdXRpbHMuanNcIjtcbmltcG9ydCB7IHJlYWRSMWNzRmQgfSBmcm9tIFwicjFjc2ZpbGVcIjtcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIGN1cnZlcyBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gd3Ruc0NoZWNrKHIxY3NGaWxlbmFtZSwgd3Ruc0ZpbGVuYW1lLCBsb2dnZXIpIHtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiV0lUTkVTUyBDSEVDS0lORyBTVEFSVEVEXCIpO1xuXG4gICAgLy8gUmVhZCByMWNzIGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyByMWNzIGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRSMWNzLFxuICAgICAgICBzZWN0aW9uczogc2VjdGlvbnNSMWNzXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShyMWNzRmlsZW5hbWUsIFwicjFjc1wiLCAxLCAxIDw8IDIyLCAxIDw8IDI0KTtcbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NGZChmZFIxY3MsIHNlY3Rpb25zUjFjcywgeyBsb2FkQ29uc3RyYWludHM6IGZhbHNlLCBsb2FkQ3VzdG9tR2F0ZXM6IGZhbHNlIH0pO1xuXG4gICAgLy8gUmVhZCB3aXRuZXNzIGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB3aXRuZXNzIGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRXdG5zLFxuICAgICAgICBzZWN0aW9uczogd3Ruc1NlY3Rpb25zXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh3dG5zRmlsZW5hbWUsIFwid3Ruc1wiLCAyLCAxIDw8IDIyLCAxIDw8IDI0KTtcbiAgICBjb25zdCB3dG5zSGVhZGVyID0gYXdhaXQgd3Ruc1V0aWxzLnJlYWRIZWFkZXIoZmRXdG5zLCB3dG5zU2VjdGlvbnMpO1xuXG4gICAgaWYgKCFTY2FsYXIuZXEocjFjcy5wcmltZSwgd3Ruc0hlYWRlci5xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDdXJ2ZSBvZiB0aGUgd2l0bmVzcyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIHByb3Zpbmcga2V5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZXaXRuZXNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkV3Rucywgd3Ruc1NlY3Rpb25zLCAyKTtcbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgY3VydmVzLmdldEN1cnZlRnJvbVIocjFjcy5wcmltZSk7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBzRnIgPSBGci5uODtcblxuICAgIGNvbnN0IGJSMWNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIiAgV0lUTkVTUyBDSEVDS1wiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VydmU6ICAgICAgICAgICR7cjFjcy5jdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzICh3aXJlcyk6ICAgJHtyMWNzLm5WYXJzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBPdXB1dHM6ICAgICAgICAgJHtyMWNzLm5PdXRwdXRzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBQdWJsaWMgSW5wdXRzOiAgJHtyMWNzLm5QdWJJbnB1dHN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIFByaXZhdGUgSW5wdXRzOiAke3IxY3MublBydklucHV0c31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgTGFiZWxzOiAgICAgICAgICR7cjFjcy5uTGFiZWxzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDb25zdHJhaW50czogICAgJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VzdG9tIEdhdGVzOiAgICR7cjFjcy51c2VDdXN0b21HYXRlc31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgIH1cblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDaGVja2luZyB3aXRuZXNzIGNvcnJlY3RuZXNzXCIpO1xuXG4gICAgbGV0IGJSMWNzUG9zID0gMDtcbiAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHIxY3MubkNvbnN0cmFpbnRzOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDCt8K3wrcgcHJvY2Vzc2luZyByMWNzIGNvbnN0cmFpbnRzICR7aX0vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vUmVhZCB0aGUgdGhyZWUgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiB0aGUgY29uc3RyYWludCB3aGVyZSBBICogQiAtIEMgPSAwXG4gICAgICAgIGNvbnN0IGxjQSA9IHJlYWRMQygpO1xuICAgICAgICBjb25zdCBsY0IgPSByZWFkTEMoKTtcbiAgICAgICAgY29uc3QgbGNDID0gcmVhZExDKCk7XG5cbiAgICAgICAgLy8gRXZhbHVhdGUgdGhlIGxpbmVhciBjb21iaW5hdGlvbnNcbiAgICAgICAgY29uc3QgZXZhbEEgPSBFdmFsdWF0ZUxpbmVhckNvbWJpbmF0aW9uKGxjQSk7XG4gICAgICAgIGNvbnN0IGV2YWxCID0gRXZhbHVhdGVMaW5lYXJDb21iaW5hdGlvbihsY0IpO1xuICAgICAgICBjb25zdCBldmFsQyA9IEV2YWx1YXRlTGluZWFyQ29tYmluYXRpb24obGNDKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IEEgKiBCIC0gQyA9PSAwXG4gICAgICAgIGlmICghRnIuZXEoRnIuc3ViKEZyLm11bChldmFsQSwgZXZhbEIpLCBldmFsQyksIEZyLnplcm8pKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIsK3wrfCtyBhYm9ydGluZyBjaGVja2luZyBwcm9jZXNzIGF0IGNvbnN0cmFpbnQgXCIgKyBpKTtcbiAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmZFIxY3MuY2xvc2UoKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJXSVRORVNTIElTIENPUlJFQ1RcIik7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcIldJVE5FU1MgQ0hFQ0tJTkcgRklOSVNIRUQgU1VDQ0VTU0ZVTExZXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJXSVRORVNTIElTIE5PVCBDT1JSRUNUXCIpO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJXSVRORVNTIENIRUNLSU5HIEZJTklTSEVEIFVOU1VDQ0VTU0ZVTExZXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcblxuICAgIGZ1bmN0aW9uIEV2YWx1YXRlTGluZWFyQ29tYmluYXRpb24obGMpIHtcbiAgICAgICAgbGV0IHJlcyA9IEZyLnplcm87XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGxjKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChzaWduYWxJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsVmFsdWUgPSBnZXRXaXRuZXNzVmFsdWUoc2lnbmFsSWQpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsRmFjdG9yID0gbGNbc2lnbmFsSWRdO1xuXG4gICAgICAgICAgICByZXMgPSBGci5hZGQocmVzLCBGci5tdWwoc2lnbmFsVmFsdWUsIHNpZ25hbEZhY3RvcikpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRMQygpIHtcbiAgICAgICAgY29uc3QgbGMgPSB7fTtcblxuICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArIDQpO1xuICAgICAgICBiUjFjc1BvcyArPSA0O1xuICAgICAgICBjb25zdCBidWZmVUwzMlYgPSBuZXcgRGF0YVZpZXcoYnVmZlVMMzIuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgbklkeCA9IGJ1ZmZVTDMyVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgYnVmZiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArICg0ICsgcjFjcy5uOCkgKiBuSWR4KTtcbiAgICAgICAgYlIxY3NQb3MgKz0gKDQgKyByMWNzLm44KSAqIG5JZHg7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSWR4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGJ1ZmZWLmdldFVpbnQzMihpICogKDQgKyByMWNzLm44KSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSByMWNzLkYuZnJvbVJwckxFKGJ1ZmYsIGkgKiAoNCArIHIxY3MubjgpICsgNCk7XG4gICAgICAgICAgICBsY1tpZHhdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXaXRuZXNzVmFsdWUoc2lnbmFsSWQpIHtcbiAgICAgICAgcmV0dXJuIEZyLmZyb21ScHJMRShidWZmV2l0bmVzcy5zbGljZShzaWduYWxJZCAqIHNGciwgc2lnbmFsSWQgKiBzRnIgKyBzRnIpKTtcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHtkZWZhdWx0IGFzIGNhbGN1bGF0ZX0gZnJvbSBcIi4vd3Ruc19jYWxjdWxhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZWJ1Z30gZnJvbSBcIi4vd3Ruc19kZWJ1Zy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEpzb259IGZyb20gXCIuL3d0bnNfZXhwb3J0X2pzb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjaGVja30gZnJvbSBcIi4vd3Ruc19jaGVjay5qc1wiOyIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IFNVQkFSUkFZX1NJWkUgPSAweDQwMDAwO1xuXG5jb25zdCBCaWdBcnJheUhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRFbGVtZW50KHByb3ApO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG9ialtwcm9wXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnNldEVsZW1lbnQocHJvcCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNsYXNzIF9CaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IgKGluaXRTaXplKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gaW5pdFNpemUgfHwgMDtcbiAgICAgICAgdGhpcy5hcnIgPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGluaXRTaXplOyBpKz1TVUJBUlJBWV9TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmFycltpL1NVQkFSUkFZX1NJWkVdID0gbmV3IEFycmF5KE1hdGgubWluKFNVQkFSUkFZX1NJWkUsIGluaXRTaXplIC0gaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoICgpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50ICh0aGlzLmxlbmd0aCwgYXJndW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNsaWNlIChmLCB0KSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0LWYpO1xuICAgICAgICBmb3IgKGxldCBpPWY7IGk8IHQ7IGkrKykgYXJyW2ktZl0gPSB0aGlzLmdldEVsZW1lbnQoaSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGdldEVsZW1lbnQoaWR4KSB7XG4gICAgICAgIGlkeCA9IHBhcnNlSW50KGlkeCk7XG4gICAgICAgIGNvbnN0IGlkeDEgPSBNYXRoLmZsb29yKGlkeCAvIFNVQkFSUkFZX1NJWkUpO1xuICAgICAgICBjb25zdCBpZHgyID0gaWR4ICUgU1VCQVJSQVlfU0laRTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyW2lkeDFdID8gdGhpcy5hcnJbaWR4MV1baWR4Ml0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldEVsZW1lbnQoaWR4LCB2YWx1ZSkge1xuICAgICAgICBpZHggPSBwYXJzZUludChpZHgpO1xuICAgICAgICBjb25zdCBpZHgxID0gTWF0aC5mbG9vcihpZHggLyBTVUJBUlJBWV9TSVpFKTtcbiAgICAgICAgaWYgKCF0aGlzLmFycltpZHgxXSkge1xuICAgICAgICAgICAgdGhpcy5hcnJbaWR4MV0gPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWR4MiA9IGlkeCAlIFNVQkFSUkFZX1NJWkU7XG4gICAgICAgIHRoaXMuYXJyW2lkeDFdW2lkeDJdID0gdmFsdWU7XG4gICAgICAgIGlmIChpZHggPj0gdGhpcy5sZW5ndGgpIHRoaXMubGVuZ3RoID0gaWR4KzE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRLZXlzKCkge1xuICAgICAgICBjb25zdCBuZXdBID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLmFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJyW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuYXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcnJbaV1bal0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0EucHVzaChpKlNVQkFSUkFZX1NJWkUraik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0E7XG4gICAgfVxufVxuXG5jbGFzcyBCaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IoIGluaXRTaXplICkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgX0JpZ0FycmF5KGluaXRTaXplKTtcbiAgICAgICAgY29uc3QgZXh0T2JqID0gbmV3IFByb3h5KG9iaiwgQmlnQXJyYXlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV4dE9iajtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJpZ0FycmF5O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtyZWFkUjFjc0hlYWRlcn0gZnJvbSBcInIxY3NmaWxlXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgICByZWFkQmluRmlsZSxcbiAgICBjcmVhdGVCaW5GaWxlLFxuICAgIHJlYWRTZWN0aW9uLFxuICAgIHdyaXRlQmlnSW50LFxuICAgIHN0YXJ0V3JpdGVTZWN0aW9uLFxuICAgIGVuZFdyaXRlU2VjdGlvbixcbn0gZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7IGxvZzIsIGZvcm1hdEhhc2ggfSBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIEJpZ0J1ZmZlciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCBCaWdBcnJheSBmcm9tIFwiLi9iaWdhcnJheS5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG5ld1pLZXkocjFjc05hbWUsIHB0YXVOYW1lLCB6a2V5TmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCBUQVVfRzEgPSAwO1xuICAgIGNvbnN0IFRBVV9HMiA9IDE7XG4gICAgY29uc3QgQUxQSEFUQVVfRzEgPSAyO1xuICAgIGNvbnN0IEJFVEFUQVVfRzEgPSAzO1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcbiAgICBjb25zdCBjc0hhc2hlciA9IEJsYWtlMmIoNjQpO1xuXG4gICAgY29uc3Qge2ZkOiBmZFBUYXUsIHNlY3Rpb25zOiBzZWN0aW9uc1BUYXV9ID0gYXdhaXQgcmVhZEJpbkZpbGUocHRhdU5hbWUsIFwicHRhdVwiLCAxLCAxPDwyMiwgMTw8MjQpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRQVGF1LCBzZWN0aW9uc1BUYXUpO1xuICAgIGNvbnN0IHtmZDogZmRSMWNzLCBzZWN0aW9uczogc2VjdGlvbnNSMWNzfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHIxY3NOYW1lLCBcInIxY3NcIiwgMSwgMTw8MjIsIDE8PDI0KTtcbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NIZWFkZXIoZmRSMWNzLCBzZWN0aW9uc1IxY3MsIGZhbHNlKTtcblxuICAgIGNvbnN0IGZkWktleSA9IGF3YWl0IGNyZWF0ZUJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAxLCAxMCwgMTw8MjIsIDE8PDI0KTtcblxuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44KjI7XG5cbiAgICBpZiAocjFjcy5wcmltZSAhPSBjdXJ2ZS5yKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcInIxY3MgY3VydmUgZG9lcyBub3QgbWF0Y2ggcG93ZXJzIG9mIHRhdSBjZXJlbW9ueSBjdXJ2ZVwiKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGNvbnN0IGNpclBvd2VyID0gbG9nMihyMWNzLm5Db25zdHJhaW50cyArIHIxY3MublB1YklucHV0cyArIHIxY3Mubk91dHB1dHMgKzEgLTEpICsxO1xuXG4gICAgaWYgKGNpclBvd2VyID4gcG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBjaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgcG93ZXIgb2YgdGF1IGNlcmVtb255LiAke3IxY3MubkNvbnN0cmFpbnRzfSoyID4gMioqJHtwb3dlcn1gKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmICghc2VjdGlvbnNQVGF1WzEyXSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJQb3dlcnMgb2YgdGF1IGlzIG5vdCBwcmVwYXJlZC5cIik7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBjb25zdCBuUHVibGljID0gcjFjcy5uT3V0cHV0cyArIHIxY3MublB1YklucHV0cztcbiAgICBjb25zdCBkb21haW5TaXplID0gMiAqKiBjaXJQb3dlcjtcblxuICAgIC8vIFdyaXRlIHRoZSBoZWFkZXJcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMSk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoMSk7IC8vIEdyb3RoXG4gICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG5cbiAgICAvLyBXcml0ZSB0aGUgR3JvdGggaGVhZGVyIHNlY3Rpb25cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCAyKTtcbiAgICBjb25zdCBwcmltZVEgPSBjdXJ2ZS5xO1xuICAgIGNvbnN0IG44cSA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVEpIC0gMSkgLyA2NCkgKzEpKjg7XG5cbiAgICBjb25zdCBwcmltZVIgPSBjdXJ2ZS5yO1xuICAgIGNvbnN0IG44ciA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKzEpKjg7XG4gICAgY29uc3QgUnIgPSBTY2FsYXIubW9kKFNjYWxhci5zaGwoMSwgbjhyKjgpLCBwcmltZVIpO1xuICAgIGNvbnN0IFIyciA9IGN1cnZlLkZyLmUoU2NhbGFyLm1vZChTY2FsYXIubXVsKFJyLFJyKSwgcHJpbWVSKSk7XG5cbiAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihuOHEpO1xuICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVRLCBuOHEpO1xuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgYXdhaXQgd3JpdGVCaWdJbnQoZmRaS2V5LCBwcmltZVIsIG44cik7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocjFjcy5uVmFycyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiBiYXJzXG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoblB1YmxpYyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcHVibGljIHZhcnMgKG5vdCBpbmNsdWRpbmcgT05FKVxuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKGRvbWFpblNpemUpOyAgICAgICAgICAgICAgICAgIC8vIGRvbWFpblNpemVcblxuICAgIGxldCBiQWxwaGExO1xuICAgIGJBbHBoYTEgPSBhd2FpdCBmZFBUYXUucmVhZChzRzEsIHNlY3Rpb25zUFRhdVs0XVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYkFscGhhMSk7XG4gICAgYkFscGhhMSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJBbHBoYTEpO1xuICAgIGNzSGFzaGVyLnVwZGF0ZShiQWxwaGExKTtcblxuICAgIGxldCBiQmV0YTE7XG4gICAgYkJldGExID0gYXdhaXQgZmRQVGF1LnJlYWQoc0cxLCBzZWN0aW9uc1BUYXVbNV1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJCZXRhMSk7XG4gICAgYkJldGExID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hMRU10b1UoYkJldGExKTtcbiAgICBjc0hhc2hlci51cGRhdGUoYkJldGExKTtcblxuICAgIGxldCBiQmV0YTI7XG4gICAgYkJldGEyID0gYXdhaXQgZmRQVGF1LnJlYWQoc0cyLCBzZWN0aW9uc1BUYXVbNl1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJCZXRhMik7XG4gICAgYkJldGEyID0gYXdhaXQgY3VydmUuRzIuYmF0Y2hMRU10b1UoYkJldGEyKTtcbiAgICBjc0hhc2hlci51cGRhdGUoYkJldGEyKTtcblxuICAgIGNvbnN0IGJnMSA9IG5ldyBVaW50OEFycmF5KHNHMSk7XG4gICAgY3VydmUuRzEudG9ScHJMRU0oYmcxLCAwLCBjdXJ2ZS5HMS5nKTtcbiAgICBjb25zdCBiZzIgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgIGN1cnZlLkcyLnRvUnByTEVNKGJnMiwgMCwgY3VydmUuRzIuZyk7XG4gICAgY29uc3QgYmcxVSA9IG5ldyBVaW50OEFycmF5KHNHMSk7XG4gICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYmcxVSwgMCwgY3VydmUuRzEuZyk7XG4gICAgY29uc3QgYmcyVSA9IG5ldyBVaW50OEFycmF5KHNHMik7XG4gICAgY3VydmUuRzIudG9ScHJVbmNvbXByZXNzZWQoYmcyVSwgMCwgY3VydmUuRzIuZyk7XG5cbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYmcyKTsgICAgICAgIC8vIGdhbW1hMlxuICAgIGF3YWl0IGZkWktleS53cml0ZShiZzEpOyAgICAgICAgLy8gZGVsdGExXG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJnMik7ICAgICAgICAvLyBkZWx0YTJcbiAgICBjc0hhc2hlci51cGRhdGUoYmcyVSk7ICAgICAgLy8gZ2FtbWEyXG4gICAgY3NIYXNoZXIudXBkYXRlKGJnMVUpOyAgICAgIC8vIGRlbHRhMVxuICAgIGNzSGFzaGVyLnVwZGF0ZShiZzJVKTsgICAgICAvLyBkZWx0YTJcbiAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyByMWNzXCIpO1xuICAgIGxldCBzUjFjcyA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGNvbnN0IEEgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQjEgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQjIgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQyA9IG5ldyBCaWdBcnJheShyMWNzLm5WYXJzLSBuUHVibGljIC0xKTtcbiAgICBjb25zdCBJQyA9IG5ldyBBcnJheShuUHVibGljKzEpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJSZWFkaW5nIHRhdUcxXCIpO1xuICAgIGxldCBzVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTIsIChkb21haW5TaXplIC0xKSpzRzEsIGRvbWFpblNpemUqc0cxKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlJlYWRpbmcgdGF1RzJcIik7XG4gICAgbGV0IHNUYXVHMiA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUFRhdSwgc2VjdGlvbnNQVGF1LCAxMywgKGRvbWFpblNpemUgLTEpKnNHMiwgZG9tYWluU2l6ZSpzRzIpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyBhbHBoYXRhdUcxXCIpO1xuICAgIGxldCBzQWxwaGFUYXVHMSA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUFRhdSwgc2VjdGlvbnNQVGF1LCAxNCwgKGRvbWFpblNpemUgLTEpKnNHMSwgZG9tYWluU2l6ZSpzRzEpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyBiZXRhdGF1RzFcIik7XG4gICAgbGV0IHNCZXRhVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTUsIChkb21haW5TaXplIC0xKSpzRzEsIGRvbWFpblNpemUqc0cxKTtcblxuICAgIGF3YWl0IHByb2Nlc3NDb25zdHJhaW50cygpO1xuXG4gICAgYXdhaXQgY29tcG9zZUFuZFdyaXRlUG9pbnRzKDMsIFwiRzFcIiwgSUMsIFwiSUNcIik7XG5cbiAgICBhd2FpdCB3cml0ZUhzKCk7XG5cbiAgICBhd2FpdCBoYXNoSFBvaW50cygpO1xuXG4gICAgYXdhaXQgY29tcG9zZUFuZFdyaXRlUG9pbnRzKDgsIFwiRzFcIiwgQywgXCJDXCIpO1xuICAgIGF3YWl0IGNvbXBvc2VBbmRXcml0ZVBvaW50cyg1LCBcIkcxXCIsIEEsIFwiQVwiKTtcbiAgICBhd2FpdCBjb21wb3NlQW5kV3JpdGVQb2ludHMoNiwgXCJHMVwiLCBCMSwgXCJCMVwiKTtcbiAgICBhd2FpdCBjb21wb3NlQW5kV3JpdGVQb2ludHMoNywgXCJHMlwiLCBCMiwgXCJCMlwiKTtcblxuICAgIGNvbnN0IGNzSGFzaCA9IGNzSGFzaGVyLmRpZ2VzdCgpO1xuICAgIC8vIENvbnRyaWJ1dGlvbnMgc2VjdGlvblxuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMTApO1xuICAgIGF3YWl0IGZkWktleS53cml0ZShjc0hhc2gpO1xuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKDApO1xuICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oZm9ybWF0SGFzaChjc0hhc2gsIFwiQ2lyY3VpdCBoYXNoOiBcIikpO1xuXG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFIxY3MuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFBUYXUuY2xvc2UoKTtcblxuICAgIHJldHVybiBjc0hhc2g7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUhzKCkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIDkpO1xuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IEJpZ0J1ZmZlcihkb21haW5TaXplKnNHMSk7XG4gICAgICAgIGlmIChjaXJQb3dlciA8IGN1cnZlLkZyLnMpIHtcbiAgICAgICAgICAgIGxldCBzVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTIsIChkb21haW5TaXplKjItMSkqc0cxLCBkb21haW5TaXplKjIqc0cxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTwgZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGBzcGxpdGluZyBidWZmZXI6ICR7aX0vJHtkb21haW5TaXplfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBzVGF1RzEuc2xpY2UoIChpKjIrMSkqc0cxLCAoaSoyKzEpKnNHMSArIHNHMSApO1xuICAgICAgICAgICAgICAgIGJ1ZmZPdXQuc2V0KGJ1ZmYsIGkqc0cxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaXJQb3dlciA9PSBjdXJ2ZS5Gci5zKSB7XG4gICAgICAgICAgICBjb25zdCBvID0gc2VjdGlvbnNQVGF1WzEyXVswXS5wICsgKCgyICoqIChjaXJQb3dlcisxKSkgLTEpKnNHMTtcbiAgICAgICAgICAgIGF3YWl0IGZkUFRhdS5yZWFkVG9CdWZmZXIoYnVmZk91dCwgMCwgZG9tYWluU2l6ZSpzRzEsIG8gKyBkb21haW5TaXplKnNHMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJDaXJjdWl0IHRvbyBiaWdcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgY3VydmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJ1ZmZPdXQpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ29uc3RyYWludHMoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZDb2VmZiA9IG5ldyBVaW50OEFycmF5KDEyICsgY3VydmUuRnIubjgpO1xuICAgICAgICBjb25zdCBidWZmQ29lZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmZDb2VmZi5idWZmZXIpO1xuICAgICAgICBjb25zdCBiT25lID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRnIubjgpO1xuICAgICAgICBjdXJ2ZS5Gci50b1JwckxFKGJPbmUsIDAsIGN1cnZlLkZyLmUoMSkpO1xuXG4gICAgICAgIGxldCByMWNzUG9zID0gMDtcblxuICAgICAgICBmdW5jdGlvbiByMWNzX3JlYWRVTEUzMigpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBzUjFjcy5zbGljZShyMWNzUG9zLCByMWNzUG9zKzQpO1xuICAgICAgICAgICAgcjFjc1BvcyArPSA0O1xuICAgICAgICAgICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZWLmdldFVpbnQzMigwLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZWZzID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGM9MDsgYzxyMWNzLm5Db25zdHJhaW50czsgYysrKSB7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikmJihjJTEwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHByb2Nlc3NpbmcgY29uc3RyYWludHM6ICR7Y30vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG5BID0gcjFjc19yZWFkVUxFMzIoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuQTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHIxY3NfcmVhZFVMRTMyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29lZnAgPSByMWNzUG9zO1xuICAgICAgICAgICAgICAgIHIxY3NQb3MgKz0gY3VydmUuRnIubjg7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsMXQgPSBUQVVfRzE7XG4gICAgICAgICAgICAgICAgY29uc3QgbDEgPSBzRzEqYztcbiAgICAgICAgICAgICAgICBjb25zdCBsMnQgPSBCRVRBVEFVX0cxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwyID0gc0cxKmM7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBW3NdID09PSBcInVuZGVmaW5lZFwiKSBBW3NdID0gW107XG4gICAgICAgICAgICAgICAgQVtzXS5wdXNoKFtsMXQsIGwxLCBjb2VmcF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHMgPD0gblB1YmxpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBJQ1tzXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ1tzLSBuUHVibGljIC0xXSA9PT0gXCJ1bmRlZmluZWRcIikgQ1tzLSBuUHVibGljIC0xXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBDW3MgLSBuUHVibGljIC0xXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2Vmcy5wdXNoKFswLCBjLCBzLCBjb2VmcF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuQiA9IHIxY3NfcmVhZFVMRTMyKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSByMWNzX3JlYWRVTEUzMigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZWZwID0gcjFjc1BvcztcbiAgICAgICAgICAgICAgICByMWNzUG9zICs9IGN1cnZlLkZyLm44O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbDF0ID0gVEFVX0cxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwxID0gc0cxKmM7XG4gICAgICAgICAgICAgICAgY29uc3QgbDJ0ID0gVEFVX0cyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwyID0gc0cyKmM7XG4gICAgICAgICAgICAgICAgY29uc3QgbDN0ID0gQUxQSEFUQVVfRzE7XG4gICAgICAgICAgICAgICAgY29uc3QgbDMgPSBzRzEqYztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEIxW3NdID09PSBcInVuZGVmaW5lZFwiKSBCMVtzXSA9IFtdO1xuICAgICAgICAgICAgICAgIEIxW3NdLnB1c2goW2wxdCwgbDEsIGNvZWZwXSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCMltzXSA9PT0gXCJ1bmRlZmluZWRcIikgQjJbc10gPSBbXTtcbiAgICAgICAgICAgICAgICBCMltzXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHMgPD0gblB1YmxpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBJQ1tzXS5wdXNoKFtsM3QsIGwzLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ1tzLSBuUHVibGljIC0xXSA9PT0gXCJ1bmRlZmluZWRcIikgQ1tzLSBuUHVibGljIC0xXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBDW3MtIG5QdWJsaWMgLTFdLnB1c2goW2wzdCwgbDMsIGNvZWZwXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29lZnMucHVzaChbMSwgYywgcywgY29lZnBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbkMgPSByMWNzX3JlYWRVTEUzMigpO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gcjFjc19yZWFkVUxFMzIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2VmcCA9IHIxY3NQb3M7XG4gICAgICAgICAgICAgICAgcjFjc1BvcyArPSBjdXJ2ZS5Gci5uODtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGwxdCA9IFRBVV9HMTtcbiAgICAgICAgICAgICAgICBjb25zdCBsMSA9IHNHMSpjO1xuICAgICAgICAgICAgICAgIGlmIChzIDw9IG5QdWJsaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBJQ1tzXSA9PT0gXCJ1bmRlZmluZWRcIikgSUNbc10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgSUNbc10ucHVzaChbbDF0LCBsMSwgY29lZnBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIENbcy0gblB1YmxpYyAtMV0gPT09IFwidW5kZWZpbmVkXCIpIENbcy0gblB1YmxpYyAtMV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgQ1tzLSBuUHVibGljIC0xXS5wdXNoKFtsMXQsIGwxLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IG5QdWJsaWMgOyBzKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGwxdCA9IFRBVV9HMTtcbiAgICAgICAgICAgIGNvbnN0IGwxID0gc0cxKihyMWNzLm5Db25zdHJhaW50cyArIHMpO1xuICAgICAgICAgICAgY29uc3QgbDJ0ID0gQkVUQVRBVV9HMTtcbiAgICAgICAgICAgIGNvbnN0IGwyID0gc0cxKihyMWNzLm5Db25zdHJhaW50cyArIHMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBBW3NdID09PSBcInVuZGVmaW5lZFwiKSBBW3NdID0gW107XG4gICAgICAgICAgICBBW3NdLnB1c2goW2wxdCwgbDEsIC0xXSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgSUNbc10ucHVzaChbbDJ0LCBsMiwgLTFdKTtcbiAgICAgICAgICAgIGNvZWZzLnB1c2goWzAsIHIxY3MubkNvbnN0cmFpbnRzICsgcywgcywgLTFdKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCA0KTtcblxuICAgICAgICBjb25zdCBidWZmU2VjdGlvbiA9IG5ldyBCaWdCdWZmZXIoY29lZnMubGVuZ3RoKigxMitjdXJ2ZS5Gci5uOCkgKyA0KTtcblxuICAgICAgICBjb25zdCBidWZmNCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCBidWZmNFYgPSBuZXcgRGF0YVZpZXcoYnVmZjQuYnVmZmVyKTtcbiAgICAgICAgYnVmZjRWLnNldFVpbnQzMigwLCBjb2Vmcy5sZW5ndGgsIHRydWUpO1xuICAgICAgICBidWZmU2VjdGlvbi5zZXQoYnVmZjQpO1xuICAgICAgICBsZXQgY29lZnNQb3MgPSA0O1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Y29lZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKGklMTAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgY29lZmZzOiAke2l9LyR7Y29lZnMubGVuZ3RofWApO1xuICAgICAgICAgICAgd3JpdGVDb2VmKGNvZWZzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShidWZmU2VjdGlvbik7XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlQ29lZihjKSB7XG4gICAgICAgICAgICBidWZmQ29lZmZWLnNldFVpbnQzMigwLCBjWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIGJ1ZmZDb2VmZlYuc2V0VWludDMyKDQsIGNbMV0sIHRydWUpO1xuICAgICAgICAgICAgYnVmZkNvZWZmVi5zZXRVaW50MzIoOCwgY1syXSwgdHJ1ZSk7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChjWzNdPj0wKSB7XG4gICAgICAgICAgICAgICAgbiA9IGN1cnZlLkZyLmZyb21ScHJMRShzUjFjcy5zbGljZShjWzNdLCBjWzNdICsgY3VydmUuRnIubjgpLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IGN1cnZlLkZyLmZyb21ScHJMRShiT25lLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5SMiA9IGN1cnZlLkZyLm11bChuLCBSMnIpO1xuICAgICAgICAgICAgY3VydmUuRnIudG9ScHJMRShidWZmQ29lZmYsIDEyLCBuUjIpO1xuICAgICAgICAgICAgYnVmZlNlY3Rpb24uc2V0KGJ1ZmZDb2VmZiwgY29lZnNQb3MpO1xuICAgICAgICAgICAgY29lZnNQb3MgKz0gYnVmZkNvZWZmLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFuZFdyaXRlUG9pbnRzKGlkU2VjdGlvbiwgZ3JvdXBOYW1lLCBhcnIsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IENIVU5LX1NJWkU9IDE8PDE1O1xuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcblxuICAgICAgICBoYXNoVTMyKGFyci5sZW5ndGgpO1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIGlkU2VjdGlvbik7XG5cbiAgICAgICAgbGV0IG9wUHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBsZXQgaT0wO1xuICAgICAgICB3aGlsZSAoaTxhcnIubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIGxldCB0PTA7XG4gICAgICAgICAgICB3aGlsZSAoKGk8YXJyLmxlbmd0aCkmJih0PGN1cnZlLnRtLmNvbmN1cnJlbmN5KSkge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpICBsb2dnZXIuZGVidWcoYFdyaXRpbmcgcG9pbnRzIHN0YXJ0ICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7YXJyLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICBsZXQgbiA9IDE7XG4gICAgICAgICAgICAgICAgbGV0IG5QID0gKGFycltpXSA/IGFycltpXS5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGkgKyBuIDwgYXJyLmxlbmd0aCkgJiYgKG5QICsgKGFycltpK25dID8gYXJyW2krbl0ubGVuZ3RoIDogMCkgPCBDSFVOS19TSVpFKSAmJiAobjxDSFVOS19TSVpFKSkge1xuICAgICAgICAgICAgICAgICAgICBuUCArPSAoYXJyW2krbl0gPyBhcnJbaStuXS5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgbiArKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyID0gYXJyLnNsaWNlKGksIGkgKyBuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfaSA9IGk7XG4gICAgICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKGNvbXBvc2VBbmRXcml0ZVBvaW50c1RocmVhZChncm91cE5hbWUsIHN1YkFyciwgbG9nZ2VyLCBzZWN0aW9uTmFtZSkudGhlbiggKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgIGxvZ2dlci5kZWJ1ZyhgV3JpdGluZyBwb2ludHMgZW5kICR7c2VjdGlvbk5hbWV9OiAke19pfS8ke2Fyci5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgdCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrPHJlc3VsdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZShyZXN1bHRba11bMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKHJlc3VsdFtrXVswXSk7XG4gICAgICAgICAgICAgICAgY3NIYXNoZXIudXBkYXRlKGJ1ZmYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3BQcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wb3NlQW5kV3JpdGVQb2ludHNUaHJlYWQoZ3JvdXBOYW1lLCBhcnIsIGxvZ2dlciwgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHaW4gPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBHLkYubjgqMztcbiAgICAgICAgY29uc3Qgc0dvdXQgPSBHLkYubjgqMjtcbiAgICAgICAgbGV0IGZuRXhwLCBmbk11bHRpRXhwLCBmbkJhdGNoVG9BZmZpbmUsIGZuWmVybztcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuRXhwID0gXCJnMW1fdGltZXNTY2FsYXJBZmZpbmVcIjtcbiAgICAgICAgICAgIGZuTXVsdGlFeHAgPSBcImcxbV9tdWx0aWV4cEFmZmluZVwiO1xuICAgICAgICAgICAgZm5CYXRjaFRvQWZmaW5lID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgZm5aZXJvID0gXCJnMW1femVyb1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGZuRXhwID0gXCJnMm1fdGltZXNTY2FsYXJBZmZpbmVcIjtcbiAgICAgICAgICAgIGZuTXVsdGlFeHAgPSBcImcybV9tdWx0aWV4cEFmZmluZVwiO1xuICAgICAgICAgICAgZm5CYXRjaFRvQWZmaW5lID0gXCJnMm1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgZm5aZXJvID0gXCJnMm1femVyb1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWNjID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSBhY2MgKz0gYXJyW2ldID8gYXJyW2ldLmxlbmd0aCA6IDA7XG4gICAgICAgIGxldCBiQmFzZXMsIGJTY2FsYXJzO1xuICAgICAgICBpZiAoYWNjPiAyPDwxNCkge1xuICAgICAgICAgICAgYkJhc2VzID0gbmV3IEJpZ0J1ZmZlcihhY2Mqc0dpbik7XG4gICAgICAgICAgICBiU2NhbGFycyA9IG5ldyBCaWdCdWZmZXIoYWNjKmN1cnZlLkZyLm44KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJCYXNlcyA9IG5ldyBVaW50OEFycmF5KGFjYypzR2luKTtcbiAgICAgICAgICAgIGJTY2FsYXJzID0gbmV3IFVpbnQ4QXJyYXkoYWNjKmN1cnZlLkZyLm44KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcEIgPTA7XG4gICAgICAgIGxldCBwUyA9MDtcblxuICAgICAgICBjb25zdCBzQnVmZnMgPSBbXG4gICAgICAgICAgICBzVGF1RzEsXG4gICAgICAgICAgICBzVGF1RzIsXG4gICAgICAgICAgICBzQWxwaGFUYXVHMSxcbiAgICAgICAgICAgIHNCZXRhVGF1RzFcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBiT25lID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRnIubjgpO1xuICAgICAgICBjdXJ2ZS5Gci50b1JwckxFKGJPbmUsIDAsIGN1cnZlLkZyLmUoMSkpO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWFycltpXSkgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8YXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaikmJihqJTEwMDAwID09IDApKSAgbG9nZ2VyLmRlYnVnKGBDb25maWd1cmluZyBiaWcgYXJyYXkgJHtzZWN0aW9uTmFtZX06ICR7an0vJHthcnJbaV0ubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIGJCYXNlcy5zZXQoXG4gICAgICAgICAgICAgICAgICAgIHNCdWZmc1thcnJbaV1bal1bMF1dLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzFdICsgc0dpblxuICAgICAgICAgICAgICAgICAgICApLCBvZmZzZXQqc0dpblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFycltpXVtqXVsyXT49MCkge1xuICAgICAgICAgICAgICAgICAgICBiU2NhbGFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzUjFjcy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaV1bal1bMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzJdICsgY3VydmUuRnIubjhcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQqY3VydmUuRnIubjhcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiU2NhbGFycy5zZXQoYk9uZSwgb2Zmc2V0KmN1cnZlLkZyLm44KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyci5sZW5ndGg+MSkge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBiQmFzZXN9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogYlNjYWxhcnN9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMiwgbGVuOiBhcnIubGVuZ3RoKnNHbWlkfSk7XG4gICAgICAgICAgICBwQiA9IDA7XG4gICAgICAgICAgICBwUyA9IDA7XG4gICAgICAgICAgICBsZXQgcEQgPTA7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcnJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuWmVybywgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyLCBvZmZzZXQ6IHBEfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIHBEICs9IHNHbWlkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFycltpXS5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5FeHAsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMCwgb2Zmc2V0OiBwQn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxLCBvZmZzZXQ6IHBTfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IGN1cnZlLkZyLm44fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDIsIG9mZnNldDogcER9XG4gICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5NdWx0aUV4cCwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwLCBvZmZzZXQ6IHBCfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDEsIG9mZnNldDogcFN9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogY3VydmUuRnIubjh9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogYXJyW2ldLmxlbmd0aH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyLCBvZmZzZXQ6IHBEfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBCICs9IHNHaW4qYXJyW2ldLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBwUyArPSBjdXJ2ZS5Gci5uOCphcnJbaV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHBEICs9IHNHbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuQmF0Y2hUb0FmZmluZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhbDogYXJyLmxlbmd0aH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDIsIGxlbjogYXJyLmxlbmd0aCpzR291dH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShiQmFzZXMsIGJTY2FsYXJzLCBsb2dnZXIsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIHJlcyA9IFsgRy50b0FmZmluZShyZXMpIF07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBoYXNoSFBvaW50cygpIHtcbiAgICAgICAgY29uc3QgQ0hVTktfU0laRSA9IDE8PDE0O1xuXG4gICAgICAgIGhhc2hVMzIoZG9tYWluU2l6ZS0xKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZG9tYWluU2l6ZS0xOyBpKz0gQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgIGxvZ2dlci5kZWJ1ZyhgSGFzaGluZ0hQb2ludHM6ICR7aX0vJHtkb21haW5TaXplfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKGRvbWFpblNpemUtMSwgQ0hVTktfU0laRSk7XG4gICAgICAgICAgICBhd2FpdCBoYXNoSFBvaW50c0NodW5rKGksIG4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaEhQb2ludHNDaHVuayhvZmZzZXQsIG5Qb2ludHMpIHtcbiAgICAgICAgY29uc3QgYnVmZjEgPSBhd2FpdCBmZFBUYXUucmVhZChuUG9pbnRzICpzRzEsIHNlY3Rpb25zUFRhdVsyXVswXS5wICsgKG9mZnNldCArIGRvbWFpblNpemUpKnNHMSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYyID0gYXdhaXQgZmRQVGF1LnJlYWQoblBvaW50cyAqc0cxLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIG9mZnNldCpzRzEpO1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeT0gY3VydmUudG0uY29uY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IG5Qb2ludHNQZXJUaHJlYWQgPSBNYXRoLmZsb29yKG5Qb2ludHMgLyBjb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IGNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50c1BlclRocmVhZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKm5Qb2ludHNQZXJUaHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YkJ1ZmYxID0gYnVmZjEuc2xpY2UoaSpuUG9pbnRzUGVyVGhyZWFkKnNHMSwgKGkqblBvaW50c1BlclRocmVhZCtuKSpzRzEpO1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVmZjIgPSBidWZmMi5zbGljZShpKm5Qb2ludHNQZXJUaHJlYWQqc0cxLCAoaSpuUG9pbnRzUGVyVGhyZWFkK24pKnNHMSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goaGFzaEhQb2ludHNUaHJlYWQoc3ViQnVmZjEsIHN1YkJ1ZmYyKSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNzSGFzaGVyLnVwZGF0ZShyZXN1bHRbaV1bMF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaEhQb2ludHNUaHJlYWQoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmMS5ieXRlTGVuZ3RoL3NHMTtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBjdXJ2ZS5HMS5GLm44KjM7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBidWZmMX0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGJ1ZmYyfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMiwgbGVuOiBuUG9pbnRzKnNHbWlkfSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBcIkNBTExcIixcbiAgICAgICAgICAgICAgICBmbk5hbWU6IFwiZzFtX3N1YkFmZmluZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwLCBvZmZzZXQ6IGkqc0cxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMSwgb2Zmc2V0OiBpKnNHMX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDIsIG9mZnNldDogaSpzR21pZH0sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwiZzFtX2JhdGNoVG9BZmZpbmVcIiwgcGFyYW1zOiBbXG4gICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgIHt2YWw6IG5Qb2ludHN9LFxuICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgIF19KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwiZzFtX2JhdGNoTEVNdG9VXCIsIHBhcmFtczogW1xuICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICB7dmFsOiBuUG9pbnRzfSxcbiAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICBdfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMiwgbGVuOiBuUG9pbnRzKnNHMX0pO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnRtLnF1ZXVlQWN0aW9uKHRhc2spO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzaFUzMihuKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgYnVmZlYuc2V0VWludDMyKDAsIG4sIGZhbHNlKTtcbiAgICAgICAgY3NIYXNoZXIudXBkYXRlKGJ1ZmYpO1xuICAgIH1cblxufVxuXG5cbiIsIlxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMmV4cG9ydE1QQ1BhcmFtcyh6a2V5TmFtZSwgbXBjcGFyYW1zTmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCB7ZmQ6IGZkWktleSwgc2VjdGlvbnM6IHNlY3Rpb25zWktleX0gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCBzZWN0aW9uc1pLZXkpO1xuICAgIGlmICh6a2V5LnByb3RvY29sICE9IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZ3JvdGgxNlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG4gICAgY29uc3Qgc0cxID0gY3VydmUuRzEuRi5uOCoyO1xuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkcyLkYubjgqMjtcblxuICAgIGNvbnN0IG1wY1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkWktleSwgY3VydmUsIHNlY3Rpb25zWktleSk7XG5cbiAgICBjb25zdCBmZE1QQ1BhcmFtcyA9IGF3YWl0IGZhc3RGaWxlLmNyZWF0ZU92ZXJyaWRlKG1wY3BhcmFtc05hbWUpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVmVyaWZpY2F0aW9uIEtleSBTZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgYXdhaXQgd3JpdGVHMSh6a2V5LnZrX2FscGhhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzEoemtleS52a19iZXRhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoemtleS52a19iZXRhXzIpO1xuICAgIGF3YWl0IHdyaXRlRzIoemtleS52a19nYW1tYV8yKTtcbiAgICBhd2FpdCB3cml0ZUcxKHprZXkudmtfZGVsdGFfMSk7XG4gICAgYXdhaXQgd3JpdGVHMih6a2V5LnZrX2RlbHRhXzIpO1xuXG4gICAgLy8gSUNcbiAgICBsZXQgYnVmZkJhc2VzSUM7XG4gICAgYnVmZkJhc2VzSUMgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDMpO1xuICAgIGJ1ZmZCYXNlc0lDID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hMRU10b1UoYnVmZkJhc2VzSUMpO1xuXG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzSUMpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gaCBTZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgY29uc3QgYnVmZkJhc2VzSF9Mb2RkID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA5KTtcblxuICAgIGxldCBidWZmQmFzZXNIX1RhdTtcbiAgICBidWZmQmFzZXNIX1RhdSA9IGF3YWl0IGN1cnZlLkcxLmZmdChidWZmQmFzZXNIX0xvZGQsIFwiYWZmaW5lXCIsIFwiamFjb2JpYW5cIiwgbG9nZ2VyKTtcbiAgICBidWZmQmFzZXNIX1RhdSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoQXBwbHlLZXkoYnVmZkJhc2VzSF9UYXUsIGN1cnZlLkZyLm5lZyhjdXJ2ZS5Gci5lKDIpKSwgY3VydmUuRnIud1t6a2V5LnBvd2VyKzFdLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlcik7XG5cbiAgICAvLyBSZW1vdmUgbGFzdCBlbGVtZW50LiAgKFRoZSBkZWdyZWUgb2YgSCB3aWxsIGJlIGFsbHdheXMgbS0yKVxuICAgIGJ1ZmZCYXNlc0hfVGF1ID0gYnVmZkJhc2VzSF9UYXUuc2xpY2UoMCwgYnVmZkJhc2VzSF9UYXUuYnl0ZUxlbmd0aCAtIHNHMSk7XG4gICAgYnVmZkJhc2VzSF9UYXUgPSBhd2FpdCBjdXJ2ZS5HMS5iYXRjaExFTXRvVShidWZmQmFzZXNIX1RhdSk7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzSF9UYXUpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTCBzZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgbGV0IGJ1ZmZCYXNlc0M7XG4gICAgYnVmZkJhc2VzQyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgOCk7XG4gICAgYnVmZkJhc2VzQyA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJ1ZmZCYXNlc0MpO1xuICAgIGF3YWl0IHdyaXRlUG9pbnRBcnJheShcIkcxXCIsIGJ1ZmZCYXNlc0MpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQSBTZWN0aW9uIChDIHNlY3Rpb24pXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgbGV0IGJ1ZmZCYXNlc0E7XG4gICAgYnVmZkJhc2VzQSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNSk7XG4gICAgYnVmZkJhc2VzQSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJ1ZmZCYXNlc0EpO1xuICAgIGF3YWl0IHdyaXRlUG9pbnRBcnJheShcIkcxXCIsIGJ1ZmZCYXNlc0EpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQjEgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGxldCBidWZmQmFzZXNCMTtcbiAgICBidWZmQmFzZXNCMSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNik7XG4gICAgYnVmZkJhc2VzQjEgPSBhd2FpdCBjdXJ2ZS5HMS5iYXRjaExFTXRvVShidWZmQmFzZXNCMSk7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzQjEpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGxldCBidWZmQmFzZXNCMjtcbiAgICBidWZmQmFzZXNCMiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNyk7XG4gICAgYnVmZkJhc2VzQjIgPSBhd2FpdCBjdXJ2ZS5HMi5iYXRjaExFTXRvVShidWZmQmFzZXNCMik7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzJcIiwgYnVmZkJhc2VzQjIpO1xuXG4gICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgYXdhaXQgd3JpdGVVMzIobXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV07XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoYy5kZWx0YUFmdGVyKTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShjLmRlbHRhLmcxX3MpO1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGMuZGVsdGEuZzFfc3gpO1xuICAgICAgICBhd2FpdCB3cml0ZUcyKGMuZGVsdGEuZzJfc3B4KTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYy50cmFuc2NyaXB0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE1QQ1BhcmFtcy5jbG9zZSgpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzEpO1xuICAgICAgICBjdXJ2ZS5HMS50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgICAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVQb2ludEFycmF5KGdyb3VwTmFtZSwgYnVmZikge1xuICAgICAgICBsZXQgc0c7XG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBzRyA9IHNHMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNHID0gc0cyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZlNpemUgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlNpemVWID0gbmV3IERhdGFWaWV3KGJ1ZmZTaXplLmJ1ZmZlciwgYnVmZlNpemUuYnl0ZU9mZnNldCwgYnVmZlNpemUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGJ1ZmZTaXplVi5zZXRVaW50MzIoMCwgYnVmZi5ieXRlTGVuZ3RoIC8gc0csIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBmZE1QQ1BhcmFtcy53cml0ZShidWZmU2l6ZSk7XG4gICAgICAgIGF3YWl0IGZkTVBDUGFyYW1zLndyaXRlKGJ1ZmYpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlVTMyKG4pIHtcbiAgICAgICAgY29uc3QgYnVmZlNpemUgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlNpemVWID0gbmV3IERhdGFWaWV3KGJ1ZmZTaXplLmJ1ZmZlciwgYnVmZlNpemUuYnl0ZU9mZnNldCwgYnVmZlNpemUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGJ1ZmZTaXplVi5zZXRVaW50MzIoMCwgbiwgZmFsc2UpO1xuXG4gICAgICAgIGF3YWl0IGZkTVBDUGFyYW1zLndyaXRlKGJ1ZmZTaXplKTtcbiAgICB9XG5cblxuXG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgYXMgZ2V0Q3VydmUgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwaGFzZTJpbXBvcnRNUENQYXJhbXMoemtleU5hbWVPbGQsIG1wY3BhcmFtc05hbWUsIHprZXlOYW1lTmV3LCBuYW1lLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IHtmZDogZmRaS2V5T2xkLCBzZWN0aW9uczogc2VjdGlvbnNaS2V5T2xkfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5TmFtZU9sZCwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXlIZWFkZXIgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZFpLZXlPbGQsIHNlY3Rpb25zWktleU9sZCwgZmFsc2UpO1xuICAgIGlmICh6a2V5SGVhZGVyLnByb3RvY29sICE9IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZ3JvdGgxNlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXlIZWFkZXIucSk7XG4gICAgY29uc3Qgc0cxID0gY3VydmUuRzEuRi5uOCoyO1xuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkcyLkYubjgqMjtcblxuICAgIGNvbnN0IG9sZE1QQ1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkWktleU9sZCwgY3VydmUsIHNlY3Rpb25zWktleU9sZCk7XG4gICAgY29uc3QgbmV3TVBDUGFyYW1zID0ge307XG5cbiAgICBjb25zdCBmZE1QQ1BhcmFtcyA9IGF3YWl0IGZhc3RGaWxlLnJlYWRFeGlzdGluZyhtcGNwYXJhbXNOYW1lKTtcblxuICAgIGZkTVBDUGFyYW1zLnBvcyA9XG4gICAgICAgIHNHMSozICsgc0cyKjMgKyAgICAgICAgICAgICAgICAgICAgIC8vIHZLZXlcbiAgICAgICAgOCArIHNHMSp6a2V5SGVhZGVyLm5WYXJzICsgICAgICAgICAgICAgIC8vIElDICsgQ1xuICAgICAgICA0ICsgc0cxKih6a2V5SGVhZGVyLmRvbWFpblNpemUtMSkgKyAgICAgLy8gSFxuICAgICAgICA0ICsgc0cxKnprZXlIZWFkZXIublZhcnMgKyAgICAgICAgICAgICAgLy8gQVxuICAgICAgICA0ICsgc0cxKnprZXlIZWFkZXIublZhcnMgKyAgICAgICAgICAgICAgLy8gQjFcbiAgICAgICAgNCArIHNHMip6a2V5SGVhZGVyLm5WYXJzOyAgICAgICAgICAgICAgIC8vIEIyXG5cbiAgICAvLyBjc0hhc2hcbiAgICBuZXdNUENQYXJhbXMuY3NIYXNoID0gIGF3YWl0IGZkTVBDUGFyYW1zLnJlYWQoNjQpO1xuXG4gICAgY29uc3QgbkNvbnR0cmlidXRpb25zID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgbmV3TVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bkNvbnR0cmlidXRpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IHsgZGVsdGE6e30gfTtcbiAgICAgICAgYy5kZWx0YUFmdGVyID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zeCA9IGF3YWl0IHJlYWRHMShmZE1QQ1BhcmFtcyk7XG4gICAgICAgIGMuZGVsdGEuZzJfc3B4ID0gYXdhaXQgcmVhZEcyKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy50cmFuc2NyaXB0ID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZCg2NCk7XG4gICAgICAgIGlmIChpPG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgYy50eXBlID0gb2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0udHlwZTtcbiAgICAgICAgICAgIGlmIChjLnR5cGU9PTEpIHtcbiAgICAgICAgICAgICAgICBjLmJlYWNvbkhhc2ggPSBvbGRNUENQYXJhbXMuY29udHJpYnV0aW9uc1tpXS5iZWFjb25IYXNoO1xuICAgICAgICAgICAgICAgIGMubnVtSXRlcmF0aW9uc0V4cCA9IG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldLm51bUl0ZXJhdGlvbnNFeHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0ubmFtZSkge1xuICAgICAgICAgICAgICAgIGMubmFtZSA9IG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3TVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMucHVzaChjKTtcbiAgICB9XG5cbiAgICBpZiAoIW1pc2MuaGFzaElzRXF1YWwobmV3TVBDUGFyYW1zLmNzSGFzaCwgb2xkTVBDUGFyYW1zLmNzSGFzaCkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSGFzaCBvZiB0aGUgb3JpZ2luYWwgY2lyY3VpdCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBNUEMgb25lXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCA+IG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJUaGUgaW1wb2VydGVkIGZpbGUgZG9lcyBub3QgaW5jbHVkZSBuZXcgY29udHJpYnV0aW9uc1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9MDsgaTxvbGRNUENQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWNvbnRyaWJ1dGlvbklzRXF1YWwob2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0sIG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBQcmV2aW9zIGNvbnRyaWJ1dGlvbiAke2l9IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIFNldCB0aGUgc2FtZSBuYW1lIHRvIGFsbCBuZXcgY29udHJvYnV0aW9uc1xuICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGk9b2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpPG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdNUENQYXJhbXMuY29udHJpYnV0aW9uc1tpXS5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZkWktleU5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuICAgIGZkTVBDUGFyYW1zLnBvcyA9IDA7XG5cbiAgICAvLyBIZWFkZXJcbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxOyAgLy8gaWdub3JlIGFscGhhMSAoa2VlcCBvcmlnaW5hbClcbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxOyAgLy8gaWdub3JlIGJldGExXG4gICAgZmRNUENQYXJhbXMucG9zICs9IHNHMjsgIC8vIGlnbm9yZSBiZXRhMlxuICAgIGZkTVBDUGFyYW1zLnBvcyArPSBzRzI7ICAvLyBpZ25vcmUgZ2FtbWEyXG4gICAgemtleUhlYWRlci52a19kZWx0YV8xID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICB6a2V5SGVhZGVyLnZrX2RlbHRhXzIgPSBhd2FpdCByZWFkRzIoZmRNUENQYXJhbXMpO1xuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZFpLZXlOZXcsIHprZXlIZWFkZXIpO1xuXG4gICAgLy8gSUMgKEtlZXAgb3JpZ2luYWwpXG4gICAgY29uc3QgbklDID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5JQyAhPSB6a2V5SGVhZGVyLm5QdWJsaWMgKzEpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRzIGluIElDXCIpO1xuICAgICAgICBhd2FpdCBmZFpLZXlOZXcuZGlzY2FyZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZkTVBDUGFyYW1zLnBvcyArPSBzRzEqKHprZXlIZWFkZXIublB1YmxpYysxKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgMyk7XG5cbiAgICAvLyBDb2VmZnMgKEtlZXAgb3JpZ2luYWwpXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkWktleU9sZCwgc2VjdGlvbnNaS2V5T2xkLCBmZFpLZXlOZXcsIDQpO1xuXG4gICAgLy8gSCBTZWN0aW9uXG4gICAgY29uc3QgbkggPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkVUJFMzIoKTtcbiAgICBpZiAobkggIT0gemtleUhlYWRlci5kb21haW5TaXplLTEpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRzIGluIEhcIik7XG4gICAgICAgIGF3YWl0IGZkWktleU5ldy5kaXNjYXJkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGJ1ZmZIO1xuICAgIGNvbnN0IGJ1ZmZUYXVVID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZChzRzEqKHprZXlIZWFkZXIuZG9tYWluU2l6ZS0xKSk7XG4gICAgY29uc3QgYnVmZlRhdUxFTSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoVXRvTEVNKGJ1ZmZUYXVVKTtcbiAgICBidWZmSCA9IG5ldyBVaW50OEFycmF5KHprZXlIZWFkZXIuZG9tYWluU2l6ZSpzRzEpO1xuICAgIGJ1ZmZILnNldChidWZmVGF1TEVNKTsgICAvLyBMZXQgdGhlIGxhc3Qgb25lIHRvIHplcm8uXG4gICAgY3VydmUuRzEudG9ScHJMRU0oYnVmZkgsIHNHMSooemtleUhlYWRlci5kb21haW5TaXplLTEpLCBjdXJ2ZS5HMS56ZXJvQWZmaW5lKTtcbiAgICBjb25zdCBuMkludiA9IGN1cnZlLkZyLm5lZyhjdXJ2ZS5Gci5pbnYoY3VydmUuRnIuZSgyKSkpO1xuICAgIGNvbnN0IHdJbnYgPSBjdXJ2ZS5Gci5pbnYoY3VydmUuRnIud1t6a2V5SGVhZGVyLnBvd2VyKzFdKTtcbiAgICBidWZmSCA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoQXBwbHlLZXkoYnVmZkgsIG4ySW52LCB3SW52LCBcImFmZmluZVwiLCBcImphY29iaWFuXCIsIGxvZ2dlcik7XG4gICAgYnVmZkggPSBhd2FpdCBjdXJ2ZS5HMS5pZmZ0KGJ1ZmZILCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlcik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleU5ldywgOSk7XG4gICAgYXdhaXQgZmRaS2V5TmV3LndyaXRlKGJ1ZmZIKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkWktleU5ldyk7XG5cbiAgICAvLyBDIFNlY2lvbiAoTCBzZWN0aW9uKVxuICAgIGNvbnN0IG5MID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5MICE9ICh6a2V5SGVhZGVyLm5WYXJzLXprZXlIZWFkZXIublB1YmxpYy0xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHMgaW4gTFwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgYnVmZkw7XG4gICAgYnVmZkwgPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkKHNHMSooemtleUhlYWRlci5uVmFycy16a2V5SGVhZGVyLm5QdWJsaWMtMSkpO1xuICAgIGJ1ZmZMID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hVdG9MRU0oYnVmZkwpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZFpLZXlOZXcsIDgpO1xuICAgIGF3YWl0IGZkWktleU5ldy53cml0ZShidWZmTCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZFpLZXlOZXcpO1xuXG4gICAgLy8gQSBTZWN0aW9uXG4gICAgY29uc3QgbkEgPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkVUJFMzIoKTtcbiAgICBpZiAobkEgIT0gemtleUhlYWRlci5uVmFycykge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHMgaW4gQVwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgY29uc3QgbkIxID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5CMSAhPSB6a2V5SGVhZGVyLm5WYXJzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50cyBpbiBCMVwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNik7XG5cbiAgICAvLyBCMiBTZWN0aW9uXG4gICAgY29uc3QgbkIyID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5CMiAhPSB6a2V5SGVhZGVyLm5WYXJzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50cyBpbiBCMlwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cyKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNyk7XG5cbiAgICBhd2FpdCB6a2V5VXRpbHMud3JpdGVNUENQYXJhbXMoZmRaS2V5TmV3LCBjdXJ2ZSwgbmV3TVBDUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkTVBDUGFyYW1zLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRaS2V5TmV3LmNsb3NlKCk7XG4gICAgYXdhaXQgZmRaS2V5T2xkLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMShmZCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMS5GLm44KjIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRzEuZnJvbVJwclVuY29tcHJlc3NlZChidWZmLCAwKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRzIoZmQpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoY3VydmUuRzIuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGN1cnZlLkcyLmZyb21ScHJVbmNvbXByZXNzZWQoYnVmZiwgMCk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBjb250cmlidXRpb25Jc0VxdWFsKGMxLCBjMikge1xuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGMxLmRlbHRhQWZ0ZXIgICAsIGMyLmRlbHRhQWZ0ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoYzEuZGVsdGEuZzFfcyAgICwgYzIuZGVsdGEuZzFfcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjMS5kZWx0YS5nMV9zeCAgLCBjMi5kZWx0YS5nMV9zeCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFjdXJ2ZS5HMi5lcShjMS5kZWx0YS5nMl9zcHggLCBjMi5kZWx0YS5nMl9zcHgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghbWlzYy5oYXNoSXNFcXVhbChjMS50cmFuc2NyaXB0LCBjMi50cmFuc2NyaXB0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IGhhc2hUb0cyIGFzIGhhc2hUb0cyIH0gZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuY29uc3Qgc2FtZVJhdGlvID0gbWlzYy5zYW1lUmF0aW87XG5pbXBvcnQge2hhc2hHMSwgaGFzaFB1YktleX0gZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgU2NhbGFyLCBDaGFDaGEsIEJpZ0J1ZmZlciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMnZlcmlmeUZyb21Jbml0KGluaXRGaWxlTmFtZSwgcFRhdUZpbGVOYW1lLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgbGV0IHNyO1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHprZXlGaWxlTmFtZSwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXkgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZCwgc2VjdGlvbnMsIGZhbHNlKTtcbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IGdyb3RoMTZcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcblxuICAgIGNvbnN0IG1wY1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuXG4gICAgY29uc3QgYWNjdW11bGF0ZWRIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBhY2N1bXVsYXRlZEhhc2hlci51cGRhdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgbGV0IGN1ckRlbHRhID0gY3VydmUuRzEuZztcbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IG1wY1BhcmFtcy5jb250cmlidXRpb25zW2ldO1xuICAgICAgICBjb25zdCBvdXJIYXNoZXIgPSBtaXNjLmNsb25lSGFzaGVyKGFjY3VtdWxhdGVkSGFzaGVyKTtcblxuICAgICAgICBoYXNoRzEob3VySGFzaGVyLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zKTtcbiAgICAgICAgaGFzaEcxKG91ckhhc2hlciwgY3VydmUsIGMuZGVsdGEuZzFfc3gpO1xuXG4gICAgICAgIGlmICghbWlzYy5oYXNoSXNFcXVhbChvdXJIYXNoZXIuZGlnZXN0KCksIGMudHJhbnNjcmlwdCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJTlZBTElEKCR7aX0pOiBJbmNvbnNpc3RlbnQgdHJhbnNjcmlwdCBgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbHRhX2cyX3NwID0gaGFzaFRvRzIoY3VydmUsIGMudHJhbnNjcmlwdCk7XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGMuZGVsdGEuZzFfcywgYy5kZWx0YS5nMV9zeCwgZGVsdGFfZzJfc3AsIGMuZGVsdGEuZzJfc3B4KTtcbiAgICAgICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgSU5WQUxJRCgke2l9KTogcHVibGljIGtleSBHMSBhbmQgRzIgZG8gbm90IGhhdmUgdGhlIHNhbWUgcmF0aW9uIGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1ckRlbHRhLCBjLmRlbHRhQWZ0ZXIsIGRlbHRhX2cyX3NwLCBjLmRlbHRhLmcyX3NweCk7XG4gICAgICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElOVkFMSUQoJHtpfSk6IGRlbHRhQWZ0ZXIgZG9lcyBub3QgZmlsbG93IHRoZSBwdWJsaWMga2V5IGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMudHlwZSA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLnJuZ0Zyb21CZWFjb25QYXJhbXMoYy5iZWFjb25IYXNoLCBjLm51bUl0ZXJhdGlvbnNFeHApO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRfcHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRfZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZF9nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoZXhwZWN0ZWRfZzFfcywgZXhwZWN0ZWRfcHJ2S2V5KSk7XG4gICAgICAgICAgICBpZiAoY3VydmUuRzEuZXEoZXhwZWN0ZWRfZzFfcywgYy5kZWx0YS5nMV9zKSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJTlZBTElEKCR7aX0pOiBLZXkgb2YgdGhlIGJlYWNvbiBkb2VzIG5vdCBtYXRjaC4gZzFfcyBgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VydmUuRzEuZXEoZXhwZWN0ZWRfZzFfc3gsIGMuZGVsdGEuZzFfc3gpICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYElOVkFMSUQoJHtpfSk6IEtleSBvZiB0aGUgYmVhY29uIGRvZXMgbm90IG1hdGNoLiBnMV9zeCBgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBoYXNoUHViS2V5KGFjY3VtdWxhdGVkSGFzaGVyLCBjdXJ2ZSwgYyk7XG5cbiAgICAgICAgY29uc3QgY29udHJpYnV0aW9uSGFzaGVyID0gQmxha2UyYig2NCk7XG4gICAgICAgIGhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgYyk7XG5cbiAgICAgICAgYy5jb250cmlidXRpb25IYXNoID0gY29udHJpYnV0aW9uSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgICAgIGN1ckRlbHRhID0gYy5kZWx0YUFmdGVyO1xuICAgIH1cblxuXG4gICAgY29uc3Qge2ZkOiBmZEluaXQsIHNlY3Rpb25zOiBzZWN0aW9uc0luaXR9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKGluaXRGaWxlTmFtZSwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXlJbml0ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRJbml0LCBzZWN0aW9uc0luaXQsIGZhbHNlKTtcblxuICAgIGlmICh6a2V5SW5pdC5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5aW5pdCBmaWxlIGlzIG5vdCBncm90aDE2XCIpO1xuICAgIH1cblxuICAgIGlmICggICghU2NhbGFyLmVxKHprZXlJbml0LnEsIHprZXkucSkpXG4gICAgICAgIHx8KCFTY2FsYXIuZXEoemtleUluaXQuciwgemtleS5yKSlcbiAgICAgICAgfHwoemtleUluaXQubjhxICE9IHprZXkubjhxKVxuICAgICAgICB8fCh6a2V5SW5pdC5uOHIgIT0gemtleS5uOHIpKVxuICAgIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRDogIERpZmZlcmVudCBjdXJ2ZXNcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoICAoemtleUluaXQublZhcnMgIT0gemtleS5uVmFycylcbiAgICAgICAgfHwoemtleUluaXQublB1YmxpYyAhPSAgemtleS5uUHVibGljKVxuICAgICAgICB8fCh6a2V5SW5pdC5kb21haW5TaXplICE9IHprZXkuZG9tYWluU2l6ZSkpXG4gICAge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgRGlmZmVyZW50IGNpcmN1aXQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY3VydmUuRzEuZXEoemtleS52a19hbHBoYV8xLCB6a2V5SW5pdC52a19hbHBoYV8xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBhbHBoYTFcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcSh6a2V5LnZrX2JldGFfMSwgemtleUluaXQudmtfYmV0YV8xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBiZXRhMVwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnZlLkcyLmVxKHprZXkudmtfYmV0YV8yLCB6a2V5SW5pdC52a19iZXRhXzIpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIGJldGEyXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzIuZXEoemtleS52a19nYW1tYV8yLCB6a2V5SW5pdC52a19nYW1tYV8yKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBnYW1tYTJcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcSh6a2V5LnZrX2RlbHRhXzEsIGN1ckRlbHRhKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBkZWx0YTFcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1cnZlLkcxLmcsIGN1ckRlbHRhLCBjdXJ2ZS5HMi5nLCB6a2V5LnZrX2RlbHRhXzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBkZWx0YTJcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBtcGNQYXJhbXNJbml0ID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRJbml0LCBjdXJ2ZSwgc2VjdGlvbnNJbml0KTtcbiAgICBpZiAoIW1pc2MuaGFzaElzRXF1YWwobXBjUGFyYW1zLmNzSGFzaCwgbXBjUGFyYW1zSW5pdC5jc0hhc2gpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBDaXJjdWl0IGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc2l6ZXMgb2Ygc2VjdGlvbnNcbiAgICBpZiAoc2VjdGlvbnNbOF1bMF0uc2l6ZSAhPSBzRzEqKHprZXkublZhcnMtemtleS5uUHVibGljLTEpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIEwgc2VjdGlvbiBzaXplXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25zWzldWzBdLnNpemUgIT0gc0cxKih6a2V5LmRvbWFpblNpemUpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIEggc2VjdGlvbiBzaXplXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHNzO1xuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDMpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRDogIElDIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDQpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQ29lZmZzIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDUpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQSBzZWN0aW9uIGlzIG5vdCBpZGVudGljYWxcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5zZWN0aW9uSXNFcXVhbChmZCwgc2VjdGlvbnMsIGZkSW5pdCwgc2VjdGlvbnNJbml0LCA2KTtcbiAgICBpZiAoIXNzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkIxIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDcpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQjIgc2VjdGlvbiBpcyBub3QgaWRlbnRpY2FsXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgTFxuICAgIHNyID0gYXdhaXQgc2VjdGlvbkhhc1NhbWVSYXRpbyhcIkcxXCIsIGZkSW5pdCwgc2VjdGlvbnNJbml0LCBmZCwgc2VjdGlvbnMsIDgsIHprZXkudmtfZGVsdGFfMiwgemtleUluaXQudmtfZGVsdGFfMiwgXCJMIHNlY3Rpb25cIik7XG4gICAgaWYgKHNyIT09dHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJMIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBIXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW9IKCk7XG4gICAgaWYgKHNyIT09dHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJIIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gobXBjUGFyYW1zLmNzSGFzaCwgXCJDaXJjdWl0IEhhc2g6IFwiKSk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuICAgIGF3YWl0IGZkSW5pdC5jbG9zZSgpO1xuXG4gICAgZm9yIChsZXQgaT1tcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGMgPSBtcGNQYXJhbXMuY29udHJpYnV0aW9uc1tpXTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goYy5jb250cmlidXRpb25IYXNoLCBgY29udHJpYnV0aW9uICMke2krMX0gJHtjLm5hbWUgPyBjLm5hbWUgOiBcIlwifTpgKSk7XG4gICAgICAgIGlmIChjLnR5cGUgPT0gMSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYEJlYWNvbiBnZW5lcmF0b3I6ICR7bWlzYy5ieXRlQXJyYXkyaGV4KGMuYmVhY29uSGFzaCl9YCk7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgQmVhY29uIGl0ZXJhdGlvbnMgRXhwOiAke2MubnVtSXRlcmF0aW9uc0V4cH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlpLZXkgT2shXCIpO1xuXG4gICAgcmV0dXJuIHRydWU7XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlY3Rpb25IYXNTYW1lUmF0aW8oZ3JvdXBOYW1lLCBmZDEsIHNlY3Rpb25zMSwgZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbiwgZzJzcCwgZzJzcHgsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMTw8MjA7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZDEsIHNlY3Rpb25zMSwgaWRTZWN0aW9uKTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbik7XG5cbiAgICAgICAgbGV0IFIxID0gRy56ZXJvO1xuICAgICAgICBsZXQgUjIgPSBHLnplcm87XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IHNlY3Rpb25zMVtpZFNlY3Rpb25dWzBdLnNpemUgLyBzRztcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSArPSBNQVhfQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBTYW1lIHJhdGlvIGNoZWNrICR7c2VjdGlvbk5hbWV9OiAgJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oblBvaW50cyAtIGksIE1BWF9DSFVOS19TSVpFKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VzMSA9IGF3YWl0IGZkMS5yZWFkKG4qc0cpO1xuICAgICAgICAgICAgY29uc3QgYmFzZXMyID0gYXdhaXQgZmQyLnJlYWQobipzRyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxhcnMgPSBtaXNjLmdldFJhbmRvbUJ5dGVzKDQqbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHIxID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShiYXNlczEsIHNjYWxhcnMpO1xuICAgICAgICAgICAgY29uc3QgcjIgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJhc2VzMiwgc2NhbGFycyk7XG5cbiAgICAgICAgICAgIFIxID0gRy5hZGQoUjEsIHIxKTtcbiAgICAgICAgICAgIFIyID0gRy5hZGQoUjIsIHIyKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQxKTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkMik7XG5cbiAgICAgICAgaWYgKG5Qb2ludHMgPT0gMCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIFIxLCBSMiwgZzJzcCwgZzJzcHgpO1xuICAgICAgICBpZiAoc3IgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBzYW1lUmF0aW9IKCkge1xuICAgICAgICBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDE8PDIwO1xuICAgICAgICBjb25zdCBHID0gY3VydmUuRzE7XG4gICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG5cbiAgICAgICAgY29uc3Qge2ZkOiBmZFBUYXUsIHNlY3Rpb25zOiBzZWN0aW9uc1BUYXV9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHBUYXVGaWxlTmFtZSwgXCJwdGF1XCIsIDEpO1xuXG4gICAgICAgIGxldCBidWZmX3IgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIHprZXkubjhyKTtcblxuICAgICAgICBjb25zdCBzZWVkPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gPSBtaXNjLnJlYWRVSW50MzJCRShtaXNjLmdldFJhbmRvbUJ5dGVzKDQpLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBybmcgPSBuZXcgQ2hhQ2hhKHNlZWQpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplLTE7IGkrKykgeyAgIC8vIE5vdGUgdGhhdCBsYXN0IG9uZSBpcyB6ZXJvXG4gICAgICAgICAgICBjb25zdCBlID0gRnIuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgRnIudG9ScHJMRShidWZmX3IsIGkqemtleS5uOHIsIGUpO1xuICAgICAgICB9XG4gICAgICAgIEZyLnRvUnByTEUoYnVmZl9yLCAoemtleS5kb21haW5TaXplLTEpKnprZXkubjhyLCBGci56ZXJvKTtcblxuICAgICAgICBsZXQgUjEgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx6a2V5LmRvbWFpblNpemU7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSCBWZXJpZmljYWl0aW9uKHRhdSk6ICAke2l9LyR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKHprZXkuZG9tYWluU2l6ZSAtIGksIE1BWF9DSFVOS19TSVpFKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZjEgPSBhd2FpdCBmZFBUYXUucmVhZChzRypuLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIHprZXkuZG9tYWluU2l6ZSpzRyArIGkqc0cpO1xuICAgICAgICAgICAgY29uc3QgYnVmZjIgPSBhd2FpdCBmZFBUYXUucmVhZChzRypuLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIGkqc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmQiA9IGF3YWl0IGJhdGNoU3Vic3RyYWN0KGJ1ZmYxLCBidWZmMik7XG4gICAgICAgICAgICBjb25zdCBidWZmUyA9IGJ1ZmZfci5zbGljZShpKnprZXkubjhyLCAoaStuKSp6a2V5Lm44cik7XG4gICAgICAgICAgICBjb25zdCByID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShidWZmQiwgYnVmZlMpO1xuXG4gICAgICAgICAgICBSMSA9IEcuYWRkKFIxLCByKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbHVjbGF0ZSBvZGQgY29lZmljaWVudHMgaW4gdHJhbnNmb3JtZWQgZG9tYWluXG5cbiAgICAgICAgYnVmZl9yID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZl9yKTtcbiAgICAgICAgLy8gY29uc3QgZmlyc3QgPSBjdXJ2ZS5Gci5uZWcoY3VydmUuRnIuaW52KGN1cnZlLkZyLmUoMikpKTtcbiAgICAgICAgLy8gV29ya3MqMiAgIGNvbnN0IGZpcnN0ID0gY3VydmUuRnIubmVnKGN1cnZlLkZyLmUoMikpO1xuXG5cbiAgICAgICAgbGV0IGZpcnN0O1xuXG4gICAgICAgIGlmICh6a2V5LnBvd2VyIDwgRnIucykge1xuICAgICAgICAgICAgZmlyc3QgPSBGci5uZWcoRnIuZSgyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzbWFsbF9tICA9IDIgKiogRnIucztcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0X3RvX3NtYWxsX20gPSBGci5leHAoRnIuc2hpZnQsIHNtYWxsX20pO1xuICAgICAgICAgICAgZmlyc3QgPSBGci5zdWIoIHNoaWZ0X3RvX3NtYWxsX20sIEZyLm9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdCBpbmMgPSBjdXJ2ZS5Gci5pbnYoY3VydmUuUEZyLndbemtleS5wb3dlcisxXSk7XG4gICAgICAgIGNvbnN0IGluYyA9IHprZXkucG93ZXIgPCBGci5zID8gRnIud1t6a2V5LnBvd2VyKzFdIDogRnIuc2hpZnQ7XG4gICAgICAgIGJ1ZmZfciA9IGF3YWl0IEZyLmJhdGNoQXBwbHlLZXkoYnVmZl9yLCBmaXJzdCwgaW5jKTtcbiAgICAgICAgYnVmZl9yID0gYXdhaXQgRnIuZmZ0KGJ1ZmZfcik7XG4gICAgICAgIGJ1ZmZfciA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoYnVmZl9yKTtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDkpO1xuICAgICAgICBsZXQgUjIgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx6a2V5LmRvbWFpblNpemU7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSCBWZXJpZmljYWl0aW9uKGxhZ3JhbmdlKTogICR7aX0vJHt6a2V5LmRvbWFpblNpemV9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oemtleS5kb21haW5TaXplIC0gaSwgTUFYX0NIVU5LX1NJWkUpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChzRypuKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZTID0gYnVmZl9yLnNsaWNlKGkqemtleS5uOHIsIChpK24pKnprZXkubjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJ1ZmYsIGJ1ZmZTKTtcblxuICAgICAgICAgICAgUjIgPSBHLmFkZChSMiwgcik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgICAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgUjEsIFIyLCB6a2V5LnZrX2RlbHRhXzIsIHprZXlJbml0LnZrX2RlbHRhXzIpO1xuICAgICAgICBpZiAoc3IgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gYmF0Y2hTdWJzdHJhY3QoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IHNHID0gY3VydmUuRzEuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZjEuYnl0ZUxlbmd0aCAvIHNHO1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeT0gY3VydmUudG0uY29uY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IG5Qb2ludHNQZXJUaHJlYWQgPSBNYXRoLmZsb29yKG5Qb2ludHMgLyBjb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IGNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50c1BlclRocmVhZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKm5Qb2ludHNQZXJUaHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YkJ1ZmYxID0gYnVmZjEuc2xpY2UoaSpuUG9pbnRzUGVyVGhyZWFkKnNHMSwgKGkqblBvaW50c1BlclRocmVhZCtuKSpzRzEpO1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVmZjIgPSBidWZmMi5zbGljZShpKm5Qb2ludHNQZXJUaHJlYWQqc0cxLCAoaSpuUG9pbnRzUGVyVGhyZWFkK24pKnNHMSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goYmF0Y2hTdWJzdHJhY3RUaHJlYWQoc3ViQnVmZjEsIHN1YkJ1ZmYyKSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IGZ1bGxCdWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzRyk7XG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gYmF0Y2hTdWJzdHJhY3RUaHJlYWQoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBjdXJ2ZS5HMS5GLm44KjM7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmMS5ieXRlTGVuZ3RoL3NHMTtcbiAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ1ZmYxfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogYnVmZjJ9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAyLCBsZW46IG5Qb2ludHMqc0dtaWR9KTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkrKykge1xuICAgICAgICAgICAgdGFzay5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwiQ0FMTFwiLFxuICAgICAgICAgICAgICAgIGZuTmFtZTogXCJnMW1fc3ViQWZmaW5lXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDAsIG9mZnNldDogaSpzRzF9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxLCBvZmZzZXQ6IGkqc0cxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMiwgb2Zmc2V0OiBpKnNHbWlkfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJnMW1fYmF0Y2hUb0FmZmluZVwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAge3ZhbDogblBvaW50c30sXG4gICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgXX0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDIsIGxlbjogblBvaW50cypzRzF9KTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgbmV3WktleSBmcm9tIFwiLi96a2V5X25ldy5qc1wiO1xuaW1wb3J0IHBoYXNlMnZlcmlmeUZyb21Jbml0IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMnZlcmlmeUZyb21SMWNzKHIxY3NGaWxlTmFtZSwgcFRhdUZpbGVOYW1lLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgLy8gY29uc3QgaW5pdEZpbGVOYW1lID0gXCJ+XCIgKyB6a2V5RmlsZU5hbWUgKyBcIi5pbml0XCI7XG4gICAgY29uc3QgaW5pdEZpbGVOYW1lID0ge3R5cGU6IFwiYmlnTWVtXCJ9O1xuICAgIGF3YWl0IG5ld1pLZXkocjFjc0ZpbGVOYW1lLCBwVGF1RmlsZU5hbWUsIGluaXRGaWxlTmFtZSwgbG9nZ2VyKTtcblxuICAgIHJldHVybiBhd2FpdCBwaGFzZTJ2ZXJpZnlGcm9tSW5pdChpbml0RmlsZU5hbWUsIHBUYXVGaWxlTmFtZSwgemtleUZpbGVOYW1lLCBsb2dnZXIpO1xufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCB7IGhhc2hUb0cyIGFzIGhhc2hUb0cyIH0gZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuaW1wb3J0IHsgYXBwbHlLZXlUb1NlY3Rpb24gfSBmcm9tIFwiLi9tcGNfYXBwbHlrZXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGhhc2UyY29udHJpYnV0ZSh6a2V5TmFtZU9sZCwgemtleU5hbWVOZXcsIG5hbWUsIGVudHJvcHksIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zOiBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWVPbGQsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IGdyb3RoMTZcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgY29uc3QgbXBjUGFyYW1zID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuXG5cbiAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLmdldFJhbmRvbVJuZyhlbnRyb3B5KTtcblxuICAgIGNvbnN0IHRyYW5zY3JpcHRIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICB0cmFuc2NyaXB0SGFzaGVyLnVwZGF0ZShtcGNQYXJhbXMuY3NIYXNoKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXRpbHMuaGFzaFB1YktleSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGN1ckNvbnRyaWJ1dGlvbiA9IHt9O1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YSA9IHt9O1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkgPSBjdXJ2ZS5Gci5mcm9tUm5nKHJuZyk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MgPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS5mcm9tUm5nKHJuZykpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpKTtcbiAgICB1dGlscy5oYXNoRzEodHJhbnNjcmlwdEhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zKTtcbiAgICB1dGlscy5oYXNoRzEodHJhbnNjcmlwdEhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLnRyYW5zY3JpcHQgPSB0cmFuc2NyaXB0SGFzaGVyLmRpZ2VzdCgpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcCA9IGhhc2hUb0cyKGN1cnZlLCBjdXJDb250cmlidXRpb24udHJhbnNjcmlwdCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NweCA9IGN1cnZlLkcyLnRvQWZmaW5lKGN1cnZlLkcyLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NwLCBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5KSk7XG5cbiAgICB6a2V5LnZrX2RlbHRhXzEgPSBjdXJ2ZS5HMS50aW1lc0ZyKHprZXkudmtfZGVsdGFfMSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSk7XG4gICAgemtleS52a19kZWx0YV8yID0gY3VydmUuRzIudGltZXNGcih6a2V5LnZrX2RlbHRhXzIsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuXG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhQWZ0ZXIgPSB6a2V5LnZrX2RlbHRhXzE7XG5cbiAgICBjdXJDb250cmlidXRpb24udHlwZSA9IDA7XG4gICAgaWYgKG5hbWUpIGN1ckNvbnRyaWJ1dGlvbi5uYW1lID0gbmFtZTtcblxuICAgIG1wY1BhcmFtcy5jb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZE5ldywgemtleSk7XG5cbiAgICAvLyBJQ1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAzKTtcblxuICAgIC8vIENvZWZmcyAoS2VlcCBvcmlnaW5hbClcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNCk7XG5cbiAgICAvLyBBIFNlY3Rpb25cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGNvbnN0IGludkRlbHRhID0gY3VydmUuRnIuaW52KGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDgsIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkwgU2VjdGlvblwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDksIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkggU2VjdGlvblwiLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgemtleVV0aWxzLndyaXRlTVBDUGFyYW1zKGZkTmV3LCBjdXJ2ZSwgbXBjUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG4gICAgYXdhaXQgZmROZXcuY2xvc2UoKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbkhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHV0aWxzLmhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1aW9uSGFzaCA9IGNvbnRyaWJ1dGlvbkhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChtcGNQYXJhbXMuY3NIYXNoLCBcIkNpcmN1aXQgSGFzaDogXCIpKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY29udHJpYnVpb25IYXNoLCBcIkNvbnRyaWJ1dGlvbiBIYXNoOiBcIikpO1xuXG4gICAgcmV0dXJuIGNvbnRyaWJ1aW9uSGFzaDtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgemtleVV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgYXMgZ2V0Q3VydmUgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgaGFzaFRvRzIgYXMgaGFzaFRvRzIgfSBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5pbXBvcnQgeyBhcHBseUtleVRvU2VjdGlvbiB9IGZyb20gXCIuL21wY19hcHBseWtleS5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJlYWNvbih6a2V5TmFtZU9sZCwgemtleU5hbWVOZXcsIG5hbWUsIGJlYWNvbkhhc2hTdHIsIG51bUl0ZXJhdGlvbnNFeHAsIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IGJlYWNvbkhhc2ggPSBtaXNjLmhleDJCeXRlQXJyYXkoYmVhY29uSGFzaFN0cik7XG4gICAgaWYgKCAgIChiZWFjb25IYXNoLmJ5dGVMZW5ndGggPT0gMClcbiAgICAgICAgfHwgKGJlYWNvbkhhc2guYnl0ZUxlbmd0aCoyICE9YmVhY29uSGFzaFN0ci5sZW5ndGgpKVxuICAgIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBCZWFjb24gSGFzaC4gKEl0IG11c3QgYmUgYSB2YWxpZCBoZXhhZGVjaW1hbCBzZXF1ZW5jZSlcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJlYWNvbkhhc2gubGVuZ3RoPj0yNTYpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiTWF4aW11bSBsZW5naHQgb2YgYmVhY29uIGhhc2ggaXMgMjU1IGJ5dGVzXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbnVtSXRlcmF0aW9uc0V4cCA9IHBhcnNlSW50KG51bUl0ZXJhdGlvbnNFeHApO1xuICAgIGlmICgobnVtSXRlcmF0aW9uc0V4cDwxMCl8fChudW1JdGVyYXRpb25zRXhwPjYzKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bUl0ZXJhdGlvbnNFeHAuIChNdXN0IGJlIGJldHdlZW4gMTAgYW5kIDYzKVwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnM6IHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5TmFtZU9sZCwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXkgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZE9sZCwgc2VjdGlvbnMpO1xuXG4gICAgaWYgKHprZXkucHJvdG9jb2wgIT0gXCJncm90aDE2XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiemtleSBmaWxlIGlzIG5vdCBncm90aDE2XCIpO1xuICAgIH1cblxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgY29uc3QgbXBjUGFyYW1zID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5ybmdGcm9tQmVhY29uUGFyYW1zKGJlYWNvbkhhc2gsIG51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgY29uc3QgdHJhbnNjcmlwdEhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHRyYW5zY3JpcHRIYXNoZXIudXBkYXRlKG1wY1BhcmFtcy5jc0hhc2gpO1xuICAgIGZvciAobGV0IGk9MDsgaTxtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1dGlscy5oYXNoUHViS2V5KHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBtcGNQYXJhbXMuY29udHJpYnV0aW9uc1tpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VyQ29udHJpYnV0aW9uID0ge307XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhID0ge307XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3N4ID0gY3VydmUuRzEudG9BZmZpbmUoY3VydmUuRzEudGltZXNGcihjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcywgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSkpO1xuICAgIHV0aWxzLmhhc2hHMSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MpO1xuICAgIHV0aWxzLmhhc2hHMSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3N4KTtcbiAgICBjdXJDb250cmlidXRpb24udHJhbnNjcmlwdCA9IHRyYW5zY3JpcHRIYXNoZXIuZGlnZXN0KCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NwID0gaGFzaFRvRzIoY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi50cmFuc2NyaXB0KTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3B4ID0gY3VydmUuRzIudG9BZmZpbmUoY3VydmUuRzIudGltZXNGcihjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3AsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpKTtcblxuICAgIHprZXkudmtfZGVsdGFfMSA9IGN1cnZlLkcxLnRpbWVzRnIoemtleS52a19kZWx0YV8xLCBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5KTtcbiAgICB6a2V5LnZrX2RlbHRhXzIgPSBjdXJ2ZS5HMi50aW1lc0ZyKHprZXkudmtfZGVsdGFfMiwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSk7XG5cbiAgICBjdXJDb250cmlidXRpb24uZGVsdGFBZnRlciA9IHprZXkudmtfZGVsdGFfMTtcblxuICAgIGN1ckNvbnRyaWJ1dGlvbi50eXBlID0gMTtcbiAgICBjdXJDb250cmlidXRpb24ubnVtSXRlcmF0aW9uc0V4cCA9IG51bUl0ZXJhdGlvbnNFeHA7XG4gICAgY3VyQ29udHJpYnV0aW9uLmJlYWNvbkhhc2ggPSBiZWFjb25IYXNoO1xuXG4gICAgaWYgKG5hbWUpIGN1ckNvbnRyaWJ1dGlvbi5uYW1lID0gbmFtZTtcblxuICAgIG1wY1BhcmFtcy5jb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZE5ldywgemtleSk7XG5cbiAgICAvLyBJQ1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAzKTtcblxuICAgIC8vIENvZWZmcyAoS2VlcCBvcmlnaW5hbClcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNCk7XG5cbiAgICAvLyBBIFNlY3Rpb25cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGNvbnN0IGludkRlbHRhID0gY3VydmUuRnIuaW52KGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDgsIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkwgU2VjdGlvblwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDksIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkggU2VjdGlvblwiLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgemtleVV0aWxzLndyaXRlTVBDUGFyYW1zKGZkTmV3LCBjdXJ2ZSwgbXBjUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG4gICAgYXdhaXQgZmROZXcuY2xvc2UoKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbkhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHV0aWxzLmhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1aW9uSGFzaCA9IGNvbnRyaWJ1dGlvbkhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjb250cmlidWlvbkhhc2gsIFwiQ29udHJpYnV0aW9uIEhhc2g6IFwiKSk7XG5cbiAgICByZXR1cm4gY29udHJpYnVpb25IYXNoO1xufVxuIiwiaW1wb3J0IHsgcmVhZFpLZXkgYXMgcmVhZFpLZXkgfSBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gemtleUV4cG9ydEpzb24oemtleUZpbGVOYW1lKSB7XG5cbiAgICBjb25zdCB6S2V5ID0gYXdhaXQgcmVhZFpLZXkoemtleUZpbGVOYW1lLCB0cnVlKTtcbiAgICBkZWxldGUgektleS5jdXJ2ZTtcbiAgICBkZWxldGUgektleS5GO1xuXG4gICAgcmV0dXJuIHV0aWxzLnN0cmluZ2lmeUJpZ0ludHMoektleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBGb3JtYXQgb2YgdGhlIG91dHB1dFxuLy8gICAgICBIYXNoIG9mIHRoZSBsYXN0IGNvbnRyaWJ1dGlvbiAgNjQgQnl0ZXNcbi8vICAgICAgMl5OKjItMSBUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBUYXVHMiBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBBbHBoYVRhdUcxIFBvaW50cyAoY29tcHJlc3NlZClcbi8vICAgICAgMl5OIEJldGFUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIFB1YmxpYyBLZXlcbi8vICAgICAgICAgIEJldGFHMiAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnMgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSpzKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnQgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSp0KmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzEqdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnUqYmV0YSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnNwKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnRwKmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzIqdXAqYmV0YSAoY29tcHJlc3NlZClcblxuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uIH0gZnJvbSBcIi4vbXBjX2FwcGx5a2V5LmpzXCI7XG5pbXBvcnQgeyBoYXNoUHViS2V5IH0gZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgaGFzaFRvRzIgYXMgaGFzaFRvRzIgfSBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJlbGxtYW5Db250cmlidXRlKGN1cnZlLCBjaGFsbGVuZ2VGaWxlbmFtZSwgcmVzcG9uZXNGaWxlTmFtZSwgZW50cm9weSwgbG9nZ2VyKSB7XG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5nZXRSYW5kb21SbmcoZW50cm9weSk7XG5cbiAgICBjb25zdCBkZWx0YSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBjb25zdCBpbnZEZWx0YSA9IGN1cnZlLkZyLmludihkZWx0YSk7XG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44KjI7XG4gICAgY29uc3Qgc0cyID0gY3VydmUuRzIuRi5uOCoyO1xuXG4gICAgY29uc3QgZmRGcm9tID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKGNoYWxsZW5nZUZpbGVuYW1lKTtcbiAgICBjb25zdCBmZFRvID0gYXdhaXQgZmFzdEZpbGUuY3JlYXRlT3ZlcnJpZGUocmVzcG9uZXNGaWxlTmFtZSk7XG5cblxuICAgIGF3YWl0IGNvcHkoc0cxKTsgLy8gYWxwaGExXG4gICAgYXdhaXQgY29weShzRzEpOyAvLyBiZXRhMVxuICAgIGF3YWl0IGNvcHkoc0cyKTsgLy8gYmV0YTJcbiAgICBhd2FpdCBjb3B5KHNHMik7IC8vIGdhbW1hMlxuICAgIGNvbnN0IG9sZERlbHRhMSA9IGF3YWl0IHJlYWRHMSgpO1xuICAgIGNvbnN0IGRlbHRhMSA9IGN1cnZlLkcxLnRpbWVzRnIob2xkRGVsdGExLCBkZWx0YSk7XG4gICAgYXdhaXQgd3JpdGVHMShkZWx0YTEpO1xuICAgIGNvbnN0IG9sZERlbHRhMiA9IGF3YWl0IHJlYWRHMigpO1xuICAgIGNvbnN0IGRlbHRhMiA9IGN1cnZlLkcyLnRpbWVzRnIob2xkRGVsdGEyLCBkZWx0YSk7XG4gICAgYXdhaXQgd3JpdGVHMihkZWx0YTIpO1xuXG4gICAgLy8gSUNcbiAgICBjb25zdCBuSUMgPSBhd2FpdCBmZEZyb20ucmVhZFVCRTMyKCk7XG4gICAgYXdhaXQgZmRUby53cml0ZVVCRTMyKG5JQyk7XG4gICAgYXdhaXQgY29weShuSUMqc0cxKTtcblxuICAgIC8vIEhcbiAgICBjb25zdCBuSCA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkgpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgbnVsbCwgY3VydmUsIFwiRzFcIiwgbkgsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIlVOQ09NUFJFU1NFRFwiLCBcIkhcIiwgbG9nZ2VyKTtcblxuICAgIC8vIExcbiAgICBjb25zdCBuTCA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkwpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgbnVsbCwgY3VydmUsIFwiRzFcIiwgbkwsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIlVOQ09NUFJFU1NFRFwiLCBcIkxcIiwgbG9nZ2VyKTtcblxuICAgIC8vIEFcbiAgICBjb25zdCBuQSA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkEpO1xuICAgIGF3YWl0IGNvcHkobkEqc0cxKTtcblxuICAgIC8vIEIxXG4gICAgY29uc3QgbkIxID0gYXdhaXQgZmRGcm9tLnJlYWRVQkUzMigpO1xuICAgIGF3YWl0IGZkVG8ud3JpdGVVQkUzMihuQjEpO1xuICAgIGF3YWl0IGNvcHkobkIxKnNHMSk7XG5cbiAgICAvLyBCMlxuICAgIGNvbnN0IG5CMiA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkIyKTtcbiAgICBhd2FpdCBjb3B5KG5CMipzRzIpO1xuXG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8vIFJlYWQgY29udHJpYnV0aW9uc1xuICAgIC8vLy8vLy8vLy9cbiAgICBjb25zdCB0cmFuc2NyaXB0SGFzaGVyID0gQmxha2UyYig2NCk7XG5cbiAgICBjb25zdCBtcGNQYXJhbXMgPSB7fTtcbiAgICAvLyBjc0hhc2hcbiAgICBtcGNQYXJhbXMuY3NIYXNoID0gIGF3YWl0IGZkRnJvbS5yZWFkKDY0KTtcbiAgICB0cmFuc2NyaXB0SGFzaGVyLnVwZGF0ZShtcGNQYXJhbXMuY3NIYXNoKTtcblxuICAgIGNvbnN0IG5Db250dHJpYnV0aW9ucyA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBtcGNQYXJhbXMuY29udHJpYnV0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuQ29udHRyaWJ1dGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCBjID0geyBkZWx0YTp7fSB9O1xuICAgICAgICBjLmRlbHRhQWZ0ZXIgPSBhd2FpdCByZWFkRzEoKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zID0gYXdhaXQgcmVhZEcxKCk7XG4gICAgICAgIGMuZGVsdGEuZzFfc3ggPSBhd2FpdCByZWFkRzEoKTtcbiAgICAgICAgYy5kZWx0YS5nMl9zcHggPSBhd2FpdCByZWFkRzIoKTtcbiAgICAgICAgYy50cmFuc2NyaXB0ID0gYXdhaXQgZmRGcm9tLnJlYWQoNjQpO1xuICAgICAgICBtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5wdXNoKGMpO1xuICAgICAgICBoYXNoUHViS2V5KHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJDb250cmlidXRpb24gPSB7fTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEgPSB7fTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5ID0gZGVsdGE7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MgPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS5mcm9tUm5nKHJuZykpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MsIGRlbHRhKSk7XG4gICAgdXRpbHMuaGFzaEcxKHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcyk7XG4gICAgdXRpbHMuaGFzaEcxKHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfc3gpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi50cmFuc2NyaXB0ID0gdHJhbnNjcmlwdEhhc2hlci5kaWdlc3QoKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3AgPSBoYXNoVG9HMihjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLnRyYW5zY3JpcHQpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcHggPSBjdXJ2ZS5HMi50b0FmZmluZShjdXJ2ZS5HMi50aW1lc0ZyKGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcCwgZGVsdGEpKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGFBZnRlciA9IGRlbHRhMTtcbiAgICBjdXJDb250cmlidXRpb24udHlwZSA9IDA7XG4gICAgbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMucHVzaChjdXJDb250cmlidXRpb24pO1xuXG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8vIFdyaXRlIENPbnRyaWJ1dGlvblxuICAgIC8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGZkVG8ud3JpdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgYXdhaXQgZmRUby53cml0ZVVCRTMyKG1wY1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IG1wY1BhcmFtcy5jb250cmlidXRpb25zW2ldO1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGMuZGVsdGFBZnRlcik7XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoYy5kZWx0YS5nMV9zKTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShjLmRlbHRhLmcxX3N4KTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMihjLmRlbHRhLmcyX3NweCk7XG4gICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYy50cmFuc2NyaXB0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cmlidXRpb25IYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBoYXNoUHViS2V5KGNvbnRyaWJ1dGlvbkhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbik7XG5cbiAgICBjb25zdCBjb250cmlidXRpb25IYXNoID0gY29udHJpYnV0aW9uSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGNvbnRyaWJ1dGlvbkhhc2gsIFwiQ29udHJpYnV0aW9uIEhhc2g6IFwiKSk7XG5cbiAgICBhd2FpdCBmZFRvLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRGcm9tLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gY29udHJpYnV0aW9uSGFzaDtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvcHkobkJ5dGVzKSB7XG4gICAgICAgIGNvbnN0IENIVU5LX1NJWkUgPSBmZEZyb20ucGFnZVNpemUqMjtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5CeXRlczsgaSs9IENIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuQnl0ZXMgLWksIENIVU5LX1NJWkUpO1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKG4pO1xuICAgICAgICAgICAgYXdhaXQgZmRUby53cml0ZShidWZmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMSgpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGN1cnZlLkcxLkYubjgqMik7XG4gICAgICAgIHJldHVybiBjdXJ2ZS5HMS5mcm9tUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDApO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMigpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGN1cnZlLkcyLkYubjgqMik7XG4gICAgICAgIHJldHVybiBjdXJ2ZS5HMi5mcm9tUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDApO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlRzEoUCkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoc0cxKTtcbiAgICAgICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYnVmZiwgMCwgUCk7XG4gICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgICAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRUby53cml0ZShidWZmKTtcbiAgICB9XG5cblxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHtnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7dXRpbHN9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCB7RkZMT05LX1BST1RPQ09MX0lEfSBmcm9tIFwiLi96a2V5X2NvbnN0YW50cy5qc1wiO1xuXG5jb25zdCB7c3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gemtleUV4cG9ydFZlcmlmaWNhdGlvbktleSh6a2V5TmFtZSwgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJFWFBPUlQgVkVSSUZJQ0FUSU9OIEtFWSBTVEFSVEVEXCIpO1xuXG4gICAgY29uc3Qge2ZkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmQsIHNlY3Rpb25zKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBEZXRlY3RlZCBwcm90b2NvbDogXCIgKyB6a2V5LnByb3RvY29sKTtcblxuICAgIGxldCByZXM7XG4gICAgaWYgKHprZXkucHJvdG9jb2wgPT09IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IGdyb3RoMTZWayh6a2V5LCBmZCwgc2VjdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoemtleS5wcm90b2NvbCA9PT0gXCJwbG9ua1wiKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHBsb25rVmsoemtleSk7XG4gICAgfSBlbHNlIGlmICh6a2V5LnByb3RvY29sSWQgJiYgemtleS5wcm90b2NvbElkID09PSBGRkxPTktfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmVzID0gYXdhaXQgZXhwb3J0RkZsb25rVmsoemtleSwgbG9nZ2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgcHJvdG9jb2wgdW5yZWNvZ25pemVkXCIpO1xuICAgIH1cblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkVYUE9SVCBWRVJJRklDQVRJT04gS0VZIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5hc3luYyBmdW5jdGlvbiBncm90aDE2VmsoemtleSwgZmQsIHNlY3Rpb25zKSB7XG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjggKiAyO1xuXG4gICAgY29uc3QgYWxwaGFCZXRhID0gYXdhaXQgY3VydmUucGFpcmluZyh6a2V5LnZrX2FscGhhXzEsIHprZXkudmtfYmV0YV8yKTtcblxuICAgIGxldCB2S2V5ID0ge1xuICAgICAgICBwcm90b2NvbDogemtleS5wcm90b2NvbCxcbiAgICAgICAgY3VydmU6IGN1cnZlLm5hbWUsXG4gICAgICAgIG5QdWJsaWM6IHprZXkublB1YmxpYyxcblxuICAgICAgICB2a19hbHBoYV8xOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LnZrX2FscGhhXzEpLFxuXG4gICAgICAgIHZrX2JldGFfMjogY3VydmUuRzIudG9PYmplY3QoemtleS52a19iZXRhXzIpLFxuICAgICAgICB2a19nYW1tYV8yOiBjdXJ2ZS5HMi50b09iamVjdCh6a2V5LnZrX2dhbW1hXzIpLFxuICAgICAgICB2a19kZWx0YV8yOiBjdXJ2ZS5HMi50b09iamVjdCh6a2V5LnZrX2RlbHRhXzIpLFxuXG4gICAgICAgIHZrX2FscGhhYmV0YV8xMjogY3VydmUuR3QudG9PYmplY3QoYWxwaGFCZXRhKVxuICAgIH07XG5cbiAgICAvLyBSZWFkIElDIFNlY3Rpb25cbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMyk7XG4gICAgdktleS5JQyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHprZXkublB1YmxpYzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKHNHMSk7XG4gICAgICAgIGNvbnN0IFAgPSBjdXJ2ZS5HMS50b09iamVjdChidWZmKTtcbiAgICAgICAgdktleS5JQy5wdXNoKFApO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgdktleSA9IHN0cmluZ2lmeUJpZ0ludHModktleSk7XG5cbiAgICByZXR1cm4gdktleTtcbn1cblxuXG5hc3luYyBmdW5jdGlvbiBwbG9ua1ZrKHprZXkpIHtcbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG5cbiAgICBsZXQgdktleSA9IHtcbiAgICAgICAgcHJvdG9jb2w6IHprZXkucHJvdG9jb2wsXG4gICAgICAgIGN1cnZlOiBjdXJ2ZS5uYW1lLFxuICAgICAgICBuUHVibGljOiB6a2V5Lm5QdWJsaWMsXG4gICAgICAgIHBvd2VyOiB6a2V5LnBvd2VyLFxuXG4gICAgICAgIGsxOiBjdXJ2ZS5Gci50b09iamVjdCh6a2V5LmsxKSxcbiAgICAgICAgazI6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkuazIpLFxuXG4gICAgICAgIFFtOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlFtKSxcbiAgICAgICAgUWw6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUWwpLFxuICAgICAgICBRcjogY3VydmUuRzEudG9PYmplY3QoemtleS5RciksXG4gICAgICAgIFFvOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlFvKSxcbiAgICAgICAgUWM6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUWMpLFxuICAgICAgICBTMTogY3VydmUuRzEudG9PYmplY3QoemtleS5TMSksXG4gICAgICAgIFMyOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlMyKSxcbiAgICAgICAgUzM6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUzMpLFxuXG4gICAgICAgIFhfMjogY3VydmUuRzIudG9PYmplY3QoemtleS5YXzIpLFxuXG4gICAgICAgIHc6IGN1cnZlLkZyLnRvT2JqZWN0KGN1cnZlLkZyLndbemtleS5wb3dlcl0pXG4gICAgfTtcblxuICAgIHZLZXkgPSBzdHJpbmdpZnlCaWdJbnRzKHZLZXkpO1xuXG4gICAgcmV0dXJuIHZLZXk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9ydEZGbG9ua1ZrKHprZXksIGxvZ2dlcikge1xuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcblxuICAgIGxldCB2S2V5ID0ge1xuICAgICAgICBwcm90b2NvbDogemtleS5wcm90b2NvbCxcbiAgICAgICAgY3VydmU6IGN1cnZlLm5hbWUsXG4gICAgICAgIG5QdWJsaWM6IHprZXkublB1YmxpYyxcbiAgICAgICAgcG93ZXI6IHprZXkucG93ZXIsXG5cbiAgICAgICAgazE6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkuazEpLFxuICAgICAgICBrMjogY3VydmUuRnIudG9PYmplY3QoemtleS5rMiksXG5cbiAgICAgICAgdzogY3VydmUuRnIudG9PYmplY3QoY3VydmUuRnIud1t6a2V5LnBvd2VyXSksXG4gICAgICAgIC8vd1c6IGN1cnZlLkZyLnRvT2JqZWN0KGN1cnZlLkZyLndbemtleS5wb3dlciArIDFdKSxcbiAgICAgICAgdzM6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkudzMpLFxuICAgICAgICB3NDogY3VydmUuRnIudG9PYmplY3QoemtleS53NCksXG4gICAgICAgIHc4OiBjdXJ2ZS5Gci50b09iamVjdCh6a2V5Lnc4KSxcbiAgICAgICAgd3I6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkud3IpLFxuXG4gICAgICAgIFhfMjogY3VydmUuRzIudG9PYmplY3QoemtleS5YXzIpLFxuXG4gICAgICAgIEMwOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LkMwKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeUJpZ0ludHModktleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIjtcbmltcG9ydCB7Z2V0Q3VydmVGcm9tTmFtZX0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQge3V0aWxzfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmNvbnN0IHt1bnN0cmluZ2lmeUJpZ0ludHMsIHN0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZmbG9ua0V4cG9ydFNvbGlkaXR5VmVyaWZpZXIodmssIHRlbXBsYXRlcywgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgRVhQT1JUIFNPTElESVRZIFZFUklGSUVSIFNUQVJURURcIik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlRnJvbU5hbWUodmsuY3VydmUpO1xuXG4gICAgLy8gUHJlY29tcHV0ZSB3M18yLCB3NF8yIGFuZCB3NF8zXG4gICAgbGV0IHczID0gZnJvbVZrZXkodmsudzMpO1xuICAgIHZrLnczXzIgPSB0b1ZrZXkoY3VydmUuRnIuc3F1YXJlKHczKSk7XG5cbiAgICBsZXQgdzQgPSBmcm9tVmtleSh2ay53NCk7XG4gICAgdmsudzRfMiA9IHRvVmtleShjdXJ2ZS5Gci5zcXVhcmUodzQpKTtcbiAgICB2ay53NF8zID0gdG9Wa2V5KGN1cnZlLkZyLm11bChjdXJ2ZS5Gci5zcXVhcmUodzQpLCB3NCkpO1xuXG4gICAgbGV0IHc4ID0gZnJvbVZrZXkodmsudzgpO1xuICAgIGxldCBhY2MgPSBjdXJ2ZS5Gci5vbmU7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICBhY2MgPSBjdXJ2ZS5Gci5tdWwoYWNjLCB3OCk7XG4gICAgICAgIHZrW1widzhfXCIgKyBpXSA9IHRvVmtleShhY2MpO1xuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1t2ay5wcm90b2NvbF07XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBFWFBPUlQgU09MSURJVFkgVkVSSUZJRVIgRklOSVNIRURcIik7XG5cbiAgICByZXR1cm4gZWpzLnJlbmRlcih0ZW1wbGF0ZSwgdmspO1xuXG4gICAgZnVuY3Rpb24gZnJvbVZrZXkoc3RyKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHVuc3RyaW5naWZ5QmlnSW50cyhzdHIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRnIuZnJvbU9iamVjdCh2YWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvVmtleSh2YWwpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gY3VydmUuRnIudG9PYmplY3QodmFsKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUJpZ0ludHMoc3RyKTtcbiAgICB9XG59XG5cbiIsImltcG9ydCBlanMgZnJvbSBcImVqc1wiO1xuXG5pbXBvcnQgZXhwb3J0VmVyaWZpY2F0aW9uS2V5IGZyb20gXCIuL3prZXlfZXhwb3J0X3ZlcmlmaWNhdGlvbmtleS5qc1wiO1xuaW1wb3J0IGZmbG9ua0V4cG9ydFNvbGlkaXR5VmVyaWZpZXJDbWQgZnJvbSBcIi4vZmZsb25rX2V4cG9ydF9zb2xpZGl0eV92ZXJpZmllci5qc1wiO1xuLy8gTm90IHJlYWR5IHlldFxuLy8gbW9kdWxlLmV4cG9ydHMuZ2VuZXJhdGVWZXJpZmllcl9raW1sZWVvaCA9IGdlbmVyYXRlVmVyaWZpZXJfa2ltbGVlb2g7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNvbGlkaXR5VmVyaWZpZXIoektleU5hbWUsIHRlbXBsYXRlcywgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCB2ZXJpZmljYXRpb25LZXkgPSBhd2FpdCBleHBvcnRWZXJpZmljYXRpb25LZXkoektleU5hbWUsIGxvZ2dlcik7XG5cbiAgICBpZiAoXCJmZmxvbmtcIiA9PT0gdmVyaWZpY2F0aW9uS2V5LnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiBmZmxvbmtFeHBvcnRTb2xpZGl0eVZlcmlmaWVyQ21kKHZlcmlmaWNhdGlvbktleSwgdGVtcGxhdGVzLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1t2ZXJpZmljYXRpb25LZXkucHJvdG9jb2xdO1xuXG4gICAgcmV0dXJuIGVqcy5yZW5kZXIodGVtcGxhdGUsIHZlcmlmaWNhdGlvbktleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBuZXdaS2V5fSBmcm9tIFwiLi96a2V5X25ldy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEJlbGxtYW59IGZyb20gXCIuL3prZXlfZXhwb3J0X2JlbGxtYW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbXBvcnRCZWxsbWFufSBmcm9tIFwiLi96a2V5X2ltcG9ydF9iZWxsbWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5RnJvbVIxY3N9IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21yMWNzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5RnJvbUluaXR9IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21pbml0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY29udHJpYnV0ZX0gZnJvbSBcIi4vemtleV9jb250cmlidXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYmVhY29ufSBmcm9tIFwiLi96a2V5X2JlYWNvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEpzb259IGZyb20gXCIuL3prZXlfZXhwb3J0X2pzb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBiZWxsbWFuQ29udHJpYnV0ZX0gZnJvbSBcIi4vemtleV9iZWxsbWFuX2NvbnRyaWJ1dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHBvcnRWZXJpZmljYXRpb25LZXl9IGZyb20gXCIuL3prZXlfZXhwb3J0X3ZlcmlmaWNhdGlvbmtleS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5VmVyaWZpZXJ9IGZyb20gXCIuL3prZXlfZXhwb3J0X3NvbGlkaXR5dmVyaWZpZXIuanNcIjtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjEgMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgcGFwZXI6IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTkvOTUzLnBkZiAqL1xuXG5pbXBvcnQge3JlYWRSMWNzRmR9IGZyb20gXCJyMWNzZmlsZVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gICAgcmVhZEJpbkZpbGUsXG4gICAgY3JlYXRlQmluRmlsZSxcbiAgICByZWFkU2VjdGlvbixcbiAgICB3cml0ZUJpZ0ludCxcbiAgICBzdGFydFdyaXRlU2VjdGlvbixcbiAgICBlbmRXcml0ZVNlY3Rpb24sXG59IGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgeyBsb2cyICB9IGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IFNjYWxhciwgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0IEJpZ0FycmF5IGZyb20gXCIuL2JpZ2FycmF5LmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGxvbmtTZXR1cChyMWNzTmFtZSwgcHRhdU5hbWUsIHprZXlOYW1lLCBsb2dnZXIpIHtcblxuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cblxuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRQVGF1LCBzZWN0aW9uczogc2VjdGlvbnNQVGF1fSA9IGF3YWl0IHJlYWRCaW5GaWxlKHB0YXVOYW1lLCBcInB0YXVcIiwgMSwgMTw8MjIsIDE8PDI0KTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkUFRhdSwgc2VjdGlvbnNQVGF1KTtcbiAgICBjb25zdCB7ZmQ6IGZkUjFjcywgc2VjdGlvbnM6IHNlY3Rpb25zUjFjc30gPSBhd2FpdCByZWFkQmluRmlsZShyMWNzTmFtZSwgXCJyMWNzXCIsIDEsIDE8PDIyLCAxPDwyNCk7XG5cbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NGZChmZFIxY3MsIHNlY3Rpb25zUjFjcywge2xvYWRDb25zdHJhaW50czogdHJ1ZSwgbG9hZEN1c3RvbUdhdGVzOiB0cnVlfSk7XG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44KjI7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44KjI7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBuOHIgPSBjdXJ2ZS5Gci5uODtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyByMWNzXCIpO1xuICAgIGxldCBzUjFjcyA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGNvbnN0IHBsb25rQ29uc3RyYWludHMgPSBuZXcgQmlnQXJyYXkoKTtcbiAgICBjb25zdCBwbG9ua0FkZGl0aW9ucyA9IG5ldyBCaWdBcnJheSgpO1xuICAgIGxldCBwbG9ua05WYXJzID0gcjFjcy5uVmFycztcblxuICAgIGNvbnN0IG5QdWJsaWMgPSByMWNzLm5PdXRwdXRzICsgcjFjcy5uUHViSW5wdXRzO1xuXG4gICAgYXdhaXQgcHJvY2Vzc0NvbnN0cmFpbnRzKGN1cnZlLkZyLCByMWNzLCBsb2dnZXIpO1xuXG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG4gICAgY29uc3QgZmRaS2V5ID0gYXdhaXQgY3JlYXRlQmluRmlsZSh6a2V5TmFtZSwgXCJ6a2V5XCIsIDEsIDE0LCAxPDwyMiwgMTw8MjQpO1xuXG5cbiAgICBpZiAocjFjcy5wcmltZSAhPSBjdXJ2ZS5yKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcInIxY3MgY3VydmUgZG9lcyBub3QgbWF0Y2ggcG93ZXJzIG9mIHRhdSBjZXJlbW9ueSBjdXJ2ZVwiKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGxldCBjaXJQb3dlciA9IGxvZzIocGxvbmtDb25zdHJhaW50cy5sZW5ndGggLTEpICsxO1xuICAgIGlmIChjaXJQb3dlciA8IDMpIGNpclBvd2VyID0gMzsgICAvLyBBcyB0aGUgdCBwb2xpbm9tYWwgaXMgbis1IHdoZSBuZWVkIGF0IGxlYXN0IGEgcG93ZXIgb2YgNFxuICAgIGNvbnN0IGRvbWFpblNpemUgPSAyICoqIGNpclBvd2VyO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJQbG9uayBjb25zdHJhaW50czogXCIgKyBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCk7XG4gICAgaWYgKGNpclBvd2VyID4gcG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBjaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgcG93ZXIgb2YgdGF1IGNlcmVtb255LiAke3Bsb25rQ29uc3RyYWludHMubGVuZ3RofSA+IDIqKiR7cG93ZXJ9YCk7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpZiAoIXNlY3Rpb25zUFRhdVsxMl0pIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUG93ZXJzIG9mIHRhdSBpcyBub3QgcHJlcGFyZWQuXCIpO1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG5cbiAgICBjb25zdCBMUG9pbnRzID0gbmV3IEJpZ0J1ZmZlcihkb21haW5TaXplKnNHMSk7XG4gICAgY29uc3QgbyA9IHNlY3Rpb25zUFRhdVsxMl1bMF0ucCArICgoMiAqKiAoY2lyUG93ZXIpKSAtMSkqc0cxO1xuICAgIGF3YWl0IGZkUFRhdS5yZWFkVG9CdWZmZXIoTFBvaW50cywgMCwgZG9tYWluU2l6ZSpzRzEsIG8pO1xuXG4gICAgY29uc3QgW2sxLCBrMl0gPSBnZXRLMUsyKCk7XG5cbiAgICBjb25zdCB2ayA9IHt9O1xuXG5cbiAgICBhd2FpdCB3cml0ZUFkZGl0aW9ucygzLCBcIkFkZGl0aW9uc1wiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDQsIDAsIFwiQW1hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDUsIDEsIFwiQm1hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDYsIDIsIFwiQ21hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVRTWFwKDcsIDMsIFwiUW1cIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlUU1hcCg4LCA0LCBcIlFsXCIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICBhd2FpdCB3cml0ZVFNYXAoOSwgNSwgXCJRclwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVRTWFwKDEwLCA2LCBcIlFvXCIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICBhd2FpdCB3cml0ZVFNYXAoMTEsIDcsIFwiUWNcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlU2lnbWEoMTIsIFwic2lnbWFcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlTHMoMTMsIFwibGFncmFuZ2UgcG9seW5vbWlhbHNcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG4gICAgLy8gV3JpdGUgUFRhdSBwb2ludHNcbiAgICAvLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMTQpO1xuICAgIGNvbnN0IGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKChkb21haW5TaXplKzYpKnNHMSk7XG4gICAgYXdhaXQgZmRQVGF1LnJlYWRUb0J1ZmZlcihidWZmT3V0LCAwLCAoZG9tYWluU2l6ZSs2KSpzRzEsIHNlY3Rpb25zUFRhdVsyXVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYnVmZk91dCk7XG4gICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG5cbiAgICBhd2FpdCB3cml0ZUhlYWRlcnMoKTtcblxuICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIGF3YWl0IGZkUjFjcy5jbG9zZSgpO1xuICAgIGF3YWl0IGZkUFRhdS5jbG9zZSgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJTZXR1cCBGaW5pc2hlZFwiKTtcblxuICAgIHJldHVybiA7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ29uc3RyYWludHMoRnIsIHIxY3MsIGxvZ2dlcikge1xuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShsaW5lYXJDb21iKSB7XG4gICAgICAgICAgICBjb25zdCBzcyA9IE9iamVjdC5rZXlzKGxpbmVhckNvbWIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lYXJDb21iW3NzW2ldXSA9PSAwbikgZGVsZXRlIGxpbmVhckNvbWJbc3NbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gam9pbihsaW5lYXJDb21iMSwgaywgbGluZWFyQ29tYjIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGxldCBzIGluIGxpbmVhckNvbWIxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNbc10gPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXNbc10gPSBGci5tdWwoaywgbGluZWFyQ29tYjFbc10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1tzXSA9IEZyLmFkZChyZXNbc10sIEZyLm11bChrLCBsaW5lYXJDb21iMVtzXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgcyBpbiBsaW5lYXJDb21iMikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzW3NdID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3NdID0gbGluZWFyQ29tYjJbc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3NdID0gRnIuYWRkKHJlc1tzXSwgbGluZWFyQ29tYjJbc10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vcm1hbGl6ZShyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlZHVjZUNvZWZzKGxpbmVhckNvbWIsIG1heEMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBrOiBGci56ZXJvLFxuICAgICAgICAgICAgICAgIHM6IFtdLFxuICAgICAgICAgICAgICAgIGNvZWZzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IHMgaW4gbGluZWFyQ29tYikge1xuICAgICAgICAgICAgICAgIGlmIChzID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmsgPSBGci5hZGQocmVzLmssIGxpbmVhckNvbWJbc10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZWFyQ29tYltzXSAhPSAwbikge1xuICAgICAgICAgICAgICAgICAgICBjcy5wdXNoKFtOdW1iZXIocyksIGxpbmVhckNvbWJbc11dKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjcy5sZW5ndGggPiBtYXhDKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYzEgPSBjcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGMyID0gY3Muc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNsID0gYzFbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSBjMlswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbyA9IHBsb25rTlZhcnMrKztcbiAgICAgICAgICAgICAgICBjb25zdCBxbSA9IEZyLnplcm87XG4gICAgICAgICAgICAgICAgY29uc3QgcWwgPSBGci5uZWcoYzFbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHFyID0gRnIubmVnKGMyWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxbyA9IEZyLm9uZTtcbiAgICAgICAgICAgICAgICBjb25zdCBxYyA9IEZyLnplcm87XG5cbiAgICAgICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goW3NsLCBzciwgc28sIHFtLCBxbCwgcXIsIHFvLCBxY10pO1xuXG4gICAgICAgICAgICAgICAgcGxvbmtBZGRpdGlvbnMucHVzaChbc2wsIHNyLCBjMVsxXSwgYzJbMV1dKTtcblxuICAgICAgICAgICAgICAgIGNzLnB1c2goW3NvLCBGci5vbmVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMuc1tpXSA9IGNzW2ldWzBdO1xuICAgICAgICAgICAgICAgIHJlcy5jb2Vmc1tpXSA9IGNzW2ldWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHJlcy5jb2Vmcy5sZW5ndGggPCBtYXhDKSB7XG4gICAgICAgICAgICAgICAgcmVzLnMucHVzaCgwKTtcbiAgICAgICAgICAgICAgICByZXMuY29lZnMucHVzaChGci56ZXJvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRDb25zdHJhaW50U3VtKGxjKSB7XG4gICAgICAgICAgICBjb25zdCBDID0gcmVkdWNlQ29lZnMobGMsIDMpO1xuICAgICAgICAgICAgY29uc3Qgc2wgPSBDLnNbMF07XG4gICAgICAgICAgICBjb25zdCBzciA9IEMuc1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHNvID0gQy5zWzJdO1xuICAgICAgICAgICAgY29uc3QgcW0gPSBGci56ZXJvO1xuICAgICAgICAgICAgY29uc3QgcWwgPSBDLmNvZWZzWzBdO1xuICAgICAgICAgICAgY29uc3QgcXIgPSBDLmNvZWZzWzFdO1xuICAgICAgICAgICAgY29uc3QgcW8gPSBDLmNvZWZzWzJdO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBDLms7XG4gICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goW3NsLCBzciwgc28sIHFtLCBxbCwgcXIsIHFvLCBxY10pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkQ29uc3RyYWludE11bChsY0EsIGxjQiwgbGNDKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gcmVkdWNlQ29lZnMobGNBLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IEIgPSByZWR1Y2VDb2VmcyhsY0IsIDEpO1xuICAgICAgICAgICAgY29uc3QgQyA9IHJlZHVjZUNvZWZzKGxjQywgMSk7XG5cblxuICAgICAgICAgICAgY29uc3Qgc2wgPSBBLnNbMF07XG4gICAgICAgICAgICBjb25zdCBzciA9IEIuc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHNvID0gQy5zWzBdO1xuICAgICAgICAgICAgY29uc3QgcW0gPSBGci5tdWwoQS5jb2Vmc1swXSwgQi5jb2Vmc1swXSk7XG4gICAgICAgICAgICBjb25zdCBxbCA9IEZyLm11bChBLmNvZWZzWzBdLCBCLmspO1xuICAgICAgICAgICAgY29uc3QgcXIgPSBGci5tdWwoQS5rLCBCLmNvZWZzWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHFvID0gRnIubmVnKEMuY29lZnNbMF0pO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBGci5zdWIoRnIubXVsKEEuaywgQi5rKSwgQy5rKTtcbiAgICAgICAgICAgIHBsb25rQ29uc3RyYWludHMucHVzaChbc2wsIHNyLCBzbywgcW0sIHFsLCBxciwgcW8sIHFjXSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGMpIHtcbiAgICAgICAgICAgIGxldCBrID0gRnIuemVybztcbiAgICAgICAgICAgIGxldCBuID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHNzID0gT2JqZWN0LmtleXMobGMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsY1tzc1tpXV0gPT0gMG4pIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxjW3NzW2ldXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNzW2ldID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IEZyLmFkZChrLCBsY1tzc1tpXV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG4rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobiA+IDApIHJldHVybiBuLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoayAhPSBGci56ZXJvKSByZXR1cm4gXCJrXCI7XG4gICAgICAgICAgICByZXR1cm4gXCIwXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzKGxjQSwgbGNCLCBsY0MpIHtcbiAgICAgICAgICAgIGNvbnN0IGxjdEEgPSBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGNBKTtcbiAgICAgICAgICAgIGNvbnN0IGxjdEIgPSBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGNCKTtcbiAgICAgICAgICAgIGlmICgobGN0QSA9PT0gXCIwXCIpIHx8IChsY3RCID09PSBcIjBcIikpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemUobGNDKTtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50U3VtKGxjQyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxjdEEgPT09IFwia1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGNDQyA9IGpvaW4obGNCLCBsY0FbMF0sIGxjQyk7XG4gICAgICAgICAgICAgICAgYWRkQ29uc3RyYWludFN1bShsY0NDKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGN0QiA9PT0gXCJrXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsY0NDID0gam9pbihsY0EsIGxjQlswXSwgbGNDKTtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50U3VtKGxjQ0MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50TXVsKGxjQSwgbGNCLCBsY0MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgcyA9IDE7IHMgPD0gblB1YmxpYzsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzbCA9IHM7XG4gICAgICAgICAgICBjb25zdCBzciA9IDA7XG4gICAgICAgICAgICBjb25zdCBzbyA9IDA7XG4gICAgICAgICAgICBjb25zdCBxbSA9IEZyLnplcm87XG4gICAgICAgICAgICBjb25zdCBxbCA9IEZyLm9uZTtcbiAgICAgICAgICAgIGNvbnN0IHFyID0gRnIuemVybztcbiAgICAgICAgICAgIGNvbnN0IHFvID0gRnIuemVybztcbiAgICAgICAgICAgIGNvbnN0IHFjID0gRnIuemVybztcblxuICAgICAgICAgICAgcGxvbmtDb25zdHJhaW50cy5wdXNoKFtzbCwgc3IsIHNvLCBxbSwgcWwsIHFyLCBxbywgcWNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcjFjcy5jb25zdHJhaW50cy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChjICUgMTAwMDAgPT09IDApKSBsb2dnZXIuZGVidWcoYHByb2Nlc3NpbmcgY29uc3RyYWludHM6ICR7Y30vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIHByb2Nlc3MoLi4ucjFjcy5jb25zdHJhaW50c1tjXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVdpdG5lc3NNYXAoc2VjdGlvbk51bSwgcG9zQ29uc3RyYWludCwgbmFtZSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cGxvbmtDb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtDb25zdHJhaW50c1tpXVtwb3NDb25zdHJhaW50XSk7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikmJihpJTEwMDAwMDAgPT0gMCkpIGxvZ2dlci5kZWJ1Zyhgd3JpdGluZyAke25hbWV9OiAke2l9LyR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVRTWFwKHNlY3Rpb25OdW0sIHBvc0NvbnN0cmFpbnQsIG5hbWUpIHtcbiAgICAgICAgbGV0IFEgPSBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUqbjhyKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHBsb25rQ29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFEuc2V0KHBsb25rQ29uc3RyYWludHNbaV1bcG9zQ29uc3RyYWludF0sIGkqbjhyKTtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKGklMTAwMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGB3cml0aW5nICR7bmFtZX06ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFEpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICAgICAgUSA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUSk7XG4gICAgICAgIHZrW25hbWVdPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBRLCBsb2dnZXIsIFwibXVsdGlleHAgXCIrbmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVQNChidWZmKSB7XG4gICAgICAgIGNvbnN0IHEgPSBhd2FpdCBGci5pZmZ0KGJ1ZmYpO1xuICAgICAgICBjb25zdCBxNCA9IG5ldyBCaWdCdWZmZXIoZG9tYWluU2l6ZSpuOHIqNCk7XG4gICAgICAgIHE0LnNldChxLCAwKTtcbiAgICAgICAgY29uc3QgUTQgPSBhd2FpdCBGci5mZnQocTQpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUocSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShRNCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVBZGRpdGlvbnMoc2VjdGlvbk51bSwgbmFtZSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoKDIqNCsyKm44cikpO1xuICAgICAgICBjb25zdCBidWZmT3V0ViA9IG5ldyBEYXRhVmlldyhidWZmT3V0LmJ1ZmZlcik7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwbG9ua0FkZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb249cGxvbmtBZGRpdGlvbnNbaV07XG4gICAgICAgICAgICBsZXQgbz0wO1xuICAgICAgICAgICAgYnVmZk91dFYuc2V0VWludDMyKG8sIGFkZGl0aW9uWzBdLCB0cnVlKTsgbys9NDtcbiAgICAgICAgICAgIGJ1ZmZPdXRWLnNldFVpbnQzMihvLCBhZGRpdGlvblsxXSwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgc3RvcmVuIGluICBNb250Z29tZXJ5LiBzdG9yZWQgPSB2KlJcbiAgICAgICAgICAgIC8vIHNvIHdoZW4gbW9udGdvbWVyeSBtdWx0aXBsaWNhdGVkIGJ5IHRoZSB3aXRuZXNzICBpdCByZXN1bHQgPSB2KlIqdy9SID0gdip3IFxuICAgICAgICAgICAgYnVmZk91dC5zZXQoYWRkaXRpb25bMl0sIG8pOyBvKz0gbjhyO1xuICAgICAgICAgICAgYnVmZk91dC5zZXQoYWRkaXRpb25bM10sIG8pOyBvKz0gbjhyO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJ1ZmZPdXQpO1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgJHtuYW1lfTogJHtpfS8ke3Bsb25rQWRkaXRpb25zLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVNpZ21hKHNlY3Rpb25OdW0sIG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2lnbWEgPSBuZXcgQmlnQnVmZmVyKG44cipkb21haW5TaXplKjMpO1xuICAgICAgICBjb25zdCBsYXN0QXBhcmVuY2UgPSAgbmV3IEJpZ0FycmF5KHBsb25rTlZhcnMpO1xuICAgICAgICBjb25zdCBmaXJzdFBvcyA9IG5ldyBCaWdBcnJheShwbG9ua05WYXJzKTtcbiAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxkb21haW5TaXplO2krKykge1xuICAgICAgICAgICAgaWYgKGk8cGxvbmtDb25zdHJhaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBidWlsZFNpZ21hKHBsb25rQ29uc3RyYWludHNbaV1bMF0sIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVsxXSwgZG9tYWluU2l6ZSArIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVsyXSwgZG9tYWluU2l6ZSoyICsgaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYSgwLCBkb21haW5TaXplICsgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYSgwLCBkb21haW5TaXplKjIgKyBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1tjaXJQb3dlcl0pO1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgJHtuYW1lfSBwaGFzZTE6ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBzPTA7IHM8cGxvbmtOVmFyczsgcysrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpcnN0UG9zW3NdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KGxhc3RBcGFyZW5jZVtzXSwgZmlyc3RQb3Nbc10qbjhyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiVmFyaWFibGUgbm90IHVzZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJWYXJpYWJsZSBub3QgdXNlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKHMlMTAwMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGB3cml0aW5nICR7bmFtZX0gcGhhc2UyOiAke3N9LyR7cGxvbmtOVmFyc31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uTnVtKTtcbiAgICAgICAgbGV0IFMxID0gc2lnbWEuc2xpY2UoMCwgZG9tYWluU2l6ZSpuOHIpO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFMxKTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgICAgICBsZXQgUzIgPSBzaWdtYS5zbGljZShkb21haW5TaXplKm44ciwgZG9tYWluU2l6ZSpuOHIqMik7XG4gICAgICAgIGF3YWl0IHdyaXRlUDQoUzIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIGxldCBTMyA9IHNpZ21hLnNsaWNlKGRvbWFpblNpemUqbjhyKjIsIGRvbWFpblNpemUqbjhyKjMpO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFMzKTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICBTMSA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzEpO1xuICAgICAgICBTMiA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzIpO1xuICAgICAgICBTMyA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzMpO1xuXG4gICAgICAgIHZrLlMxPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMSwgbG9nZ2VyLCBcIm11bHRpZXhwIFMxXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIHZrLlMyPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMiwgbG9nZ2VyLCBcIm11bHRpZXhwIFMyXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIHZrLlMzPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMywgbG9nZ2VyLCBcIm11bHRpZXhwIFMzXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG5cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRTaWdtYShzLCBwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhc3RBcGFyZW5jZVtzXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGZpcnN0UG9zW3NdID0gcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KGxhc3RBcGFyZW5jZVtzXSwgcCpuOHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHY7XG4gICAgICAgICAgICBpZiAocDxkb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IHc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHA8Mipkb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IEZyLm11bCh3LCBrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHYgPSBGci5tdWwodywgazIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdEFwYXJlbmNlW3NdPXY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUxzKHNlY3Rpb25OdW0sIG5hbWUpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uTnVtKTtcbiAgICAgICAgY29uc3QgbD1NYXRoLm1heChuUHVibGljLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUqbjhyKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KEZyLm9uZSwgaSpuOHIpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVQNChidWZmKTtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1Zyhgd3JpdGluZyAke25hbWV9ICR7aX0vJHtsfWApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlSGVhZGVycygpIHtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgaGVhZGVyXG4gICAgICAgIC8vLy8vLy8vLy8vXG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKDIpOyAvLyBQbG9ua1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgUGxvbmsgaGVhZGVyIHNlY3Rpb25cbiAgICAgICAgLy8vLy8vLy8vLy9cblxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIDIpO1xuICAgICAgICBjb25zdCBwcmltZVEgPSBjdXJ2ZS5xO1xuICAgICAgICBjb25zdCBuOHEgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgICAgIGNvbnN0IHByaW1lUiA9IGN1cnZlLnI7XG4gICAgICAgIGNvbnN0IG44ciA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKzEpKjg7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIobjhxKTtcbiAgICAgICAgYXdhaXQgd3JpdGVCaWdJbnQoZmRaS2V5LCBwcmltZVEsIG44cSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVSLCBuOHIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihwbG9ua05WYXJzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG90YWwgbnVtYmVyIG9mIGJhcnNcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoblB1YmxpYyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcHVibGljIHZhcnMgKG5vdCBpbmNsdWRpbmcgT05FKVxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihkb21haW5TaXplKTsgICAgICAgICAgICAgICAgICAvLyBkb21haW5TaXplXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHBsb25rQWRkaXRpb25zLmxlbmd0aCk7ICAgICAgICAgICAgICAgICAgLy8gZG9tYWluU2l6ZVxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCk7IFxuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMik7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlFtKSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5RbCkpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoRzEudG9BZmZpbmUodmsuUXIpKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlFvKSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5RYykpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5TMSkpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoRzEudG9BZmZpbmUodmsuUzIpKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlMzKSk7XG5cbiAgICAgICAgbGV0IGJYXzI7XG4gICAgICAgIGJYXzIgPSBhd2FpdCBmZFBUYXUucmVhZChzRzIsIHNlY3Rpb25zUFRhdVszXVswXS5wICsgc0cyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJYXzIpO1xuXG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEsxSzIoKSB7XG4gICAgICAgIGxldCBrMSA9IEZyLnR3bztcbiAgICAgICAgd2hpbGUgKGlzSW5jbHVkZWQoazEsIFtdLCBjaXJQb3dlcikpIEZyLmFkZChrMSwgRnIub25lKTtcbiAgICAgICAgbGV0IGsyID0gRnIuYWRkKGsxLCBGci5vbmUpO1xuICAgICAgICB3aGlsZSAoaXNJbmNsdWRlZChrMiwgW2sxXSwgY2lyUG93ZXIpKSBGci5hZGQoazIsIEZyLm9uZSk7XG4gICAgICAgIHJldHVybiBbazEsIGsyXTtcblxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSW5jbHVkZWQoaywga0FyciwgcG93KSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW5TaXplPSAyKipwb3c7XG4gICAgICAgICAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxkb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgdykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxrQXJyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGci5lcShrLCBGci5tdWwoa0FycltqXSwgdykpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3Bvd10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbiIsIi8qKlxuICogW2pzLXNoYTNde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvanMtc2hhM31cbiAqXG4gKiBAdmVyc2lvbiAwLjguMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBJTlBVVF9FUlJPUiA9ICdpbnB1dCBpcyBpbnZhbGlkIHR5cGUnO1xuICB2YXIgRklOQUxJWkVfRVJST1IgPSAnZmluYWxpemUgYWxyZWFkeSBjYWxsZWQnO1xuICB2YXIgV0lORE9XID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIHZhciByb290ID0gV0lORE9XID8gd2luZG93IDoge307XG4gIGlmIChyb290LkpTX1NIQTNfTk9fV0lORE9XKSB7XG4gICAgV0lORE9XID0gZmFsc2U7XG4gIH1cbiAgdmFyIFdFQl9XT1JLRVIgPSAhV0lORE9XICYmIHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JztcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5KU19TSEEzX05PX05PREVfSlMgJiYgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuICBpZiAoTk9ERV9KUykge1xuICAgIHJvb3QgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoV0VCX1dPUktFUikge1xuICAgIHJvb3QgPSBzZWxmO1xuICB9XG4gIHZhciBDT01NT05fSlMgPSAhcm9vdC5KU19TSEEzX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICFyb290LkpTX1NIQTNfTk9fQVJSQVlfQlVGRkVSICYmIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBIRVhfQ0hBUlMgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xuICB2YXIgU0hBS0VfUEFERElORyA9IFszMSwgNzkzNiwgMjAzMTYxNiwgNTIwMDkzNjk2XTtcbiAgdmFyIENTSEFLRV9QQURESU5HID0gWzQsIDEwMjQsIDI2MjE0NCwgNjcxMDg4NjRdO1xuICB2YXIgS0VDQ0FLX1BBRERJTkcgPSBbMSwgMjU2LCA2NTUzNiwgMTY3NzcyMTZdO1xuICB2YXIgUEFERElORyA9IFs2LCAxNTM2LCAzOTMyMTYsIDEwMDY2MzI5Nl07XG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xuICB2YXIgUkMgPSBbMSwgMCwgMzI4OTgsIDAsIDMyOTA2LCAyMTQ3NDgzNjQ4LCAyMTQ3NTE2NDE2LCAyMTQ3NDgzNjQ4LCAzMjkwNywgMCwgMjE0NzQ4MzY0OSxcbiAgICAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsXG4gICAgMjE0NzQ4MzY1OCwgMCwgMjE0NzUxNjU1NSwgMCwgMTM5LCAyMTQ3NDgzNjQ4LCAzMjkwNSwgMjE0NzQ4MzY0OCwgMzI3NzEsXG4gICAgMjE0NzQ4MzY0OCwgMzI3NzAsIDIxNDc0ODM2NDgsIDEyOCwgMjE0NzQ4MzY0OCwgMzI3NzgsIDAsIDIxNDc0ODM2NTgsIDIxNDc0ODM2NDgsXG4gICAgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdO1xuICB2YXIgQklUUyA9IFsyMjQsIDI1NiwgMzg0LCA1MTJdO1xuICB2YXIgU0hBS0VfQklUUyA9IFsxMjgsIDI1Nl07XG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdidWZmZXInLCAnYXJyYXlCdWZmZXInLCAnYXJyYXknLCAnZGlnZXN0J107XG4gIHZhciBDU0hBS0VfQllURVBBRCA9IHtcbiAgICAnMTI4JzogMTY4LFxuICAgICcyNTYnOiAxMzZcbiAgfTtcblxuICBpZiAocm9vdC5KU19TSEEzX05PX05PREVfSlMgfHwgIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG4gIH1cblxuICBpZiAoQVJSQVlfQlVGRkVSICYmIChyb290LkpTX1NIQTNfTk9fQVJSQVlfQlVGRkVSX0lTX1ZJRVcgfHwgIUFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqLmJ1ZmZlciAmJiBvYmouYnVmZmVyLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcjtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGNyZWF0ZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBvdXRwdXRCaXRzKSB7XG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjcmVhdGVDc2hha2VPdXRwdXRNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZywgb3V0cHV0VHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgb3V0cHV0Qml0cywgbiwgcykge1xuICAgICAgcmV0dXJuIG1ldGhvZHNbJ2NzaGFrZScgKyBiaXRzXS51cGRhdGUobWVzc2FnZSwgb3V0cHV0Qml0cywgbiwgcylbb3V0cHV0VHlwZV0oKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjcmVhdGVLbWFjT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgbWVzc2FnZSwgb3V0cHV0Qml0cywgcykge1xuICAgICAgcmV0dXJuIG1ldGhvZHNbJ2ttYWMnICsgYml0c10udXBkYXRlKGtleSwgbWVzc2FnZSwgb3V0cHV0Qml0cywgcylbb3V0cHV0VHlwZV0oKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjcmVhdGVPdXRwdXRNZXRob2RzID0gZnVuY3Rpb24gKG1ldGhvZCwgY3JlYXRlTWV0aG9kLCBiaXRzLCBwYWRkaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB0eXBlID0gT1VUUFVUX1RZUEVTW2ldO1xuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlTWV0aG9kKGJpdHMsIHBhZGRpbmcsIHR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG4gIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xuICAgIHZhciBtZXRob2QgPSBjcmVhdGVPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgJ2hleCcpO1xuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKTtcbiAgICB9O1xuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XG4gICAgfTtcbiAgICByZXR1cm4gY3JlYXRlT3V0cHV0TWV0aG9kcyhtZXRob2QsIGNyZWF0ZU91dHB1dE1ldGhvZCwgYml0cywgcGFkZGluZyk7XG4gIH07XG5cbiAgdmFyIGNyZWF0ZVNoYWtlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlU2hha2VPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgJ2hleCcpO1xuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAob3V0cHV0Qml0cykge1xuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cyk7XG4gICAgfTtcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKG91dHB1dEJpdHMpLnVwZGF0ZShtZXNzYWdlKTtcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVPdXRwdXRNZXRob2RzKG1ldGhvZCwgY3JlYXRlU2hha2VPdXRwdXRNZXRob2QsIGJpdHMsIHBhZGRpbmcpO1xuICB9O1xuXG4gIHZhciBjcmVhdGVDc2hha2VNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xuICAgIHZhciB3ID0gQ1NIQUtFX0JZVEVQQURbYml0c107XG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZUNzaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uIChvdXRwdXRCaXRzLCBuLCBzKSB7XG4gICAgICBpZiAoIW4gJiYgIXMpIHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZHNbJ3NoYWtlJyArIGJpdHNdLmNyZWF0ZShvdXRwdXRCaXRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgS2VjY2FrKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpLmJ5dGVwYWQoW24sIHNdLCB3KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3V0cHV0Qml0cywgbiwgcykge1xuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUob3V0cHV0Qml0cywgbiwgcykudXBkYXRlKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgcmV0dXJuIGNyZWF0ZU91dHB1dE1ldGhvZHMobWV0aG9kLCBjcmVhdGVDc2hha2VPdXRwdXRNZXRob2QsIGJpdHMsIHBhZGRpbmcpO1xuICB9O1xuXG4gIHZhciBjcmVhdGVLbWFjTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcbiAgICB2YXIgdyA9IENTSEFLRV9CWVRFUEFEW2JpdHNdO1xuICAgIHZhciBtZXRob2QgPSBjcmVhdGVLbWFjT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKGtleSwgb3V0cHV0Qml0cywgcykge1xuICAgICAgcmV0dXJuIG5ldyBLbWFjKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpLmJ5dGVwYWQoWydLTUFDJywgc10sIHcpLmJ5dGVwYWQoW2tleV0sIHcpO1xuICAgIH07XG4gICAgbWV0aG9kLnVwZGF0ZSA9IGZ1bmN0aW9uIChrZXksIG1lc3NhZ2UsIG91dHB1dEJpdHMsIHMpIHtcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKGtleSwgb3V0cHV0Qml0cywgcykudXBkYXRlKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgcmV0dXJuIGNyZWF0ZU91dHB1dE1ldGhvZHMobWV0aG9kLCBjcmVhdGVLbWFjT3V0cHV0TWV0aG9kLCBiaXRzLCBwYWRkaW5nKTtcbiAgfTtcblxuICB2YXIgYWxnb3JpdGhtcyA9IFtcbiAgICB7IG5hbWU6ICdrZWNjYWsnLCBwYWRkaW5nOiBLRUNDQUtfUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2QgfSxcbiAgICB7IG5hbWU6ICdzaGEzJywgcGFkZGluZzogUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2QgfSxcbiAgICB7IG5hbWU6ICdzaGFrZScsIHBhZGRpbmc6IFNIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlU2hha2VNZXRob2QgfSxcbiAgICB7IG5hbWU6ICdjc2hha2UnLCBwYWRkaW5nOiBDU0hBS0VfUEFERElORywgYml0czogU0hBS0VfQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVDc2hha2VNZXRob2QgfSxcbiAgICB7IG5hbWU6ICdrbWFjJywgcGFkZGluZzogQ1NIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlS21hY01ldGhvZCB9XG4gIF07XG5cbiAgdmFyIG1ldGhvZHMgPSB7fSwgbWV0aG9kTmFtZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsZ29yaXRobXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYWxnb3JpdGhtID0gYWxnb3JpdGhtc1tpXTtcbiAgICB2YXIgYml0cyA9IGFsZ29yaXRobS5iaXRzO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYml0cy5sZW5ndGg7ICsraikge1xuICAgICAgdmFyIG1ldGhvZE5hbWUgPSBhbGdvcml0aG0ubmFtZSArICdfJyArIGJpdHNbal07XG4gICAgICBtZXRob2ROYW1lcy5wdXNoKG1ldGhvZE5hbWUpO1xuICAgICAgbWV0aG9kc1ttZXRob2ROYW1lXSA9IGFsZ29yaXRobS5jcmVhdGVNZXRob2QoYml0c1tqXSwgYWxnb3JpdGhtLnBhZGRpbmcpO1xuICAgICAgaWYgKGFsZ29yaXRobS5uYW1lICE9PSAnc2hhMycpIHtcbiAgICAgICAgdmFyIG5ld01ldGhvZE5hbWUgPSBhbGdvcml0aG0ubmFtZSArIGJpdHNbal07XG4gICAgICAgIG1ldGhvZE5hbWVzLnB1c2gobmV3TWV0aG9kTmFtZSk7XG4gICAgICAgIG1ldGhvZHNbbmV3TWV0aG9kTmFtZV0gPSBtZXRob2RzW21ldGhvZE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKSB7XG4gICAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgICB0aGlzLnMgPSBbXTtcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIHRoaXMub3V0cHV0Qml0cyA9IG91dHB1dEJpdHM7XG4gICAgdGhpcy5yZXNldCA9IHRydWU7XG4gICAgdGhpcy5maW5hbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJsb2NrID0gMDtcbiAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLmJsb2NrQ291bnQgPSAoMTYwMCAtIChiaXRzIDw8IDEpKSA+PiA1O1xuICAgIHRoaXMuYnl0ZUNvdW50ID0gdGhpcy5ibG9ja0NvdW50IDw8IDI7XG4gICAgdGhpcy5vdXRwdXRCbG9ja3MgPSBvdXRwdXRCaXRzID4+IDU7XG4gICAgdGhpcy5leHRyYUJ5dGVzID0gKG91dHB1dEJpdHMgJiAzMSkgPj4gMztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkge1xuICAgICAgdGhpcy5zW2ldID0gMDtcbiAgICB9XG4gIH1cblxuICBLZWNjYWsucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuZmluYWxpemVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoRklOQUxJWkVfRVJST1IpO1xuICAgIH1cbiAgICB2YXIgbm90U3RyaW5nLCB0eXBlID0gdHlwZW9mIG1lc3NhZ2U7XG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5QVVRfRVJST1IpO1xuICAgICAgICB9IGVsc2UgaWYgKEFSUkFZX0JVRkZFUiAmJiBtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlKSkge1xuICAgICAgICAgIGlmICghQVJSQVlfQlVGRkVSIHx8ICFBcnJheUJ1ZmZlci5pc1ZpZXcobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihJTlBVVF9FUlJPUik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5QVVRfRVJST1IpO1xuICAgICAgfVxuICAgICAgbm90U3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBieXRlQ291bnQgPSB0aGlzLmJ5dGVDb3VudCwgbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGgsXG4gICAgICBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBpbmRleCA9IDAsIHMgPSB0aGlzLnMsIGksIGNvZGU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnJlc2V0KSB7XG4gICAgICAgIHRoaXMucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgYmxvY2tzWzBdID0gdGhpcy5ibG9jaztcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGJsb2NrQ291bnQgKyAxOyArK2kpIHtcbiAgICAgICAgICBibG9ja3NbaV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90U3RyaW5nKSB7XG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcbiAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBtZXNzYWdlW2luZGV4XSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IGJ5dGVDb3VudDsgKytpbmRleCkge1xuICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gY29kZSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4YzAgfCAoY29kZSA+PiA2KSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZTAgfCAoY29kZSA+PiAxMikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2RlID0gMHgxMDAwMCArICgoKGNvZGUgJiAweDNmZikgPDwgMTApIHwgKG1lc3NhZ2UuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhmMCB8IChjb2RlID4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RCeXRlSW5kZXggPSBpO1xuICAgICAgaWYgKGkgPj0gYnl0ZUNvdW50KSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBpIC0gYnl0ZUNvdW50O1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XG4gICAgICAgICAgc1tpXSBePSBibG9ja3NbaV07XG4gICAgICAgIH1cbiAgICAgICAgZihzKTtcbiAgICAgICAgdGhpcy5yZXNldCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiAoeCwgcmlnaHQpIHtcbiAgICB2YXIgbyA9IHggJiAyNTUsIG4gPSAxO1xuICAgIHZhciBieXRlcyA9IFtvXTtcbiAgICB4ID0geCA+PiA4O1xuICAgIG8gPSB4ICYgMjU1O1xuICAgIHdoaWxlIChvID4gMCkge1xuICAgICAgYnl0ZXMudW5zaGlmdChvKTtcbiAgICAgIHggPSB4ID4+IDg7XG4gICAgICBvID0geCAmIDI1NTtcbiAgICAgICsrbjtcbiAgICB9XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBieXRlcy5wdXNoKG4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy51bnNoaWZ0KG4pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZShieXRlcyk7XG4gICAgcmV0dXJuIGJ5dGVzLmxlbmd0aDtcbiAgfTtcblxuICBLZWNjYWsucHJvdG90eXBlLmVuY29kZVN0cmluZyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgbm90U3RyaW5nLCB0eXBlID0gdHlwZW9mIHN0cjtcbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoc3RyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOUFVUX0VSUk9SKTtcbiAgICAgICAgfSBlbHNlIGlmIChBUlJBWV9CVUZGRVIgJiYgc3RyLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHN0ciA9IG5ldyBVaW50OEFycmF5KHN0cik7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc3RyKSkge1xuICAgICAgICAgIGlmICghQVJSQVlfQlVGRkVSIHx8ICFBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOUFVUX0VSUk9SKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTlBVVF9FUlJPUik7XG4gICAgICB9XG4gICAgICBub3RTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIGJ5dGVzID0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBieXRlcyArPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xuICAgICAgICAgIGJ5dGVzICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgIGJ5dGVzICs9IDM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHgzZmYpKTtcbiAgICAgICAgICBieXRlcyArPSA0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJ5dGVzICs9IHRoaXMuZW5jb2RlKGJ5dGVzICogOCk7XG4gICAgdGhpcy51cGRhdGUoc3RyKTtcbiAgICByZXR1cm4gYnl0ZXM7XG4gIH07XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5ieXRlcGFkID0gZnVuY3Rpb24gKHN0cnMsIHcpIHtcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLmVuY29kZSh3KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ5dGVzICs9IHRoaXMuZW5jb2RlU3RyaW5nKHN0cnNbaV0pO1xuICAgIH1cbiAgICB2YXIgcGFkZGluZ0J5dGVzID0gdyAtIGJ5dGVzICUgdztcbiAgICB2YXIgemVyb3MgPSBbXTtcbiAgICB6ZXJvcy5sZW5ndGggPSBwYWRkaW5nQnl0ZXM7XG4gICAgdGhpcy51cGRhdGUoemVyb3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEtlY2Nhay5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZmluYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmluYWxpemVkID0gdHJ1ZTtcbiAgICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3MsIGkgPSB0aGlzLmxhc3RCeXRlSW5kZXgsIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnM7XG4gICAgYmxvY2tzW2kgPj4gMl0gfD0gdGhpcy5wYWRkaW5nW2kgJiAzXTtcbiAgICBpZiAodGhpcy5sYXN0Qnl0ZUluZGV4ID09PSB0aGlzLmJ5dGVDb3VudCkge1xuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xuICAgICAgZm9yIChpID0gMTsgaSA8IGJsb2NrQ291bnQgKyAxOyArK2kpIHtcbiAgICAgICAgYmxvY2tzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgYmxvY2tzW2Jsb2NrQ291bnQgLSAxXSB8PSAweDgwMDAwMDAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcbiAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xuICAgIH1cbiAgICBmKHMpO1xuICB9O1xuXG4gIEtlY2Nhay5wcm90b3R5cGUudG9TdHJpbmcgPSBLZWNjYWsucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZpbmFsaXplKCk7XG5cbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXG4gICAgICBleHRyYUJ5dGVzID0gdGhpcy5leHRyYUJ5dGVzLCBpID0gMCwgaiA9IDA7XG4gICAgdmFyIGhleCA9ICcnLCBibG9jaztcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2Jsb2NrICYgMHgwRl0gK1xuICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDgpICYgMHgwRl0gK1xuICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMjApICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDE2KSAmIDB4MEZdICtcbiAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAyNCkgJiAweDBGXTtcbiAgICAgIH1cbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xuICAgICAgICBmKHMpO1xuICAgICAgICBpID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcbiAgICAgIGJsb2NrID0gc1tpXTtcbiAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXTtcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gOCkgJiAweDBGXTtcbiAgICAgIH1cbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMikge1xuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG4gIH07XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZpbmFsaXplKCk7XG5cbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXG4gICAgICBleHRyYUJ5dGVzID0gdGhpcy5leHRyYUJ5dGVzLCBpID0gMCwgaiA9IDA7XG4gICAgdmFyIGJ5dGVzID0gdGhpcy5vdXRwdXRCaXRzID4+IDM7XG4gICAgdmFyIGJ1ZmZlcjtcbiAgICBpZiAoZXh0cmFCeXRlcykge1xuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKChvdXRwdXRCbG9ja3MgKyAxKSA8PCAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzKTtcbiAgICB9XG4gICAgdmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XG4gICAgICAgIGFycmF5W2pdID0gc1tpXTtcbiAgICAgIH1cbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xuICAgICAgICBmKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXh0cmFCeXRlcykge1xuICAgICAgYXJyYXlbaV0gPSBzW2ldO1xuICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfTtcblxuICBLZWNjYWsucHJvdG90eXBlLmJ1ZmZlciA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXlCdWZmZXI7XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5kaWdlc3QgPSBLZWNjYWsucHJvdG90eXBlLmFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZmluYWxpemUoKTtcblxuICAgIHZhciBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zLCBvdXRwdXRCbG9ja3MgPSB0aGlzLm91dHB1dEJsb2NrcyxcbiAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcbiAgICB2YXIgYXJyYXkgPSBbXSwgb2Zmc2V0LCBibG9jaztcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcbiAgICAgICAgb2Zmc2V0ID0gaiA8PCAyO1xuICAgICAgICBibG9jayA9IHNbaV07XG4gICAgICAgIGFycmF5W29mZnNldF0gPSBibG9jayAmIDB4RkY7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gKGJsb2NrID4+IDgpICYgMHhGRjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgM10gPSAoYmxvY2sgPj4gMjQpICYgMHhGRjtcbiAgICAgIH1cbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xuICAgICAgICBmKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXh0cmFCeXRlcykge1xuICAgICAgb2Zmc2V0ID0gaiA8PCAyO1xuICAgICAgYmxvY2sgPSBzW2ldO1xuICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XG4gICAgICB9XG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEttYWMoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykge1xuICAgIEtlY2Nhay5jYWxsKHRoaXMsIGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpO1xuICB9XG5cbiAgS21hYy5wcm90b3R5cGUgPSBuZXcgS2VjY2FrKCk7XG5cbiAgS21hYy5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbmNvZGUodGhpcy5vdXRwdXRCaXRzLCB0cnVlKTtcbiAgICByZXR1cm4gS2VjY2FrLnByb3RvdHlwZS5maW5hbGl6ZS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIHZhciBmID0gZnVuY3Rpb24gKHMpIHtcbiAgICB2YXIgaCwgbCwgbiwgYzAsIGMxLCBjMiwgYzMsIGM0LCBjNSwgYzYsIGM3LCBjOCwgYzksXG4gICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4LCBiOSwgYjEwLCBiMTEsIGIxMiwgYjEzLCBiMTQsIGIxNSwgYjE2LCBiMTcsXG4gICAgICBiMTgsIGIxOSwgYjIwLCBiMjEsIGIyMiwgYjIzLCBiMjQsIGIyNSwgYjI2LCBiMjcsIGIyOCwgYjI5LCBiMzAsIGIzMSwgYjMyLCBiMzMsXG4gICAgICBiMzQsIGIzNSwgYjM2LCBiMzcsIGIzOCwgYjM5LCBiNDAsIGI0MSwgYjQyLCBiNDMsIGI0NCwgYjQ1LCBiNDYsIGI0NywgYjQ4LCBiNDk7XG4gICAgZm9yIChuID0gMDsgbiA8IDQ4OyBuICs9IDIpIHtcbiAgICAgIGMwID0gc1swXSBeIHNbMTBdIF4gc1syMF0gXiBzWzMwXSBeIHNbNDBdO1xuICAgICAgYzEgPSBzWzFdIF4gc1sxMV0gXiBzWzIxXSBeIHNbMzFdIF4gc1s0MV07XG4gICAgICBjMiA9IHNbMl0gXiBzWzEyXSBeIHNbMjJdIF4gc1szMl0gXiBzWzQyXTtcbiAgICAgIGMzID0gc1szXSBeIHNbMTNdIF4gc1syM10gXiBzWzMzXSBeIHNbNDNdO1xuICAgICAgYzQgPSBzWzRdIF4gc1sxNF0gXiBzWzI0XSBeIHNbMzRdIF4gc1s0NF07XG4gICAgICBjNSA9IHNbNV0gXiBzWzE1XSBeIHNbMjVdIF4gc1szNV0gXiBzWzQ1XTtcbiAgICAgIGM2ID0gc1s2XSBeIHNbMTZdIF4gc1syNl0gXiBzWzM2XSBeIHNbNDZdO1xuICAgICAgYzcgPSBzWzddIF4gc1sxN10gXiBzWzI3XSBeIHNbMzddIF4gc1s0N107XG4gICAgICBjOCA9IHNbOF0gXiBzWzE4XSBeIHNbMjhdIF4gc1szOF0gXiBzWzQ4XTtcbiAgICAgIGM5ID0gc1s5XSBeIHNbMTldIF4gc1syOV0gXiBzWzM5XSBeIHNbNDldO1xuXG4gICAgICBoID0gYzggXiAoKGMyIDw8IDEpIHwgKGMzID4+PiAzMSkpO1xuICAgICAgbCA9IGM5IF4gKChjMyA8PCAxKSB8IChjMiA+Pj4gMzEpKTtcbiAgICAgIHNbMF0gXj0gaDtcbiAgICAgIHNbMV0gXj0gbDtcbiAgICAgIHNbMTBdIF49IGg7XG4gICAgICBzWzExXSBePSBsO1xuICAgICAgc1syMF0gXj0gaDtcbiAgICAgIHNbMjFdIF49IGw7XG4gICAgICBzWzMwXSBePSBoO1xuICAgICAgc1szMV0gXj0gbDtcbiAgICAgIHNbNDBdIF49IGg7XG4gICAgICBzWzQxXSBePSBsO1xuICAgICAgaCA9IGMwIF4gKChjNCA8PCAxKSB8IChjNSA+Pj4gMzEpKTtcbiAgICAgIGwgPSBjMSBeICgoYzUgPDwgMSkgfCAoYzQgPj4+IDMxKSk7XG4gICAgICBzWzJdIF49IGg7XG4gICAgICBzWzNdIF49IGw7XG4gICAgICBzWzEyXSBePSBoO1xuICAgICAgc1sxM10gXj0gbDtcbiAgICAgIHNbMjJdIF49IGg7XG4gICAgICBzWzIzXSBePSBsO1xuICAgICAgc1szMl0gXj0gaDtcbiAgICAgIHNbMzNdIF49IGw7XG4gICAgICBzWzQyXSBePSBoO1xuICAgICAgc1s0M10gXj0gbDtcbiAgICAgIGggPSBjMiBeICgoYzYgPDwgMSkgfCAoYzcgPj4+IDMxKSk7XG4gICAgICBsID0gYzMgXiAoKGM3IDw8IDEpIHwgKGM2ID4+PiAzMSkpO1xuICAgICAgc1s0XSBePSBoO1xuICAgICAgc1s1XSBePSBsO1xuICAgICAgc1sxNF0gXj0gaDtcbiAgICAgIHNbMTVdIF49IGw7XG4gICAgICBzWzI0XSBePSBoO1xuICAgICAgc1syNV0gXj0gbDtcbiAgICAgIHNbMzRdIF49IGg7XG4gICAgICBzWzM1XSBePSBsO1xuICAgICAgc1s0NF0gXj0gaDtcbiAgICAgIHNbNDVdIF49IGw7XG4gICAgICBoID0gYzQgXiAoKGM4IDw8IDEpIHwgKGM5ID4+PiAzMSkpO1xuICAgICAgbCA9IGM1IF4gKChjOSA8PCAxKSB8IChjOCA+Pj4gMzEpKTtcbiAgICAgIHNbNl0gXj0gaDtcbiAgICAgIHNbN10gXj0gbDtcbiAgICAgIHNbMTZdIF49IGg7XG4gICAgICBzWzE3XSBePSBsO1xuICAgICAgc1syNl0gXj0gaDtcbiAgICAgIHNbMjddIF49IGw7XG4gICAgICBzWzM2XSBePSBoO1xuICAgICAgc1szN10gXj0gbDtcbiAgICAgIHNbNDZdIF49IGg7XG4gICAgICBzWzQ3XSBePSBsO1xuICAgICAgaCA9IGM2IF4gKChjMCA8PCAxKSB8IChjMSA+Pj4gMzEpKTtcbiAgICAgIGwgPSBjNyBeICgoYzEgPDwgMSkgfCAoYzAgPj4+IDMxKSk7XG4gICAgICBzWzhdIF49IGg7XG4gICAgICBzWzldIF49IGw7XG4gICAgICBzWzE4XSBePSBoO1xuICAgICAgc1sxOV0gXj0gbDtcbiAgICAgIHNbMjhdIF49IGg7XG4gICAgICBzWzI5XSBePSBsO1xuICAgICAgc1szOF0gXj0gaDtcbiAgICAgIHNbMzldIF49IGw7XG4gICAgICBzWzQ4XSBePSBoO1xuICAgICAgc1s0OV0gXj0gbDtcblxuICAgICAgYjAgPSBzWzBdO1xuICAgICAgYjEgPSBzWzFdO1xuICAgICAgYjMyID0gKHNbMTFdIDw8IDQpIHwgKHNbMTBdID4+PiAyOCk7XG4gICAgICBiMzMgPSAoc1sxMF0gPDwgNCkgfCAoc1sxMV0gPj4+IDI4KTtcbiAgICAgIGIxNCA9IChzWzIwXSA8PCAzKSB8IChzWzIxXSA+Pj4gMjkpO1xuICAgICAgYjE1ID0gKHNbMjFdIDw8IDMpIHwgKHNbMjBdID4+PiAyOSk7XG4gICAgICBiNDYgPSAoc1szMV0gPDwgOSkgfCAoc1szMF0gPj4+IDIzKTtcbiAgICAgIGI0NyA9IChzWzMwXSA8PCA5KSB8IChzWzMxXSA+Pj4gMjMpO1xuICAgICAgYjI4ID0gKHNbNDBdIDw8IDE4KSB8IChzWzQxXSA+Pj4gMTQpO1xuICAgICAgYjI5ID0gKHNbNDFdIDw8IDE4KSB8IChzWzQwXSA+Pj4gMTQpO1xuICAgICAgYjIwID0gKHNbMl0gPDwgMSkgfCAoc1szXSA+Pj4gMzEpO1xuICAgICAgYjIxID0gKHNbM10gPDwgMSkgfCAoc1syXSA+Pj4gMzEpO1xuICAgICAgYjIgPSAoc1sxM10gPDwgMTIpIHwgKHNbMTJdID4+PiAyMCk7XG4gICAgICBiMyA9IChzWzEyXSA8PCAxMikgfCAoc1sxM10gPj4+IDIwKTtcbiAgICAgIGIzNCA9IChzWzIyXSA8PCAxMCkgfCAoc1syM10gPj4+IDIyKTtcbiAgICAgIGIzNSA9IChzWzIzXSA8PCAxMCkgfCAoc1syMl0gPj4+IDIyKTtcbiAgICAgIGIxNiA9IChzWzMzXSA8PCAxMykgfCAoc1szMl0gPj4+IDE5KTtcbiAgICAgIGIxNyA9IChzWzMyXSA8PCAxMykgfCAoc1szM10gPj4+IDE5KTtcbiAgICAgIGI0OCA9IChzWzQyXSA8PCAyKSB8IChzWzQzXSA+Pj4gMzApO1xuICAgICAgYjQ5ID0gKHNbNDNdIDw8IDIpIHwgKHNbNDJdID4+PiAzMCk7XG4gICAgICBiNDAgPSAoc1s1XSA8PCAzMCkgfCAoc1s0XSA+Pj4gMik7XG4gICAgICBiNDEgPSAoc1s0XSA8PCAzMCkgfCAoc1s1XSA+Pj4gMik7XG4gICAgICBiMjIgPSAoc1sxNF0gPDwgNikgfCAoc1sxNV0gPj4+IDI2KTtcbiAgICAgIGIyMyA9IChzWzE1XSA8PCA2KSB8IChzWzE0XSA+Pj4gMjYpO1xuICAgICAgYjQgPSAoc1syNV0gPDwgMTEpIHwgKHNbMjRdID4+PiAyMSk7XG4gICAgICBiNSA9IChzWzI0XSA8PCAxMSkgfCAoc1syNV0gPj4+IDIxKTtcbiAgICAgIGIzNiA9IChzWzM0XSA8PCAxNSkgfCAoc1szNV0gPj4+IDE3KTtcbiAgICAgIGIzNyA9IChzWzM1XSA8PCAxNSkgfCAoc1szNF0gPj4+IDE3KTtcbiAgICAgIGIxOCA9IChzWzQ1XSA8PCAyOSkgfCAoc1s0NF0gPj4+IDMpO1xuICAgICAgYjE5ID0gKHNbNDRdIDw8IDI5KSB8IChzWzQ1XSA+Pj4gMyk7XG4gICAgICBiMTAgPSAoc1s2XSA8PCAyOCkgfCAoc1s3XSA+Pj4gNCk7XG4gICAgICBiMTEgPSAoc1s3XSA8PCAyOCkgfCAoc1s2XSA+Pj4gNCk7XG4gICAgICBiNDIgPSAoc1sxN10gPDwgMjMpIHwgKHNbMTZdID4+PiA5KTtcbiAgICAgIGI0MyA9IChzWzE2XSA8PCAyMykgfCAoc1sxN10gPj4+IDkpO1xuICAgICAgYjI0ID0gKHNbMjZdIDw8IDI1KSB8IChzWzI3XSA+Pj4gNyk7XG4gICAgICBiMjUgPSAoc1syN10gPDwgMjUpIHwgKHNbMjZdID4+PiA3KTtcbiAgICAgIGI2ID0gKHNbMzZdIDw8IDIxKSB8IChzWzM3XSA+Pj4gMTEpO1xuICAgICAgYjcgPSAoc1szN10gPDwgMjEpIHwgKHNbMzZdID4+PiAxMSk7XG4gICAgICBiMzggPSAoc1s0N10gPDwgMjQpIHwgKHNbNDZdID4+PiA4KTtcbiAgICAgIGIzOSA9IChzWzQ2XSA8PCAyNCkgfCAoc1s0N10gPj4+IDgpO1xuICAgICAgYjMwID0gKHNbOF0gPDwgMjcpIHwgKHNbOV0gPj4+IDUpO1xuICAgICAgYjMxID0gKHNbOV0gPDwgMjcpIHwgKHNbOF0gPj4+IDUpO1xuICAgICAgYjEyID0gKHNbMThdIDw8IDIwKSB8IChzWzE5XSA+Pj4gMTIpO1xuICAgICAgYjEzID0gKHNbMTldIDw8IDIwKSB8IChzWzE4XSA+Pj4gMTIpO1xuICAgICAgYjQ0ID0gKHNbMjldIDw8IDcpIHwgKHNbMjhdID4+PiAyNSk7XG4gICAgICBiNDUgPSAoc1syOF0gPDwgNykgfCAoc1syOV0gPj4+IDI1KTtcbiAgICAgIGIyNiA9IChzWzM4XSA8PCA4KSB8IChzWzM5XSA+Pj4gMjQpO1xuICAgICAgYjI3ID0gKHNbMzldIDw8IDgpIHwgKHNbMzhdID4+PiAyNCk7XG4gICAgICBiOCA9IChzWzQ4XSA8PCAxNCkgfCAoc1s0OV0gPj4+IDE4KTtcbiAgICAgIGI5ID0gKHNbNDldIDw8IDE0KSB8IChzWzQ4XSA+Pj4gMTgpO1xuXG4gICAgICBzWzBdID0gYjAgXiAofmIyICYgYjQpO1xuICAgICAgc1sxXSA9IGIxIF4gKH5iMyAmIGI1KTtcbiAgICAgIHNbMTBdID0gYjEwIF4gKH5iMTIgJiBiMTQpO1xuICAgICAgc1sxMV0gPSBiMTEgXiAofmIxMyAmIGIxNSk7XG4gICAgICBzWzIwXSA9IGIyMCBeICh+YjIyICYgYjI0KTtcbiAgICAgIHNbMjFdID0gYjIxIF4gKH5iMjMgJiBiMjUpO1xuICAgICAgc1szMF0gPSBiMzAgXiAofmIzMiAmIGIzNCk7XG4gICAgICBzWzMxXSA9IGIzMSBeICh+YjMzICYgYjM1KTtcbiAgICAgIHNbNDBdID0gYjQwIF4gKH5iNDIgJiBiNDQpO1xuICAgICAgc1s0MV0gPSBiNDEgXiAofmI0MyAmIGI0NSk7XG4gICAgICBzWzJdID0gYjIgXiAofmI0ICYgYjYpO1xuICAgICAgc1szXSA9IGIzIF4gKH5iNSAmIGI3KTtcbiAgICAgIHNbMTJdID0gYjEyIF4gKH5iMTQgJiBiMTYpO1xuICAgICAgc1sxM10gPSBiMTMgXiAofmIxNSAmIGIxNyk7XG4gICAgICBzWzIyXSA9IGIyMiBeICh+YjI0ICYgYjI2KTtcbiAgICAgIHNbMjNdID0gYjIzIF4gKH5iMjUgJiBiMjcpO1xuICAgICAgc1szMl0gPSBiMzIgXiAofmIzNCAmIGIzNik7XG4gICAgICBzWzMzXSA9IGIzMyBeICh+YjM1ICYgYjM3KTtcbiAgICAgIHNbNDJdID0gYjQyIF4gKH5iNDQgJiBiNDYpO1xuICAgICAgc1s0M10gPSBiNDMgXiAofmI0NSAmIGI0Nyk7XG4gICAgICBzWzRdID0gYjQgXiAofmI2ICYgYjgpO1xuICAgICAgc1s1XSA9IGI1IF4gKH5iNyAmIGI5KTtcbiAgICAgIHNbMTRdID0gYjE0IF4gKH5iMTYgJiBiMTgpO1xuICAgICAgc1sxNV0gPSBiMTUgXiAofmIxNyAmIGIxOSk7XG4gICAgICBzWzI0XSA9IGIyNCBeICh+YjI2ICYgYjI4KTtcbiAgICAgIHNbMjVdID0gYjI1IF4gKH5iMjcgJiBiMjkpO1xuICAgICAgc1szNF0gPSBiMzQgXiAofmIzNiAmIGIzOCk7XG4gICAgICBzWzM1XSA9IGIzNSBeICh+YjM3ICYgYjM5KTtcbiAgICAgIHNbNDRdID0gYjQ0IF4gKH5iNDYgJiBiNDgpO1xuICAgICAgc1s0NV0gPSBiNDUgXiAofmI0NyAmIGI0OSk7XG4gICAgICBzWzZdID0gYjYgXiAofmI4ICYgYjApO1xuICAgICAgc1s3XSA9IGI3IF4gKH5iOSAmIGIxKTtcbiAgICAgIHNbMTZdID0gYjE2IF4gKH5iMTggJiBiMTApO1xuICAgICAgc1sxN10gPSBiMTcgXiAofmIxOSAmIGIxMSk7XG4gICAgICBzWzI2XSA9IGIyNiBeICh+YjI4ICYgYjIwKTtcbiAgICAgIHNbMjddID0gYjI3IF4gKH5iMjkgJiBiMjEpO1xuICAgICAgc1szNl0gPSBiMzYgXiAofmIzOCAmIGIzMCk7XG4gICAgICBzWzM3XSA9IGIzNyBeICh+YjM5ICYgYjMxKTtcbiAgICAgIHNbNDZdID0gYjQ2IF4gKH5iNDggJiBiNDApO1xuICAgICAgc1s0N10gPSBiNDcgXiAofmI0OSAmIGI0MSk7XG4gICAgICBzWzhdID0gYjggXiAofmIwICYgYjIpO1xuICAgICAgc1s5XSA9IGI5IF4gKH5iMSAmIGIzKTtcbiAgICAgIHNbMThdID0gYjE4IF4gKH5iMTAgJiBiMTIpO1xuICAgICAgc1sxOV0gPSBiMTkgXiAofmIxMSAmIGIxMyk7XG4gICAgICBzWzI4XSA9IGIyOCBeICh+YjIwICYgYjIyKTtcbiAgICAgIHNbMjldID0gYjI5IF4gKH5iMjEgJiBiMjMpO1xuICAgICAgc1szOF0gPSBiMzggXiAofmIzMCAmIGIzMik7XG4gICAgICBzWzM5XSA9IGIzOSBeICh+YjMxICYgYjMzKTtcbiAgICAgIHNbNDhdID0gYjQ4IF4gKH5iNDAgJiBiNDIpO1xuICAgICAgc1s0OV0gPSBiNDkgXiAofmI0MSAmIGI0Myk7XG5cbiAgICAgIHNbMF0gXj0gUkNbbl07XG4gICAgICBzWzFdIF49IFJDW24gKyAxXTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKENPTU1PTl9KUykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gbWV0aG9kcztcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbWV0aG9kTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHJvb3RbbWV0aG9kTmFtZXNbaV1dID0gbWV0aG9kc1ttZXRob2ROYW1lc1tpXV07XG4gICAgfVxuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBtZXRob2RzO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KSgpO1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMSAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLyogSW1wbGVtZW50YXRpb24gb2YgdGhpcyBwYXBlcjogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxOS85NTMucGRmIHNlY3Rpb24gOC40ICovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgemtleVV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIHd0bnNVdGlscyBmcm9tIFwiLi93dG5zX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIHV0aWxzLCBCaWdCdWZmZXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7c3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcbmltcG9ydCBqc1NoYTMgZnJvbSBcImpzLXNoYTNcIjtcbmNvbnN0IHsga2VjY2FrMjU2IH0gPSBqc1NoYTM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBsb25rMTZQcm92ZSh6a2V5RmlsZU5hbWUsIHdpdG5lc3NGaWxlTmFtZSwgbG9nZ2VyKSB7XG4gICAgY29uc3Qge2ZkOiBmZFd0bnMsIHNlY3Rpb25zOiBzZWN0aW9uc1d0bnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHdpdG5lc3NGaWxlTmFtZSwgXCJ3dG5zXCIsIDIsIDE8PDI1LCAxPDwyMyk7XG5cbiAgICBjb25zdCB3dG5zID0gYXdhaXQgd3Ruc1V0aWxzLnJlYWRIZWFkZXIoZmRXdG5zLCBzZWN0aW9uc1d0bnMpO1xuXG4gICAgY29uc3Qge2ZkOiBmZFpLZXksIHNlY3Rpb25zOiBzZWN0aW9uc1pLZXl9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHprZXlGaWxlTmFtZSwgXCJ6a2V5XCIsIDIsIDE8PDI1LCAxPDwyMyk7XG5cbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCBzZWN0aW9uc1pLZXkpO1xuICAgIGlmICh6a2V5LnByb3RvY29sICE9IFwicGxvbmtcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IHBsb25rXCIpO1xuICAgIH1cblxuICAgIGlmICghU2NhbGFyLmVxKHprZXkuciwgIHd0bnMucSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3VydmUgb2YgdGhlIHdpdG5lc3MgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnZlIG9mIHRoZSBwcm92aW5nIGtleVwiKTtcbiAgICB9XG5cbiAgICBpZiAod3Rucy5uV2l0bmVzcyAhPSB6a2V5Lm5WYXJzIC16a2V5Lm5BZGRpdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpdG5lc3MgbGVuZ3RoLiBDaXJjdWl0OiAke3prZXkublZhcnN9LCB3aXRuZXNzOiAke3d0bnMubldpdG5lc3N9LCAke3prZXkubkFkZGl0aW9uc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJ2ZSA9IHprZXkuY3VydmU7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IG44ciA9IGN1cnZlLkZyLm44O1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiUmVhZGluZyBXdG5zXCIpO1xuICAgIGNvbnN0IGJ1ZmZXaXRuZXNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkV3Rucywgc2VjdGlvbnNXdG5zLCAyKTtcbiAgICAvLyBGaXJzdCBlbGVtZW50IGluIHBsb25rIGlzIG5vdCB1c2VkIGFuZCBjYW4gYmUgYW55IHZhbHVlLiAoQnV0IGFsd2F5cyB0aGUgc2FtZSkuXG4gICAgLy8gV2Ugc2V0IGl0IHRvIHplcm8gdG8gZ28gZmFzdGVyIGluIHRoZSBleHBvbmVudGlhdGlvbnMuXG4gICAgYnVmZldpdG5lc3Muc2V0KEZyLnplcm8sIDApO1xuICAgIGNvbnN0IGJ1ZmZJbnRlcm5hbFdpdG5lc3MgPSBuZXcgQmlnQnVmZmVyKG44cip6a2V5Lm5BZGRpdGlvbnMpO1xuXG4gICAgYXdhaXQgY2FsY3VsYXRlQWRkaXRpb25zKCk7XG5cbiAgICBsZXQgQSxCLEMsWjtcbiAgICBsZXQgQTQsIEI0LCBDNCwgWjQ7XG4gICAgbGV0IHBvbF9hLHBvbF9iLHBvbF9jLCBwb2xfeiwgcG9sX3QsIHBvbF9yO1xuICAgIGxldCBwcm9vZiA9IHt9O1xuXG4gICAgY29uc3Qgc2lnbWFCdWZmID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUqbjhyKjQqMyk7XG4gICAgbGV0IG8gPSBzZWN0aW9uc1pLZXlbMTJdWzBdLnAgKyB6a2V5LmRvbWFpblNpemUqbjhyO1xuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoc2lnbWFCdWZmLCAwICwgemtleS5kb21haW5TaXplKm44cio0LCBvKTtcbiAgICBvICs9IHprZXkuZG9tYWluU2l6ZSpuOHIqNTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHNpZ21hQnVmZiwgemtleS5kb21haW5TaXplKm44cio0ICwgemtleS5kb21haW5TaXplKm44cio0LCBvKTtcbiAgICBvICs9IHprZXkuZG9tYWluU2l6ZSpuOHIqNTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHNpZ21hQnVmZiwgemtleS5kb21haW5TaXplKm44cio4ICwgemtleS5kb21haW5TaXplKm44cio0LCBvKTtcblxuICAgIGNvbnN0IHBvbF9zMSA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKm44cik7XG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2xfczEsIDAgLCB6a2V5LmRvbWFpblNpemUqbjhyLCBzZWN0aW9uc1pLZXlbMTJdWzBdLnApO1xuXG4gICAgY29uc3QgcG9sX3MyID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUqbjhyKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbF9zMiwgMCAsIHprZXkuZG9tYWluU2l6ZSpuOHIsIHNlY3Rpb25zWktleVsxMl1bMF0ucCArIDUqemtleS5kb21haW5TaXplKm44cik7XG5cbiAgICBjb25zdCBQVGF1ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCAxNCk7XG5cblxuICAgIGNvbnN0IGNoID0ge307XG5cbiAgICBhd2FpdCByb3VuZDEoKTtcbiAgICBhd2FpdCByb3VuZDIoKTtcbiAgICBhd2FpdCByb3VuZDMoKTtcbiAgICBhd2FpdCByb3VuZDQoKTtcbiAgICBhd2FpdCByb3VuZDUoKTtcblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaW5hbCBhZGp1c3RtZW50cyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBwcm9vZi5wcm90b2NvbCA9IFwicGxvbmtcIjtcbiAgICBwcm9vZi5jdXJ2ZSA9IGN1cnZlLm5hbWU7XG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcblxuICAgIGxldCBwdWJsaWNTaWduYWxzID0gW107XG5cbiAgICBmb3IgKGxldCBpPTE7IGk8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBjb25zdCBwdWIgPSBidWZmV2l0bmVzcy5zbGljZShpKkZyLm44LCBpKkZyLm44K0ZyLm44KTtcbiAgICAgICAgcHVibGljU2lnbmFscy5wdXNoKFNjYWxhci5mcm9tUnByTEUocHViKSk7XG4gICAgfVxuXG4gICAgcHJvb2YuQSA9IEcxLnRvT2JqZWN0KHByb29mLkEpO1xuICAgIHByb29mLkIgPSBHMS50b09iamVjdChwcm9vZi5CKTtcbiAgICBwcm9vZi5DID0gRzEudG9PYmplY3QocHJvb2YuQyk7XG4gICAgcHJvb2YuWiA9IEcxLnRvT2JqZWN0KHByb29mLlopO1xuXG4gICAgcHJvb2YuVDEgPSBHMS50b09iamVjdChwcm9vZi5UMSk7XG4gICAgcHJvb2YuVDIgPSBHMS50b09iamVjdChwcm9vZi5UMik7XG4gICAgcHJvb2YuVDMgPSBHMS50b09iamVjdChwcm9vZi5UMyk7XG5cbiAgICBwcm9vZi5ldmFsX2EgPSBGci50b09iamVjdChwcm9vZi5ldmFsX2EpO1xuICAgIHByb29mLmV2YWxfYiA9IEZyLnRvT2JqZWN0KHByb29mLmV2YWxfYik7XG4gICAgcHJvb2YuZXZhbF9jID0gRnIudG9PYmplY3QocHJvb2YuZXZhbF9jKTtcbiAgICBwcm9vZi5ldmFsX3MxID0gRnIudG9PYmplY3QocHJvb2YuZXZhbF9zMSk7XG4gICAgcHJvb2YuZXZhbF9zMiA9IEZyLnRvT2JqZWN0KHByb29mLmV2YWxfczIpO1xuICAgIHByb29mLmV2YWxfencgPSBGci50b09iamVjdChwcm9vZi5ldmFsX3p3KTtcbiAgICBwcm9vZi5ldmFsX3QgPSBGci50b09iamVjdChwcm9vZi5ldmFsX3QpO1xuICAgIHByb29mLmV2YWxfciA9IEZyLnRvT2JqZWN0KHByb29mLmV2YWxfcik7XG5cbiAgICBwcm9vZi5XeGkgPSBHMS50b09iamVjdChwcm9vZi5XeGkpO1xuICAgIHByb29mLld4aXcgPSBHMS50b09iamVjdChwcm9vZi5XeGl3KTtcblxuICAgIGRlbGV0ZSBwcm9vZi5ldmFsX3Q7XG5cbiAgICBwcm9vZiA9IHN0cmluZ2lmeUJpZ0ludHMocHJvb2YpO1xuICAgIHB1YmxpY1NpZ25hbHMgPSBzdHJpbmdpZnlCaWdJbnRzKHB1YmxpY1NpZ25hbHMpO1xuXG4gICAgcmV0dXJuIHtwcm9vZiwgcHVibGljU2lnbmFsc307XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVBZGRpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uc0J1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDMpO1xuXG4gICAgICAgIGNvbnN0IHNTdW0gPSA4K2N1cnZlLkZyLm44KjI7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHprZXkubkFkZGl0aW9uczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhaT0gcmVhZFVJbnQzMihhZGRpdGlvbnNCdWZmLCBpKnNTdW0pO1xuICAgICAgICAgICAgY29uc3QgYmk9IHJlYWRVSW50MzIoYWRkaXRpb25zQnVmZiwgaSpzU3VtKzQpO1xuICAgICAgICAgICAgY29uc3QgYWM9IGFkZGl0aW9uc0J1ZmYuc2xpY2UoaSpzU3VtKzgsIGkqc1N1bSs4K244cik7XG4gICAgICAgICAgICBjb25zdCBiYz0gYWRkaXRpb25zQnVmZi5zbGljZShpKnNTdW0rOCtuOHIsIGkqc1N1bSs4K244cioyKTtcbiAgICAgICAgICAgIGNvbnN0IGF3PSBnZXRXaXRuZXNzKGFpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ3PSBnZXRXaXRuZXNzKGJpKTtcblxuICAgICAgICAgICAgY29uc3QgciA9IGN1cnZlLkZyLmFkZChcbiAgICAgICAgICAgICAgICBjdXJ2ZS5Gci5tdWwoYWMsIGF3KSxcbiAgICAgICAgICAgICAgICBjdXJ2ZS5Gci5tdWwoYmMsIGJ3KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJ1ZmZJbnRlcm5hbFdpdG5lc3Muc2V0KHIsIG44cippKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRBQkMoKSB7XG4gICAgICAgIGxldCBBID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUgKiBuOHIpO1xuICAgICAgICBsZXQgQiA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogbjhyKTtcbiAgICAgICAgbGV0IEMgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIG44cik7XG5cbiAgICAgICAgY29uc3QgYU1hcCA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNCk7XG4gICAgICAgIGNvbnN0IGJNYXAgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDUpO1xuICAgICAgICBjb25zdCBjTWFwID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA2KTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uQ29uc3RyYWluczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpQSA9IHJlYWRVSW50MzIoYU1hcCwgaSo0KTtcbiAgICAgICAgICAgIEEuc2V0KGdldFdpdG5lc3MoaUEpLCBpKm44cik7XG4gICAgICAgICAgICBjb25zdCBpQiA9IHJlYWRVSW50MzIoYk1hcCwgaSo0KTtcbiAgICAgICAgICAgIEIuc2V0KGdldFdpdG5lc3MoaUIpLCBpKm44cik7XG4gICAgICAgICAgICBjb25zdCBpQyA9IHJlYWRVSW50MzIoY01hcCwgaSo0KTtcbiAgICAgICAgICAgIEMuc2V0KGdldFdpdG5lc3MoaUMpLCBpKm44cik7XG4gICAgICAgIH1cblxuICAgICAgICBBID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoQSk7XG4gICAgICAgIEIgPSBhd2FpdCBGci5iYXRjaFRvTW9udGdvbWVyeShCKTtcbiAgICAgICAgQyA9IGF3YWl0IEZyLmJhdGNoVG9Nb250Z29tZXJ5KEMpO1xuXG4gICAgICAgIHJldHVybiBbQSxCLENdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRVSW50MzIoYiwgbykge1xuICAgICAgICBjb25zdCBidWZmID0gYi5zbGljZShvLCBvKzQpO1xuICAgICAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0LCBidWZmLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gYnVmZlYuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdpdG5lc3MoaWR4KSB7XG4gICAgICAgIGlmIChpZHggPCB6a2V5Lm5WYXJzLXprZXkubkFkZGl0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZXaXRuZXNzLnNsaWNlKGlkeCpuOHIsIGlkeCpuOHIrbjhyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZHggPCB6a2V5Lm5WYXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZkludGVybmFsV2l0bmVzcy5zbGljZSgoaWR4IC0gKHprZXkublZhcnMtemtleS5uQWRkaXRpb25zKSkqbjhyLCAoaWR4LSh6a2V5Lm5WYXJzLXprZXkubkFkZGl0aW9ucykpKm44ciArIG44cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3VydmUuRnIuemVybztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kMSgpIHtcbiAgICAgICAgY2guYiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8PTExOyBpKyspIHtcbiAgICAgICAgICAgIGNoLmJbaV0gPSBjdXJ2ZS5Gci5yYW5kb20oKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBbQSwgQiwgQ10gPSBhd2FpdCBidWlsZEFCQygpO1xuXG4gICAgICAgIFtwb2xfYSwgQTRdID0gYXdhaXQgdG80VChBLCBbY2guYlsyXSwgY2guYlsxXV0pO1xuICAgICAgICBbcG9sX2IsIEI0XSA9IGF3YWl0IHRvNFQoQiwgW2NoLmJbNF0sIGNoLmJbM11dKTtcbiAgICAgICAgW3BvbF9jLCBDNF0gPSBhd2FpdCB0bzRUKEMsIFtjaC5iWzZdLCBjaC5iWzVdXSk7XG5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgcHJvb2YuQSA9IGF3YWl0IGV4cFRhdShwb2xfYSwgXCJtdWx0aWV4cCBBXCIpO1xuICAgICAgICBwcm9vZi5CID0gYXdhaXQgZXhwVGF1KHBvbF9iLCBcIm11bHRpZXhwIEJcIik7XG4gICAgICAgIHByb29mLkMgPSBhd2FpdCBleHBUYXUocG9sX2MsIFwibXVsdGlleHAgQ1wiKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDIoKSB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdDEgPSBuZXcgVWludDhBcnJheSh6a2V5Lm5QdWJsaWMqbjhyICsgRzEuRi5uOCoyKjMpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uUHVibGljOyBpKyspIHtcbiAgICAgICAgICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDEsIGkqbjhyLCBBLnNsaWNlKChpKSpuOHIsIChpKzEpKm44cikpO1xuICAgICAgICB9XG4gICAgICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHRyYW5zY3JpcHQxLCB6a2V5Lm5QdWJsaWMqbjhyICsgMCwgcHJvb2YuQSk7XG4gICAgICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHRyYW5zY3JpcHQxLCB6a2V5Lm5QdWJsaWMqbjhyICsgRzEuRi5uOCoyLCBwcm9vZi5CKTtcbiAgICAgICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDEsIHprZXkublB1YmxpYypuOHIgKyBHMS5GLm44KjQsIHByb29mLkMpO1xuXG4gICAgICAgIGNoLmJldGEgPSBoYXNoVG9Gcih0cmFuc2NyaXB0MSk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcImJldGE6IFwiICsgRnIudG9TdHJpbmcoY2guYmV0YSkpO1xuICAgIFxuICAgICAgICBjb25zdCB0cmFuc2NyaXB0MiA9IG5ldyBVaW50OEFycmF5KG44cik7XG4gICAgICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDIsIDAsIGNoLmJldGEpO1xuICAgICAgICBjaC5nYW1tYSA9IGhhc2hUb0ZyKHRyYW5zY3JpcHQyKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiZ2FtbWE6IFwiICsgRnIudG9TdHJpbmcoY2guZ2FtbWEpKTtcbiAgICBcbiAgICAgICAgbGV0IG51bUFyciA9IG5ldyBCaWdCdWZmZXIoRnIubjgqemtleS5kb21haW5TaXplKTtcbiAgICAgICAgbGV0IGRlbkFyciA9IG5ldyBCaWdCdWZmZXIoRnIubjgqemtleS5kb21haW5TaXplKTtcblxuICAgICAgICBudW1BcnIuc2V0KEZyLm9uZSwgMCk7XG4gICAgICAgIGRlbkFyci5zZXQoRnIub25lLCAwKTtcblxuICAgICAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbjEgPSBBLnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpO1xuICAgICAgICAgICAgbjEgPSBGci5hZGQoIG4xLCBGci5tdWwoY2guYmV0YSwgdykgKTtcbiAgICAgICAgICAgIG4xID0gRnIuYWRkKCBuMSwgY2guZ2FtbWEgKTtcblxuICAgICAgICAgICAgbGV0IG4yID0gQi5zbGljZShpKm44ciwgKGkrMSkqbjhyKTtcbiAgICAgICAgICAgIG4yID0gRnIuYWRkKCBuMiwgRnIubXVsKHprZXkuazEsIEZyLm11bChjaC5iZXRhLCB3KSApKTtcbiAgICAgICAgICAgIG4yID0gRnIuYWRkKCBuMiwgY2guZ2FtbWEgKTtcblxuICAgICAgICAgICAgbGV0IG4zID0gQy5zbGljZShpKm44ciwgKGkrMSkqbjhyKTtcbiAgICAgICAgICAgIG4zID0gRnIuYWRkKCBuMywgRnIubXVsKHprZXkuazIsIEZyLm11bChjaC5iZXRhLCB3KSApKTtcbiAgICAgICAgICAgIG4zID0gRnIuYWRkKCBuMywgY2guZ2FtbWEgKTtcblxuICAgICAgICAgICAgY29uc3QgbnVtID0gRnIubXVsKG4xLCBGci5tdWwobjIsIG4zKSk7XG5cbiAgICAgICAgICAgIGxldCBkMSA9IEEuc2xpY2UoaSpuOHIsIChpKzEpKm44cik7XG4gICAgICAgICAgICBkMSA9IEZyLmFkZChkMSwgRnIubXVsKCBzaWdtYUJ1ZmYuc2xpY2UoaSpuOHIqNCwgaSpuOHIqNCArIG44cikgLCBjaC5iZXRhKSk7XG4gICAgICAgICAgICBkMSA9IEZyLmFkZChkMSwgY2guZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZDIgPSBCLnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpO1xuICAgICAgICAgICAgZDIgPSBGci5hZGQoZDIsIEZyLm11bCggc2lnbWFCdWZmLnNsaWNlKCh6a2V5LmRvbWFpblNpemUgKyBpKSo0Km44ciwgKHprZXkuZG9tYWluU2l6ZSArIGkpKjQqbjhyK244cikgLCBjaC5iZXRhKSk7XG4gICAgICAgICAgICBkMiA9IEZyLmFkZChkMiwgY2guZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZDMgPSBDLnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpO1xuICAgICAgICAgICAgZDMgPSBGci5hZGQoZDMsIEZyLm11bCggc2lnbWFCdWZmLnNsaWNlKCh6a2V5LmRvbWFpblNpemUqMiArIGkpKjQqbjhyLCAoemtleS5kb21haW5TaXplKjIgKyBpKSo0Km44ciArIG44cikgLCBjaC5iZXRhKSk7XG4gICAgICAgICAgICBkMyA9IEZyLmFkZChkMywgY2guZ2FtbWEpO1xuXG4gICAgICAgICAgICBjb25zdCBkZW4gPSBGci5tdWwoZDEsIEZyLm11bChkMiwgZDMpKTtcblxuICAgICAgICAgICAgbnVtQXJyLnNldCggIFxuICAgICAgICAgICAgICAgIEZyLm11bCggXG4gICAgICAgICAgICAgICAgICAgIG51bUFyci5zbGljZShpKm44ciwoaSsxKSpuOHIpICwgXG4gICAgICAgICAgICAgICAgICAgIG51bVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKChpKzEpJXprZXkuZG9tYWluU2l6ZSkqbjhyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkZW5BcnIuc2V0KCAgXG4gICAgICAgICAgICAgICAgRnIubXVsKCBcbiAgICAgICAgICAgICAgICAgICAgZGVuQXJyLnNsaWNlKGkqbjhyLChpKzEpKm44cikgLCBcbiAgICAgICAgICAgICAgICAgICAgZGVuXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoKGkrMSklemtleS5kb21haW5TaXplKSpuOHJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZW5BcnIgPSBhd2FpdCBGci5iYXRjaEludmVyc2UoZGVuQXJyKTtcblxuICAgICAgICAvLyBUT0RPOiBEbyBpdCBpbiBhc3NlbWJseSBhbmQgaW4gcGFyYWxsZWxcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBudW1BcnIuc2V0KCAgIEZyLm11bCggbnVtQXJyLnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpLCBkZW5BcnIuc2xpY2UoaSpuOHIsIChpKzEpKm44cikgKSAgICAgICxpKm44cik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUZyLmVxKG51bUFyci5zbGljZSgwLCBuOHIpLCBGci5vbmUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3B5IGNvbnN0cmFpbnRzIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgWiA9IG51bUFycjtcblxuICAgICAgICBbcG9sX3osIFo0XSA9IGF3YWl0IHRvNFQoWiwgW2NoLmJbOV0sIGNoLmJbOF0sIGNoLmJbN11dKTtcblxuICAgICAgICBwcm9vZi5aID0gYXdhaXQgZXhwVGF1KCBwb2xfeiwgXCJtdWx0aWV4cCBaXCIpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kMygpIHtcblxuICAgICAgICAvKlxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjaGVja0RlZ3JlZShQKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gYXdhaXQgY3VydmUuRnIuaWZmdChQKTtcbiAgICAgICAgICAgIGxldCBkZWcgPSAoUC5ieXRlTGVuZ3RoL244ciktMTtcbiAgICAgICAgICAgIHdoaWxlICgoZGVnPjApJiYoRnIuaXNaZXJvKHAuc2xpY2UoZGVnKm44ciwgZGVnKm44cituOHIpKSkpIGRlZy0tO1xuICAgICAgICAgICAgcmV0dXJuIGRlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByaW50UG9sKFApIHtcbiAgICAgICAgICAgIGNvbnN0IG49KFAuYnl0ZUxlbmd0aC9uOHIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbXCIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG47IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEZyLnRvU3RyaW5nKFAuc2xpY2UoaSpuOHIsIGkqbjhyK244cikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXVwiKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcInBoc2UzOiBSZWFkaW5nIFFNNFwiKTsgICAgXG4gICAgICAgIGNvbnN0IFFNNCA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKjQqbjhyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihRTTQsIDAgLCB6a2V5LmRvbWFpblNpemUqbjhyKjQsIHNlY3Rpb25zWktleVs3XVswXS5wICsgemtleS5kb21haW5TaXplKm44cik7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwicGhzZTM6IFJlYWRpbmcgUUw0XCIpOyAgICBcbiAgICAgICAgY29uc3QgUUw0ID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUqNCpuOHIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKFFMNCwgMCAsIHprZXkuZG9tYWluU2l6ZSpuOHIqNCwgc2VjdGlvbnNaS2V5WzhdWzBdLnAgKyB6a2V5LmRvbWFpblNpemUqbjhyKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJwaHNlMzogUmVhZGluZyBRUjRcIik7ICAgIFxuICAgICAgICBjb25zdCBRUjQgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSo0Km44cik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoUVI0LCAwICwgemtleS5kb21haW5TaXplKm44cio0LCBzZWN0aW9uc1pLZXlbOV1bMF0ucCArIHprZXkuZG9tYWluU2l6ZSpuOHIpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcInBoc2UzOiBSZWFkaW5nIFFPNFwiKTsgICAgXG4gICAgICAgIGNvbnN0IFFPNCA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKjQqbjhyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihRTzQsIDAgLCB6a2V5LmRvbWFpblNpemUqbjhyKjQsIHNlY3Rpb25zWktleVsxMF1bMF0ucCArIHprZXkuZG9tYWluU2l6ZSpuOHIpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcInBoc2UzOiBSZWFkaW5nIFFDNFwiKTsgICAgXG4gICAgICAgIGNvbnN0IFFDNCA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKjQqbjhyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihRQzQsIDAgLCB6a2V5LmRvbWFpblNpemUqbjhyKjQsIHNlY3Rpb25zWktleVsxMV1bMF0ucCArIHprZXkuZG9tYWluU2l6ZSpuOHIpO1xuXG4gICAgICAgIGNvbnN0IGxQb2xzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCAxMyk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdDMgPSBuZXcgVWludDhBcnJheShHMS5GLm44KjIpO1xuICAgICAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0MywgMCwgcHJvb2YuWik7XG5cbiAgICAgICAgY2guYWxwaGEgPSBoYXNoVG9Gcih0cmFuc2NyaXB0Myk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiYWxwaGE6IFwiICsgRnIudG9TdHJpbmcoY2guYWxwaGEpKTsgICAgXG5cblxuICAgICAgICBjb25zdCBaMSA9IFtcbiAgICAgICAgICAgIEZyLnplcm8sXG4gICAgICAgICAgICBGci5hZGQoRnIuZSgtMSksIEZyLndbMl0pLFxuICAgICAgICAgICAgRnIuZSgtMiksXG4gICAgICAgICAgICBGci5zdWIoRnIuZSgtMSksIEZyLndbMl0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IFoyID0gW1xuICAgICAgICAgICAgRnIuemVybyxcbiAgICAgICAgICAgIEZyLmFkZChGci56ZXJvLCBGci5tdWwoRnIuZSgtMiksIEZyLndbMl0pKSxcbiAgICAgICAgICAgIEZyLmUoNCksXG4gICAgICAgICAgICBGci5zdWIoRnIuemVybywgRnIubXVsKEZyLmUoLTIpLCBGci53WzJdKSksXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgWjMgPSBbXG4gICAgICAgICAgICBGci56ZXJvLFxuICAgICAgICAgICAgRnIuYWRkKEZyLmUoMiksIEZyLm11bChGci5lKDIpLCBGci53WzJdKSksXG4gICAgICAgICAgICBGci5lKC04KSxcbiAgICAgICAgICAgIEZyLnN1YihGci5lKDIpLCBGci5tdWwoRnIuZSgyKSwgRnIud1syXSkpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IFQgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSo0Km44cik7XG4gICAgICAgIGNvbnN0IFR6ID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUqNCpuOHIpO1xuXG4gICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplKjQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKChpJTQwOTYgPT0gMCkmJihsb2dnZXIpKSBsb2dnZXIuZGVidWcoYGNhbGN1bGF0aW5nIHQgJHtpfS8ke3prZXkuZG9tYWluU2l6ZSo0fWApO1xuXG4gICAgICAgICAgICBjb25zdCBhID0gQTQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCBiID0gQjQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCBjID0gQzQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCB6ID0gWjQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCB6dyA9IFo0LnNsaWNlKCgoaSt6a2V5LmRvbWFpblNpemUqNCs0KSUoemtleS5kb21haW5TaXplKjQpKSAqbjhyLCAoKGkremtleS5kb21haW5TaXplKjQrNCklKHprZXkuZG9tYWluU2l6ZSo0KSkgKm44ciArbjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHFtID0gUU00LnNsaWNlKGkqbjhyLCBpKm44cituOHIpO1xuICAgICAgICAgICAgY29uc3QgcWwgPSBRTDQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCBxciA9IFFSNC5zbGljZShpKm44ciwgaSpuOHIrbjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHFvID0gUU80LnNsaWNlKGkqbjhyLCBpKm44cituOHIpO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBRQzQuc2xpY2UoaSpuOHIsIGkqbjhyK244cik7XG4gICAgICAgICAgICBjb25zdCBzMSA9IHNpZ21hQnVmZi5zbGljZShpKm44ciwgaSpuOHIrbjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHMyID0gc2lnbWFCdWZmLnNsaWNlKChpK3prZXkuZG9tYWluU2l6ZSo0KSpuOHIsIChpK3prZXkuZG9tYWluU2l6ZSo0KSpuOHIrbjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHMzID0gc2lnbWFCdWZmLnNsaWNlKChpK3prZXkuZG9tYWluU2l6ZSo4KSpuOHIsIChpK3prZXkuZG9tYWluU2l6ZSo4KSpuOHIrbjhyKTtcbiAgICAgICAgICAgIGNvbnN0IGFwID0gRnIuYWRkKGNoLmJbMl0sIEZyLm11bChjaC5iWzFdLCB3KSk7XG4gICAgICAgICAgICBjb25zdCBicCA9IEZyLmFkZChjaC5iWzRdLCBGci5tdWwoY2guYlszXSwgdykpO1xuICAgICAgICAgICAgY29uc3QgY3AgPSBGci5hZGQoY2guYls2XSwgRnIubXVsKGNoLmJbNV0sIHcpKTtcbiAgICAgICAgICAgIGNvbnN0IHcyID0gRnIuc3F1YXJlKHcpO1xuICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaC5iWzddLCB3MiksIEZyLm11bChjaC5iWzhdLCB3KSksIGNoLmJbOV0pO1xuICAgICAgICAgICAgY29uc3Qgd1cgPSBGci5tdWwodywgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgICAgICBjb25zdCB3VzIgPSBGci5zcXVhcmUod1cpO1xuICAgICAgICAgICAgY29uc3QgeldwID0gRnIuYWRkKEZyLmFkZChGci5tdWwoY2guYls3XSwgd1cyKSwgRnIubXVsKGNoLmJbOF0sIHdXKSksIGNoLmJbOV0pO1xuXG4gICAgICAgICAgICBsZXQgcGwgPSBGci56ZXJvO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHprZXkublB1YmxpYzsgaisrKSB7XG4gICAgICAgICAgICAgICAgcGwgPSBGci5zdWIocGwsIEZyLm11bCggXG4gICAgICAgICAgICAgICAgICAgIGxQb2xzLnNsaWNlKCAoaio1KnprZXkuZG9tYWluU2l6ZSsgemtleS5kb21haW5TaXplKyBpKSpuOHIsIChqKjUqemtleS5kb21haW5TaXplKyB6a2V5LmRvbWFpblNpemUgKyBpKzEpKm44ciksXG4gICAgICAgICAgICAgICAgICAgIEEuc2xpY2UoaipuOHIsIChqKzEpKm44cilcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IFtlMSwgZTF6XSA9IG11bDIoYSwgYiwgYXAsIGJwLCBpJTQpO1xuICAgICAgICAgICAgZTEgPSBGci5tdWwoZTEsIHFtKTtcbiAgICAgICAgICAgIGUxeiA9IEZyLm11bChlMXosIHFtKTtcblxuICAgICAgICAgICAgZTEgPSBGci5hZGQoZTEsIEZyLm11bChhLCBxbCkpO1xuICAgICAgICAgICAgZTF6ID0gRnIuYWRkKGUxeiwgRnIubXVsKGFwLCBxbCkpO1xuXG4gICAgICAgICAgICBlMSA9IEZyLmFkZChlMSwgRnIubXVsKGIsIHFyKSk7XG4gICAgICAgICAgICBlMXogPSBGci5hZGQoZTF6LCBGci5tdWwoYnAsIHFyKSk7XG5cbiAgICAgICAgICAgIGUxID0gRnIuYWRkKGUxLCBGci5tdWwoYywgcW8pKTtcbiAgICAgICAgICAgIGUxeiA9IEZyLmFkZChlMXosIEZyLm11bChjcCwgcW8pKTtcblxuICAgICAgICAgICAgZTEgPSBGci5hZGQoZTEsIHBsKTtcbiAgICAgICAgICAgIGUxID0gRnIuYWRkKGUxLCBxYyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJldGF3ID0gRnIubXVsKGNoLmJldGEsIHcpO1xuICAgICAgICAgICAgbGV0IGUyYSA9YTtcbiAgICAgICAgICAgIGUyYSA9IEZyLmFkZChlMmEsIGJldGF3KTtcbiAgICAgICAgICAgIGUyYSA9IEZyLmFkZChlMmEsIGNoLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IGUyYiA9YjtcbiAgICAgICAgICAgIGUyYiA9IEZyLmFkZChlMmIsIEZyLm11bChiZXRhdywgemtleS5rMSkpO1xuICAgICAgICAgICAgZTJiID0gRnIuYWRkKGUyYiwgY2guZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZTJjID1jO1xuICAgICAgICAgICAgZTJjID0gRnIuYWRkKGUyYywgRnIubXVsKGJldGF3LCB6a2V5LmsyKSk7XG4gICAgICAgICAgICBlMmMgPSBGci5hZGQoZTJjLCBjaC5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBlMmQgPSB6O1xuXG4gICAgICAgICAgICBsZXQgW2UyLCBlMnpdID0gbXVsNChlMmEsIGUyYiwgZTJjLCBlMmQsIGFwLCBicCwgY3AsIHpwLCBpJTQpO1xuICAgICAgICAgICAgZTIgPSBGci5tdWwoZTIsIGNoLmFscGhhKTtcbiAgICAgICAgICAgIGUyeiA9IEZyLm11bChlMnosIGNoLmFscGhhKTtcblxuICAgICAgICAgICAgbGV0IGUzYSA9IGE7XG4gICAgICAgICAgICBlM2EgPSBGci5hZGQoZTNhLCBGci5tdWwoY2guYmV0YSwgczEpKTtcbiAgICAgICAgICAgIGUzYSA9IEZyLmFkZChlM2EsIGNoLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IGUzYiA9IGI7XG4gICAgICAgICAgICBlM2IgPSBGci5hZGQoZTNiLCBGci5tdWwoY2guYmV0YSxzMikpO1xuICAgICAgICAgICAgZTNiID0gRnIuYWRkKGUzYiwgY2guZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZTNjID0gYztcbiAgICAgICAgICAgIGUzYyA9IEZyLmFkZChlM2MsIEZyLm11bChjaC5iZXRhLHMzKSk7XG4gICAgICAgICAgICBlM2MgPSBGci5hZGQoZTNjLCBjaC5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBlM2QgPSB6dztcbiAgICAgICAgICAgIGxldCBbZTMsIGUzel0gPSBtdWw0KGUzYSwgZTNiLCBlM2MsIGUzZCwgYXAsIGJwLCBjcCwgeldwLCBpJTQpO1xuXG4gICAgICAgICAgICBlMyA9IEZyLm11bChlMywgY2guYWxwaGEpO1xuICAgICAgICAgICAgZTN6ID0gRnIubXVsKGUzeiwgY2guYWxwaGEpO1xuXG4gICAgICAgICAgICBsZXQgZTQgPSBGci5zdWIoeiwgRnIub25lKTtcbiAgICAgICAgICAgIGU0ID0gRnIubXVsKGU0LCBsUG9scy5zbGljZSggKHprZXkuZG9tYWluU2l6ZSArIGkpKm44ciwgKHprZXkuZG9tYWluU2l6ZStpKzEpKm44cikpO1xuICAgICAgICAgICAgZTQgPSBGci5tdWwoZTQsIEZyLm11bChjaC5hbHBoYSwgY2guYWxwaGEpKTtcblxuICAgICAgICAgICAgbGV0IGU0eiA9IEZyLm11bCh6cCwgbFBvbHMuc2xpY2UoICh6a2V5LmRvbWFpblNpemUgKyBpKSpuOHIsICh6a2V5LmRvbWFpblNpemUraSsxKSpuOHIpKTtcbiAgICAgICAgICAgIGU0eiA9IEZyLm11bChlNHosIEZyLm11bChjaC5hbHBoYSwgY2guYWxwaGEpKTtcblxuICAgICAgICAgICAgbGV0IGUgPSBGci5hZGQoRnIuc3ViKEZyLmFkZChlMSwgZTIpLCBlMyksIGU0KTtcbiAgICAgICAgICAgIGxldCBleiA9IEZyLmFkZChGci5zdWIoRnIuYWRkKGUxeiwgZTJ6KSwgZTN6KSwgZTR6KTtcblxuICAgICAgICAgICAgVC5zZXQoZSwgaSpuOHIpO1xuICAgICAgICAgICAgVHouc2V0KGV6LCBpKm44cik7XG5cbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1t6a2V5LnBvd2VyKzJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcImlmZnQgVFwiKTsgICAgXG4gICAgICAgIGxldCB0ID0gYXdhaXQgRnIuaWZmdChUKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJkaXZpZGluZyBUL1pcIik7ICAgIFxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgIHQuc2V0KEZyLm5lZyh0LnNsaWNlKGkqbjhyLCBpKm44cituOHIpKSwgaSpuOHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaT16a2V5LmRvbWFpblNpemU7IGk8emtleS5kb21haW5TaXplKjQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IEZyLnN1YihcbiAgICAgICAgICAgICAgICB0LnNsaWNlKChpLXprZXkuZG9tYWluU2l6ZSkqbjhyLCAoaS16a2V5LmRvbWFpblNpemUpKm44ciArIG44ciksXG4gICAgICAgICAgICAgICAgdC5zbGljZShpKm44ciwgaSpuOHIrbjhyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHQuc2V0KGEsIGkqbjhyKTtcbiAgICAgICAgICAgIGlmIChpID4gKHprZXkuZG9tYWluU2l6ZSozIC00KSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIUZyLmlzWmVybyhhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUIFBvbHlub21pYWwgaXMgbm90IGRpdmlzaWJsZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJpZmZ0IFR6XCIpOyAgICBcbiAgICAgICAgY29uc3QgdHogPSBhd2FpdCBGci5pZmZ0KFR6KTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHprZXkuZG9tYWluU2l6ZSo0OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSB0ei5zbGljZShpKm44ciwgKGkrMSkqbjhyKTtcbiAgICAgICAgICAgIGlmIChpID4gKHprZXkuZG9tYWluU2l6ZSozICs1KSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIUZyLmlzWmVybyhhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeiBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0LnNldCggIFxuICAgICAgICAgICAgICAgICAgICBGci5hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0LnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBpKm44clxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwb2xfdCA9IHQuc2xpY2UoMCwgKHprZXkuZG9tYWluU2l6ZSAqIDMgKyA2KSAqIG44cik7XG5cbiAgICAgICAgLy8gdCh4KSBoYXMgZGVncmVlIDNuICsgNSwgd2UgYXJlIGdvaW5nIHRvIHNwbGl0IHQoeCkgaW50byB0aHJlZSBzbWFsbGVyIHBvbHlub21pYWxzOlxuICAgICAgICAvLyB0J19sb3cgYW5kIHQnX21pZCAgd2l0aCBhIGRlZ3JlZSA8IG4gYW5kIHQnX2hpZ2ggd2l0aCBhIGRlZ3JlZSBuKzVcbiAgICAgICAgLy8gc3VjaCB0aGF0IHQoeCkgPSB0J19sb3coWCkgKyBYXm4gdCdfbWlkKFgpICsgWF57Mm59IHQnX2hpKFgpXG4gICAgICAgIC8vIFRvIHJhbmRvbWl6ZSB0aGUgcGFydHMgd2UgdXNlIGJsaW5kaW5nIHNjYWxhcnMgYl8xMCBhbmQgYl8xMSBpbiBhIHdheSB0aGF0IGRvZXNuJ3QgY2hhbmdlIHQoWCk6XG4gICAgICAgIC8vIHRfbG93KFgpID0gdCdfbG93KFgpICsgYl8xMCBYXm5cbiAgICAgICAgLy8gdF9taWQoWCkgPSB0J19taWQoWCkgLSBiXzEwICsgYl8xMSBYXm5cbiAgICAgICAgLy8gdF9oaWdoKFgpID0gdCdfaGlnaChYKSAtIGJfMTFcbiAgICAgICAgLy8gc3VjaCB0aGF0XG4gICAgICAgIC8vIHQoWCkgPSB0X2xvdyhYKSArIFhebiB0X21pZChYKSArIFheMm4gdF9oaWdoKFgpXG5cbiAgICAgICAgLy8gY29tcHV0ZSB0X2xvdyhYKVxuICAgICAgICBsZXQgcG9sVExvdyA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDEpICogbjhyKTtcbiAgICAgICAgcG9sVExvdy5zZXQodC5zbGljZSgwLCB6a2V5LmRvbWFpblNpemUgKiBuOHIpLCAwKTtcbiAgICAgICAgLy8gQWRkIGJsaW5kaW5nIHNjYWxhciBiXzEwIGFzIGEgbmV3IGNvZWZmaWNpZW50IG5cbiAgICAgICAgcG9sVExvdy5zZXQoY2guYlsxMF0sIHprZXkuZG9tYWluU2l6ZSAqIG44cik7XG5cbiAgICAgICAgLy8gY29tcHV0ZSB0X21pZChYKVxuICAgICAgICBsZXQgcG9sVE1pZCA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDEpICogbjhyKTtcbiAgICAgICAgcG9sVE1pZC5zZXQodC5zbGljZSh6a2V5LmRvbWFpblNpemUgKiBuOHIsIHprZXkuZG9tYWluU2l6ZSAqIDIgKiBuOHIpLCAwKTtcbiAgICAgICAgLy8gU3VidHJhY3QgYmxpbmRpbmcgc2NhbGFyIGJfMTAgdG8gdGhlIGxvd2VzdCBjb2VmZmljaWVudCBvZiB0X21pZFxuICAgICAgICBjb25zdCBsb3dlc3RNaWQgPSBGci5zdWIocG9sVE1pZC5zbGljZSgwLCBuOHIpLCBjaC5iWzEwXSk7XG4gICAgICAgIHBvbFRNaWQuc2V0KGxvd2VzdE1pZCwgMCk7XG4gICAgICAgIC8vIEFkZCBibGluZGluZyBzY2FsYXIgYl8xMSBhcyBhIG5ldyBjb2VmZmljaWVudCBuXG4gICAgICAgIHBvbFRNaWQuc2V0KGNoLmJbMTFdLCB6a2V5LmRvbWFpblNpemUgKiBuOHIpO1xuXG4gICAgICAgIC8vIGNvbXB1dGUgdF9oaWdoKFgpXG4gICAgICAgIGxldCBwb2xUSGlnaCA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDYpICogbjhyKTtcbiAgICAgICAgcG9sVEhpZ2guc2V0KHQuc2xpY2UoemtleS5kb21haW5TaXplICogMiAqIG44ciwgKHprZXkuZG9tYWluU2l6ZSAqIDMgKyA2KSAqIG44ciksIDApO1xuICAgICAgICAvL1N1YnRyYWN0IGJsaW5kaW5nIHNjYWxhciBiXzExIHRvIHRoZSBsb3dlc3QgY29lZmZpY2llbnQgb2YgdF9oaWdoXG4gICAgICAgIGNvbnN0IGxvd2VzdEhpZ2ggPSBGci5zdWIocG9sVEhpZ2guc2xpY2UoMCwgbjhyKSwgY2guYlsxMV0pO1xuICAgICAgICBwb2xUSGlnaC5zZXQobG93ZXN0SGlnaCwgMCk7XG5cbiAgICAgICAgcHJvb2YuVDEgPSBhd2FpdCBleHBUYXUocG9sVExvdywgXCJtdWx0aWV4cCBUMVwiKTtcbiAgICAgICAgcHJvb2YuVDIgPSBhd2FpdCBleHBUYXUocG9sVE1pZCwgXCJtdWx0aWV4cCBUMlwiKTtcbiAgICAgICAgcHJvb2YuVDMgPSBhd2FpdCBleHBUYXUocG9sVEhpZ2gsIFwibXVsdGlleHAgVDNcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbXVsMihhLGIsIGFwLCBicCwgIHApIHtcbiAgICAgICAgICAgIGxldCByLCByejtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBhX2IgPSBGci5tdWwoYSxiKTtcbiAgICAgICAgICAgIGNvbnN0IGFfYnAgPSBGci5tdWwoYSxicCk7XG4gICAgICAgICAgICBjb25zdCBhcF9iID0gRnIubXVsKGFwLGIpO1xuICAgICAgICAgICAgY29uc3QgYXBfYnAgPSBGci5tdWwoYXAsYnApO1xuXG4gICAgICAgICAgICByID0gYV9iO1xuXG4gICAgICAgICAgICBsZXQgYTAgPSBGci5hZGQoYV9icCwgYXBfYik7XG5cbiAgICAgICAgICAgIGxldCBhMSA9IGFwX2JwO1xuXG4gICAgICAgICAgICByeiA9IGEwO1xuICAgICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgICAgICByeiA9IEZyLmFkZChyeiwgRnIubXVsKFoxW3BdLCBhMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW3IsIHJ6XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG11bDQoYSxiLGMsZCwgYXAsIGJwLCBjcCwgZHAsIHApIHtcbiAgICAgICAgICAgIGxldCByLCByejtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBhX2IgPSBGci5tdWwoYSxiKTtcbiAgICAgICAgICAgIGNvbnN0IGFfYnAgPSBGci5tdWwoYSxicCk7XG4gICAgICAgICAgICBjb25zdCBhcF9iID0gRnIubXVsKGFwLGIpO1xuICAgICAgICAgICAgY29uc3QgYXBfYnAgPSBGci5tdWwoYXAsYnApO1xuXG4gICAgICAgICAgICBjb25zdCBjX2QgPSBGci5tdWwoYyxkKTtcbiAgICAgICAgICAgIGNvbnN0IGNfZHAgPSBGci5tdWwoYyxkcCk7XG4gICAgICAgICAgICBjb25zdCBjcF9kID0gRnIubXVsKGNwLGQpO1xuICAgICAgICAgICAgY29uc3QgY3BfZHAgPSBGci5tdWwoY3AsZHApO1xuXG4gICAgICAgICAgICByID0gRnIubXVsKGFfYiwgY19kKTtcblxuICAgICAgICAgICAgbGV0IGEwID0gRnIubXVsKGFwX2IsIGNfZCk7XG4gICAgICAgICAgICBhMCA9IEZyLmFkZChhMCwgRnIubXVsKGFfYnAsIGNfZCkpO1xuICAgICAgICAgICAgYTAgPSBGci5hZGQoYTAsIEZyLm11bChhX2IsIGNwX2QpKTtcbiAgICAgICAgICAgIGEwID0gRnIuYWRkKGEwLCBGci5tdWwoYV9iLCBjX2RwKSk7XG5cbiAgICAgICAgICAgIGxldCBhMSA9IEZyLm11bChhcF9icCwgY19kKTtcbiAgICAgICAgICAgIGExID0gRnIuYWRkKGExLCBGci5tdWwoYXBfYiwgY3BfZCkpO1xuICAgICAgICAgICAgYTEgPSBGci5hZGQoYTEsIEZyLm11bChhcF9iLCBjX2RwKSk7XG4gICAgICAgICAgICBhMSA9IEZyLmFkZChhMSwgRnIubXVsKGFfYnAsIGNwX2QpKTtcbiAgICAgICAgICAgIGExID0gRnIuYWRkKGExLCBGci5tdWwoYV9icCwgY19kcCkpO1xuICAgICAgICAgICAgYTEgPSBGci5hZGQoYTEsIEZyLm11bChhX2IsIGNwX2RwKSk7XG5cbiAgICAgICAgICAgIGxldCBhMiA9IEZyLm11bChhX2JwLCBjcF9kcCk7XG4gICAgICAgICAgICBhMiA9IEZyLmFkZChhMiwgRnIubXVsKGFwX2IsIGNwX2RwKSk7XG4gICAgICAgICAgICBhMiA9IEZyLmFkZChhMiwgRnIubXVsKGFwX2JwLCBjX2RwKSk7XG4gICAgICAgICAgICBhMiA9IEZyLmFkZChhMiwgRnIubXVsKGFwX2JwLCBjcF9kKSk7XG5cbiAgICAgICAgICAgIGxldCBhMyA9IEZyLm11bChhcF9icCwgY3BfZHApO1xuXG4gICAgICAgICAgICByeiA9IGEwO1xuICAgICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgICAgICByeiA9IEZyLmFkZChyeiwgRnIubXVsKFoxW3BdLCBhMSkpO1xuICAgICAgICAgICAgICAgIHJ6ID0gRnIuYWRkKHJ6LCBGci5tdWwoWjJbcF0sIGEyKSk7XG4gICAgICAgICAgICAgICAgcnogPSBGci5hZGQocnosIEZyLm11bChaM1twXSwgYTMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtyLCByel07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDQoKSB7XG4gICAgICAgIGNvbnN0IHBvbF9xbSA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKm44cik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9sX3FtLCAwICwgemtleS5kb21haW5TaXplKm44ciwgc2VjdGlvbnNaS2V5WzddWzBdLnApO1xuXG4gICAgICAgIGNvbnN0IHBvbF9xbCA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKm44cik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9sX3FsLCAwICwgemtleS5kb21haW5TaXplKm44ciwgc2VjdGlvbnNaS2V5WzhdWzBdLnApO1xuXG4gICAgICAgIGNvbnN0IHBvbF9xciA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKm44cik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9sX3FyLCAwICwgemtleS5kb21haW5TaXplKm44ciwgc2VjdGlvbnNaS2V5WzldWzBdLnApO1xuXG4gICAgICAgIGNvbnN0IHBvbF9xbyA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplKm44cik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9sX3FvLCAwICwgemtleS5kb21haW5TaXplKm44ciwgc2VjdGlvbnNaS2V5WzEwXVswXS5wKTtcblxuICAgICAgICBjb25zdCBwb2xfcWMgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSpuOHIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbF9xYywgMCAsIHprZXkuZG9tYWluU2l6ZSpuOHIsIHNlY3Rpb25zWktleVsxMV1bMF0ucCk7XG5cbiAgICAgICAgY29uc3QgcG9sX3MzID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUqbjhyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2xfczMsIDAgLCB6a2V5LmRvbWFpblNpemUqbjhyLCBzZWN0aW9uc1pLZXlbMTJdWzBdLnAgKyAxMCp6a2V5LmRvbWFpblNpemUqbjhyKTtcblxuICAgICAgICBjb25zdCB0cmFuc2NyaXB0NCA9IG5ldyBVaW50OEFycmF5KEcxLkYubjgqMiozKTtcbiAgICAgICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDQsIDAsIHByb29mLlQxKTtcbiAgICAgICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDQsIEcxLkYubjgqMiwgcHJvb2YuVDIpO1xuICAgICAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0NCwgRzEuRi5uOCo0LCBwcm9vZi5UMyk7XG4gICAgICAgIGNoLnhpID0gaGFzaFRvRnIodHJhbnNjcmlwdDQpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcInhpOiBcIiArIEZyLnRvU3RyaW5nKGNoLnhpKSk7ICAgIFxuXG4gICAgICAgIHByb29mLmV2YWxfYSA9IGV2YWxQb2wocG9sX2EsIGNoLnhpKTtcbiAgICAgICAgcHJvb2YuZXZhbF9iID0gZXZhbFBvbChwb2xfYiwgY2gueGkpO1xuICAgICAgICBwcm9vZi5ldmFsX2MgPSBldmFsUG9sKHBvbF9jLCBjaC54aSk7XG4gICAgICAgIHByb29mLmV2YWxfczEgPSBldmFsUG9sKHBvbF9zMSwgY2gueGkpO1xuICAgICAgICBwcm9vZi5ldmFsX3MyID0gZXZhbFBvbChwb2xfczIsIGNoLnhpKTtcbiAgICAgICAgcHJvb2YuZXZhbF90ID0gZXZhbFBvbChwb2xfdCwgY2gueGkpO1xuICAgICAgICBwcm9vZi5ldmFsX3p3ID0gZXZhbFBvbChwb2xfeiwgRnIubXVsKGNoLnhpLCBGci53W3prZXkucG93ZXJdKSk7XG5cbiAgICAgICAgY29uc3QgY29lZl9hYiA9IEZyLm11bChwcm9vZi5ldmFsX2EsIHByb29mLmV2YWxfYik7XG4gICAgICAgIFxuICAgICAgICBsZXQgZTJhID0gcHJvb2YuZXZhbF9hO1xuICAgICAgICBjb25zdCBiZXRheGkgPSBGci5tdWwoY2guYmV0YSwgY2gueGkpO1xuICAgICAgICBlMmEgPSBGci5hZGQoIGUyYSwgYmV0YXhpKTtcbiAgICAgICAgZTJhID0gRnIuYWRkKCBlMmEsIGNoLmdhbW1hKTtcblxuICAgICAgICBsZXQgZTJiID0gcHJvb2YuZXZhbF9iO1xuICAgICAgICBlMmIgPSBGci5hZGQoIGUyYiwgRnIubXVsKGJldGF4aSwgemtleS5rMSkpO1xuICAgICAgICBlMmIgPSBGci5hZGQoIGUyYiwgY2guZ2FtbWEpO1xuXG4gICAgICAgIGxldCBlMmMgPSBwcm9vZi5ldmFsX2M7XG4gICAgICAgIGUyYyA9IEZyLmFkZCggZTJjLCBGci5tdWwoYmV0YXhpLCB6a2V5LmsyKSk7XG4gICAgICAgIGUyYyA9IEZyLmFkZCggZTJjLCBjaC5nYW1tYSk7XG5cbiAgICAgICAgY29uc3QgZTIgPSBGci5tdWwoRnIubXVsKEZyLm11bChlMmEsIGUyYiksIGUyYyksIGNoLmFscGhhKTtcblxuICAgICAgICBsZXQgZTNhID0gcHJvb2YuZXZhbF9hO1xuICAgICAgICBlM2EgPSBGci5hZGQoIGUzYSwgRnIubXVsKGNoLmJldGEsIHByb29mLmV2YWxfczEpKTtcbiAgICAgICAgZTNhID0gRnIuYWRkKCBlM2EsIGNoLmdhbW1hKTtcblxuICAgICAgICBsZXQgZTNiID0gcHJvb2YuZXZhbF9iO1xuICAgICAgICBlM2IgPSBGci5hZGQoIGUzYiwgRnIubXVsKGNoLmJldGEsIHByb29mLmV2YWxfczIpKTtcbiAgICAgICAgZTNiID0gRnIuYWRkKCBlM2IsIGNoLmdhbW1hKTtcblxuICAgICAgICBsZXQgZTMgPSBGci5tdWwoZTNhLCBlM2IpO1xuICAgICAgICBlMyA9IEZyLm11bChlMywgY2guYmV0YSk7XG4gICAgICAgIGUzID0gRnIubXVsKGUzLCBwcm9vZi5ldmFsX3p3KTtcbiAgICAgICAgZTMgPSBGci5tdWwoZTMsIGNoLmFscGhhKTtcblxuICAgICAgICBjaC54aW09IGNoLnhpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5wb3dlcjsgaSsrKSBjaC54aW0gPSBGci5tdWwoY2gueGltLCBjaC54aW0pO1xuICAgICAgICBjb25zdCBldmFsX2wxID0gRnIuZGl2KFxuICAgICAgICAgICAgRnIuc3ViKGNoLnhpbSwgRnIub25lKSxcbiAgICAgICAgICAgIEZyLm11bChGci5zdWIoY2gueGksIEZyLm9uZSksIEZyLmUoemtleS5kb21haW5TaXplKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBlNCA9IEZyLm11bChldmFsX2wxLCBGci5tdWwoY2guYWxwaGEsIGNoLmFscGhhKSk7XG5cbiAgICAgICAgY29uc3QgY29lZnMzID0gZTM7XG4gICAgICAgIGNvbnN0IGNvZWZ6ID0gRnIuYWRkKGUyLCBlNCk7XG5cbiAgICAgICAgcG9sX3IgPSBuZXcgQmlnQnVmZmVyKCh6a2V5LmRvbWFpblNpemUrMykqbjhyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaTx6a2V5LmRvbWFpblNpemUrMzsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdiA9IEZyLm11bChjb2VmeiwgcG9sX3ouc2xpY2UoaSpuOHIsKGkrMSkqbjhyKSk7XG4gICAgICAgICAgICBpZiAoaTx6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB2ID0gRnIuYWRkKHYsIEZyLm11bChjb2VmX2FiLCBwb2xfcW0uc2xpY2UoaSpuOHIsKGkrMSkqbjhyKSkpO1xuICAgICAgICAgICAgICAgIHYgPSBGci5hZGQodiwgRnIubXVsKHByb29mLmV2YWxfYSwgcG9sX3FsLnNsaWNlKGkqbjhyLChpKzEpKm44cikpKTtcbiAgICAgICAgICAgICAgICB2ID0gRnIuYWRkKHYsIEZyLm11bChwcm9vZi5ldmFsX2IsIHBvbF9xci5zbGljZShpKm44ciwoaSsxKSpuOHIpKSk7XG4gICAgICAgICAgICAgICAgdiA9IEZyLmFkZCh2LCBGci5tdWwocHJvb2YuZXZhbF9jLCBwb2xfcW8uc2xpY2UoaSpuOHIsKGkrMSkqbjhyKSkpO1xuICAgICAgICAgICAgICAgIHYgPSBGci5hZGQodiwgcG9sX3FjLnNsaWNlKGkqbjhyLChpKzEpKm44cikpO1xuICAgICAgICAgICAgICAgIHYgPSBGci5zdWIodiwgRnIubXVsKGNvZWZzMywgcG9sX3MzLnNsaWNlKGkqbjhyLChpKzEpKm44cikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvbF9yLnNldCh2LCBpKm44cik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9vZi5ldmFsX3IgPSBldmFsUG9sKHBvbF9yLCBjaC54aSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQ1KCkge1xuICAgICAgICBjb25zdCB0cmFuc2NyaXB0NSA9IG5ldyBVaW50OEFycmF5KG44cio3KTtcbiAgICAgICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgMCwgcHJvb2YuZXZhbF9hKTtcbiAgICAgICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgbjhyLCBwcm9vZi5ldmFsX2IpO1xuICAgICAgICBGci50b1JwckJFKHRyYW5zY3JpcHQ1LCBuOHIqMiwgcHJvb2YuZXZhbF9jKTtcbiAgICAgICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgbjhyKjMsIHByb29mLmV2YWxfczEpO1xuICAgICAgICBGci50b1JwckJFKHRyYW5zY3JpcHQ1LCBuOHIqNCwgcHJvb2YuZXZhbF9zMik7XG4gICAgICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDUsIG44cio1LCBwcm9vZi5ldmFsX3p3KTtcbiAgICAgICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgbjhyKjYsIHByb29mLmV2YWxfcik7XG4gICAgICAgIGNoLnYgPSBbXTtcbiAgICAgICAgY2gudlsxXSA9IGhhc2hUb0ZyKHRyYW5zY3JpcHQ1KTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwidjogXCIgKyBGci50b1N0cmluZyhjaC52WzFdKSk7ICAgIFxuXG4gICAgICAgIGZvciAobGV0IGk9MjsgaTw9NjsgaSsrICkgY2gudltpXSA9IEZyLm11bChjaC52W2ktMV0sIGNoLnZbMV0pO1xuICAgICAgICBcbiAgICAgICAgbGV0IHBvbF93eGkgPSBuZXcgQmlnQnVmZmVyKCh6a2V5LmRvbWFpblNpemUrNikqbjhyKTtcblxuICAgICAgICBjb25zdCB4aTJtID0gRnIubXVsKGNoLnhpbSwgY2gueGltKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZSArIDY7IGkrKykge1xuICAgICAgICAgICAgbGV0IHcgPSBGci56ZXJvO1xuXG4gICAgICAgICAgICBjb25zdCBwb2xUSGlnaCA9IHBvbF90LnNsaWNlKCh6a2V5LmRvbWFpblNpemUgKiAyICsgaSkgKiBuOHIsICh6a2V5LmRvbWFpblNpemUgKiAyICsgaSArIDEpICogbjhyKTtcbiAgICAgICAgICAgIHcgPSBGci5hZGQodywgRnIubXVsKHhpMm0sIHBvbFRIaWdoKSk7XG5cbiAgICAgICAgICAgIGlmIChpIDwgemtleS5kb21haW5TaXplICsgMykge1xuICAgICAgICAgICAgICAgIHcgPSBGci5hZGQodywgRnIubXVsKGNoLnZbMV0sIHBvbF9yLnNsaWNlKGkgKiBuOHIsIChpICsgMSkgKiBuOHIpKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpIDwgemtleS5kb21haW5TaXplICsgMikge1xuICAgICAgICAgICAgICAgIHcgPSBGci5hZGQodywgRnIubXVsKGNoLnZbMl0sIHBvbF9hLnNsaWNlKGkgKiBuOHIsIChpICsgMSkgKiBuOHIpKSk7XG4gICAgICAgICAgICAgICAgdyA9IEZyLmFkZCh3LCBGci5tdWwoY2gudlszXSwgcG9sX2Iuc2xpY2UoaSAqIG44ciwgKGkgKyAxKSAqIG44cikpKTtcbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIEZyLm11bChjaC52WzRdLCBwb2xfYy5zbGljZShpICogbjhyLCAoaSArIDEpICogbjhyKSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaSA8IHprZXkuZG9tYWluU2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbFRMb3cgPSBwb2xfdC5zbGljZShpICogbjhyLCAoaSArIDEpICogbjhyKTtcbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIHBvbFRMb3cpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcG9sVE1pZCA9IHBvbF90LnNsaWNlKCh6a2V5LmRvbWFpblNpemUgKyBpKSAqIG44ciwgKHprZXkuZG9tYWluU2l6ZSArIGkgKyAxKSAqIG44cik7XG4gICAgICAgICAgICAgICAgdyA9IEZyLmFkZCh3LCBGci5tdWwoY2gueGltLCBwb2xUTWlkKSk7XG5cbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIEZyLm11bChjaC52WzVdLCBwb2xfczEuc2xpY2UoaSAqIG44ciwgKGkgKyAxKSAqIG44cikpKTtcbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIEZyLm11bChjaC52WzZdLCBwb2xfczIuc2xpY2UoaSAqIG44ciwgKGkgKyAxKSAqIG44cikpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYl8xMCBhbmQgYl8xMSBibGluZGluZyBzY2FsYXJzIHdlcmUgYXBwbGllZCBvbiByb3VuZCAzIHRvIHJhbmRvbWl6ZSB0aGUgcG9seW5vbWlhbHMgdF9sb3csIHRfbWlkLCB0X2hpZ2hcbiAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJsaW5kaW5nIHNjYWxhciBiXzEwIGFuZCBiXzExIHRvIHRoZSBsb3dlc3QgY29lZmZpY2llbnRcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdyA9IEZyLnN1Yih3LCBGci5tdWwoeGkybSwgY2guYlsxMV0pKTtcbiAgICAgICAgICAgICAgICB3ID0gRnIuc3ViKHcsIEZyLm11bChjaC54aW0sIGNoLmJbMTBdKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCBibGluZGluZyBzY2FsYXJzIGJfMTAgYW5kIGJfMTEgdG8gdGhlIGNvZWZmaWNpZW50IG5cbiAgICAgICAgICAgIGlmIChpID09PSB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIGNoLmJbMTBdKTtcbiAgICAgICAgICAgICAgICB3ID0gRnIuYWRkKHcsIEZyLm11bChjaC54aW0sIGNoLmJbMTFdKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvbF93eGkuc2V0KHcsIGkgKiBuOHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHcwID0gcG9sX3d4aS5zbGljZSgwLCBuOHIpO1xuICAgICAgICB3MCA9IEZyLnN1Yih3MCwgcHJvb2YuZXZhbF90KTtcbiAgICAgICAgdzAgPSBGci5zdWIodzAsIEZyLm11bChjaC52WzFdLCBwcm9vZi5ldmFsX3IpKTtcbiAgICAgICAgdzAgPSBGci5zdWIodzAsIEZyLm11bChjaC52WzJdLCBwcm9vZi5ldmFsX2EpKTtcbiAgICAgICAgdzAgPSBGci5zdWIodzAsIEZyLm11bChjaC52WzNdLCBwcm9vZi5ldmFsX2IpKTtcbiAgICAgICAgdzAgPSBGci5zdWIodzAsIEZyLm11bChjaC52WzRdLCBwcm9vZi5ldmFsX2MpKTtcbiAgICAgICAgdzAgPSBGci5zdWIodzAsIEZyLm11bChjaC52WzVdLCBwcm9vZi5ldmFsX3MxKSk7XG4gICAgICAgIHcwID0gRnIuc3ViKHcwLCBGci5tdWwoY2gudls2XSwgcHJvb2YuZXZhbF9zMikpO1xuICAgICAgICBwb2xfd3hpLnNldCh3MCwgMCk7XG5cbiAgICAgICAgcG9sX3d4aT0gZGl2UG9sMShwb2xfd3hpLCBjaC54aSk7XG5cbiAgICAgICAgcHJvb2YuV3hpID0gYXdhaXQgZXhwVGF1KHBvbF93eGksIFwibXVsdGlleHAgV3hpXCIpO1xuXG4gICAgICAgIGxldCBwb2xfd3hpdyA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSszKSpuOHIpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplKzM7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdyA9IHBvbF96LnNsaWNlKGkqbjhyLCAoaSsxKSpuOHIpO1xuICAgICAgICAgICAgcG9sX3d4aXcuc2V0KHcsIGkqbjhyKTtcbiAgICAgICAgfVxuICAgICAgICB3MCA9IHBvbF93eGl3LnNsaWNlKDAsIG44cik7XG4gICAgICAgIHcwID0gRnIuc3ViKHcwLCBwcm9vZi5ldmFsX3p3KTtcbiAgICAgICAgcG9sX3d4aXcuc2V0KHcwLCAwKTtcblxuICAgICAgICBwb2xfd3hpdz0gZGl2UG9sMShwb2xfd3hpdywgRnIubXVsKGNoLnhpLCBGci53W3prZXkucG93ZXJdKSk7XG4gICAgICAgIHByb29mLld4aXcgPSBhd2FpdCBleHBUYXUocG9sX3d4aXcsIFwibXVsdGlleHAgV3hpd1wiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNoVG9Gcih0cmFuc2NyaXB0KSB7XG4gICAgICAgIGNvbnN0IHYgPSBTY2FsYXIuZnJvbVJwckJFKG5ldyBVaW50OEFycmF5KGtlY2NhazI1Ni5hcnJheUJ1ZmZlcih0cmFuc2NyaXB0KSkpO1xuICAgICAgICByZXR1cm4gRnIuZSh2KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGV2YWxQb2woUCwgeCkge1xuICAgICAgICBjb25zdCBuID0gUC5ieXRlTGVuZ3RoIC8gbjhyO1xuICAgICAgICBpZiAobiA9PSAwKSByZXR1cm4gRnIuemVybztcbiAgICAgICAgbGV0IHJlcyA9IFAuc2xpY2UoKG4tMSkqbjhyLCBuKm44cik7XG4gICAgICAgIGZvciAobGV0IGk9bi0yOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIHJlcyA9IEZyLmFkZChGci5tdWwocmVzLCB4KSwgUC5zbGljZShpKm44ciwgKGkrMSkqbjhyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXZQb2wxKFAsIGQpIHtcbiAgICAgICAgY29uc3QgbiA9IFAuYnl0ZUxlbmd0aC9uOHI7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBCaWdCdWZmZXIobipuOHIpO1xuICAgICAgICByZXMuc2V0KEZyLnplcm8sIChuLTEpICpuOHIpO1xuICAgICAgICByZXMuc2V0KFAuc2xpY2UoKG4tMSkqbjhyLCBuKm44ciksIChuLTIpKm44cik7XG4gICAgICAgIGZvciAobGV0IGk9bi0zOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIHJlcy5zZXQoXG4gICAgICAgICAgICAgICAgRnIuYWRkKFxuICAgICAgICAgICAgICAgICAgICBQLnNsaWNlKChpKzEpKm44ciwgKGkrMikqbjhyKSwgXG4gICAgICAgICAgICAgICAgICAgIEZyLm11bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNsaWNlKChpKzEpKm44ciwgKGkrMikqbjhyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpKm44clxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZyLmVxKFxuICAgICAgICAgICAgUC5zbGljZSgwLCBuOHIpLFxuICAgICAgICAgICAgRnIubXVsKFxuICAgICAgICAgICAgICAgIEZyLm5lZyhkKSxcbiAgICAgICAgICAgICAgICByZXMuc2xpY2UoMCwgbjhyKVxuICAgICAgICAgICAgKVxuICAgICAgICApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2xpbm9taWFsIGRvZXMgbm90IGRpdmlkZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGV4cFRhdShiLCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IG4gPSBiLmJ5dGVMZW5ndGgvbjhyO1xuICAgICAgICBjb25zdCBQVGF1TiA9IFBUYXUuc2xpY2UoMCwgbipjdXJ2ZS5HMS5GLm44KjIpO1xuICAgICAgICBjb25zdCBibSA9IGF3YWl0IGN1cnZlLkZyLmJhdGNoRnJvbU1vbnRnb21lcnkoYik7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShQVGF1TiwgYm0sIGxvZ2dlciwgbmFtZSk7XG4gICAgICAgIHJlcyA9IGN1cnZlLkcxLnRvQWZmaW5lKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiB0bzRUKEEsIHB6KSB7XG4gICAgICAgIHB6ID0gcHogfHwgW107IFxuICAgICAgICBsZXQgYSA9IGF3YWl0IEZyLmlmZnQoQSk7XG4gICAgICAgIGNvbnN0IGE0ID0gbmV3IEJpZ0J1ZmZlcihuOHIqemtleS5kb21haW5TaXplKjQpO1xuICAgICAgICBhNC5zZXQoYSwgMCk7XG5cbiAgICAgICAgY29uc3QgYTEgPSBuZXcgQmlnQnVmZmVyKG44ciooemtleS5kb21haW5TaXplICsgcHoubGVuZ3RoKSk7XG4gICAgICAgIGExLnNldChhLCAwKTtcbiAgICAgICAgZm9yIChsZXQgaT0gMDsgaTxwei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYTEuc2V0KFxuICAgICAgICAgICAgICAgIEZyLmFkZChcbiAgICAgICAgICAgICAgICAgICAgYTEuc2xpY2UoKHprZXkuZG9tYWluU2l6ZStpKSpuOHIsICh6a2V5LmRvbWFpblNpemUraSsxKSpuOHIpLFxuICAgICAgICAgICAgICAgICAgICBweltpXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKHprZXkuZG9tYWluU2l6ZStpKSpuOHJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhMS5zZXQoXG4gICAgICAgICAgICAgICAgRnIuc3ViKFxuICAgICAgICAgICAgICAgICAgICBhMS5zbGljZShpKm44ciwgKGkrMSkqbjhyKSxcbiAgICAgICAgICAgICAgICAgICAgcHpbaV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGkqbjhyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEE0ID0gYXdhaXQgRnIuZmZ0KGE0KTtcbiAgICAgICAgcmV0dXJuIFthMSwgQTRdO1xuICAgIH1cblxuXG59XG5cblxuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjEgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCBwbG9ua19wcm92ZSBmcm9tIFwiLi9wbG9ua19wcm92ZS5qc1wiO1xuaW1wb3J0IHd0bnNfY2FsY3VsYXRlIGZyb20gXCIuL3d0bnNfY2FsY3VsYXRlLmpzXCI7XG5pbXBvcnQge3V0aWxzfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7dW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwbG9ua0Z1bGxQcm92ZShfaW5wdXQsIHdhc21GaWxlLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuICAgIGNvbnN0IGlucHV0ID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9pbnB1dCk7XG5cbiAgICBjb25zdCB3dG5zPSB7XG4gICAgICAgIHR5cGU6IFwibWVtXCJcbiAgICB9O1xuICAgIGF3YWl0IHd0bnNfY2FsY3VsYXRlKGlucHV0LCB3YXNtRmlsZSwgd3Rucyk7XG4gICAgcmV0dXJuIGF3YWl0IHBsb25rX3Byb3ZlKHprZXlGaWxlTmFtZSwgd3RucywgbG9nZ2VyKTtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjEgMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgcGFwZXI6IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTkvOTUzLnBkZiAqL1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0ICogYXMgY3VydmVzIGZyb20gXCIuL2N1cnZlcy5qc1wiO1xuaW1wb3J0IHsgIHV0aWxzIH0gICBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7dW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuaW1wb3J0IGpzU2hhMyBmcm9tIFwianMtc2hhM1wiO1xuY29uc3QgeyBrZWNjYWsyNTYgfSA9IGpzU2hhMztcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwbG9ua1ZlcmlmeShfdmtfdmVyaWZpZXIsIF9wdWJsaWNTaWduYWxzLCBfcHJvb2YsIGxvZ2dlcikge1xuICAgIGxldCB2a192ZXJpZmllciA9IHVuc3RyaW5naWZ5QmlnSW50cyhfdmtfdmVyaWZpZXIpO1xuICAgIGxldCBwcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuICAgIGxldCBwdWJsaWNTaWduYWxzID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wdWJsaWNTaWduYWxzKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgY3VydmVzLmdldEN1cnZlRnJvbU5hbWUodmtfdmVyaWZpZXIuY3VydmUpO1xuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuXG4gICAgcHJvb2YgPSBmcm9tT2JqZWN0UHJvb2YoY3VydmUscHJvb2YpO1xuICAgIHZrX3ZlcmlmaWVyID0gZnJvbU9iamVjdFZrKGN1cnZlLCB2a192ZXJpZmllcik7XG4gICAgaWYgKCFpc1dlbGxDb25zdHJ1Y3RlZChjdXJ2ZSwgcHJvb2YpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIlByb29mIGlzIG5vdCB3ZWxsIGNvbnN0cnVjdGVkXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwdWJsaWNTaWduYWxzLmxlbmd0aCAhPSB2a192ZXJpZmllci5uUHVibGljKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHB1YmxpYyBpbnB1dHNcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2hhbGxhbmdlcyA9IGNhbGN1bGF0ZUNoYWxsYW5nZXMoY3VydmUsIHByb29mLCBwdWJsaWNTaWduYWxzKTtcbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImJldGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxhbmdlcy5iZXRhLCAxNikpOyAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiZ2FtbWE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxhbmdlcy5nYW1tYSwgMTYpKTsgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImFscGhhOiBcIiArIEZyLnRvU3RyaW5nKGNoYWxsYW5nZXMuYWxwaGEsIDE2KSk7ICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoXCJ4aTogXCIgKyBGci50b1N0cmluZyhjaGFsbGFuZ2VzLnhpLCAxNikpOyAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwidjE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxhbmdlcy52WzFdLCAxNikpOyAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwidjY6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxhbmdlcy52WzZdLCAxNikpOyAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwidTogXCIgKyBGci50b1N0cmluZyhjaGFsbGFuZ2VzLnUsIDE2KSk7ICAgIFxuICAgIH1cbiAgICBjb25zdCBMID0gY2FsY3VsYXRlTGFncmFuZ2VFdmFsdWF0aW9ucyhjdXJ2ZSwgY2hhbGxhbmdlcywgdmtfdmVyaWZpZXIpO1xuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiTGFncmFuZ2UgRXZhbHVhdGlvbnM6IFwiKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTCR7aX0oeGkpPWAgKyBGci50b1N0cmluZyhMW2ldLCAxNikpOyAgICBcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAocHVibGljU2lnbmFscy5sZW5ndGggIT0gdmtfdmVyaWZpZXIublB1YmxpYykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJOdW1iZXIgb2YgcHVibGljIHNpZ25hbHMgZG9lcyBub3QgbWF0Y2ggd2l0aCB2a1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBsID0gY2FsY3VsYXRlUGwoY3VydmUsIHB1YmxpY1NpZ25hbHMsIEwpO1xuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiUGw6IFwiICsgRnIudG9TdHJpbmcocGwsIDE2KSk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IGNhbGN1bGF0ZVQoY3VydmUsIHByb29mLCBjaGFsbGFuZ2VzLCBwbCwgTFsxXSk7XG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJ0OiBcIiArIEZyLnRvU3RyaW5nKHQsIDE2KSk7XG4gICAgfVxuXG4gICAgY29uc3QgRCA9IGNhbGN1bGF0ZUQoY3VydmUsIHByb29mLCBjaGFsbGFuZ2VzLCB2a192ZXJpZmllciwgTFsxXSk7XG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJEOiBcIiArIEcxLnRvU3RyaW5nKEcxLnRvQWZmaW5lKEQpLCAxNikpO1xuICAgIH1cblxuICAgIGNvbnN0IEYgPSBjYWxjdWxhdGVGKGN1cnZlLCBwcm9vZiwgY2hhbGxhbmdlcywgdmtfdmVyaWZpZXIsIEQpO1xuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiRjogXCIgKyBHMS50b1N0cmluZyhHMS50b0FmZmluZShGKSwgMTYpKTtcbiAgICB9XG5cbiAgICBjb25zdCBFID0gY2FsY3VsYXRlRShjdXJ2ZSwgcHJvb2YsIGNoYWxsYW5nZXMsIHZrX3ZlcmlmaWVyLCB0KTtcbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkU6IFwiICsgRzEudG9TdHJpbmcoRzEudG9BZmZpbmUoRSksIDE2KSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgaXNWYWxpZFBhaXJpbmcoY3VydmUsIHByb29mLCBjaGFsbGFuZ2VzLCB2a192ZXJpZmllciwgRSwgRik7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiT0shXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIFByb29mXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcblxufVxuXG5cbmZ1bmN0aW9uIGZyb21PYmplY3RQcm9vZihjdXJ2ZSwgcHJvb2YpIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgcmVzLkEgPSBHMS5mcm9tT2JqZWN0KHByb29mLkEpO1xuICAgIHJlcy5CID0gRzEuZnJvbU9iamVjdChwcm9vZi5CKTtcbiAgICByZXMuQyA9IEcxLmZyb21PYmplY3QocHJvb2YuQyk7XG4gICAgcmVzLlogPSBHMS5mcm9tT2JqZWN0KHByb29mLlopO1xuICAgIHJlcy5UMSA9IEcxLmZyb21PYmplY3QocHJvb2YuVDEpO1xuICAgIHJlcy5UMiA9IEcxLmZyb21PYmplY3QocHJvb2YuVDIpO1xuICAgIHJlcy5UMyA9IEcxLmZyb21PYmplY3QocHJvb2YuVDMpO1xuICAgIHJlcy5ldmFsX2EgPSBGci5mcm9tT2JqZWN0KHByb29mLmV2YWxfYSk7XG4gICAgcmVzLmV2YWxfYiA9IEZyLmZyb21PYmplY3QocHJvb2YuZXZhbF9iKTtcbiAgICByZXMuZXZhbF9jID0gRnIuZnJvbU9iamVjdChwcm9vZi5ldmFsX2MpO1xuICAgIHJlcy5ldmFsX3p3ID0gRnIuZnJvbU9iamVjdChwcm9vZi5ldmFsX3p3KTtcbiAgICByZXMuZXZhbF9zMSA9IEZyLmZyb21PYmplY3QocHJvb2YuZXZhbF9zMSk7XG4gICAgcmVzLmV2YWxfczIgPSBGci5mcm9tT2JqZWN0KHByb29mLmV2YWxfczIpO1xuICAgIHJlcy5ldmFsX3IgPSBGci5mcm9tT2JqZWN0KHByb29mLmV2YWxfcik7XG4gICAgcmVzLld4aSA9IEcxLmZyb21PYmplY3QocHJvb2YuV3hpKTtcbiAgICByZXMuV3hpdyA9IEcxLmZyb21PYmplY3QocHJvb2YuV3hpdyk7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdFZrKGN1cnZlLCB2aykge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRzIgPSBjdXJ2ZS5HMjtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IHJlcyA9IHZrO1xuICAgIHJlcy5RbSA9IEcxLmZyb21PYmplY3QodmsuUW0pO1xuICAgIHJlcy5RbCA9IEcxLmZyb21PYmplY3QodmsuUWwpO1xuICAgIHJlcy5RciA9IEcxLmZyb21PYmplY3QodmsuUXIpO1xuICAgIHJlcy5RbyA9IEcxLmZyb21PYmplY3QodmsuUW8pO1xuICAgIHJlcy5RYyA9IEcxLmZyb21PYmplY3QodmsuUWMpO1xuICAgIHJlcy5TMSA9IEcxLmZyb21PYmplY3QodmsuUzEpO1xuICAgIHJlcy5TMiA9IEcxLmZyb21PYmplY3QodmsuUzIpO1xuICAgIHJlcy5TMyA9IEcxLmZyb21PYmplY3QodmsuUzMpO1xuICAgIHJlcy5rMSA9IEZyLmZyb21PYmplY3QodmsuazEpO1xuICAgIHJlcy5rMiA9IEZyLmZyb21PYmplY3QodmsuazIpO1xuICAgIHJlcy5YXzIgPSBHMi5mcm9tT2JqZWN0KHZrLlhfMik7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBpc1dlbGxDb25zdHJ1Y3RlZChjdXJ2ZSwgcHJvb2YpIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5BKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5CKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5DKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5aKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5UMSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuVDIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFHMS5pc1ZhbGlkKHByb29mLlQzKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5XeGkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFHMS5pc1ZhbGlkKHByb29mLld4aXcpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYWxsYW5nZXMoY3VydmUsIHByb29mLCBwdWJsaWNTaWduYWxzKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IG44ciA9IGN1cnZlLkZyLm44O1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuXG4gICAgY29uc3QgdHJhbnNjcmlwdDEgPSBuZXcgVWludDhBcnJheShwdWJsaWNTaWduYWxzLmxlbmd0aCpuOHIgKyBHMS5GLm44KjIqMyk7XG4gICAgZm9yIChsZXQgaT0wOyBpPHB1YmxpY1NpZ25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0MSwgaSpuOHIsIEZyLmUocHVibGljU2lnbmFsc1tpXSkpO1xuICAgIH1cbiAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0MSwgcHVibGljU2lnbmFscy5sZW5ndGgqbjhyICsgMCwgcHJvb2YuQSk7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDEsIHB1YmxpY1NpZ25hbHMubGVuZ3RoKm44ciArIEcxLkYubjgqMiwgcHJvb2YuQik7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDEsIHB1YmxpY1NpZ25hbHMubGVuZ3RoKm44ciArIEcxLkYubjgqNCwgcHJvb2YuQyk7XG5cbiAgICByZXMuYmV0YSA9IGhhc2hUb0ZyKGN1cnZlLCB0cmFuc2NyaXB0MSk7XG5cbiAgICBjb25zdCB0cmFuc2NyaXB0MiA9IG5ldyBVaW50OEFycmF5KG44cik7XG4gICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0MiwgMCwgcmVzLmJldGEpO1xuICAgIHJlcy5nYW1tYSA9IGhhc2hUb0ZyKGN1cnZlLCB0cmFuc2NyaXB0Mik7XG5cbiAgICBjb25zdCB0cmFuc2NyaXB0MyA9IG5ldyBVaW50OEFycmF5KEcxLkYubjgqMik7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQodHJhbnNjcmlwdDMsIDAsIHByb29mLlopO1xuICAgIHJlcy5hbHBoYSA9IGhhc2hUb0ZyKGN1cnZlLCB0cmFuc2NyaXB0Myk7XG5cbiAgICBjb25zdCB0cmFuc2NyaXB0NCA9IG5ldyBVaW50OEFycmF5KEcxLkYubjgqMiozKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0NCwgMCwgcHJvb2YuVDEpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHRyYW5zY3JpcHQ0LCBHMS5GLm44KjIsIHByb29mLlQyKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0NCwgRzEuRi5uOCo0LCBwcm9vZi5UMyk7XG4gICAgcmVzLnhpID0gaGFzaFRvRnIoY3VydmUsIHRyYW5zY3JpcHQ0KTtcblxuICAgIGNvbnN0IHRyYW5zY3JpcHQ1ID0gbmV3IFVpbnQ4QXJyYXkobjhyKjcpO1xuICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDUsIDAsIHByb29mLmV2YWxfYSk7XG4gICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgbjhyLCBwcm9vZi5ldmFsX2IpO1xuICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDUsIG44cioyLCBwcm9vZi5ldmFsX2MpO1xuICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDUsIG44ciozLCBwcm9vZi5ldmFsX3MxKTtcbiAgICBGci50b1JwckJFKHRyYW5zY3JpcHQ1LCBuOHIqNCwgcHJvb2YuZXZhbF9zMik7XG4gICAgRnIudG9ScHJCRSh0cmFuc2NyaXB0NSwgbjhyKjUsIHByb29mLmV2YWxfencpO1xuICAgIEZyLnRvUnByQkUodHJhbnNjcmlwdDUsIG44cio2LCBwcm9vZi5ldmFsX3IpO1xuICAgIHJlcy52ID0gW107XG4gICAgcmVzLnZbMV0gPSBoYXNoVG9GcihjdXJ2ZSwgdHJhbnNjcmlwdDUpO1xuXG4gICAgZm9yIChsZXQgaT0yOyBpPD02OyBpKysgKSByZXMudltpXSA9IEZyLm11bChyZXMudltpLTFdLCByZXMudlsxXSk7XG5cbiAgICBjb25zdCB0cmFuc2NyaXB0NiA9IG5ldyBVaW50OEFycmF5KEcxLkYubjgqMioyKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0NiwgMCwgcHJvb2YuV3hpKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZCh0cmFuc2NyaXB0NiwgRzEuRi5uOCoyLCBwcm9vZi5XeGl3KTtcbiAgICByZXMudSA9IGhhc2hUb0ZyKGN1cnZlLCB0cmFuc2NyaXB0Nik7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVMYWdyYW5nZUV2YWx1YXRpb25zKGN1cnZlLCBjaGFsbGFuZ2VzLCB2aykge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBsZXQgeGluID0gY2hhbGxhbmdlcy54aTtcbiAgICBsZXQgZG9tYWluU2l6ZSA9IDE7XG4gICAgZm9yIChsZXQgaT0wOyBpPHZrLnBvd2VyOyBpKyspIHtcbiAgICAgICAgeGluID0gRnIuc3F1YXJlKHhpbik7XG4gICAgICAgIGRvbWFpblNpemUgKj0gMjtcbiAgICB9XG4gICAgY2hhbGxhbmdlcy54aW4gPSB4aW47XG5cbiAgICBjaGFsbGFuZ2VzLnpoID0gRnIuc3ViKHhpbiwgRnIub25lKTtcbiAgICBjb25zdCBMID0gW107XG5cbiAgICBjb25zdCBuID0gRnIuZShkb21haW5TaXplKTtcbiAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICBmb3IgKGxldCBpPTE7IGk8PU1hdGgubWF4KDEsIHZrLm5QdWJsaWMpOyBpKyspIHtcbiAgICAgICAgTFtpXSA9IEZyLmRpdihGci5tdWwodywgY2hhbGxhbmdlcy56aCksIEZyLm11bChuLCBGci5zdWIoY2hhbGxhbmdlcy54aSwgdykpKTtcbiAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3ZrLnBvd2VyXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEw7XG59XG5cbmZ1bmN0aW9uIGhhc2hUb0ZyKGN1cnZlLCB0cmFuc2NyaXB0KSB7XG4gICAgY29uc3QgdiA9IFNjYWxhci5mcm9tUnByQkUobmV3IFVpbnQ4QXJyYXkoa2VjY2FrMjU2LmFycmF5QnVmZmVyKHRyYW5zY3JpcHQpKSk7XG4gICAgcmV0dXJuIGN1cnZlLkZyLmUodik7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBsKGN1cnZlLCBwdWJsaWNTaWduYWxzLCBMKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBwbCA9IEZyLnplcm87XG4gICAgZm9yIChsZXQgaT0wOyBpPHB1YmxpY1NpZ25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdyA9IEZyLmUocHVibGljU2lnbmFsc1tpXSk7XG4gICAgICAgIHBsID0gRnIuc3ViKHBsLCBGci5tdWwodywgTFtpKzFdKSk7XG4gICAgfVxuICAgIHJldHVybiBwbDtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlVChjdXJ2ZSwgcHJvb2YsIGNoYWxsYW5nZXMsIHBsLCBsMSkge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgbGV0IG51bSA9IHByb29mLmV2YWxfcjtcbiAgICBudW0gPSBGci5hZGQobnVtLCBwbCk7XG5cbiAgICBsZXQgZTEgPSBwcm9vZi5ldmFsX2E7XG4gICAgZTEgPSBGci5hZGQoZTEsIEZyLm11bChjaGFsbGFuZ2VzLmJldGEsIHByb29mLmV2YWxfczEpKTtcbiAgICBlMSA9IEZyLmFkZChlMSwgY2hhbGxhbmdlcy5nYW1tYSk7XG5cbiAgICBsZXQgZTIgPSBwcm9vZi5ldmFsX2I7XG4gICAgZTIgPSBGci5hZGQoZTIsIEZyLm11bChjaGFsbGFuZ2VzLmJldGEsIHByb29mLmV2YWxfczIpKTtcbiAgICBlMiA9IEZyLmFkZChlMiwgY2hhbGxhbmdlcy5nYW1tYSk7XG5cbiAgICBsZXQgZTMgPSBwcm9vZi5ldmFsX2M7XG4gICAgZTMgPSBGci5hZGQoZTMsIGNoYWxsYW5nZXMuZ2FtbWEpO1xuXG4gICAgbGV0IGUgPSBGci5tdWwoRnIubXVsKGUxLCBlMiksIGUzKTtcbiAgICBlID0gRnIubXVsKGUsIHByb29mLmV2YWxfencpO1xuICAgIGUgPSBGci5tdWwoZSwgY2hhbGxhbmdlcy5hbHBoYSk7XG5cbiAgICBudW0gPSBGci5zdWIobnVtLCBlKTtcblxuICAgIG51bSA9IEZyLnN1YihudW0sIEZyLm11bChsMSwgRnIuc3F1YXJlKGNoYWxsYW5nZXMuYWxwaGEpKSk7XG5cbiAgICBjb25zdCB0ID0gRnIuZGl2KG51bSwgY2hhbGxhbmdlcy56aCk7XG5cbiAgICByZXR1cm4gdDtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRChjdXJ2ZSwgcHJvb2YsIGNoYWxsYW5nZXMsIHZrLCBsMSkge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBzMSA9IEZyLm11bChGci5tdWwocHJvb2YuZXZhbF9hLCBwcm9vZi5ldmFsX2IpLCBjaGFsbGFuZ2VzLnZbMV0pO1xuICAgIGxldCByZXMgPSBHMS50aW1lc0ZyKHZrLlFtLCBzMSk7XG5cbiAgICBsZXQgczIgPSBGci5tdWwocHJvb2YuZXZhbF9hLCBjaGFsbGFuZ2VzLnZbMV0pO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIodmsuUWwsIHMyKSk7XG5cbiAgICBsZXQgczMgPSBGci5tdWwocHJvb2YuZXZhbF9iLCBjaGFsbGFuZ2VzLnZbMV0pO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIodmsuUXIsIHMzKSk7XG5cbiAgICBsZXQgczQgPSBGci5tdWwocHJvb2YuZXZhbF9jLCBjaGFsbGFuZ2VzLnZbMV0pO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIodmsuUW8sIHM0KSk7XG5cbiAgICByZXMgPSBHMS5hZGQocmVzLCBHMS50aW1lc0ZyKHZrLlFjLCBjaGFsbGFuZ2VzLnZbMV0pKTtcblxuICAgIGNvbnN0IGJldGF4aSA9IEZyLm11bChjaGFsbGFuZ2VzLmJldGEsIGNoYWxsYW5nZXMueGkpO1xuICAgIGxldCBzNmEgPSBwcm9vZi5ldmFsX2E7XG4gICAgczZhID0gRnIuYWRkKHM2YSwgYmV0YXhpKTtcbiAgICBzNmEgPSBGci5hZGQoczZhLCBjaGFsbGFuZ2VzLmdhbW1hKTtcblxuICAgIGxldCBzNmIgPSBwcm9vZi5ldmFsX2I7XG4gICAgczZiID0gRnIuYWRkKHM2YiwgRnIubXVsKGJldGF4aSwgdmsuazEpKTtcbiAgICBzNmIgPSBGci5hZGQoczZiLCBjaGFsbGFuZ2VzLmdhbW1hKTtcblxuICAgIGxldCBzNmMgPSBwcm9vZi5ldmFsX2M7XG4gICAgczZjID0gRnIuYWRkKHM2YywgRnIubXVsKGJldGF4aSwgdmsuazIpKTtcbiAgICBzNmMgPSBGci5hZGQoczZjLCBjaGFsbGFuZ2VzLmdhbW1hKTtcblxuICAgIGxldCBzNiA9IEZyLm11bChGci5tdWwoczZhLCBzNmIpLCBzNmMpO1xuICAgIHM2ID0gRnIubXVsKHM2LCBGci5tdWwoY2hhbGxhbmdlcy5hbHBoYSwgY2hhbGxhbmdlcy52WzFdKSk7XG5cbiAgICBsZXQgczZkID0gRnIubXVsKEZyLm11bChsMSwgRnIuc3F1YXJlKGNoYWxsYW5nZXMuYWxwaGEpKSwgY2hhbGxhbmdlcy52WzFdKTtcbiAgICBzNiA9IEZyLmFkZChzNiwgczZkKTtcblxuICAgIHM2ID0gRnIuYWRkKHM2LCBjaGFsbGFuZ2VzLnUpO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIocHJvb2YuWiwgczYpKTtcblxuXG4gICAgbGV0IHM3YSA9IHByb29mLmV2YWxfYTtcbiAgICBzN2EgPSBGci5hZGQoczdhLCBGci5tdWwoY2hhbGxhbmdlcy5iZXRhLCBwcm9vZi5ldmFsX3MxKSk7XG4gICAgczdhID0gRnIuYWRkKHM3YSwgY2hhbGxhbmdlcy5nYW1tYSk7XG5cbiAgICBsZXQgczdiID0gcHJvb2YuZXZhbF9iO1xuICAgIHM3YiA9IEZyLmFkZChzN2IsIEZyLm11bChjaGFsbGFuZ2VzLmJldGEsIHByb29mLmV2YWxfczIpKTtcbiAgICBzN2IgPSBGci5hZGQoczdiLCBjaGFsbGFuZ2VzLmdhbW1hKTtcblxuICAgIGxldCBzNyA9IEZyLm11bChzN2EsIHM3Yik7XG4gICAgczcgPSBGci5tdWwoczcsIGNoYWxsYW5nZXMuYWxwaGEpO1xuICAgIHM3ID0gRnIubXVsKHM3LCBjaGFsbGFuZ2VzLnZbMV0pO1xuICAgIHM3ID0gRnIubXVsKHM3LCBjaGFsbGFuZ2VzLmJldGEpO1xuICAgIHM3ID0gRnIubXVsKHM3LCBwcm9vZi5ldmFsX3p3KTtcbiAgICByZXMgPSBHMS5zdWIocmVzLCBHMS50aW1lc0ZyKHZrLlMzLCBzNykpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRihjdXJ2ZSwgcHJvb2YsIGNoYWxsYW5nZXMsIHZrLCBEKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IHJlcyA9IHByb29mLlQxO1xuXG4gICAgcmVzID0gRzEuYWRkKHJlcywgRzEudGltZXNGcihwcm9vZi5UMiwgY2hhbGxhbmdlcy54aW4pKTtcbiAgICByZXMgPSBHMS5hZGQocmVzLCBHMS50aW1lc0ZyKHByb29mLlQzLCBGci5zcXVhcmUoY2hhbGxhbmdlcy54aW4pKSk7XG4gICAgcmVzID0gRzEuYWRkKHJlcywgRCk7XG4gICAgcmVzID0gRzEuYWRkKHJlcywgRzEudGltZXNGcihwcm9vZi5BLCBjaGFsbGFuZ2VzLnZbMl0pKTtcbiAgICByZXMgPSBHMS5hZGQocmVzLCBHMS50aW1lc0ZyKHByb29mLkIsIGNoYWxsYW5nZXMudlszXSkpO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIocHJvb2YuQywgY2hhbGxhbmdlcy52WzRdKSk7XG4gICAgcmVzID0gRzEuYWRkKHJlcywgRzEudGltZXNGcih2ay5TMSwgY2hhbGxhbmdlcy52WzVdKSk7XG4gICAgcmVzID0gRzEuYWRkKHJlcywgRzEudGltZXNGcih2ay5TMiwgY2hhbGxhbmdlcy52WzZdKSk7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUUoY3VydmUsIHByb29mLCBjaGFsbGFuZ2VzLCB2aywgdCkge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBzID0gdDtcblxuICAgIHMgPSBGci5hZGQocywgRnIubXVsKGNoYWxsYW5nZXMudlsxXSwgcHJvb2YuZXZhbF9yKSk7XG4gICAgcyA9IEZyLmFkZChzLCBGci5tdWwoY2hhbGxhbmdlcy52WzJdLCBwcm9vZi5ldmFsX2EpKTtcbiAgICBzID0gRnIuYWRkKHMsIEZyLm11bChjaGFsbGFuZ2VzLnZbM10sIHByb29mLmV2YWxfYikpO1xuICAgIHMgPSBGci5hZGQocywgRnIubXVsKGNoYWxsYW5nZXMudls0XSwgcHJvb2YuZXZhbF9jKSk7XG4gICAgcyA9IEZyLmFkZChzLCBGci5tdWwoY2hhbGxhbmdlcy52WzVdLCBwcm9vZi5ldmFsX3MxKSk7XG4gICAgcyA9IEZyLmFkZChzLCBGci5tdWwoY2hhbGxhbmdlcy52WzZdLCBwcm9vZi5ldmFsX3MyKSk7XG4gICAgcyA9IEZyLmFkZChzLCBGci5tdWwoY2hhbGxhbmdlcy51LCBwcm9vZi5ldmFsX3p3KSk7XG5cbiAgICBjb25zdCByZXMgPSBHMS50aW1lc0ZyKEcxLm9uZSwgcyk7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkUGFpcmluZyhjdXJ2ZSwgcHJvb2YsIGNoYWxsYW5nZXMsIHZrLCBFLCBGKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IEExID0gcHJvb2YuV3hpO1xuICAgIEExID0gRzEuYWRkKEExLCBHMS50aW1lc0ZyKHByb29mLld4aXcsIGNoYWxsYW5nZXMudSkpO1xuXG4gICAgbGV0IEIxID0gRzEudGltZXNGcihwcm9vZi5XeGksIGNoYWxsYW5nZXMueGkpO1xuICAgIGNvbnN0IHMgPSBGci5tdWwoRnIubXVsKGNoYWxsYW5nZXMudSwgY2hhbGxhbmdlcy54aSksIEZyLndbdmsucG93ZXJdKTtcbiAgICBCMSA9IEcxLmFkZChCMSwgRzEudGltZXNGcihwcm9vZi5XeGl3LCBzKSk7XG4gICAgQjEgPSBHMS5hZGQoQjEsIEYpO1xuICAgIEIxID0gRzEuc3ViKEIxLCBFKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnBhaXJpbmdFcShcbiAgICAgICAgRzEubmVnKEExKSAsIHZrLlhfMixcbiAgICAgICAgQjEgLCBjdXJ2ZS5HMi5vbmVcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlcztcblxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHsgZ2V0Q3VydmVGcm9tTmFtZSB9IGZyb20gXCIuL2N1cnZlcy5qc1wiO1xuaW1wb3J0IHsgIHV0aWxzIH0gICBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7IHVuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZnVuY3Rpb24gaTJoZXgoaSkge1xuICAgIHJldHVybiAoXCIwXCIgKyBpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xufVxuXG5mdW5jdGlvbiBwMjU2KG4pIHtcbiAgICBsZXQgbnN0ciA9IG4udG9TdHJpbmcoMTYpO1xuICAgIHdoaWxlIChuc3RyLmxlbmd0aCA8IDY0KSBuc3RyID0gXCIwXCIrbnN0cjtcbiAgICBuc3RyID0gYFwiMHgke25zdHJ9XCJgO1xuICAgIHJldHVybiBuc3RyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwbG9ua0V4cG9ydFNvbGlkaXR5Q2FsbERhdGEoX3Byb29mLCBfcHViKSB7XG4gICAgY29uc3QgcHJvb2YgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKTtcbiAgICBjb25zdCBwdWIgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3B1Yik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlRnJvbU5hbWUocHJvb2YuY3VydmUpO1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBpbnB1dHMgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTxwdWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlucHV0cyAhPSBcIlwiKSBpbnB1dHMgPSBpbnB1dHMgKyBcIixcIjtcbiAgICAgICAgaW5wdXRzID0gaW5wdXRzICsgcDI1NihwdWJbaV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb29mQnVmZiA9IG5ldyBVaW50OEFycmF5KEcxLkYubjgqMio5ICsgRnIubjgqNyk7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQocHJvb2ZCdWZmLCAwLCBHMS5lKHByb29mLkEpKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZChwcm9vZkJ1ZmYsIEcxLkYubjgqMiwgRzEuZShwcm9vZi5CKSk7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQocHJvb2ZCdWZmLCBHMS5GLm44KjQsIEcxLmUocHJvb2YuQykpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHByb29mQnVmZiwgRzEuRi5uOCo2LCBHMS5lKHByb29mLlopKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZChwcm9vZkJ1ZmYsIEcxLkYubjgqOCwgRzEuZShwcm9vZi5UMSkpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHByb29mQnVmZiwgRzEuRi5uOCoxMCwgRzEuZShwcm9vZi5UMikpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHByb29mQnVmZiwgRzEuRi5uOCoxMiwgRzEuZShwcm9vZi5UMykpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHByb29mQnVmZiwgRzEuRi5uOCoxNCwgRzEuZShwcm9vZi5XeGkpKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZChwcm9vZkJ1ZmYsIEcxLkYubjgqMTYsIEcxLmUocHJvb2YuV3hpdykpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44KjE4ICwgRnIuZShwcm9vZi5ldmFsX2EpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCoxOCArIEZyLm44LCBGci5lKHByb29mLmV2YWxfYikpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44KjE4ICsgRnIubjgqMiwgRnIuZShwcm9vZi5ldmFsX2MpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCoxOCArIEZyLm44KjMsIEZyLmUocHJvb2YuZXZhbF9zMSkpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44KjE4ICsgRnIubjgqNCwgRnIuZShwcm9vZi5ldmFsX3MyKSk7XG4gICAgRnIudG9ScHJCRShwcm9vZkJ1ZmYsIEcxLkYubjgqMTggKyBGci5uOCo1LCBGci5lKHByb29mLmV2YWxfencpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCoxOCArIEZyLm44KjYsIEZyLmUocHJvb2YuZXZhbF9yKSk7XG5cbiAgICBjb25zdCBwcm9vZkhleCA9IEFycmF5LmZyb20ocHJvb2ZCdWZmKS5tYXAoaTJoZXgpLmpvaW4oXCJcIik7XG5cbiAgICBjb25zdCBTPVwiMHhcIitwcm9vZkhleCtcIixbXCIraW5wdXRzK1wiXVwiO1xuXG4gICAgcmV0dXJuIFM7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc2V0dXB9IGZyb20gXCIuL3Bsb25rX3NldHVwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZnVsbFByb3ZlfSBmcm9tIFwiLi9wbG9ua19mdWxscHJvdmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcm92ZX0gZnJvbSBcIi4vcGxvbmtfcHJvdmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB2ZXJpZnl9IGZyb20gXCIuL3Bsb25rX3ZlcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5Q2FsbERhdGF9IGZyb20gXCIuL3Bsb25rX2V4cG9ydHNvbGlkaXR5Y2FsbGRhdGEuanNcIjtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIFdlIGV4cG9ydCB0byB6a2V5IHRoZSBzaWduYWxzIGFuZCB2YWx1ZXMgb2YgdGhlIGEsIGIsIGMsIHFsLCBxciwgcW0sIHFvIGFuZCBxY1xuXG4vLyBhLCBiIGFuZCBjIGFyZSBzaWduYWxzIGlkICgzMi1iaXQgaW50ZWdlcnMpXG4vLyBxbCwgcXIsIHFtLCBxbyBhbmQgcWMgYXJlIGZpZWxkIHZhbHVlc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RkZsb25rQ29uc3RhbnRDb25zdHJhaW50KHNpZ25hbDEsIEZyKSB7XG4gICAgcmV0dXJuIFtzaWduYWwxLCAwLCAwLCBGci5vbmUsIEZyLnplcm8sIEZyLnplcm8sIEZyLnplcm8sIEZyLnplcm9dO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RkZsb25rQWRkaXRpb25Db25zdHJhaW50KHNpZ25hbDEsIHNpZ25hbDIsIHNpZ25hbE91dCwgcWwsIHFyLCBxbSwgcW8sIHFjKSB7XG4gICAgcmV0dXJuIFtzaWduYWwxLCBzaWduYWwyLCBzaWduYWxPdXQsIHFsLCBxciwgcW0sIHFvLCBxY107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGRmxvbmtNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnQoc2lnbmFsMSwgc2lnbmFsMiwgc2lnbmFsT3V0LCBxbCwgcXIsIHFtLCBxbywgcWMsIEZyKSB7XG4gICAgcmV0dXJuIFtzaWduYWwxLCBzaWduYWwyLCBzaWduYWxPdXQsIHFsLCBxciwgcW0sIHFvLCBxY107XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5jb25zdCBMSU5FQVJfQ09NQklOQVRJT05fTlVMTEFCTEUgPSAwO1xuY29uc3QgTElORUFSX0NPTUJJTkFUSU9OX0NPTlNUQU5UID0gMTtcbmNvbnN0IExJTkVBUl9DT01CSU5BVElPTl9WQVJJQUJMRSA9IDI7XG5cbmV4cG9ydCBjbGFzcyByMWNzQ29uc3RyYWludFByb2Nlc3NvciB7XG4gICAgY29uc3RydWN0b3IoRnIsIGZuR2V0Q29uc3RhbnRDb25zdHJhaW50LCBmbkdldEFkZGl0aW9uQ29uc3RyYWludCwgZm5HZXRNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnQsIGxvZ2dlcikge1xuICAgICAgICB0aGlzLkZyID0gRnI7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICB0aGlzLmZuR2V0QWRkaXRpb25Db25zdHJhaW50ID0gZm5HZXRBZGRpdGlvbkNvbnN0cmFpbnQ7XG4gICAgICAgIHRoaXMuZm5HZXRNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnQgPSBmbkdldE11bHRpcGxpY2F0aW9uQ29uc3RyYWludDtcbiAgICB9XG5cbiAgICBwcm9jZXNzUjFjc0NvbnN0cmFpbnQoc2V0dGluZ3MsIGxjQSwgbGNCLCBsY0MpIHtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVMaW5lYXJDb21iaW5hdGlvbihsY0EpO1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZUxpbmVhckNvbWJpbmF0aW9uKGxjQik7XG4gICAgICAgIHRoaXMubm9ybWFsaXplTGluZWFyQ29tYmluYXRpb24obGNDKTtcblxuICAgICAgICBjb25zdCBsY3RBID0gdGhpcy5nZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGNBKTtcbiAgICAgICAgY29uc3QgbGN0QiA9IHRoaXMuZ2V0TGluZWFyQ29tYmluYXRpb25UeXBlKGxjQik7XG5cbiAgICAgICAgaWYgKChsY3RBID09PSBMSU5FQVJfQ09NQklOQVRJT05fTlVMTEFCTEUpIHx8IChsY3RCID09PSBMSU5FQVJfQ09NQklOQVRJT05fTlVMTEFCTEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUjFjc0FkZGl0aW9uQ29uc3RyYWludChzZXR0aW5ncywgbGNDKTtcbiAgICAgICAgfSBlbHNlIGlmIChsY3RBID09PSBMSU5FQVJfQ09NQklOQVRJT05fQ09OU1RBTlQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxjQ0MgPSB0aGlzLmpvaW5MaW5lYXJDb21iaW5hdGlvbnMobGNCLCBsY0MsIGxjQVswXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUjFjc0FkZGl0aW9uQ29uc3RyYWludChzZXR0aW5ncywgbGNDQyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGN0QiA9PT0gTElORUFSX0NPTUJJTkFUSU9OX0NPTlNUQU5UKSB7XG4gICAgICAgICAgICBjb25zdCBsY0NDID0gdGhpcy5qb2luTGluZWFyQ29tYmluYXRpb25zKGxjQSwgbGNDLCBsY0JbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1IxY3NBZGRpdGlvbkNvbnN0cmFpbnQoc2V0dGluZ3MsIGxjQ0MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1IxY3NNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnQoc2V0dGluZ3MsIGxjQSwgbGNCLCBsY0MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TGluZWFyQ29tYmluYXRpb25UeXBlKGxpbkNvbSkge1xuICAgICAgICAvLyBsZXQgayA9IHRoaXMuRnIuemVybztcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY29uc3Qgc2lnbmFsSWRzID0gT2JqZWN0LmtleXMobGluQ29tKTtcbiAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYWxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgIGlmIChzaWduYWxJZHNbaV0gPT09IFwiMFwiKSB7XG4gICAgICAgIC8vICAgICAgICAgayA9IHRoaXMuRnIuYWRkKGssIGxpbkNvbVtzaWduYWxJZHNbaV1dKTtcbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIExJTkVBUl9DT01CSU5BVElPTl9WQVJJQUJMRTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICAvLyBpZiAoIXRoaXMuRnIuZXEoaywgdGhpcy5Gci56ZXJvKSkgcmV0dXJuIExJTkVBUl9DT01CSU5BVElPTl9DT05TVEFOVDtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gcmV0dXJuIExJTkVBUl9DT01CSU5BVElPTl9OVUxMQUJMRTtcblxuICAgICAgICBsZXQgayA9IHRoaXMuRnIuemVybztcbiAgICAgICAgbGV0IG4gPSAwO1xuICAgICAgICBjb25zdCBzcyA9IE9iamVjdC5rZXlzKGxpbkNvbSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaW5Db21bc3NbaV1dID09IDBuKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxpbkNvbVtzc1tpXV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNzW2ldID09IDApIHtcbiAgICAgICAgICAgICAgICBrID0gdGhpcy5Gci5hZGQoaywgbGluQ29tW3NzW2ldXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobiA+IDApIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fVkFSSUFCTEU7XG4gICAgICAgIGlmICghdGhpcy5Gci5pc1plcm8oaykpIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fQ09OU1RBTlQ7XG4gICAgICAgIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fTlVMTEFCTEU7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplTGluZWFyQ29tYmluYXRpb24obGluQ29tKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbElkcyA9IE9iamVjdC5rZXlzKGxpbkNvbSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmFsSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5Gci5pc1plcm8obGluQ29tW3NpZ25hbElkc1tpXV0pKSBkZWxldGUgbGluQ29tW3NpZ25hbElkc1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGluQ29tO1xuICAgIH1cblxuICAgIGpvaW5MaW5lYXJDb21iaW5hdGlvbnMobGluQ29tMSwgbGluQ29tMiwgaykge1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcblxuICAgICAgICAvLyBmb3IgKGxldCBzIGluIGxpbkNvbTEpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHZhbCA9IHRoaXMuRnIubXVsKGssIGxpbkNvbTFbc10pO1xuICAgICAgICAvLyAgICAgcmVzW3NdID0gIShzIGluIHJlcykgPyB2YWwgOiB0aGlzLkZyLmFkZCh2YWwsIHJlc1tzXSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gZm9yIChsZXQgcyBpbiBsaW5Db20yKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB2YWwgPSB0aGlzLkZyLm11bChrLCBsaW5Db20yW3NdKTtcbiAgICAgICAgLy8gICAgIHJlc1tzXSA9ICEocyBpbiByZXMpID8gdmFsIDogdGhpcy5Gci5hZGQodmFsLCByZXNbc10pO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgZm9yIChsZXQgcyBpbiBsaW5Db20xKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc1tzXSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzW3NdID0gdGhpcy5Gci5tdWwoaywgbGluQ29tMVtzXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc1tzXSA9IHRoaXMuRnIuYWRkKHJlc1tzXSwgdGhpcy5Gci5tdWwoaywgbGluQ29tMVtzXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgcyBpbiBsaW5Db20yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc1tzXSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzW3NdID0gbGluQ29tMltzXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzW3NdID0gdGhpcy5Gci5hZGQocmVzW3NdLCBsaW5Db20yW3NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZUxpbmVhckNvbWJpbmF0aW9uKHJlcyk7XG4gICAgfVxuXG4gICAgcmVkdWNlQ29lZnMoc2V0dGluZ3MsIGNvbnN0cmFpbnRzQXJyLCBhZGRpdGlvbnNBcnIsIGxpbkNvbSwgbWF4Qykge1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBrOiB0aGlzLkZyLnplcm8sXG4gICAgICAgICAgICBzaWduYWxzOiBbXSxcbiAgICAgICAgICAgIGNvZWZzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IHNpZ25hbElkIGluIGxpbkNvbSkge1xuICAgICAgICAgICAgaWYgKHNpZ25hbElkID09IDApIHtcbiAgICAgICAgICAgICAgICByZXMuayA9IHRoaXMuRnIuYWRkKHJlcy5rLCBsaW5Db21bc2lnbmFsSWRdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGluQ29tW3NpZ25hbElkXSAhPSAwbikge1xuICAgICAgICAgICAgICAgIGNzLnB1c2goW051bWJlcihzaWduYWxJZCksIGxpbkNvbVtzaWduYWxJZF1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChjcy5sZW5ndGggPiBtYXhDKSB7XG4gICAgICAgICAgICBjb25zdCBjMSA9IGNzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBjMiA9IGNzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBzbyA9IHNldHRpbmdzLm5WYXJzKys7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5mbkdldEFkZGl0aW9uQ29uc3RyYWludChcbiAgICAgICAgICAgICAgICBjMVswXSwgYzJbMF0sIHNvLFxuICAgICAgICAgICAgICAgIHRoaXMuRnIubmVnKGMxWzFdKSwgdGhpcy5Gci5uZWcoYzJbMV0pLCB0aGlzLkZyLnplcm8sIHRoaXMuRnIub25lLCB0aGlzLkZyLnplcm8pO1xuXG4gICAgICAgICAgICBjb25zdHJhaW50c0Fyci5wdXNoKGNvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIGFkZGl0aW9uc0Fyci5wdXNoKFtjMVswXSwgYzJbMF0sIGMxWzFdLCBjMlsxXV0pO1xuXG4gICAgICAgICAgICBjcy5wdXNoKFtzbywgdGhpcy5Gci5vbmVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcy5zaWduYWxzW2ldID0gY3NbaV1bMF07XG4gICAgICAgICAgICByZXMuY29lZnNbaV0gPSBjc1tpXVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChyZXMuY29lZnMubGVuZ3RoIDwgbWF4Qykge1xuICAgICAgICAgICAgcmVzLnNpZ25hbHMucHVzaCgwKTtcbiAgICAgICAgICAgIHJlcy5jb2Vmcy5wdXNoKHRoaXMuRnIuemVybyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByb2Nlc3NSMWNzQWRkaXRpb25Db25zdHJhaW50KHNldHRpbmdzLCBsaW5Db20pIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHNBcnIgPSBbXTtcbiAgICAgICAgY29uc3QgYWRkaXRpb25zQXJyID0gW107XG5cbiAgICAgICAgY29uc3QgQyA9IHRoaXMucmVkdWNlQ29lZnMoc2V0dGluZ3MsIGNvbnN0cmFpbnRzQXJyLCBhZGRpdGlvbnNBcnIsIGxpbkNvbSwgMyk7XG5cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmZuR2V0QWRkaXRpb25Db25zdHJhaW50KFxuICAgICAgICAgICAgQy5zaWduYWxzWzBdLCBDLnNpZ25hbHNbMV0sIEMuc2lnbmFsc1syXSxcbiAgICAgICAgICAgIEMuY29lZnNbMF0sIEMuY29lZnNbMV0sIHRoaXMuRnIuemVybywgQy5jb2Vmc1syXSwgQy5rKTtcblxuICAgICAgICBjb25zdHJhaW50c0Fyci5wdXNoKGNvbnN0cmFpbnRzKTtcblxuICAgICAgICByZXR1cm4gW2NvbnN0cmFpbnRzQXJyLCBhZGRpdGlvbnNBcnJdO1xuICAgIH1cblxuICAgIHByb2Nlc3NSMWNzTXVsdGlwbGljYXRpb25Db25zdHJhaW50KHNldHRpbmdzLCBsY0EsIGxjQiwgbGNDKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzQXJyID0gW107XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uc0FyciA9IFtdO1xuXG4gICAgICAgIGNvbnN0IEEgPSB0aGlzLnJlZHVjZUNvZWZzKHNldHRpbmdzLCBjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyLCBsY0EsIDEpO1xuICAgICAgICBjb25zdCBCID0gdGhpcy5yZWR1Y2VDb2VmcyhzZXR0aW5ncywgY29uc3RyYWludHNBcnIsIGFkZGl0aW9uc0FyciwgbGNCLCAxKTtcbiAgICAgICAgY29uc3QgQyA9IHRoaXMucmVkdWNlQ29lZnMoc2V0dGluZ3MsIGNvbnN0cmFpbnRzQXJyLCBhZGRpdGlvbnNBcnIsIGxjQywgMSk7XG5cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmZuR2V0TXVsdGlwbGljYXRpb25Db25zdHJhaW50KFxuICAgICAgICAgICAgQS5zaWduYWxzWzBdLCBCLnNpZ25hbHNbMF0sIEMuc2lnbmFsc1swXSxcbiAgICAgICAgICAgIHRoaXMuRnIubXVsKEEuY29lZnNbMF0sIEIuayksXG4gICAgICAgICAgICB0aGlzLkZyLm11bChBLmssIEIuY29lZnNbMF0pLFxuICAgICAgICAgICAgdGhpcy5Gci5tdWwoQS5jb2Vmc1swXSwgQi5jb2Vmc1swXSksXG4gICAgICAgICAgICB0aGlzLkZyLm5lZyhDLmNvZWZzWzBdKSxcbiAgICAgICAgICAgIHRoaXMuRnIuc3ViKHRoaXMuRnIubXVsKEEuaywgQi5rKSwgQy5rKSk7XG5cbiAgICAgICAgY29uc3RyYWludHNBcnIucHVzaChjb25zdHJhaW50cyk7XG5cbiAgICAgICAgcmV0dXJuIFtjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyXTtcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtCaWdCdWZmZXJ9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGNsYXNzIFBvbHlub21pYWwge1xuICAgIGNvbnN0cnVjdG9yKGNvZWZmaWNpZW50cywgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICB0aGlzLmNvZWYgPSBjb2VmZmljaWVudHM7XG4gICAgICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICAgICAgdGhpcy5GciA9IGN1cnZlLkZyO1xuICAgICAgICB0aGlzLkcxID0gY3VydmUuRzE7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBmcm9tRXZhbHVhdGlvbnMoYnVmZmVyLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgICAgIGxldCBjb2VmZmljaWVudHMgPSBhd2FpdCBjdXJ2ZS5Gci5pZmZ0KGJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bm9taWFsKGNvZWZmaWNpZW50cywgY3VydmUsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21Db2VmZmljaWVudHNBcnJheShhcnJheSwgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgICAgICBsZXQgYnVmZiA9IGFycmF5Lmxlbmd0aCA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcihhcnJheS5sZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIGJ1ZmYuc2V0KGFycmF5W2ldLCBpICogRnIubjgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUG9seW5vbWlhbChidWZmLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVBvbHlub21pYWwocG9seW5vbWlhbCwgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgbGV0IEZyID0gY3VydmUuRnI7XG5cbiAgICAgICAgbGV0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIobGVuZ3RoICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkobGVuZ3RoICogRnIubjgpO1xuICAgICAgICBidWZmLnNldChwb2x5bm9taWFsLmNvZWYuc2xpY2UoKSwgMCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bm9taWFsKGJ1ZmYsIGN1cnZlLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGlzRXF1YWwocG9seW5vbWlhbCkge1xuICAgICAgICBjb25zdCBkZWdyZWUgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBpZiAoZGVncmVlICE9PSBwb2x5bm9taWFsLmRlZ3JlZSgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWUgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5Gci5lcSh0aGlzLmdldENvZWYoaSksIHBvbHlub21pYWwuZ2V0Q29lZihpKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGJsaW5kQ29lZmZpY2llbnRzKGJsaW5kaW5nRmFjdG9ycykge1xuICAgICAgICBibGluZGluZ0ZhY3RvcnMgPSBibGluZGluZ0ZhY3RvcnMgfHwgW107XG5cbiAgICAgICAgY29uc3QgYmxpbmRlZENvZWZmaWNpZW50cyA9ICh0aGlzLmxlbmd0aCgpICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIoKHRoaXMubGVuZ3RoKCkgKyBibGluZGluZ0ZhY3RvcnMubGVuZ3RoKSAqIHRoaXMuRnIubjgpIDpcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KCh0aGlzLmxlbmd0aCgpICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgKiB0aGlzLkZyLm44KTtcblxuICAgICAgICBibGluZGVkQ29lZmZpY2llbnRzLnNldCh0aGlzLmNvZWYsIDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsaW5kaW5nRmFjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYmxpbmRlZENvZWZmaWNpZW50cy5zZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5Gci5hZGQoXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kZWRDb2VmZmljaWVudHMuc2xpY2UoKHRoaXMubGVuZ3RoKCkgKyBpKSAqIHRoaXMuRnIubjgsICh0aGlzLmxlbmd0aCgpICsgaSArIDEpICogdGhpcy5Gci5uOCksXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kaW5nRmFjdG9yc1tpXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKHRoaXMubGVuZ3RoKCkgKyBpKSAqIHRoaXMuRnIubjhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBibGluZGVkQ29lZmZpY2llbnRzLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLkZyLnN1YihcbiAgICAgICAgICAgICAgICAgICAgYmxpbmRlZENvZWZmaWNpZW50cy5zbGljZShpICogdGhpcy5Gci5uOCwgKGkgKyAxKSAqIHRoaXMuRnIubjgpLFxuICAgICAgICAgICAgICAgICAgICBibGluZGluZ0ZhY3RvcnNbaV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGkgKiB0aGlzLkZyLm44XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29lZiA9IGJsaW5kZWRDb2VmZmljaWVudHM7XG4gICAgfVxuXG4gICAgZ2V0Q29lZihpbmRleCkge1xuICAgICAgICBjb25zdCBpX244ID0gaW5kZXggKiB0aGlzLkZyLm44O1xuXG4gICAgICAgIGlmIChpX244ICsgdGhpcy5Gci5uOCA+IHRoaXMuY29lZi5ieXRlTGVuZ3RoKSByZXR1cm4gdGhpcy5Gci56ZXJvO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpO1xuICAgIH1cblxuICAgIHNldENvZWYoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpbmRleCA+ICh0aGlzLmxlbmd0aCgpIC0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZWYgaW5kZXggaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29lZi5zZXQodmFsdWUsIGluZGV4ICogdGhpcy5Gci5uOCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHRvNFQoYnVmZmVyLCBkb21haW5TaXplLCBibGluZGluZ0ZhY3RvcnMsIEZyKSB7XG4gICAgICAgIGJsaW5kaW5nRmFjdG9ycyA9IGJsaW5kaW5nRmFjdG9ycyB8fCBbXTtcbiAgICAgICAgbGV0IGEgPSBhd2FpdCBGci5pZmZ0KGJ1ZmZlcik7XG5cbiAgICAgICAgY29uc3QgYTQgPSAoZG9tYWluU2l6ZSAqIDQpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUgKiA0ICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkoZG9tYWluU2l6ZSAqIDQgKiBGci5uOCk7XG4gICAgICAgIGE0LnNldChhLCAwKTtcblxuICAgICAgICBjb25zdCBBNCA9IGF3YWl0IEZyLmZmdChhNCk7XG5cbiAgICAgICAgaWYgKGJsaW5kaW5nRmFjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbYSwgQTRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYTEgPSBkb21haW5TaXplICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcigoZG9tYWluU2l6ZSArIGJsaW5kaW5nRmFjdG9ycy5sZW5ndGgpICogRnIubjgpIDpcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KChkb21haW5TaXplICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgKiBGci5uOCk7XG5cbiAgICAgICAgYTEuc2V0KGEsIDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsaW5kaW5nRmFjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYTEuc2V0KFxuICAgICAgICAgICAgICAgIEZyLmFkZChcbiAgICAgICAgICAgICAgICAgICAgYTEuc2xpY2UoKGRvbWFpblNpemUgKyBpKSAqIEZyLm44LCAoZG9tYWluU2l6ZSArIGkgKyAxKSAqIEZyLm44KSxcbiAgICAgICAgICAgICAgICAgICAgYmxpbmRpbmdGYWN0b3JzW2ldXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZG9tYWluU2l6ZSArIGkpICogRnIubjhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhMS5zZXQoXG4gICAgICAgICAgICAgICAgRnIuc3ViKFxuICAgICAgICAgICAgICAgICAgICBhMS5zbGljZShpICogRnIubjgsIChpICsgMSkgKiBGci5uOCksXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kaW5nRmFjdG9yc1tpXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaSAqIEZyLm44XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFthMSwgQTRdO1xuICAgIH1cblxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuY29lZi5ieXRlTGVuZ3RoIC8gdGhpcy5Gci5uODtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gTWF0aC5mbG9vcih0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2x5bm9taWFsIGNvZWZmaWNpZW50cyBidWZmZXIgaGFzIGluY29ycmVjdCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJQb2x5bm9taWFsIGhhcyBsZW5ndGggemVyb1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cblxuICAgIGRlZ3JlZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoKCkgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICBpZiAoIXRoaXMuRnIuZXEodGhpcy5Gci56ZXJvLCB0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUocG9pbnQpIHtcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuRnIuemVybztcblxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kZWdyZWUoKSArIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29lZmZpY2llbnQgPSB0aGlzLmNvZWYuc2xpY2UoaV9uOCAtIHRoaXMuRnIubjgsIGlfbjgpO1xuICAgICAgICAgICAgcmVzID0gdGhpcy5Gci5hZGQoY3VycmVudENvZWZmaWNpZW50LCB0aGlzLkZyLm11bChyZXMsIHBvaW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZhc3RFdmFsdWF0ZShwb2ludCkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGxldCBuVGhyZWFkcyA9IDM7XG5cbiAgICAgICAgbGV0IG5Db2VmcyA9IHRoaXMuZGVncmVlKCkgKyAxO1xuICAgICAgICBsZXQgY29lZnNUaHJlYWQgPSBwYXJzZUludChuQ29lZnMgLyBuVGhyZWFkcyk7XG4gICAgICAgIGxldCByZXNpZHVhbENvZWZzID0gbkNvZWZzIC0gY29lZnNUaHJlYWQgKiBuVGhyZWFkcztcblxuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGxldCB4TiA9IFtdO1xuXG4gICAgICAgIHhOWzBdID0gRnIub25lO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblRocmVhZHM7IGkrKykge1xuICAgICAgICAgICAgcmVzW2ldID0gRnIuemVybztcblxuICAgICAgICAgICAgbGV0IG5Db2VmcyA9IGkgPT09IChuVGhyZWFkcyAtIDEpID8gY29lZnNUaHJlYWQgKyByZXNpZHVhbENvZWZzIDogY29lZnNUaHJlYWQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gbkNvZWZzOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgcmVzW2ldID0gRnIuYWRkKHRoaXMuZ2V0Q29lZigoaSAqIGNvZWZzVGhyZWFkKSArIGogLSAxKSwgRnIubXVsKHJlc1tpXSwgcG9pbnQpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB4TlswXSA9IEZyLm11bCh4TlswXSwgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuVGhyZWFkczsgaSsrKSB7XG4gICAgICAgICAgICByZXNbMF0gPSBGci5hZGQocmVzWzBdLCBGci5tdWwoeE5baSAtIDFdLCByZXNbaV0pKTtcbiAgICAgICAgICAgIHhOW2ldID0gRnIubXVsKHhOW2kgLSAxXSwgeE5bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc1swXTtcbiAgICB9XG5cbiAgICBhZGQocG9seW5vbWlhbCwgYmxpbmRpbmdWYWx1ZSkge1xuICAgICAgICBsZXQgb3RoZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG9seW5vbWlhbC5sZW5ndGgoKSA+IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIG90aGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRoaXNMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICBjb25zdCBwb2x5TGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh0aGlzTGVuZ3RoLCBwb2x5TGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSBpIDwgdGhpc0xlbmd0aCA/IHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkgOiB0aGlzLkZyLnplcm87XG4gICAgICAgICAgICBsZXQgYiA9IGkgPCBwb2x5TGVuZ3RoID8gcG9seW5vbWlhbC5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KSA6IHRoaXMuRnIuemVybztcblxuICAgICAgICAgICAgaWYgKGJsaW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLkZyLm11bChiLCBibGluZGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgICAgIHBvbHlub21pYWwuY29lZi5zZXQodGhpcy5Gci5hZGQoYSwgYiksIGlfbjgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuYWRkKGEsIGIpLCBpX244KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvZWY7XG4gICAgICAgICAgICB0aGlzLmNvZWYgPSBwb2x5bm9taWFsLmNvZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdWIocG9seW5vbWlhbCwgYmxpbmRpbmdWYWx1ZSkge1xuICAgICAgICBsZXQgb3RoZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG9seW5vbWlhbC5sZW5ndGgoKSA+IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIG90aGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRoaXNMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICBjb25zdCBwb2x5TGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh0aGlzTGVuZ3RoLCBwb2x5TGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSBpIDwgdGhpc0xlbmd0aCA/IHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkgOiB0aGlzLkZyLnplcm87XG4gICAgICAgICAgICBsZXQgYiA9IGkgPCBwb2x5TGVuZ3RoID8gcG9seW5vbWlhbC5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KSA6IHRoaXMuRnIuemVybztcblxuICAgICAgICAgICAgaWYgKGJsaW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLkZyLm11bChiLCBibGluZGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgICAgIHBvbHlub21pYWwuY29lZi5zZXQodGhpcy5Gci5zdWIoYSwgYiksIGlfbjgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuc3ViKGEsIGIpLCBpX244KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvZWY7XG4gICAgICAgICAgICB0aGlzLmNvZWYgPSBwb2x5bm9taWFsLmNvZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdWxTY2FsYXIodmFsdWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlfbjggPSBpICogdGhpcy5Gci5uODtcblxuICAgICAgICAgICAgdGhpcy5jb2VmLnNldCh0aGlzLkZyLm11bCh0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpLCB2YWx1ZSksIGlfbjgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2NhbGFyKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IDAgPT09IHRoaXMubGVuZ3RoKCkgPyB0aGlzLkZyLnplcm8gOiB0aGlzLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCk7XG4gICAgICAgIHRoaXMuY29lZi5zZXQodGhpcy5Gci5hZGQoY3VycmVudFZhbHVlLCB2YWx1ZSksIDApO1xuICAgIH1cblxuICAgIHN1YlNjYWxhcih2YWx1ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAwID09PSB0aGlzLmxlbmd0aCgpID8gdGhpcy5Gci56ZXJvIDogdGhpcy5jb2VmLnNsaWNlKDAsIHRoaXMuRnIubjgpO1xuICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuc3ViKGN1cnJlbnRWYWx1ZSwgdmFsdWUpLCAwKTtcbiAgICB9XG5cbiAgICAvLyBNdWx0aXBseSBjdXJyZW50IHBvbHlub21pYWwgYnkgdGhlIHBvbHlub21pYWwgKFggLSB2YWx1ZSlcbiAgICBieVhTdWJWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGNvbnN0IHJlc2l6ZSA9ICFGci5lcShGci56ZXJvLCB0aGlzLmdldENvZWYodGhpcy5sZW5ndGgoKSAtIDEpKTtcblxuICAgICAgICBjb25zdCBsZW5ndGggPSByZXNpemUgPyB0aGlzLmxlbmd0aCgpICsgMSA6IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID8gbmV3IEJpZ0J1ZmZlcihsZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShsZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGxldCBwb2wgPSBuZXcgUG9seW5vbWlhbChidWZmLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgLy8gU3RlcCAwOiBTZXQgY3VycmVudCBjb2VmZmljaWVudHMgdG8gdGhlIG5ldyBidWZmZXIgc2hpZnRlZCBvbmUgcG9zaXRpb25cbiAgICAgICAgcG9sLmNvZWYuc2V0KHRoaXMuY29lZi5zbGljZSgwLCAobGVuZ3RoIC0gMSkgKiBGci5uOCksIDMyKTtcblxuICAgICAgICAvLyBTdGVwIDE6IG11bHRpcGx5IGVhY2ggY29lZmZpY2llbnQgYnkgKC12YWx1ZSlcbiAgICAgICAgdGhpcy5tdWxTY2FsYXIoRnIubmVnKHZhbHVlKSk7XG5cbiAgICAgICAgLy8gU3RlcCAyOiBBZGQgY3VycmVudCBwb2x5bm9taWFsIHRvIGRlc3RpbmF0aW9uIHBvbHlub21pYWxcbiAgICAgICAgcG9sLmFkZCh0aGlzKTtcblxuICAgICAgICAvLyBTd2FwIGJ1ZmZlcnNcbiAgICAgICAgdGhpcy5jb2VmID0gcG9sLmNvZWY7XG4gICAgfVxuXG4gICAgLy8gTXVsdGlwbHkgY3VycmVudCBwb2x5bm9taWFsIGJ5IHRoZSBwb2x5bm9taWFsIChYXm4gKyB2YWx1ZSlcbiAgICBieVhOU3ViVmFsdWUobiwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgRnIgPSB0aGlzLkZyO1xuICAgICAgICBjb25zdCByZXNpemUgPSAhKHRoaXMubGVuZ3RoKCkgLSBuIC0gMSA+PSB0aGlzLmRlZ3JlZSgpKTtcblxuICAgICAgICBjb25zdCBsZW5ndGggPSByZXNpemUgPyB0aGlzLmxlbmd0aCgpICsgbiA6IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID8gbmV3IEJpZ0J1ZmZlcihsZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShsZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGxldCBwb2wgPSBuZXcgUG9seW5vbWlhbChidWZmLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgLy8gU3RlcCAwOiBTZXQgY3VycmVudCBjb2VmZmljaWVudHMgdG8gdGhlIG5ldyBidWZmZXIgc2hpZnRlZCBvbmUgcG9zaXRpb25cbiAgICAgICAgcG9sLmNvZWYuc2V0KHRoaXMuY29lZi5zbGljZSgwLCAodGhpcy5kZWdyZWUoKSArIDEpICogMzIsICksIG4gKiAzMik7XG5cbiAgICAgICAgLy8gU3RlcCAxOiBtdWx0aXBseSBlYWNoIGNvZWZmaWNpZW50IGJ5ICgtIHZhbHVlKVxuICAgICAgICB0aGlzLm11bFNjYWxhcih2YWx1ZSk7XG5cbiAgICAgICAgLy8gU3RlcCAyOiBBZGQgY3VycmVudCBwb2x5bm9taWFsIHRvIGRlc3RpbmF0aW9uIHBvbHlub21pYWxcbiAgICAgICAgcG9sLmFkZCh0aGlzKTtcblxuICAgICAgICAvLyBTd2FwIGJ1ZmZlcnNcbiAgICAgICAgdGhpcy5jb2VmID0gcG9sLmNvZWY7XG4gICAgfVxuXG4gICAgLy8gRXVjbGlkZWFuIGRpdmlzaW9uXG4gICAgZGl2QnkocG9seW5vbWlhbCkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGNvbnN0IGRlZ3JlZUEgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBjb25zdCBkZWdyZWVCID0gcG9seW5vbWlhbC5kZWdyZWUoKTtcblxuICAgICAgICBsZXQgcG9sUiA9IG5ldyBQb2x5bm9taWFsKHRoaXMuY29lZiwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgIHRoaXMuY29lZiA9IHRoaXMubGVuZ3RoKCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIodGhpcy5sZW5ndGgoKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKCkgKiBGci5uOCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGRlZ3JlZUEgLSBkZWdyZWVCOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2VmKGksIEZyLmRpdihwb2xSLmdldENvZWYoaSArIGRlZ3JlZUIpLCBwb2x5bm9taWFsLmdldENvZWYoZGVncmVlQikpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IGRlZ3JlZUI7IGorKykge1xuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpICsgaiwgRnIuc3ViKHBvbFIuZ2V0Q29lZihpICsgaiksIEZyLm11bCh0aGlzLmdldENvZWYoaSksIHBvbHlub21pYWwuZ2V0Q29lZihqKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2xSO1xuICAgIH1cblxuICAgIC8vIERpdmlzaW9uIGJ5IGEgUG9seW5vbWlhbCBvZiB0aGUgZm9ybSAoeF5tIC0gYmV0YSlcbiAgICBkaXZCeU1vbmljKG0sIGJldGEpIHtcbiAgICAgICAgY29uc3QgRnIgPSB0aGlzLkZyO1xuXG4gICAgICAgIGxldCBkID0gdGhpcy5kZWdyZWUoKTtcblxuICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5sZW5ndGgoKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgoKSAqIEZyLm44KTtcbiAgICAgICAgbGV0IHF1b3RpZW50ID0gbmV3IFBvbHlub21pYWwoYnVmZmVyLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgbGV0IGJBcnIgPSBbXTtcblxuICAgICAgICAvLyBBZGQgdGhlIG0gbGVhZGluZyBjb2VmZmljaWVudHMgb2YgdGhpcyB0byBxdW90aWVudFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcXVvdGllbnQuc2V0Q29lZigoZCAtIGkpIC0gbSwgdGhpcy5nZXRDb2VmKGQgLSBpKSk7XG4gICAgICAgICAgICBiQXJyW2ldID0gdGhpcy5nZXRDb2VmKGQgLSBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuVGhyZWFkcyA9IG07XG5cbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBkIC0gMiAqIG0gLSBrOyBpID49IDA7IGkgPSBpIC0gblRocmVhZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDApIGJyZWFrO1xuICAgICAgICAgICAgICAgIGxldCBpZHggPSBrO1xuICAgICAgICAgICAgICAgIGJBcnJbaWR4XSA9IEZyLmFkZCh0aGlzLmdldENvZWYoaSArIG0pLCBGci5tdWwoYkFycltpZHhdLCBiZXRhKSk7XG5cbiAgICAgICAgICAgICAgICBxdW90aWVudC5zZXRDb2VmKGksIGJBcnJbaWR4XSk7XG4gICAgICAgICAgICAgICAgaiA9IChqICsgMSkgJSBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2VmID0gcXVvdGllbnQuY29lZjtcbiAgICB9XG5cbiAgICBkaXZCeVZhbmlzaGluZyhuLCBiZXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZ3JlZSgpIDwgbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGl2QnlWYW5pc2hpbmcgcG9seW5vbWlhbCBkaXZpc29yIG11c3QgYmUgb2YgZGVncmVlIGxvd2VyIHRoYW4gdGhlIGRpdmlkZW5kIHBvbHlub21pYWxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG5cbiAgICAgICAgbGV0IHBvbFIgPSBuZXcgUG9seW5vbWlhbCh0aGlzLmNvZWYsIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgICB0aGlzLmNvZWYgPSB0aGlzLmxlbmd0aCgpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICBuZXcgQmlnQnVmZmVyKHRoaXMubGVuZ3RoKCkgKiBGci5uOCkgOiBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpICogRnIubjgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlbmd0aCgpIC0gMTsgaSA+PSBuOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBsZWFkaW5nQ29lZiA9IHBvbFIuZ2V0Q29lZihpKTtcbiAgICAgICAgICAgIGlmIChGci5lcShGci56ZXJvLCBsZWFkaW5nQ29lZikpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBwb2xSLnNldENvZWYoaSwgRnIuemVybyk7XG4gICAgICAgICAgICBwb2xSLnNldENvZWYoaSAtIG4sIEZyLmFkZChwb2xSLmdldENvZWYoaSAtIG4pLCBGci5tdWwoYmV0YSwgbGVhZGluZ0NvZWYpKSk7XG4gICAgICAgICAgICB0aGlzLnNldENvZWYoaSAtIG4sIEZyLmFkZCh0aGlzLmdldENvZWYoaSAtIG4pLCBsZWFkaW5nQ29lZikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbFI7XG4gICAgfVxuXG4gICAgZGl2QnlWYW5pc2hpbmcyKG0sIGJldGEpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVncmVlKCkgPCBtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXZCeVZhbmlzaGluZyBwb2x5bm9taWFsIGRpdmlzb3IgbXVzdCBiZSBvZiBkZWdyZWUgbG93ZXIgdGhhbiB0aGUgZGl2aWRlbmQgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IEZyID0gdGhpcy5GcjtcblxuICAgICAgICBsZXQgcG9sUiA9IG5ldyBQb2x5bm9taWFsKHRoaXMuY29lZiwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgIHRoaXMuY29lZiA9IHRoaXMubGVuZ3RoKCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIodGhpcy5sZW5ndGgoKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKCkgKiBGci5uOCk7XG5cbiAgICAgICAgbGV0IG5UaHJlYWRzID0gMztcbiAgICAgICAgbGV0IG5Ub3RhbCA9IHRoaXMubGVuZ3RoKCkgLSBtO1xuICAgICAgICBsZXQgbkVsZW1lbnRzQ2h1bmsgPSBNYXRoLmZsb29yKG5Ub3RhbCAvIG5UaHJlYWRzKTtcbiAgICAgICAgbGV0IG5FbGVtZW50c0xhc3QgPSBuVG90YWwgLSAoblRocmVhZHMgLSAxKSAqIG5FbGVtZW50c0NodW5rO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKG5Ub3RhbCk7XG4gICAgICAgIGNvbnNvbGUubG9nKG5FbGVtZW50c0NodW5rICsgXCIgIFwiICsgbkVsZW1lbnRzTGFzdCk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgblRocmVhZHM7IGsrKykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCI+IFRocmVhZCBcIiArIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChrID09PSAwID8gbkVsZW1lbnRzTGFzdCA6IG5FbGVtZW50c0NodW5rKTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGxldCBpZHhEc3QgPSBpIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoayAhPT0gMCkgaWR4RHN0ICs9IChrIC0gMSkgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgbGV0IGlkeFNyYyA9IGlkeERzdCArIG07XG5cbiAgICAgICAgICAgICAgICBsZXQgbGVhZGluZ0NvZWYgPSBwb2xSLmdldENvZWYoaWR4U3JjKTtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoRnIuemVybywgbGVhZGluZ0NvZWYpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpZHhTcmMsIEZyLnplcm8pO1xuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpZHhEc3QsIEZyLmFkZChwb2xSLmdldENvZWYoaWR4RHN0KSwgRnIubXVsKGJldGEsIGxlYWRpbmdDb2VmKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29lZihpZHhEc3QsIEZyLmFkZCh0aGlzLmdldENvZWYoaWR4RHN0KSwgbGVhZGluZ0NvZWYpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpZHhEc3QgKyBcIiA8LS0gXCIgKyBpZHhTcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmludCgpO1xuICAgICAgICByZXR1cm4gcG9sUjtcbiAgICB9XG5cbiAgICBmYXN0RGl2QnlWYW5pc2hpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBtID0gZGF0YVtpXVswXTtcbiAgICAgICAgICAgIGxldCBiZXRhID0gZGF0YVtpXVsxXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVncmVlKCkgPCBtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGl2QnlWYW5pc2hpbmcgcG9seW5vbWlhbCBkaXZpc29yIG11c3QgYmUgb2YgZGVncmVlIGxvd2VyIHRoYW4gdGhlIGRpdmlkZW5kIHBvbHlub21pYWxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBuVGhyZWFkcyA9IDU7XG4gICAgICAgICAgICBsZXQgbkVsZW1lbnRzID0gdGhpcy5sZW5ndGgoKSAtIG07XG4gICAgICAgICAgICBsZXQgbkVsZW1lbnRzQnVja2V0ID0gTWF0aC5mbG9vcihuRWxlbWVudHMgLyBuVGhyZWFkcyAvIG0pO1xuICAgICAgICAgICAgbGV0IG5FbGVtZW50c0NodW5rID0gbkVsZW1lbnRzQnVja2V0ICogbTtcbiAgICAgICAgICAgIGxldCBuRWxlbWVudHNMYXN0ID0gbkVsZW1lbnRzIC0gblRocmVhZHMgKiBuRWxlbWVudHNDaHVuaztcblxuICAgICAgICAgICAgLy9JbiBDKysgaW1wbGVtZW50YXRpb24gdGhpcyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgb25seSBvbmNlIG91dHNpZGUgdGhlIGxvb3BcbiAgICAgICAgICAgIGxldCBwb2xUbXAgPSBuZXcgUG9seW5vbWlhbCh0aGlzLmxlbmd0aCgpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgoKSAqIEZyLm44KSwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgICAgICBsZXQgcHRyID0gdGhpcy5jb2VmO1xuICAgICAgICAgICAgdGhpcy5jb2VmID0gcG9sVG1wLmNvZWY7XG4gICAgICAgICAgICBwb2xUbXAuY29lZiA9IHB0cjtcblxuICAgICAgICAgICAgLy8gU1RFUCAxOiBTZXRlamFyIGVscyBtIHZhbG9ycyBkZWwgc2Vnw7xlbnQgYnVja2V0IGFsIGNodW5rIGFjdHVhbCwgUEFSQUxFTMK3TElUWkFSXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4MCA9IChrICsgMSkgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2VmKGlkeDAgKyBpIC0gbSwgcG9sVG1wLmdldENvZWYoaWR4MCArIGkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5FbGVtZW50c0NodW5rIC0gbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBpZHgwIC0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBGci5hZGQocG9sVG1wLmdldENvZWYob2Zmc2V0KSwgRnIubXVsKGJldGEsIHRoaXMuZ2V0Q29lZihvZmZzZXQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29lZihvZmZzZXQgLSBtLCB2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TVEVQIDI6IFNldGVqYXIgZWxzIHZhbG9ycyBkZWwgZWxlbWVudHMgbGFzdCBOTyBQQVJBTMK3TEVMSVRaQVJcbiAgICAgICAgICAgIGxldCBpZHgwID0gbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgIGxldCBwZW5kaW5nID0gbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbSAmJiBwZW5kaW5nOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvZWYoaWR4MCAtIGkgLSAxLCBwb2xUbXAuZ2V0Q29lZihpZHgwICsgbSAtIGkgLSAxKSk7XG4gICAgICAgICAgICAgICAgcGVuZGluZy0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmc7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBpZHgwIC0gaSAtIDE7XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IEZyLmFkZChwb2xUbXAuZ2V0Q29lZihvZmZzZXQpLCBGci5tdWwoYmV0YSwgdGhpcy5nZXRDb2VmKG9mZnNldCkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvZWYob2Zmc2V0IC0gbSwgdmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TdGVwIDM6IGNhbGN1bGFyIGFjdW11bGF0cyBOTyAgUEFSQUxFTMK3TElUWkFSXG5cbiAgICAgICAgICAgIGxldCBhY2MgPSBbXTtcbiAgICAgICAgICAgIGxldCBiZXRhUG93ID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuRWxlbWVudHNCdWNrZXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJldGFQb3cgPSBGci5tdWwoYmV0YVBvdywgYmV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY3VycmVudEJldGEgPSBGci5vbmU7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGsgPSBuVGhyZWFkczsgayA+IDA7IGstLSkge1xuICAgICAgICAgICAgICAgIGxldCBpZFRocmVhZCA9IGsgLSAxO1xuICAgICAgICAgICAgICAgIGxldCBpZHgwID0gaWRUaHJlYWQgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgYWNjW2lkVGhyZWFkXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjW2lkVGhyZWFkXVtpXSA9IHRoaXMuZ2V0Q29lZihpZHgwICsgaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09IG5UaHJlYWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NbaWRUaHJlYWRdW2ldID0gRnIuYWRkKGFjY1tpZFRocmVhZF1baV0sIEZyLm11bChiZXRhUG93LCBhY2NbaWRUaHJlYWQgKyAxXVtpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRCZXRhID0gRnIubXVsKGN1cnJlbnRCZXRhLCBiZXRhUG93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TVEVQIDQgcmVjYWxjdWxhciAgUEFSQUxFTMK3TElUWkFSXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcblxuICAgICAgICAgICAgICAgIGxldCBpZHgwID0gayAqIG5FbGVtZW50c0NodW5rICsgbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEJldGEgPSBiZXRhOyAvL1F1YW4gaG9wYXNzZW0gYSBDKysgaSBobyBwYXJhbGVsaXR6ZW0gYXF1ZXN0YSB2YXJpYWJsZSBoYSBkZSBzZXIgcHJpdmFkYVxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TSA9IG0gLSAxO1xuXG4gICAgICAgICAgICAgICAgbGV0IGxpbWl0ID0gayA9PT0gMCA/IG5FbGVtZW50c0xhc3QgOiBuRWxlbWVudHNDaHVuaztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IGlkeDAgLSBpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IEZyLmFkZCh0aGlzLmdldENvZWYob2Zmc2V0KSwgRnIubXVsKGN1cnJlbnRCZXRhLCBhY2Nba11bY3VycmVudE1dKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2VmKG9mZnNldCwgdmFsKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBtb2R1bGFyIG9wZXJhdGlvbnMgaW4gZWFjaCBsb29wLi4uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE0gPSBtIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCZXRhID0gRnIubXVsKGN1cnJlbnRCZXRhLCBiZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIERpdmlkZSBwb2x5bm9taWFsIGJ5IFggLSB2YWx1ZVxuICAgIGRpdkJ5WFN1YlZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvZWZzID0gdGhpcy5sZW5ndGgoKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCkgOiBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCk7XG5cbiAgICAgICAgY29lZnMuc2V0KHRoaXMuRnIuemVybywgKHRoaXMubGVuZ3RoKCkgLSAxKSAqIHRoaXMuRnIubjgpO1xuICAgICAgICBjb2Vmcy5zZXQodGhpcy5jb2VmLnNsaWNlKCh0aGlzLmxlbmd0aCgpIC0gMSkgKiB0aGlzLkZyLm44LCB0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCksICh0aGlzLmxlbmd0aCgpIC0gMikgKiB0aGlzLkZyLm44KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoKCkgLSAzOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGlfbjggPSBpICogdGhpcy5Gci5uODtcbiAgICAgICAgICAgIGNvZWZzLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLkZyLmFkZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKGlfbjggKyB0aGlzLkZyLm44LCBpX244ICsgMiAqIHRoaXMuRnIubjgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZyLm11bCh2YWx1ZSwgY29lZnMuc2xpY2UoaV9uOCArIHRoaXMuRnIubjgsIGlfbjggKyAyICogdGhpcy5Gci5uOCkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpICogdGhpcy5Gci5uOFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuRnIuZXEoXG4gICAgICAgICAgICB0aGlzLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCksXG4gICAgICAgICAgICB0aGlzLkZyLm11bCh0aGlzLkZyLm5lZyh2YWx1ZSksIGNvZWZzLnNsaWNlKDAsIHRoaXMuRnIubjgpKVxuICAgICAgICApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2x5bm9taWFsIGRvZXMgbm90IGRpdmlkZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29lZiA9IGNvZWZzO1xuICAgIH1cblxuICAgIGRpdlpoKGRvbWFpblNpemUsIGV4dGVuc2lvbnMgPSA0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIubmVnKHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkpLCBpX244KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBkb21haW5TaXplOyBpIDwgZG9tYWluU2l6ZSAqIGV4dGVuc2lvbnM7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaV9uOCA9IGkgKiB0aGlzLkZyLm44O1xuXG4gICAgICAgICAgICBjb25zdCBhID0gdGhpcy5Gci5zdWIoXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKChpIC0gZG9tYWluU2l6ZSkgKiB0aGlzLkZyLm44LCAoaSAtIGRvbWFpblNpemUpICogdGhpcy5Gci5uOCArIHRoaXMuRnIubjgpLFxuICAgICAgICAgICAgICAgIHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNvZWYuc2V0KGEsIGlfbjgpO1xuICAgICAgICAgICAgaWYgKGkgPiAoZG9tYWluU2l6ZSAqIChleHRlbnNpb25zLTEpIC0gZXh0ZW5zaW9ucykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuRnIuaXNaZXJvKGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbHlub21pYWwgaXMgbm90IGRpdmlzaWJsZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkaXZCeVplcm9maWVyKG4sIGJldGEpIHtcbiAgICAgICAgbGV0IEZyID0gdGhpcy5GcjtcbiAgICAgICAgY29uc3QgaW52QmV0YSA9IEZyLmludihiZXRhKTtcbiAgICAgICAgY29uc3QgaW52QmV0YU5lZyA9IEZyLm5lZyhpbnZCZXRhKTtcblxuICAgICAgICBsZXQgaXNPbmUgPSBGci5lcShGci5vbmUsIGludkJldGFOZWcpO1xuICAgICAgICBsZXQgaXNOZWdPbmUgPSBGci5lcShGci5uZWdvbmUsIGludkJldGFOZWcpO1xuXG4gICAgICAgIGlmICghaXNPbmUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaV9uOCA9IGkgKiB0aGlzLkZyLm44O1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgaW52QmV0YU5lZyA9PT0gLTEgd2UnbGwgc2F2ZSBhIG11bHRpcGxpY2F0aW9uIGNoYW5naW5nIGl0IGJ5IGEgbmVnIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgICAgICBpZiAoaXNOZWdPbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IEZyLm5lZyh0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gRnIubXVsKGludkJldGFOZWcsIHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY29lZi5zZXQoZWxlbWVudCwgaV9uOCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpc09uZSA9IEZyLmVxKEZyLm9uZSwgaW52QmV0YSk7XG4gICAgICAgIGlzTmVnT25lID0gRnIuZXEoRnIubmVnb25lLCBpbnZCZXRhKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gbjsgaSA8IHRoaXMubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaV9uOCA9IGkgKiB0aGlzLkZyLm44O1xuICAgICAgICAgICAgY29uc3QgaV9wcmV2X244ID0gKGkgLSBuKSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5Gci5zdWIoXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKGlfcHJldl9uOCwgaV9wcmV2X244ICsgdGhpcy5Gci5uOCksXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gSWYgaW52QmV0YSA9PT0gMSB3ZSdsbCBub3QgZG8gYW55dGhpbmdcbiAgICAgICAgICAgIGlmKCFpc09uZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGludkJldGEgPT09IC0xIHdlJ2xsIHNhdmUgYSBtdWx0aXBsaWNhdGlvbiBjaGFuZ2luZyBpdCBieSBhIG5lZyBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAgICAgICAgaWYoaXNOZWdPbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IEZyLm5lZyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gRnIubXVsKGludkJldGEsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb2VmLnNldChlbGVtZW50LCBpX244KTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcG9seW5vbWlhbCBpcyBkaXZpc2libGUgYnkgY2hlY2tpbmcgaWYgbiBoaWdoIGNvZWZmaWNpZW50cyBhcmUgemVyb1xuICAgICAgICAgICAgaWYgKGkgPiB0aGlzLmxlbmd0aCgpIC0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuRnIuaXNaZXJvKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbHlub21pYWwgaXMgbm90IGRpdmlzaWJsZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbi8vIGZ1bmN0aW9uIGRpdmlkZUJ5VmFuaXNoaW5nKGYsIG4sIHApIHtcbi8vICAgICAvLyBwb2x5bm9taWFsIGRpdmlzaW9uIGYoWCkgLyAoWF5uIC0gMSkgd2l0aCByZW1haW5kZXJcbi8vICAgICAvLyB2ZXJ5IGNoZWFwLCAwIG11bHRpcGxpY2F0aW9uc1xuLy8gICAgIC8vIHN0cmF0ZWd5OlxuLy8gICAgIC8vIHN0YXJ0IHdpdGggcShYKSA9IDAsIHIoWCkgPSBmKFgpXG4vLyAgICAgLy8gdGhlbiBzdGFydCBjaGFuZ2luZyBxLCByIHdoaWxlIHByZXNlcnZpbmcgdGhlIGlkZW50aXR5OlxuLy8gICAgIC8vIGYoWCkgPSBxKFgpICogKFhebiAtIDEpICsgcihYKVxuLy8gICAgIC8vIGluIGV2ZXJ5IHN0ZXAsIG1vdmUgaGlnaGVzdC1kZWdyZWUgdGVybSBvZiByIGludG8gdGhlIHByb2R1Y3Rcbi8vICAgICAvLyA9PiByIGV2ZW50dWFsbHkgaGFzIGRlZ3JlZSA8IG4gYW5kIHdlJ3JlIGRvbmVcbi8vICAgICBsZXQgcSA9IEFycmF5KGYubGVuZ3RoKS5maWxsKDBuKTtcbi8vICAgICBsZXQgciA9IFsuLi5mXTtcbi8vICAgICBmb3IgKGxldCBpID0gZi5sZW5ndGggLSAxOyBpID49IG47IGktLSkge1xuLy8gICAgICAgICBsZXQgbGVhZGluZ0NvZWZmID0gcltpXTtcbi8vICAgICAgICAgaWYgKGxlYWRpbmdDb2VmZiA9PT0gMG4pIGNvbnRpbnVlO1xuLy8gICAgICAgICByW2ldID0gMG47XG4vLyAgICAgICAgIHJbaSAtIG5dID0gbW9kKHJbaSAtIG5dICsgbGVhZGluZ0NvZWZmLCBwKTtcbi8vICAgICAgICAgcVtpIC0gbl0gPSBtb2QocVtpIC0gbl0gKyBsZWFkaW5nQ29lZmYsIHApO1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gW3EsIHJdO1xuLy8gfVxuXG4gICAgYnlYKCkge1xuICAgICAgICBjb25zdCBjb2VmcyA9ICh0aGlzLmxlbmd0aCgpICsgMSkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIodGhpcy5jb2VmLmJ5dGVMZW5ndGggKyB0aGlzLkZyLm44KSA6IG5ldyBVaW50OEFycmF5KHRoaXMuY29lZi5ieXRlTGVuZ3RoICsgdGhpcy5Gci5uOCk7XG4gICAgICAgIGNvZWZzLnNldCh0aGlzLkZyLnplcm8sIDApO1xuICAgICAgICBjb2Vmcy5zZXQodGhpcy5jb2VmLCB0aGlzLkZyLm44KTtcblxuICAgICAgICB0aGlzLmNvZWYgPSBjb2VmcztcbiAgICB9XG5cbi8vIENvbXB1dGUgYSBuZXcgcG9seW5vbWlhbCBmKHhebikgZnJvbSBmKHgpXG4vLyBmKHgpICAgPSBhXzAgKyBhXzHCt3ggKyBhXzLCt3heMiArIC4uLiArIGFfasK3eF5qXG4vLyBmKHhebikgPSBhXzAgKyBhXzHCt3hebiArIGFfMsK3eF4ybiArIC4uLiArIGFfasK3eF5qblxuICAgIHN0YXRpY1xuICAgIGFzeW5jIGV4cFgocG9seW5vbWlhbCwgbiwgdHJ1bmNhdGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBGciA9IHBvbHlub21pYWwuRnI7XG5cbiAgICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgICAgICAvLyBuID09IDAgbm90IGFsbG93ZWQgYmVjYXVzZSBpdCBoYXMgbm8gc2Vuc2UsIGJ1dCBpZiBpdCdzIG5lY2Vzc2FyeSB3ZSBoYXZlIHRvIHJldHVyblxuICAgICAgICAgICAgLy8gYSB6ZXJvIGRlZ3JlZSBwb2x5bm9taWFsIHdpdGggYSBjb25zdGFudCBjb2VmZmljaWVudCBlcXVhbHMgdG8gdGhlIHN1bSBvZiBhbGwgdGhlIG9yaWdpbmFsIGNvZWZmaWNpZW50c1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcHV0ZSBhIG5ldyBwb2x5bm9taWFsIHRvIGEgemVybyBvciBuZWdhdGl2ZSBudW1iZXIgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoMSA9PT0gbikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKHBvbHlub21pYWwuY29lZiwgY3VydmUsIHBvbHlub21pYWwubG9nZ2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIG5vbi1jb25zdGFudCBjb2VmZmljaWVudHNcbiAgICAgICAgLy8gaWYgdHJ1bmNhdGUgPT09IHRydWUsIHRoZSBoaWdoZXN0IHplcm8gY29lZmZpY2llbnRzIChpZiBleGlzdCkgd2lsbCBiZSByZW1vdmVkXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRydW5jYXRlID8gcG9seW5vbWlhbC5kZWdyZWUoKSA6IChwb2x5bm9taWFsLmxlbmd0aCgpIC0gMSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckRzdCA9IChsZW5ndGggKiBuICsgMSkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIoKGxlbmd0aCAqIG4gKyAxKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KChsZW5ndGggKiBuICsgMSkgKiBGci5uOCk7XG5cbiAgICAgICAgLy8gQ29weSBjb25zdGFudCBjb2VmZmljaWVudCBhcyBpcyBiZWNhdXNlIGlzIG5vdCByZWxhdGVkIHRvIHhcbiAgICAgICAgYnVmZmVyRHN0LnNldChwb2x5bm9taWFsLmdldENvZWYoMCksIDApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBGci5uODtcblxuICAgICAgICAgICAgY29uc3QgY29lZiA9IHBvbHlub21pYWwuZ2V0Q29lZihpKTtcbiAgICAgICAgICAgIGJ1ZmZlckRzdC5zZXQoY29lZiwgaV9zRnIgKiBuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUG9seW5vbWlhbChidWZmZXJEc3QsIHBvbHlub21pYWwuY3VydmUsIHBvbHlub21pYWwubG9nZ2VyKTtcbiAgICB9XG5cbiAgICBzcGxpdChudW1Qb2xzLCBkZWdQb2xzLCBibGluZGluZ0ZhY3RvcnMpIHtcbiAgICAgICAgaWYgKG51bVBvbHMgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbHlub21pYWxzIGNhbid0IGJlIHNwbGl0IGluICR7bnVtUG9sc30gcGFydHNgKTtcbiAgICAgICAgfSBlbHNlIGlmICgxID09PSBudW1Qb2xzKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9ibGluZGluZyBmYWN0b3JzIGNhbiBiZSB2b2lkIG9yIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiBudW1Qb2xzIC0gMVxuICAgICAgICBpZiAoMCAhPT0gYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCAmJiBibGluZGluZ0ZhY3RvcnMubGVuZ3RoIDwgbnVtUG9scyAtIDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmxpbmRpbmcgZmFjdG9ycyBsZW5ndGggbXVzdCBiZSAke251bVBvbHMgLSAxfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2h1bmtCeXRlTGVuZ3RoID0gKGRlZ1BvbHMgKyAxKSAqIHRoaXMuRnIubjg7XG4gICAgICAgIGxldCByZXMgPSBbXTtcblxuICAgICAgICAvLyBDaGVjayBwb2x5bm9taWFsIGNhbiBiZSBzcGxpdCBpbiBudW1DaHVua3MgcGFydHMgb2YgY2h1bmtTaXplIGJ5dGVzLi4uXG4gICAgICAgIGNvbnN0IG51bVJlYWxQb2xzID0gTWF0aC5jZWlsKCh0aGlzLmRlZ3JlZSgpICsgMSkgKiB0aGlzLkZyLm44IC8gY2h1bmtCeXRlTGVuZ3RoKTtcbiAgICAgICAgaWYgKG51bVJlYWxQb2xzIDwgbnVtUG9scykge1xuICAgICAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoYFBvbHlub21pYWwgaXMgc2hvcnQgdG8gYmUgc3BsaXQgaW4gJHtudW1Qb2xzfSBwYXJ0cyBvZiAke2RlZ1BvbHN9IGNvZWZmaWNpZW50cyBlYWNoLmApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG51bVJlYWxQb2xzOyBpIDwgbnVtUG9sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzW2ldID0gbmV3IFBvbHlub21pYWwobmV3IFVpbnQ4QXJyYXkodGhpcy5Gci5uOCksIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG51bVBvbHMgPSBNYXRoLm1pbihudW1Qb2xzLCBudW1SZWFsUG9scyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9sczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpc0xhc3QgPSAobnVtUG9scyAtIDEpID09PSBpO1xuICAgICAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGlzTGFzdCA/IHRoaXMuY29lZi5ieXRlTGVuZ3RoIC0gKChudW1Qb2xzIC0gMSkgKiBjaHVua0J5dGVMZW5ndGgpIDogY2h1bmtCeXRlTGVuZ3RoICsgdGhpcy5Gci5uODtcblxuICAgICAgICAgICAgbGV0IGJ1ZmYgPSAoYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjgpID4gMiA8PCAxNCA/IG5ldyBCaWdCdWZmZXIoYnl0ZUxlbmd0aCkgOiBuZXcgVWludDhBcnJheShieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIHJlc1tpXSA9IG5ldyBQb2x5bm9taWFsKGJ1ZmYsIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgICAgICAgY29uc3QgZnIgPSBpICogY2h1bmtCeXRlTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgdG8gPSBpc0xhc3QgPyB0aGlzLmNvZWYuYnl0ZUxlbmd0aCA6IChpICsgMSkgKiBjaHVua0J5dGVMZW5ndGg7XG4gICAgICAgICAgICByZXNbaV0uY29lZi5zZXQodGhpcy5jb2VmLnNsaWNlKGZyLCB0byksIDApO1xuXG4gICAgICAgICAgICAvLyBBZGQgYSBibGluZGluZyBmYWN0b3IgYXMgaGlnaGVyIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKCFpc0xhc3QpIHtcbiAgICAgICAgICAgICAgICByZXNbaV0uY29lZi5zZXQoYmxpbmRpbmdGYWN0b3JzW2ldLCBjaHVua0J5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdWIgYmxpbmRpbmcgZmFjdG9yIHRvIHRoZSBsb3dlc3QgZGVncmVlXG4gICAgICAgICAgICBpZiAoMCAhPT0gaSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VzdERlZ3JlZSA9IHRoaXMuRnIuc3ViKHJlc1tpXS5jb2VmLnNsaWNlKDAsIHRoaXMuRnIubjgpLCBibGluZGluZ0ZhY3RvcnNbaSAtIDFdKTtcbiAgICAgICAgICAgICAgICByZXNbaV0uY29lZi5zZXQobG93ZXN0RGVncmVlLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgICAgICAgIHJlc1tpXS50cnVuY2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgICAvLyAvLyBjb21wdXRlIHRfbG93KFgpXG4gICAgICAgIC8vIGxldCBwb2xUTG93ID0gbmV3IEJpZ0J1ZmZlcigoY2h1bmtTaXplICsgMSkgKiBuOHIpO1xuICAgICAgICAvLyBwb2xUTG93LnNldCh0LnNsaWNlKDAsIHprZXkuZG9tYWluU2l6ZSAqIG44ciksIDApO1xuICAgICAgICAvLyAvLyBBZGQgYmxpbmRpbmcgc2NhbGFyIGJfMTAgYXMgYSBuZXcgY29lZmZpY2llbnQgblxuICAgICAgICAvLyBwb2xUTG93LnNldChjaC5iWzEwXSwgemtleS5kb21haW5TaXplICogbjhyKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gLy8gY29tcHV0ZSB0X21pZChYKVxuICAgICAgICAvLyBsZXQgcG9sVE1pZCA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDEpICogbjhyKTtcbiAgICAgICAgLy8gcG9sVE1pZC5zZXQodC5zbGljZSh6a2V5LmRvbWFpblNpemUgKiBuOHIsIHprZXkuZG9tYWluU2l6ZSAqIDIgKiBuOHIpLCAwKTtcbiAgICAgICAgLy8gLy8gU3VidHJhY3QgYmxpbmRpbmcgc2NhbGFyIGJfMTAgdG8gdGhlIGxvd2VzdCBjb2VmZmljaWVudCBvZiB0X21pZFxuICAgICAgICAvLyBjb25zdCBsb3dlc3RNaWQgPSBGci5zdWIocG9sVE1pZC5zbGljZSgwLCBuOHIpLCBjaC5iWzEwXSk7XG4gICAgICAgIC8vIHBvbFRNaWQuc2V0KGxvd2VzdE1pZCwgMCk7XG4gICAgICAgIC8vIC8vIEFkZCBibGluZGluZyBzY2FsYXIgYl8xMSBhcyBhIG5ldyBjb2VmZmljaWVudCBuXG4gICAgICAgIC8vIHBvbFRNaWQuc2V0KGNoLmJbMTFdLCB6a2V5LmRvbWFpblNpemUgKiBuOHIpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAvLyBjb21wdXRlIHRfaGlnaChYKVxuICAgICAgICAvLyBsZXQgcG9sVEhpZ2ggPSBuZXcgQmlnQnVmZmVyKCh6a2V5LmRvbWFpblNpemUgKyA2KSAqIG44cik7XG4gICAgICAgIC8vIHBvbFRIaWdoLnNldCh0LnNsaWNlKHprZXkuZG9tYWluU2l6ZSAqIDIgKiBuOHIsICh6a2V5LmRvbWFpblNpemUgKiAzICsgNikgKiBuOHIpLCAwKTtcbiAgICAgICAgLy8gLy9TdWJ0cmFjdCBibGluZGluZyBzY2FsYXIgYl8xMSB0byB0aGUgbG93ZXN0IGNvZWZmaWNpZW50IG9mIHRfaGlnaFxuICAgICAgICAvLyBjb25zdCBsb3dlc3RIaWdoID0gRnIuc3ViKHBvbFRIaWdoLnNsaWNlKDAsIG44ciksIGNoLmJbMTFdKTtcbiAgICAgICAgLy8gcG9sVEhpZ2guc2V0KGxvd2VzdEhpZ2gsIDApO1xuICAgICAgICAvL1xuICAgICAgICAvLyBwcm9vZi5UMSA9IGF3YWl0IGV4cFRhdShwb2xUTG93LCBcIm11bHRpZXhwIFQxXCIpO1xuICAgICAgICAvLyBwcm9vZi5UMiA9IGF3YWl0IGV4cFRhdShwb2xUTWlkLCBcIm11bHRpZXhwIFQyXCIpO1xuICAgICAgICAvLyBwcm9vZi5UMyA9IGF3YWl0IGV4cFRhdShwb2xUSGlnaCwgXCJtdWx0aWV4cCBUM1wiKTtcbiAgICB9XG5cbi8vIHNwbGl0MihkZWdQb2xzLCBibGluZGluZ0ZhY3RvcnMpIHtcbi8vICAgICBsZXQgY3VycmVudERlZ3JlZSA9IHRoaXMuZGVncmVlKCk7XG4vLyAgICAgY29uc3QgbnVtRmlsbGVkUG9scyA9IE1hdGguY2VpbCgoY3VycmVudERlZ3JlZSArIDEpIC8gKGRlZ1BvbHMgKyAxKSk7XG4vL1xuLy8gICAgIC8vYmxpbmRpbmcgZmFjdG9ycyBjYW4gYmUgdm9pZCBvciBtdXN0IGhhdmUgYSBsZW5ndGggb2YgbnVtUG9scyAtIDFcbi8vICAgICBpZiAoMCAhPT0gYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCAmJiBibGluZGluZ0ZhY3RvcnMubGVuZ3RoIDwgbnVtRmlsbGVkUG9scyAtIDEpIHtcbi8vICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCbGluZGluZyBmYWN0b3JzIGxlbmd0aCBtdXN0IGJlICR7bnVtRmlsbGVkUG9scyAtIDF9YCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICBjb25zdCBjaHVua0J5dGVMZW5ndGggPSAoZGVnUG9scyArIDEpICogdGhpcy5Gci5uODtcbi8vXG4vLyAgICAgLy8gQ2hlY2sgcG9seW5vbWlhbCBjYW4gYmUgc3BsaXQgaW4gbnVtQ2h1bmtzIHBhcnRzIG9mIGNodW5rU2l6ZSBieXRlcy4uLlxuLy8gICAgIGlmICh0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIGNodW5rQnl0ZUxlbmd0aCA8PSBudW1GaWxsZWRQb2xzIC0gMSkge1xuLy8gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbHlub21pYWwgaXMgc2hvcnQgdG8gYmUgc3BsaXQgaW4gJHtudW1GaWxsZWRQb2xzfSBwYXJ0cyBvZiAke2RlZ1BvbHN9IGNvZWZmaWNpZW50cyBlYWNoLmApO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgbGV0IHJlcyA9IFtdO1xuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRmlsbGVkUG9sczsgaSsrKSB7XG4vLyAgICAgICAgIGNvbnN0IGlzTGFzdCA9IChudW1GaWxsZWRQb2xzIC0gMSkgPT09IGk7XG4vLyAgICAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBpc0xhc3QgPyAoY3VycmVudERlZ3JlZSArIDEpICogdGhpcy5Gci5uOCAtICgobnVtRmlsbGVkUG9scyAtIDEpICogY2h1bmtCeXRlTGVuZ3RoKSA6IGNodW5rQnl0ZUxlbmd0aCArIHRoaXMuRnIubjg7XG4vL1xuLy8gICAgICAgICByZXNbaV0gPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKGJ5dGVMZW5ndGgpLCB0aGlzLkZyLCB0aGlzLmxvZ2dlcik7XG4vLyAgICAgICAgIGNvbnN0IGZyID0gaSAqIGNodW5rQnl0ZUxlbmd0aDtcbi8vICAgICAgICAgY29uc3QgdG8gPSBpc0xhc3QgPyAoY3VycmVudERlZ3JlZSArIDEpICogdGhpcy5Gci5uOCA6IChpICsgMSkgKiBjaHVua0J5dGVMZW5ndGg7XG4vLyAgICAgICAgIHJlc1tpXS5jb2VmLnNldCh0aGlzLmNvZWYuc2xpY2UoZnIsIHRvKSwgMCk7XG4vL1xuLy8gICAgICAgICAvLyBBZGQgYSBibGluZGluZyBmYWN0b3IgYXMgaGlnaGVyIGRlZ3JlZVxuLy8gICAgICAgICBpZiAoIWlzTGFzdCkge1xuLy8gICAgICAgICAgICAgcmVzW2ldLmNvZWYuc2V0KGJsaW5kaW5nRmFjdG9yc1tpXSwgY2h1bmtCeXRlTGVuZ3RoKTtcbi8vICAgICAgICAgfVxuLy9cbi8vICAgICAgICAgLy8gU3ViIGJsaW5kaW5nIGZhY3RvciB0byB0aGUgbG93ZXN0IGRlZ3JlZVxuLy8gICAgICAgICBpZiAoMCAhPT0gaSkge1xuLy8gICAgICAgICAgICAgY29uc3QgbG93ZXN0RGVncmVlID0gdGhpcy5Gci5zdWIocmVzW2ldLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCksIGJsaW5kaW5nRmFjdG9yc1tpIC0gMV0pO1xuLy8gICAgICAgICAgICAgcmVzW2ldLmNvZWYuc2V0KGxvd2VzdERlZ3JlZSwgMCk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiByZXM7XG4vLyB9XG5cbi8vIG1lcmdlKHBvbHMsIG92ZXJsYXAgPSB0cnVlKSB7XG4vLyAgICAgbGV0IGxlbmd0aCA9IDA7XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2xzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICAgIGxlbmd0aCArPSBwb2xzW2ldLmxlbmd0aCgpO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKG92ZXJsYXApIHtcbi8vICAgICAgICAgbGVuZ3RoIC09IHBvbHMubGVuZ3RoIC0gMTtcbi8vICAgICB9XG4vL1xuLy8gICAgIGxldCByZXMgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKGxlbmd0aCAqIHRoaXMuRnIubjgpKTtcbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IHBvbHNbaV0uY29lZi5ieXRlTGVuZ3RoO1xuLy8gICAgICAgICBpZiAoMCA9PT0gaSkge1xuLy8gICAgICAgICAgICAgcmVzLmNvZWYuc2V0KHBvbHNbaV0uY29lZiwgMCk7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vL1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy9cbi8vICAgICByZXR1cm4gcmVzO1xuLy8gfVxuXG4gICAgdHJ1bmNhdGUoKSB7XG4gICAgICAgIGNvbnN0IGRlZyA9IHRoaXMuZGVncmVlKCk7XG4gICAgICAgIGlmIChkZWcgKyAxIDwgdGhpcy5jb2VmLmJ5dGVMZW5ndGggLyB0aGlzLkZyLm44KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb2VmcyA9IChkZWcgKyAxKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIoKGRlZyArIDEpICogdGhpcy5Gci5uOCkgOiBuZXcgVWludDhBcnJheSgoZGVnICsgMSkgKiB0aGlzLkZyLm44KTtcblxuICAgICAgICAgICAgbmV3Q29lZnMuc2V0KHRoaXMuY29lZi5zbGljZSgwLCAoZGVnICsgMSkgKiB0aGlzLkZyLm44KSwgMCk7XG4gICAgICAgICAgICB0aGlzLmNvZWYgPSBuZXdDb2VmcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBsYWdyYW5nZVBvbHlub21pYWxJbnRlcnBvbGF0aW9uKHhBcnIsIHlBcnIsIGN1cnZlKSB7XG4gICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgIGxldCBwb2x5bm9taWFsID0gY29tcHV0ZUxhZ3JhbmdlUG9seW5vbWlhbCgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwb2x5bm9taWFsLmFkZChjb21wdXRlTGFncmFuZ2VQb2x5bm9taWFsKGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2x5bm9taWFsO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVMYWdyYW5nZVBvbHlub21pYWwoaSkge1xuICAgICAgICAgICAgbGV0IHBvbHlub21pYWw7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgeEFyci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSBpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGlmIChwb2x5bm9taWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1ZmYgPSAoeEFyci5sZW5ndGgpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnQnVmZmVyKCh4QXJyLmxlbmd0aCkgKiBGci5uOCkgOiBuZXcgVWludDhBcnJheSgoeEFyci5sZW5ndGgpICogRnIubjgpO1xuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFsID0gbmV3IFBvbHlub21pYWwoYnVmZiwgY3VydmUpO1xuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFsLnNldENvZWYoMCwgRnIubmVnKHhBcnJbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbC5zZXRDb2VmKDEsIEZyLm9uZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbC5ieVhTdWJWYWx1ZSh4QXJyW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkZW5vbWluYXRvciA9IHBvbHlub21pYWwuZXZhbHVhdGUoeEFycltpXSk7XG4gICAgICAgICAgICBkZW5vbWluYXRvciA9IEZyLmludihkZW5vbWluYXRvcik7XG4gICAgICAgICAgICBjb25zdCBtdWxGYWN0b3IgPSBGci5tdWwoeUFycltpXSwgZGVub21pbmF0b3IpO1xuXG4gICAgICAgICAgICBwb2x5bm9taWFsLm11bFNjYWxhcihtdWxGYWN0b3IpO1xuXG4gICAgICAgICAgICByZXR1cm4gcG9seW5vbWlhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyB6ZXJvZmllclBvbHlub21pYWwoeEFyciwgY3VydmUpIHtcbiAgICAgICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICAgICAgbGV0IGJ1ZmYgPSAoeEFyci5sZW5ndGggKyAxKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcigoeEFyci5sZW5ndGggKyAxKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KCh4QXJyLmxlbmd0aCArIDEpICogRnIubjgpO1xuICAgICAgICBsZXQgcG9seW5vbWlhbCA9IG5ldyBQb2x5bm9taWFsKGJ1ZmYsIGN1cnZlKTtcblxuICAgICAgICAvLyBCdWlsZCBhIHplcm9maWVyIHBvbHlub21pYWwgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAgICAgIC8vIHplcm9maWVyKFgpID0gKFgteEFyclswXSkoWC14QXJyWzFdKS4uLihYLXhBcnJbbl0pXG4gICAgICAgIHBvbHlub21pYWwuc2V0Q29lZigwLCBGci5uZWcoeEFyclswXSkpO1xuICAgICAgICBwb2x5bm9taWFsLnNldENvZWYoMSwgRnIub25lKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHhBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBvbHlub21pYWwuYnlYU3ViVmFsdWUoeEFycltpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9seW5vbWlhbDtcbiAgICB9XG5cbiAgICBwcmludCgpIHtcbiAgICAgICAgY29uc3QgRnIgPSB0aGlzLkZyO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGVncmVlKCk7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gdGhpcy5nZXRDb2VmKGkpO1xuICAgICAgICAgICAgaWYgKCFGci5lcShGci56ZXJvLCBjb2VmKSkge1xuICAgICAgICAgICAgICAgIGlmIChGci5pc05lZ2F0aXZlKGNvZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBcIiAtIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSAhPT0gdGhpcy5kZWdyZWUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCIgKyBcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzICs9IEZyLnRvU3RyaW5nKGNvZWYpO1xuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gaSA+IDEgPyBcInheXCIgKyBpIDogXCJ4XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgbXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjg7XG4gICAgICAgIGNvbnN0IFBUYXVOID0gUFRhdS5zbGljZSgwLCBuICogdGhpcy5HMS5GLm44ICogMik7XG4gICAgICAgIGNvbnN0IGJtID0gYXdhaXQgdGhpcy5Gci5iYXRjaEZyb21Nb250Z29tZXJ5KHRoaXMuY29lZik7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLkcxLm11bHRpRXhwQWZmaW5lKFBUYXVOLCBibSwgdGhpcy5sb2dnZXIsIG5hbWUpO1xuICAgICAgICByZXMgPSB0aGlzLkcxLnRvQWZmaW5lKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7QmlnQnVmZmVyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoZXZhbHVhdGlvbnMsIGN1cnZlLCBsb2dnZXIpIHtcbiAgICAgICAgdGhpcy5ldmFsID0gZXZhbHVhdGlvbnM7XG4gICAgICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICAgICAgdGhpcy5GciA9IGN1cnZlLkZyO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZnJvbVBvbHlub21pYWwocG9seW5vbWlhbCwgZXh0ZW5zaW9uLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgICAgIGNvbnN0IGNvZWZmaWNpZW50c04gPSBuZXcgQmlnQnVmZmVyKHBvbHlub21pYWwubGVuZ3RoKCkgKiBleHRlbnNpb24gKiBjdXJ2ZS5Gci5uOCk7XG4gICAgICAgIGNvZWZmaWNpZW50c04uc2V0KHBvbHlub21pYWwuY29lZiwgMCk7XG5cbiAgICAgICAgY29uc3QgZXZhbHVhdGlvbnMgPSBhd2FpdCBjdXJ2ZS5Gci5mZnQoY29lZmZpY2llbnRzTik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFdmFsdWF0aW9ucyhldmFsdWF0aW9ucywgY3VydmUsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgZ2V0RXZhbHVhdGlvbihpbmRleCkge1xuICAgICAgICBjb25zdCBpX244ID0gaW5kZXggKiB0aGlzLkZyLm44O1xuXG4gICAgICAgIGlmIChpX244ICsgdGhpcy5Gci5uOCA+IHRoaXMuZXZhbC5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFdmFsdWF0aW9ucy5nZXRFdmFsdWF0aW9uKCkgb3V0IG9mIGJvdW5kc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmV2YWwuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpO1xuICAgIH1cblxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuZXZhbC5ieXRlTGVuZ3RoIC8gdGhpcy5Gci5uODtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gTWF0aC5mbG9vcih0aGlzLmV2YWwuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2x5bm9taWFsIGV2YWx1YXRpb25zIGJ1ZmZlciBoYXMgaW5jb3JyZWN0IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKDAgPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlBvbHlub21pYWwgaGFzIGxlbmd0aCB6ZXJvXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIENQb2x5bm9taWFsIGlzIGEgQ29tYmluZWQgUG9seW5vbWlhbCBvZiB0aGUgdHlwZSA6XG4vLyBDUG9seW5vbWlhbChYKSA6PSBQXzAoWF5uKSArIFjCt1BfMShYXm4pICsgLi4uICsgWF57bi0xfcK3UF97bi0xfShYXm4pXG4vLyBXZSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSBiaWcgbWVtb3J5IGJ1ZmZlclxuLy8gZm9yIHRoZSBjb2VmZmljaWVudHMgYmVjYXVzZSBpbiBzb21lIGNhc2VzIGEgYmlnIG51bWJlciBvZiB0aGUgY29lZmZpY2llbnRzIGFyZSB6ZXJvXG5cbmltcG9ydCB7QmlnQnVmZmVyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQge2xvZzJ9IGZyb20gXCIuLi9taXNjLmpzXCI7XG5pbXBvcnQge1BvbHlub21pYWx9IGZyb20gXCIuL3BvbHlub21pYWwuanNcIjtcblxuZXhwb3J0IGNsYXNzIENQb2x5bm9taWFsIHtcbiAgICBjb25zdHJ1Y3RvcihuLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgICAgIHRoaXMubiA9IG47XG4gICAgICAgIHRoaXMucG9seW5vbWlhbHMgPSBBcnJheShuKS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICAgICAgdGhpcy5GciA9IGN1cnZlLkZyO1xuICAgICAgICB0aGlzLkcxID0gY3VydmUuRzE7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIGFkZFBvbHlub21pYWwocG9zaXRpb24sIHBvbHlub21pYWwpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID4gdGhpcy5uIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ1BvbHlub21pYWw6YWRkUG9seW5vbWlhbCwgY2Fubm90IGFkZCBhIHBvbHlub21pYWwgdG8gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gbi0xXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb2x5bm9taWFsc1twb3NpdGlvbl0gPSBwb2x5bm9taWFsO1xuICAgIH1cblxuICAgIGRlZ3JlZSgpIHtcbiAgICAgICAgbGV0IGRlZ3JlZXMgPSB0aGlzLnBvbHlub21pYWxzLm1hcChcbiAgICAgICAgICAgIChwb2x5bm9taWFsLCBpbmRleCkgPT4gcG9seW5vbWlhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBvbHlub21pYWwuZGVncmVlKCkgKiB0aGlzLm4gKyBpbmRleCk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi5kZWdyZWVzKTtcbiAgICB9XG5cbiAgICBnZXRQb2x5bm9taWFsKCkge1xuICAgICAgICBsZXQgZGVncmVlcyA9IHRoaXMucG9seW5vbWlhbHMubWFwKHBvbHlub21pYWwgPT4gcG9seW5vbWlhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBvbHlub21pYWwuZGVncmVlKCkpO1xuICAgICAgICBjb25zdCBtYXhEZWdyZWUgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXIgPSAyICoqIChsb2cyKG1heERlZ3JlZSAtIDEpICsgMSk7XG4gICAgICAgIGNvbnN0IHNGciA9IHRoaXMuRnIubjg7XG5cbiAgICAgICAgbGV0IHBvbHlub21pYWwgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKGxlbmd0aEJ1ZmZlciAqIHNGciksIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heERlZ3JlZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHNGcjtcbiAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaV9uOCAqIHRoaXMubjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLm47IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvbHlub21pYWxzW2pdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPD0gZGVncmVlc1tqXSkgcG9seW5vbWlhbC5jb2VmLnNldCh0aGlzLnBvbHlub21pYWxzW2pdLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHNGciksIGlfc0ZyICsgaiAqIHNGcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbHlub21pYWw7XG4gICAgfVxuXG4gICAgYXN5bmMgbXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBuYW1lKSB7XG4gICAgICAgIGxldCBwb2x5bm9taWFsID0gdGhpcy5nZXRQb2x5bm9taWFsKCk7XG4gICAgICAgIGNvbnN0IG4gPSBwb2x5bm9taWFsLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjg7XG4gICAgICAgIGNvbnN0IFBUYXVOID0gUFRhdS5zbGljZSgwLCBuICogdGhpcy5HMS5GLm44ICogMik7XG4gICAgICAgIGNvbnN0IGJtID0gYXdhaXQgdGhpcy5Gci5iYXRjaEZyb21Nb250Z29tZXJ5KHBvbHlub21pYWwuY29lZik7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLkcxLm11bHRpRXhwQWZmaW5lKFBUYXVOLCBibSwgdGhpcy5sb2dnZXIsIG5hbWUpO1xuICAgICAgICByZXMgPSB0aGlzLkcxLnRvQWZmaW5lKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7cmVhZFIxY3NGZH0gZnJvbSBcInIxY3NmaWxlXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0IHtjcmVhdGVCaW5GaWxlLCBlbmRXcml0ZVNlY3Rpb24sIHJlYWRCaW5GaWxlLCBzdGFydFdyaXRlU2VjdGlvbiwgd3JpdGVCaWdJbnQsfSBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0IHtsb2cyfSBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQge0JpZ0J1ZmZlciwgU2NhbGFyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgQmlnQXJyYXkgZnJvbSBcIi4vYmlnYXJyYXkuanNcIjtcbmltcG9ydCB7XG4gICAgWktFWV9GRl9IRUFERVJfU0VDVElPTixcbiAgICBaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OLFxuICAgIFpLRVlfRkZfQV9NQVBfU0VDVElPTixcbiAgICBaS0VZX0ZGX0JfTUFQX1NFQ1RJT04sXG4gICAgWktFWV9GRl9DX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUUxfU0VDVElPTixcbiAgICBaS0VZX0ZGX1FSX1NFQ1RJT04sXG4gICAgWktFWV9GRl9RTV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUU9fU0VDVElPTixcbiAgICBaS0VZX0ZGX1FDX1NFQ1RJT04sXG4gICAgWktFWV9GRl9TSUdNQTFfU0VDVElPTixcbiAgICBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OLFxuICAgIFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04sXG4gICAgWktFWV9GRl9MQUdSQU5HRV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUFRBVV9TRUNUSU9OLFxuICAgIEZGX1RfUE9MX0RFR19NSU4sXG4gICAgWktFWV9GRl9OU0VDVElPTlMsXG4gICAgWktFWV9GRl9DMF9TRUNUSU9OLFxufSBmcm9tIFwiLi9mZmxvbmtfY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQge0ZGTE9OS19QUk9UT0NPTF9JRCwgSEVBREVSX1pLRVlfU0VDVElPTn0gZnJvbSBcIi4vemtleV9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7XG4gICAgZ2V0RkZsb25rQWRkaXRpb25Db25zdHJhaW50LFxuICAgIGdldEZGbG9ua0NvbnN0YW50Q29uc3RyYWludCxcbiAgICBnZXRGRmxvbmtNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnRcbn0gZnJvbSBcIi4vcGxvbmtfZXF1YXRpb24uanNcIjtcbmltcG9ydCB7cjFjc0NvbnN0cmFpbnRQcm9jZXNzb3J9IGZyb20gXCIuL3IxY3NfY29uc3RyYWludF9wcm9jZXNzb3IuanNcIjtcbmltcG9ydCB7UG9seW5vbWlhbH0gZnJvbSBcIi4vcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7RXZhbHVhdGlvbnN9IGZyb20gXCIuL3BvbHlub21pYWwvZXZhbHVhdGlvbnMuanNcIjtcbmltcG9ydCB7Q1BvbHlub21pYWx9IGZyb20gXCIuL3BvbHlub21pYWwvY3BvbHlub21pYWwuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBmZmxvbmtTZXR1cChyMWNzRmlsZW5hbWUsIHB0YXVGaWxlbmFtZSwgemtleUZpbGVuYW1lLCBsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBTRVRVUCBTVEFSVEVEXCIpO1xuXG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgIC8vIFJlYWQgUFRhdSBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgUFRhdSBmaWxlXCIpO1xuICAgIGNvbnN0IHtmZDogZmRQVGF1LCBzZWN0aW9uczogcFRhdVNlY3Rpb25zfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIDEgPDwgMjIsIDEgPDwgMjQpO1xuICAgIGlmICghcFRhdVNlY3Rpb25zWzEyXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3dlcnMgb2YgVGF1IGlzIG5vdCB3ZWxsIHByZXBhcmVkLiBTZWN0aW9uIDEyIG1pc3NpbmcuXCIpO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJ2ZSBkZWZpbmVkIGluIFBUYXVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gR2V0dGluZyBjdXJ2ZSBmcm9tIFBUYXUgc2V0dGluZ3NcIik7XG4gICAgY29uc3Qge2N1cnZlfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkUFRhdSwgcFRhdVNlY3Rpb25zKTtcblxuICAgIC8vIFJlYWQgcjFjcyBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgcjFjcyBmaWxlXCIpO1xuICAgIGNvbnN0IHtmZDogZmRSMWNzLCBzZWN0aW9uczogc2VjdGlvbnNSMWNzfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHIxY3NGaWxlbmFtZSwgXCJyMWNzXCIsIDEsIDEgPDwgMjIsIDEgPDwgMjQpO1xuICAgIGNvbnN0IHIxY3MgPSBhd2FpdCByZWFkUjFjc0ZkKGZkUjFjcywgc2VjdGlvbnNSMWNzLCB7bG9hZENvbnN0cmFpbnRzOiBmYWxzZSwgbG9hZEN1c3RvbUdhdGVzOiB0cnVlfSk7XG5cbiAgICAvLyBQb3RlbnRpYWwgZXJyb3IgY2hlY2tzXG4gICAgaWYgKHIxY3MucHJpbWUgIT09IGN1cnZlLnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicjFjcyBjdXJ2ZSBkb2VzIG5vdCBtYXRjaCBwb3dlcnMgb2YgdGF1IGNlcmVtb255IGN1cnZlXCIpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemF0aW9uc1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBzRnIgPSBjdXJ2ZS5Gci5uODtcbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44ICogMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44ICogMjtcblxuICAgIGxldCBwb2x5bm9taWFscyA9IHt9O1xuICAgIGxldCBldmFsdWF0aW9ucyA9IHt9O1xuICAgIGxldCBQVGF1O1xuXG4gICAgbGV0IHNldHRpbmdzID0ge1xuICAgICAgICBuVmFyczogcjFjcy5uVmFycyxcbiAgICAgICAgblB1YmxpYzogcjFjcy5uT3V0cHV0cyArIHIxY3MublB1YklucHV0c1xuICAgIH07XG5cbiAgICBjb25zdCBwbG9ua0NvbnN0cmFpbnRzID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgbGV0IHBsb25rQWRkaXRpb25zID0gbmV3IEJpZ0FycmF5KCk7XG5cbiAgICAvLyBQcm9jZXNzIGNvbnN0cmFpbnRzIGluc2lkZSByMWNzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFByb2Nlc3NpbmcgRkZsb25rIGNvbnN0cmFpbnRzXCIpO1xuICAgIGF3YWl0IGNvbXB1dGVGRkNvbnN0cmFpbnRzKGN1cnZlLkZyLCByMWNzLCBsb2dnZXIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBBcyB0aGUgdCBwb2x5bm9taWFsIGlzIG4rNSB3aGUgbmVlZCBhdCBsZWFzdCBhIHBvd2VyIG9mIDRcbiAgICAvL1RPRE8gY2hlY2shISEhXG4gICAgLy8gTk9URSA6IHBsb25rQ29uc3RyYWludHMgKyAyID0gI2NvbnN0cmFpbnRzICsgYmxpbmRpbmcgY29lZmZpY2llbnRzIGZvciBlYWNoIHdpcmUgcG9seW5vbWlhbFxuICAgIHNldHRpbmdzLmNpclBvd2VyID0gTWF0aC5tYXgoRkZfVF9QT0xfREVHX01JTiwgbG9nMigocGxvbmtDb25zdHJhaW50cy5sZW5ndGggKyAyKSAtIDEpICsgMSk7XG4gICAgc2V0dGluZ3MuZG9tYWluU2l6ZSA9IDIgKiogc2V0dGluZ3MuY2lyUG93ZXI7XG5cbiAgICBpZiAocFRhdVNlY3Rpb25zWzJdWzBdLnNpemUgPCAoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDkgKyAxOCkgKiBzRzEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG93ZXJzIG9mIFRhdSBpcyBub3QgYmlnIGVub3VnaCBmb3IgdGhpcyBjaXJjdWl0IHNpemUuIFNlY3Rpb24gMiB0b28gc21hbGwuXCIpO1xuICAgIH1cbiAgICBpZiAocFRhdVNlY3Rpb25zWzNdWzBdLnNpemUgPCBzRzIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG93ZXJzIG9mIFRhdSBpcyBub3Qgd2VsbCBwcmVwYXJlZC4gU2VjdGlvbiAzIHRvbyBzbWFsbC5cIik7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiICBGRkxPTksgU0VUVVAgU0VUVElOR1NcIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIEN1cnZlOiAgICAgICAgICR7Y3VydmUubmFtZX1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ2lyY3VpdCBwb3dlcjogJHtzZXR0aW5ncy5jaXJQb3dlcn1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgRG9tYWluIHNpemU6ICAgJHtzZXR0aW5ncy5kb21haW5TaXplfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzOiAgICAgICAgICAke3NldHRpbmdzLm5WYXJzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBQdWJsaWMgdmFyczogICAke3NldHRpbmdzLm5QdWJsaWN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIENvbnN0cmFpbnRzOiAgICR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIEFkZGl0aW9uczogICAgICR7cGxvbmtBZGRpdGlvbnMubGVuZ3RofWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBrMSBhbmQgazIgdG8gYmUgdXNlZCBpbiB0aGUgcGVybXV0YXRpb24gY2hlY2tzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IGNvbXB1dGluZyBrMSBhbmQgazJcIik7XG4gICAgY29uc3QgW2sxLCBrMl0gPSBjb21wdXRlSzFLMigpO1xuXG4gICAgLy8gQ29tcHV0ZSBvbWVnYSAzICh3MykgYW5kIG9tZWdhIDQgKHc0KSB0byBiZSB1c2VkIGluIHRoZSBwcm92ZXIgYW5kIHRoZSB2ZXJpZmllclxuICAgIC8vIHczXjMgPSAxIGFuZCAgdzReNCA9IDFcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gY29tcHV0aW5nIHczXCIpO1xuICAgIGNvbnN0IHczID0gY29tcHV0ZVczKCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IGNvbXB1dGluZyB3NFwiKTtcbiAgICBjb25zdCB3NCA9IGNvbXB1dGVXNCgpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBjb21wdXRpbmcgdzhcIik7XG4gICAgY29uc3QgdzggPSBjb21wdXRlVzgoKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gY29tcHV0aW5nIHdyXCIpO1xuICAgIGNvbnN0IHdyID0gZ2V0T21lZ2FDdWJpY1Jvb3Qoc2V0dGluZ3MuY2lyUG93ZXIsIGN1cnZlLkZyKTtcblxuICAgIC8vIFdyaXRlIG91dHB1dCB6a2V5IGZpbGVcbiAgICBhd2FpdCB3cml0ZVprZXlGaWxlKCk7XG5cbiAgICBhd2FpdCBmZFIxY3MuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFBUYXUuY2xvc2UoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiRkZMT05LIFNFVFVQIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIDA7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlRkZDb25zdHJhaW50cyhGciwgcjFjcywgbG9nZ2VyKSB7XG4gICAgICAgIC8vIEFkZCBwdWJsaWMgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MublB1YmxpYzsgaSsrKSB7XG4gICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goZ2V0RkZsb25rQ29uc3RhbnRDb25zdHJhaW50KGkgKyAxLCBGcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGFsbCBjb25zdHJhaW50cyBmcm9tIHIxY3MgZmlsZVxuICAgICAgICBjb25zdCByMWNzUHJvY2Vzc29yID0gbmV3IHIxY3NDb25zdHJhaW50UHJvY2Vzc29yKEZyLCBnZXRGRmxvbmtDb25zdGFudENvbnN0cmFpbnQsIGdldEZGbG9ua0FkZGl0aW9uQ29uc3RyYWludCwgZ2V0RkZsb25rTXVsdGlwbGljYXRpb25Db25zdHJhaW50LCBsb2dnZXIpO1xuXG4gICAgICAgIGNvbnN0IGJSMWNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcbiAgICAgICAgbGV0IGJSMWNzUG9zID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByMWNzLm5Db25zdHJhaW50czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikgJiYgKGkgIT09IDApICYmIChpICUgNTAwMDAwID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGAgICAgcHJvY2Vzc2luZyByMWNzIGNvbnN0cmFpbnRzICR7aX0vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtjb25zdHJhaW50cywgYWRkaXRpb25zXSA9IHIxY3NQcm9jZXNzb3IucHJvY2Vzc1IxY3NDb25zdHJhaW50KHNldHRpbmdzLCAuLi5yZWFkQ29uc3RyYWludCgpKTtcblxuICAgICAgICAgICAgcGxvbmtDb25zdHJhaW50cy5wdXNoKC4uLmNvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIHBsb25rQWRkaXRpb25zLnB1c2goLi4uYWRkaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRDb25zdHJhaW50KCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IFtdO1xuICAgICAgICAgICAgY1swXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgY1sxXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgY1syXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkTEMoKSB7XG4gICAgICAgICAgICBjb25zdCBsYyA9IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArIDQpO1xuICAgICAgICAgICAgYlIxY3NQb3MgKz0gNDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZVTDMyViA9IG5ldyBEYXRhVmlldyhidWZmVUwzMi5idWZmZXIpO1xuICAgICAgICAgICAgY29uc3QgbklkeCA9IGJ1ZmZVTDMyVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBiUjFjcy5zbGljZShiUjFjc1BvcywgYlIxY3NQb3MgKyAoNCArIHIxY3MubjgpICogbklkeCk7XG4gICAgICAgICAgICBiUjFjc1BvcyArPSAoNCArIHIxY3MubjgpICogbklkeDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbklkeDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gYnVmZlYuZ2V0VWludDMyKGkgKiAoNCArIHIxY3MubjgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSByMWNzLkYuZnJvbVJwckxFKGJ1ZmYsIGkgKiAoNCArIHIxY3MubjgpICsgNCk7XG4gICAgICAgICAgICAgICAgbGNbaWR4XSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlWmtleUZpbGUoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBXcml0aW5nIHRoZSB6a2V5IGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZkWktleSA9IGF3YWl0IGNyZWF0ZUJpbkZpbGUoemtleUZpbGVuYW1lLCBcInprZXlcIiwgMSwgWktFWV9GRl9OU0VDVElPTlMsIDEgPDwgMjIsIDEgPDwgMjQpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7SEVBREVSX1pLRVlfU0VDVElPTn0uIFprZXkgSGVhZGVyYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlWmtleUhlYWRlcihmZFpLZXkpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9BRERJVElPTlNfU0VDVElPTn0uIEFkZGl0aW9uc2ApO1xuICAgICAgICBhd2FpdCB3cml0ZUFkZGl0aW9ucyhmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9BX01BUF9TRUNUSU9OfS4gQSBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9BX01BUF9TRUNUSU9OLCAwLCBcIkEgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9CX01BUF9TRUNUSU9OfS4gQiBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9CX01BUF9TRUNUSU9OLCAxLCBcIkIgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9DX01BUF9TRUNUSU9OfS4gQyBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9DX01BUF9TRUNUSU9OLCAyLCBcIkMgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RTF9TRUNUSU9OfS4gUUxgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RTF9TRUNUSU9OLCAzLCBcIlFMXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RUl9TRUNUSU9OfS4gUVJgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RUl9TRUNUSU9OLCA0LCBcIlFSXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RTV9TRUNUSU9OfS4gUU1gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RTV9TRUNUSU9OLCA1LCBcIlFNXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RT19TRUNUSU9OfS4gUU9gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RT19TRUNUSU9OLCA2LCBcIlFPXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RQ19TRUNUSU9OfS4gUUNgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RQ19TRUNUSU9OLCA3LCBcIlFDXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9ucyAke1pLRVlfRkZfU0lHTUExX1NFQ1RJT059LCR7WktFWV9GRl9TSUdNQTJfU0VDVElPTn0sJHtaS0VZX0ZGX1NJR01BM19TRUNUSU9OfS4gU2lnbWExLCBTaWdtYTIgJiBTaWdtYSAzYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlU2lnbWEoZmRaS2V5KTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgwrfCt8K3IFdyaXRpbmcgU2VjdGlvbiAke1pLRVlfRkZfTEFHUkFOR0VfU0VDVElPTn0uIExhZ3JhbmdlIFBvbHlub21pYWxzYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlTGFncmFuZ2VQb2x5bm9taWFscyhmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9QVEFVX1NFQ1RJT059LiBQb3dlcnMgb2YgVGF1YCk7XG4gICAgICAgIGF3YWl0IHdyaXRlUHRhdShmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9DMF9TRUNUSU9OfS4gQzBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDMChmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9IRUFERVJfU0VDVElPTn0uIEZGbG9uayBIZWFkZXJgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGRmxvbmtIZWFkZXIoZmRaS2V5KTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gV3JpdGluZyB0aGUgemtleSBmaWxlIGZpbmlzaGVkXCIpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlWmtleUhlYWRlcihmZFpLZXkpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBIRUFERVJfWktFWV9TRUNUSU9OKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoRkZMT05LX1BST1RPQ09MX0lEKTtcbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVBZGRpdGlvbnMoZmRaS2V5KSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgWktFWV9GRl9BRERJVElPTlNfU0VDVElPTik7XG5cbiAgICAgICAgLy8gV3JpdHRlbiB2YWx1ZXMgYXJlIDIgKiAzMiBiaXQgaW50ZWdlcnMgKDIgKiA0IGJ5dGVzKSArIDIgZmllbGQgc2l6ZSB2YWx1ZXMgKCAyICogc0ZyIGJ5dGVzKVxuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoOCArIDIgKiBzRnIpO1xuICAgICAgICBjb25zdCBidWZmT3V0ViA9IG5ldyBEYXRhVmlldyhidWZmT3V0LmJ1ZmZlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbG9ua0FkZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIGxvZ2dlci5pbmZvKGAgICAgICB3cml0aW5nIEFkZGl0aW9uczogJHtpfS8ke3Bsb25rQWRkaXRpb25zLmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb24gPSBwbG9ua0FkZGl0aW9uc1tpXTtcblxuICAgICAgICAgICAgYnVmZk91dFYuc2V0VWludDMyKDAsIGFkZGl0aW9uWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIGJ1ZmZPdXRWLnNldFVpbnQzMig0LCBhZGRpdGlvblsxXSwgdHJ1ZSk7XG4gICAgICAgICAgICBidWZmT3V0LnNldChhZGRpdGlvblsyXSwgOCk7XG4gICAgICAgICAgICBidWZmT3V0LnNldChhZGRpdGlvblszXSwgOCArIHNGcik7XG5cbiAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZShidWZmT3V0KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVdpdG5lc3NNYXAoZmRaS2V5LCBzZWN0aW9uTnVtLCBwb3NDb25zdHJhaW50LCBuYW1lKSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgc2VjdGlvbk51bSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxvbmtDb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoaSAhPT0gMCkgJiYgKGkgJSA1MDAwMDAgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYCAgICAgIHdyaXRpbmcgd2l0bmVzcyAke25hbWV9OiAke2l9LyR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHBsb25rQ29uc3RyYWludHNbaV1bcG9zQ29uc3RyYWludF0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUU1hcChmZFpLZXksIHNlY3Rpb25OdW0sIHBvc0NvbnN0cmFpbnQsIG5hbWUpIHtcbiAgICAgICAgLy8gQ29tcHV0ZSBRIGZyb20gcSBldmFsdWF0aW9uc1xuICAgICAgICBsZXQgUSA9IG5ldyBCaWdCdWZmZXIoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIHNGcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBRLnNldChwbG9ua0NvbnN0cmFpbnRzW2ldW3Bvc0NvbnN0cmFpbnRdLCBpICogc0ZyKTtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSAmJiAoaSAhPT0gMCkgJiYgKGkgJSA1MDAwMDAgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYCAgICAgIHdyaXRpbmcgJHtuYW1lfTogJHtpfS8ke3Bsb25rQ29uc3RyYWludHMubGVuZ3RofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9seW5vbWlhbHNbbmFtZV0gPSBhd2FpdCBQb2x5bm9taWFsLmZyb21FdmFsdWF0aW9ucyhRLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgZXZhbHVhdGlvbnNbbmFtZV0gPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFsc1tuYW1lXSwgNCwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgLy8gV3JpdGUgUSBjb2VmZmljaWVudHMgYW5kIGV2YWx1YXRpb25zXG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgc2VjdGlvbk51bSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShwb2x5bm9taWFsc1tuYW1lXS5jb2VmKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGV2YWx1YXRpb25zW25hbWVdLmV2YWwpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVNpZ21hKGZkWktleSkge1xuICAgICAgICAvLyBDb21wdXRlIHNpZ21hXG4gICAgICAgIGNvbnN0IHNpZ21hID0gbmV3IEJpZ0J1ZmZlcihzRnIgKiBzZXR0aW5ncy5kb21haW5TaXplICogMyk7XG4gICAgICAgIGNvbnN0IGxhc3RTZWVuID0gbmV3IEJpZ0FycmF5KHNldHRpbmdzLm5WYXJzKTtcbiAgICAgICAgY29uc3QgZmlyc3RQb3MgPSBuZXcgQmlnQXJyYXkoc2V0dGluZ3MublZhcnMpO1xuXG4gICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmRvbWFpblNpemU7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVswXSwgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYShwbG9ua0NvbnN0cmFpbnRzW2ldWzFdLCBzZXR0aW5ncy5kb21haW5TaXplICsgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYShwbG9ua0NvbnN0cmFpbnRzW2ldWzJdLCBzZXR0aW5ncy5kb21haW5TaXplICogMiArIGkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgc2V0dGluZ3MuZG9tYWluU2l6ZSAtIDIpIHtcbiAgICAgICAgICAgICAgICBidWlsZFNpZ21hKDAsIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgc2V0dGluZ3MuZG9tYWluU2l6ZSArIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDIgKyBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KHcsIGkgKiBzRnIpO1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChGci5tdWwodywgazEpLCAoc2V0dGluZ3MuZG9tYWluU2l6ZSArIGkpICogc0ZyKTtcbiAgICAgICAgICAgICAgICBzaWdtYS5zZXQoRnIubXVsKHcsIGsyKSwgKHNldHRpbmdzLmRvbWFpblNpemUgKiAyICsgaSkgKiBzRnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3ID0gRnIubXVsKHcsIEZyLndbc2V0dGluZ3MuY2lyUG93ZXJdKTtcblxuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgICAgICAgd3JpdGluZyBzaWdtYSBwaGFzZTE6ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MublZhcnM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFBvc1tpXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChsYXN0U2VlbltpXSwgZmlyc3RQb3NbaV0gKiBzRnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJWYXJpYWJsZSBub3QgdXNlZFwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZhcmlhYmxlIG5vdCB1c2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIGxvZ2dlci5pbmZvKGAgICAgICB3cml0aW5nIHNpZ21hIHBoYXNlMjogJHtpfS8ke3NldHRpbmdzLm5WYXJzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICAvLyBXcml0ZSBzaWdtYSBjb2VmZmljaWVudHMgYW5kIGV2YWx1YXRpb25zXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSWQgPSAwID09PSBpID8gWktFWV9GRl9TSUdNQTFfU0VDVElPTiA6IDEgPT09IGkgPyBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OIDogWktFWV9GRl9TSUdNQTNfU0VDVElPTjtcblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBcIlNcIiArIChpICsgMSk7XG4gICAgICAgICAgICBwb2x5bm9taWFsc1tuYW1lXSA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKHNpZ21hLnNsaWNlKHNldHRpbmdzLmRvbWFpblNpemUgKiBzRnIgKiBpLCBzZXR0aW5ncy5kb21haW5TaXplICogc0ZyICogKGkgKyAxKSksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnNbbmFtZV0gPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFsc1tuYW1lXSwgNCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25JZCk7XG4gICAgICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUocG9seW5vbWlhbHNbbmFtZV0uY29lZik7XG4gICAgICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoZXZhbHVhdGlvbnNbbmFtZV0uZXZhbCk7XG4gICAgICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkU2lnbWEoc2lnbmFsSWQsIGlkeCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0U2VlbltzaWduYWxJZF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFBvc1tzaWduYWxJZF0gPSBpZHg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChsYXN0U2VlbltzaWduYWxJZF0sIGlkeCAqIHNGcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdjtcbiAgICAgICAgICAgIGlmIChpZHggPCBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IHc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkeCA8IDIgKiBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IEZyLm11bCh3LCBrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHYgPSBGci5tdWwodywgazIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0U2VlbltzaWduYWxJZF0gPSB2O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVMYWdyYW5nZVBvbHlub21pYWxzKGZkWktleSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIFpLRVlfRkZfTEFHUkFOR0VfU0VDVElPTik7XG5cbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWF4KHNldHRpbmdzLm5QdWJsaWMsIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKHNldHRpbmdzLmRvbWFpblNpemUgKiBzRnIpO1xuICAgICAgICAgICAgYnVmZi5zZXQoRnIub25lLCBpICogc0ZyKTtcblxuICAgICAgICAgICAgYXdhaXQgd3JpdGVQNChmZFpLZXksIGJ1ZmYpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHRhdShmZFpLZXkpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBaS0VZX0ZGX1BUQVVfU0VDVElPTik7XG5cbiAgICAgICAgLy8gZG9tYWluU2l6ZSAqIDkgKyAxOCA9IG1heGltdW0gU1JTIGxlbmd0aCBuZWVkZWQsIHNwZWNpZmljYWxseSB0byBjb21taXQgQzJcbiAgICAgICAgUFRhdSA9IG5ldyBCaWdCdWZmZXIoKHNldHRpbmdzLmRvbWFpblNpemUgKiA5ICsgMTgpICogc0cxKTtcbiAgICAgICAgYXdhaXQgZmRQVGF1LnJlYWRUb0J1ZmZlcihQVGF1LCAwLCAoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDkgKyAxOCkgKiBzRzEsIHBUYXVTZWN0aW9uc1syXVswXS5wKTtcblxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoUFRhdSk7XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQzAoZmRaS2V5KSB7XG4gICAgICAgIC8vIEMwKFgpIDo9IFFMKFheOCkgKyBYIMK3IFFSKFheOCkgKyBYXjIgwrcgUU8oWF44KSArIFheMyDCtyBRTShYXjgpICsgWF40IMK3IFFDKFheOClcbiAgICAgICAgLy8gICAgICAgICAgICArIFheNSDCtyBTSUdNQTEoWF44KSArIFheNiDCtyBTSUdNQTIoWF44KSArIFheNyDCtyBTSUdNQTMoWF44KVxuICAgICAgICBsZXQgQzAgPSBuZXcgQ1BvbHlub21pYWwoOCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoMCwgcG9seW5vbWlhbHMuUUwpO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDEsIHBvbHlub21pYWxzLlFSKTtcbiAgICAgICAgQzAuYWRkUG9seW5vbWlhbCgyLCBwb2x5bm9taWFscy5RTyk7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoMywgcG9seW5vbWlhbHMuUU0pO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDQsIHBvbHlub21pYWxzLlFDKTtcbiAgICAgICAgQzAuYWRkUG9seW5vbWlhbCg1LCBwb2x5bm9taWFscy5TMSk7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoNiwgcG9seW5vbWlhbHMuUzIpO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDcsIHBvbHlub21pYWxzLlMzKTtcblxuICAgICAgICBwb2x5bm9taWFscy5DMCA9IEMwLmdldFBvbHlub21pYWwoKTtcblxuICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgaWYgKHBvbHlub21pYWxzLkMwLmRlZ3JlZSgpID49IDggKiBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDMCBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIFpLRVlfRkZfQzBfU0VDVElPTik7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShwb2x5bm9taWFscy5DMC5jb2VmKTtcbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVGRmxvbmtIZWFkZXIoZmRaS2V5KSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgWktFWV9GRl9IRUFERVJfU0VDVElPTik7XG5cbiAgICAgICAgY29uc3QgcHJpbWVRID0gY3VydmUucTtcbiAgICAgICAgY29uc3QgbjhxID0gKE1hdGguZmxvb3IoKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsgMSkgKiA4O1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihuOHEpO1xuICAgICAgICBhd2FpdCB3cml0ZUJpZ0ludChmZFpLZXksIHByaW1lUSwgbjhxKTtcblxuICAgICAgICBjb25zdCBwcmltZVIgPSBjdXJ2ZS5yO1xuICAgICAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vcigoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKyAxKSAqIDg7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVSLCBuOHIpO1xuXG4gICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiByMWNzIHZhcnNcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoc2V0dGluZ3MublZhcnMpO1xuICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcjFjcyBwdWJsaWMgdmFycyA9IG91dHB1dHMgKyBwdWJsaWMgaW5wdXRzXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHNldHRpbmdzLm5QdWJsaWMpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihzZXR0aW5ncy5kb21haW5TaXplKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtBZGRpdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtDb25zdHJhaW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMik7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHczKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHc0KTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHc4KTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHdyKTtcblxuICAgICAgICBsZXQgYlhfMjtcbiAgICAgICAgYlhfMiA9IGF3YWl0IGZkUFRhdS5yZWFkKHNHMiwgcFRhdVNlY3Rpb25zWzNdWzBdLnAgKyBzRzIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoYlhfMik7XG5cbiAgICAgICAgbGV0IGNvbW1pdEMwID0gYXdhaXQgcG9seW5vbWlhbHMuQzAubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIkMwXCIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoY29tbWl0QzApO1xuXG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUDQoZmRaS2V5LCBidWZmKSB7XG4gICAgICAgIGNvbnN0IFtjb2VmZmljaWVudHMsIGV2YWx1YXRpb25zNF0gPSBhd2FpdCBQb2x5bm9taWFsLnRvNFQoYnVmZiwgc2V0dGluZ3MuZG9tYWluU2l6ZSwgW10sIEZyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGNvZWZmaWNpZW50cyk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShldmFsdWF0aW9uczQpO1xuXG4gICAgICAgIHJldHVybiBbY29lZmZpY2llbnRzLCBldmFsdWF0aW9uczRdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVLMUsyKCkge1xuICAgICAgICBsZXQgazEgPSBGci50d287XG4gICAgICAgIHdoaWxlIChpc0luY2x1ZGVkKGsxLCBbXSwgc2V0dGluZ3MuY2lyUG93ZXIpKSBGci5hZGQoazEsIEZyLm9uZSk7XG4gICAgICAgIGxldCBrMiA9IEZyLmFkZChrMSwgRnIub25lKTtcbiAgICAgICAgd2hpbGUgKGlzSW5jbHVkZWQoazIsIFtrMV0sIHNldHRpbmdzLmNpclBvd2VyKSkgRnIuYWRkKGsyLCBGci5vbmUpO1xuICAgICAgICByZXR1cm4gW2sxLCBrMl07XG5cbiAgICAgICAgZnVuY3Rpb24gaXNJbmNsdWRlZChrLCBrQXJyLCBwb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNpemUgPSAyICoqIHBvdztcbiAgICAgICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgdykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga0Fyci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgRnIubXVsKGtBcnJbal0sIHcpKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1twb3ddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXMygpIHtcbiAgICAgICAgbGV0IGdlbmVyYXRvciA9IEZyLmUoMzE2MjQpO1xuXG4gICAgICAgIC8vIEV4cG9uZW50IGlzIG9yZGVyKHIgLSAxKSAvIDNcbiAgICAgICAgbGV0IG9yZGVyUnN1YjEgPSAzNjQ4MDQwNDc4NjM5ODc5MjAzNzA3NzM0MjkwODc2MjEyNTE0NzU4MDYwNzMzNDAyNjcyMzkwNjE2MzY3MzY0NDI5MzAxNDE1OTM2bjtcbiAgICAgICAgbGV0IGV4cG9uZW50ID0gU2NhbGFyLmRpdihvcmRlclJzdWIxLCBTY2FsYXIuZSgzKSk7XG5cbiAgICAgICAgcmV0dXJuIEZyLmV4cChnZW5lcmF0b3IsIGV4cG9uZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlVzQoKSB7XG4gICAgICAgIHJldHVybiBGci53WzJdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXOCgpIHtcbiAgICAgICAgcmV0dXJuIEZyLndbM107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0T21lZ2FDdWJpY1Jvb3QocG93ZXIsIEZyKSB7XG4gICAgICAgIC8vIEhhcmRjb3JkZWQgM3RoLXJvb3Qgb2YgRnIud1syOF1cbiAgICAgICAgY29uc3QgZmlyc3RSb290ID0gRnIuZSg0Njc3OTkxNjU4ODYwNjk2MTAwMzYwNDY4NjY3OTkyNjQwMjY0ODEzNDQyOTkwNzkwMTE3NjIwMjY3NzQ1MzM3NzQzNDU5ODgwODBuKTtcblxuICAgICAgICByZXR1cm4gRnIuZXhwKGZpcnN0Um9vdCwgMiAqKiAoMjggLSBwb3dlcikpO1xuICAgIH1cbn1cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQge1NjYWxhcn0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IGpzU2hhMyBmcm9tIFwianMtc2hhM1wiO1xuY29uc3QgeyBrZWNjYWsyNTYgfSA9IGpzU2hhMztcblxuY29uc3QgUE9MWU5PTUlBTCA9IDA7XG5jb25zdCBTQ0FMQVIgPSAxO1xuXG5leHBvcnQgY2xhc3MgS2VjY2FrMjU2VHJhbnNjcmlwdCB7XG4gICAgY29uc3RydWN0b3IoY3VydmUpIHtcbiAgICAgICAgdGhpcy5HMSA9IGN1cnZlLkcxO1xuICAgICAgICB0aGlzLkZyID0gY3VydmUuRnI7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICB9XG5cbiAgICBhZGRQb2xDb21taXRtZW50KHBvbHlub21pYWxDb21taXRtZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKHt0eXBlOiBQT0xZTk9NSUFMLCBkYXRhOiBwb2x5bm9taWFsQ29tbWl0bWVudH0pO1xuICAgIH1cblxuICAgIGFkZFNjYWxhcihzY2FsYXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goe3R5cGU6IFNDQUxBUiwgZGF0YTogc2NhbGFyfSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hhbGxlbmdlKCkge1xuICAgICAgICBpZigwID09PSB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZWNjYWsyNTZUcmFuc2NyaXB0OiBObyBkYXRhIHRvIGdlbmVyYXRlIGEgdHJhbnNjcmlwdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuUG9seW5vbWlhbHMgPSAwO1xuICAgICAgICBsZXQgblNjYWxhcnMgPSAwO1xuXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4gUE9MWU5PTUlBTCA9PT0gZWxlbWVudC50eXBlID8gblBvbHlub21pYWxzKysgOiBuU2NhbGFycysrKTtcblxuICAgICAgICBsZXQgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoblNjYWxhcnMgKiB0aGlzLkZyLm44ICsgblBvbHlub21pYWxzICogdGhpcy5HMS5GLm44ICogMik7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoUE9MWU5PTUlBTCA9PT0gdGhpcy5kYXRhW2ldLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkcxLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmZlciwgb2Zmc2V0LCB0aGlzLmRhdGFbaV0uZGF0YSk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuRzEuRi5uOCAqIDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuRnIudG9ScHJCRShidWZmZXIsIG9mZnNldCwgdGhpcy5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLkZyLm44O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBTY2FsYXIuZnJvbVJwckJFKG5ldyBVaW50OEFycmF5KGtlY2NhazI1Ni5hcnJheUJ1ZmZlcihidWZmZXIpKSk7XG4gICAgICAgIHJldHVybiB0aGlzLkZyLmUodmFsdWUpO1xuICAgIH1cbn0iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQgY2xhc3MgUHJvb2Yge1xuICAgIGNvbnN0cnVjdG9yKGN1cnZlLCBsb2dnZXIpIHtcbiAgICAgICAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcblxuICAgICAgICB0aGlzLnJlc2V0UHJvb2YoKTtcbiAgICB9XG5cbiAgICByZXNldFByb29mKCkge1xuICAgICAgICB0aGlzLnBvbHlub21pYWxzID0ge307XG4gICAgICAgIHRoaXMuZXZhbHVhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBhZGRQb2x5bm9taWFsKGtleSwgcG9seW5vbWlhbCkge1xuICAgICAgICBpZiAoa2V5IGluIHRoaXMucG9seW5vbWlhbHMpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHByb29mOiBwb2x5bm9taWFsLiR7a2V5fSBhbHJlYWR5IGV4aXN0IGluIHByb29mYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2x5bm9taWFsc1trZXldID0gcG9seW5vbWlhbDtcbiAgICB9XG5cbiAgICBnZXRQb2x5bm9taWFsKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcy5wb2x5bm9taWFscykpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHByb29mOiBwb2x5bm9taWFsICR7a2V5fSBkb2VzIG5vdCBleGlzdCBpbiBwcm9vZmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvbHlub21pYWxzW2tleV07XG4gICAgfVxuXG4gICAgYWRkRXZhbHVhdGlvbihrZXksIGV2YWx1YXRpb24pIHtcbiAgICAgICAgaWYgKGtleSBpbiB0aGlzLmV2YWx1YXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBwcm9vZjogZXZhbHVhdGlvbnMuJHtrZXl9IGFscmVhZHkgZXhpc3QgaW4gcHJvb2ZgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2YWx1YXRpb25zW2tleV0gPSBldmFsdWF0aW9uO1xuICAgIH1cblxuICAgIGdldEV2YWx1YXRpb24oa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLmV2YWx1YXRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcHJvb2Y6IGV2YWx1YXRpb24gJHtrZXl9IGRvZXMgbm90IGV4aXN0IGluIHByb29mYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICB0b09iamVjdFByb29mKCkge1xuICAgICAgICBsZXQgcmVzID0ge3BvbHlub21pYWxzOiB7fSwgZXZhbHVhdGlvbnM6IHt9fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnBvbHlub21pYWxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICByZXMucG9seW5vbWlhbHNba2V5XSA9IHRoaXMuY3VydmUuRzEudG9PYmplY3QodGhpcy5wb2x5bm9taWFsc1trZXldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5ldmFsdWF0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgcmVzLmV2YWx1YXRpb25zW2tleV0gPSB0aGlzLmN1cnZlLkZyLnRvT2JqZWN0KHRoaXMuZXZhbHVhdGlvbnNba2V5XSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdFByb29mKG9iamVjdFByb29mKSB7XG4gICAgICAgIHRoaXMucmVzZXRQcm9vZigpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdFByb29mLnBvbHlub21pYWxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbHlub21pYWxzW2tleV0gPSB0aGlzLmN1cnZlLkcxLmZyb21PYmplY3Qob2JqZWN0UHJvb2YucG9seW5vbWlhbHNba2V5XSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdFByb29mLmV2YWx1YXRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRpb25zW2tleV0gPSB0aGlzLmN1cnZlLkZyLmZyb21PYmplY3Qob2JqZWN0UHJvb2YuZXZhbHVhdGlvbnNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyB3dG5zVXRpbHMgZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuaW1wb3J0IHsgQmlnQnVmZmVyLCBTY2FsYXIsIHV0aWxzIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRkZMT05LX1BST1RPQ09MX0lEIH0gZnJvbSBcIi4vemtleV9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7XG4gICAgWktFWV9GRl9BX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfQURESVRJT05TX1NFQ1RJT04sXG4gICAgWktFWV9GRl9CX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfQzBfU0VDVElPTixcbiAgICBaS0VZX0ZGX0NfTUFQX1NFQ1RJT04sXG4gICAgWktFWV9GRl9MQUdSQU5HRV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUFRBVV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUUNfU0VDVElPTixcbiAgICBaS0VZX0ZGX1FMX1NFQ1RJT04sXG4gICAgWktFWV9GRl9RTV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUU9fU0VDVElPTixcbiAgICBaS0VZX0ZGX1FSX1NFQ1RJT04sXG4gICAgWktFWV9GRl9TSUdNQTFfU0VDVElPTixcbiAgICBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OLFxuICAgIFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04sXG59IGZyb20gXCIuL2ZmbG9ua19jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEtlY2NhazI1NlRyYW5zY3JpcHQgfSBmcm9tIFwiLi9LZWNjYWsyNTZUcmFuc2NyaXB0LmpzXCI7XG5pbXBvcnQgeyBQcm9vZiB9IGZyb20gXCIuL3Byb29mLmpzXCI7XG5pbXBvcnQgeyBQb2x5bm9taWFsIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzXCI7XG5pbXBvcnQgeyBFdmFsdWF0aW9ucyB9IGZyb20gXCIuL3BvbHlub21pYWwvZXZhbHVhdGlvbnMuanNcIjtcbmltcG9ydCB7IENQb2x5bm9taWFsIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9jcG9seW5vbWlhbC5qc1wiO1xuXG5jb25zdCB7IHN0cmluZ2lmeUJpZ0ludHMgfSA9IHV0aWxzO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZmbG9ua1Byb3ZlKHprZXlGaWxlTmFtZSwgd2l0bmVzc0ZpbGVOYW1lLCBsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBQUk9WRVIgU1RBUlRFRFwiKTtcblxuICAgIC8vIFJlYWQgd2l0bmVzcyBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgd2l0bmVzcyBmaWxlXCIpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZmQ6IGZkV3RucyxcbiAgICAgICAgc2VjdGlvbnM6IHd0bnNTZWN0aW9uc1xuICAgIH0gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUod2l0bmVzc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMSA8PCAyNSwgMSA8PCAyMyk7XG4gICAgY29uc3Qgd3RucyA9IGF3YWl0IHd0bnNVdGlscy5yZWFkSGVhZGVyKGZkV3Rucywgd3Ruc1NlY3Rpb25zKTtcblxuICAgIC8vUmVhZCB6a2V5IGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB6a2V5IGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRaS2V5LFxuICAgICAgICBzZWN0aW9uczogemtleVNlY3Rpb25zXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5RmlsZU5hbWUsIFwiemtleVwiLCAyLCAxIDw8IDI1LCAxIDw8IDIzKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCB6a2V5U2VjdGlvbnMpO1xuXG4gICAgaWYgKHprZXkucHJvdG9jb2xJZCAhPT0gRkZMT05LX1BST1RPQ09MX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZmZsb25rXCIpO1xuICAgIH1cblxuICAgIGlmICghU2NhbGFyLmVxKHprZXkuciwgd3Rucy5xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDdXJ2ZSBvZiB0aGUgd2l0bmVzcyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIHByb3Zpbmcga2V5XCIpO1xuICAgIH1cblxuICAgIGlmICh3dG5zLm5XaXRuZXNzICE9PSB6a2V5Lm5WYXJzIC0gemtleS5uQWRkaXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRuZXNzIGxlbmd0aC4gQ2lyY3VpdDogJHt6a2V5Lm5WYXJzfSwgd2l0bmVzczogJHt3dG5zLm5XaXRuZXNzfSwgJHt6a2V5Lm5BZGRpdGlvbnN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSB6a2V5LmN1cnZlO1xuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IHNGciA9IGN1cnZlLkZyLm44O1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjggKiAyO1xuICAgIGNvbnN0IHNEb21haW4gPSB6a2V5LmRvbWFpblNpemUgKiBzRnI7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCIgIEZGTE9OSyBQUk9WRSBTRVRUSU5HU1wiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VydmU6ICAgICAgICAgJHtjdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDaXJjdWl0IHBvd2VyOiAke3prZXkucG93ZXJ9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIERvbWFpbiBzaXplOiAgICR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzOiAgICAgICAgICAke3prZXkublZhcnN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIFB1YmxpYyB2YXJzOiAgICR7emtleS5uUHVibGljfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDb25zdHJhaW50czogICAke3prZXkubkNvbnN0cmFpbnRzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBBZGRpdGlvbnM6ICAgICAke3prZXkubkFkZGl0aW9uc31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgIH1cblxuICAgIC8vUmVhZCB3aXRuZXNzIGRhdGFcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB3aXRuZXNzIGZpbGUgZGF0YVwiKTtcbiAgICBjb25zdCBidWZmV2l0bmVzcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFd0bnMsIHd0bnNTZWN0aW9ucywgMik7XG4gICAgYXdhaXQgZmRXdG5zLmNsb3NlKCk7XG5cbiAgICAvLyBGaXJzdCBlbGVtZW50IGluIHBsb25rIGlzIG5vdCB1c2VkIGFuZCBjYW4gYmUgYW55IHZhbHVlLiAoQnV0IGFsd2F5cyB0aGUgc2FtZSkuXG4gICAgLy8gV2Ugc2V0IGl0IHRvIHplcm8gdG8gZ28gZmFzdGVyIGluIHRoZSBleHBvbmVudGlhdGlvbnMuXG4gICAgYnVmZldpdG5lc3Muc2V0KEZyLnplcm8sIDApO1xuICAgIGNvbnN0IGJ1ZmZJbnRlcm5hbFdpdG5lc3MgPSBuZXcgQmlnQnVmZmVyKHprZXkubkFkZGl0aW9ucyAqIHNGcik7XG5cbiAgICBsZXQgYnVmZmVycyA9IHt9O1xuICAgIGxldCBwb2x5bm9taWFscyA9IHt9O1xuICAgIGxldCBldmFsdWF0aW9ucyA9IHt9O1xuXG4gICAgLy8gVG8gZGl2aWRlIHByaW1lIGZpZWxkcyB0aGUgRXh0ZW5kZWQgRXVjbGlkZWFuIEFsZ29yaXRobSBmb3IgY29tcHV0aW5nIG1vZHVsYXIgaW52ZXJzZXMgaXMgbmVlZGVkLlxuICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY29tcHV0ZSAxL2Rlbm9taW5hdG9yIGFuZCB0aGVuIG11bHRpcGx5IGl0IGJ5IHRoZSBudW1lcmF0b3IuXG4gICAgLy8gVGhlIEV4dGVuZGVkIEV1Y2xpZGVhbiBBbGdvcml0aG0gaXMgZXhwZW5zaXZlIGluIHRlcm1zIG9mIGNvbXB1dGF0aW9uLlxuICAgIC8vIEZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gZG8gbWFueSBtb2R1bGFyIGludmVyc2VzLCB0aGVyZSdzIGEgc2ltcGxlIG1hdGhlbWF0aWNhbCB0cmlja1xuICAgIC8vIHRoYXQgYWxsb3dzIHVzIHRvIGNvbXB1dGUgbWFueSBpbnZlcnNlcywgY2FsbGVkIE1vbnRnb21lcnkgYmF0Y2ggaW52ZXJzaW9uLlxuICAgIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly92aXRhbGlrLmNhL2dlbmVyYWwvMjAxOC8wNy8yMS9zdGFya3NfcGFydF8zLmh0bWxcbiAgICAvLyBNb250Z29tZXJ5IGJhdGNoIGludmVyc2lvbiByZWR1Y2VzIHRoZSBuIGludmVyc2UgY29tcHV0YXRpb25zIHRvIGEgc2luZ2xlIG9uZVxuICAgIC8vIFRvIHNhdmUgdGhpcyAoc2luZ2xlKSBpbnZlcnNlIGNvbXB1dGF0aW9uIG9uLWNoYWluLCB3aWxsIGNvbXB1dGUgaXQgaW4gcHJvdmluZyB0aW1lIGFuZCBzZW5kIGl0IHRvIHRoZSB2ZXJpZmllci5cbiAgICAvLyBUaGUgdmVyaWZpZXIgd2lsbCBoYXZlIHRvIGNoZWNrOlxuICAgIC8vIDEpIHRoZSBkZW5vbWluYXRvciBpcyBjb3JyZWN0IG11bHRpcGx5aW5nIGJ5IGhpbXNlbGYgbm9uLWludmVydGVkIC0+IGEgKiAxL2EgPT0gMVxuICAgIC8vIDIpIGNvbXB1dGUgdGhlIHJlc3Qgb2YgdGhlIGRlbm9taW5hdG9ycyB1c2luZyB0aGUgTW9udGdvbWVyeSBiYXRjaCBpbnZlcnNpb25cbiAgICAvLyBUaGUgaW52ZXJzaW9ucyBhcmU6XG4gICAgLy8gICDCtyBkZW5vbWluYXRvciBuZWVkZWQgaW4gc3RlcCA4IGFuZCA5IG9mIHRoZSB2ZXJpZmllciB0byBtdWx0aXBseSBieSAxL1pfSCh4aSlcbiAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiBzdGVwIDEwIGFuZCAxMSBvZiB0aGUgdmVyaWZpZXJcbiAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiB0aGUgdmVyaWZpZXIgd2hlbiBjb21wdXRpbmcgTF9pXntTMX0oWCkgYW5kIExfaV57UzJ9KFgpXG4gICAgLy8gICDCtyBMX2kgaT0xIHRvIG51bSBwdWJsaWMgaW5wdXRzLCBuZWVkZWQgaW4gc3RlcCA2IGFuZCA3IG9mIHRoZSB2ZXJpZmllciB0byBjb21wdXRlIExfMSh4aSkgYW5kIFBJKHhpKVxuICAgIGxldCB0b0ludmVyc2UgPSB7fTtcblxuICAgIGxldCBjaGFsbGVuZ2VzID0ge307XG4gICAgbGV0IHJvb3RzID0ge307XG5cbiAgICBsZXQgcHJvb2YgPSBuZXcgUHJvb2YoY3VydmUsIGxvZ2dlcik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgPiBSZWFkaW5nIFNlY3Rpb24gJHtaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OfS4gQWRkaXRpb25zYCk7XG4gICAgYXdhaXQgY2FsY3VsYXRlQWRkaXRpb25zKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgPiBSZWFkaW5nIFNlY3Rpb25zICR7WktFWV9GRl9TSUdNQTFfU0VDVElPTn0sJHtaS0VZX0ZGX1NJR01BMl9TRUNUSU9OfSwke1pLRVlfRkZfU0lHTUEzX1NFQ1RJT059LiBTaWdtYTEsIFNpZ21hMiAmIFNpZ21hIDNgKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBSZWFkaW5nIFNpZ21hIHBvbHlub21pYWxzIFwiKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTEgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTIgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTMgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuU2lnbWExLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX0ZGX1NJR01BMV9TRUNUSU9OXVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlNpZ21hMi5jb2VmLCAwLCBzRG9tYWluLCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTJfU0VDVElPTl1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2x5bm9taWFscy5TaWdtYTMuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfU0lHTUEzX1NFQ1RJT05dWzBdLnApO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgUmVhZGluZyBTaWdtYSBldmFsdWF0aW9uc1wiKTtcbiAgICBldmFsdWF0aW9ucy5TaWdtYTEgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgIGV2YWx1YXRpb25zLlNpZ21hMiA9IG5ldyBFdmFsdWF0aW9ucyhuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KSwgY3VydmUsIGxvZ2dlcik7XG4gICAgZXZhbHVhdGlvbnMuU2lnbWEzID0gbmV3IEV2YWx1YXRpb25zKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWExLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTFfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWEyLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTJfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWEzLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTNfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYD4gUmVhZGluZyBTZWN0aW9uICR7WktFWV9GRl9QVEFVX1NFQ1RJT059LiBQb3dlcnMgb2YgVGF1YCk7XG4gICAgY29uc3QgUFRhdSA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogMTYgKiBzRzEpO1xuICAgIC8vIGRvbWFpblNpemUgKiA5ICsgMTggPSBTUlMgbGVuZ3RoIGluIHRoZSB6a2V5IHNhdmVkIGluIHNldHVwIHByb2Nlc3MuXG4gICAgLy8gaXQgY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gU1JTIGxlbmd0aCBuZWVkZWQsIHNwZWNpZmljYWxseSB0byBjb21taXQgQzJcbiAgICAvLyBub3RpY2UgdGhhdCB0aGUgcmVzZXJ2ZWQgYnVmZmVycyBzaXplIGlzIHprZXkuZG9tYWluU2l6ZSAqIDE2ICogc0cxIGJlY2F1c2UgYSBwb3dlciBvZiB0d28gYnVmZmVyIHNpemUgaXMgbmVlZGVkXG4gICAgLy8gdGhlIHJlbWFpbmluZyBidWZmZXIgbm90IGZpbGxlZCBmcm9tIFNSUyBhcmUgc2V0IHRvIDBcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKFBUYXUsIDAsICh6a2V5LmRvbWFpblNpemUgKiA5ICsgMTgpICogc0cxLCB6a2V5U2VjdGlvbnNbWktFWV9GRl9QVEFVX1NFQ1RJT05dWzBdLnApO1xuXG4gICAgLy8gU1RBUlQgRkZMT05LIFBST1ZFUiBQUk9UT0NPTFxuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCAxLiBDb21wdXRlIEMxKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlwiKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgMVwiKTtcbiAgICBhd2FpdCByb3VuZDEoKTtcblxuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMDtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuUUw7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlFSO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5RTTtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuUU87XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlFDO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCAyLiBDb21wdXRlIEMyKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgMlwiKTtcbiAgICBhd2FpdCByb3VuZDIoKTtcblxuICAgIGRlbGV0ZSBidWZmZXJzLkE7XG4gICAgZGVsZXRlIGJ1ZmZlcnMuQjtcbiAgICBkZWxldGUgYnVmZmVycy5DO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5BO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5CO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5DO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5TaWdtYTE7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlNpZ21hMjtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuU2lnbWEzO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5sYWdyYW5nZTE7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlo7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgIC8vIFJPVU5EIDMuIENvbXB1dGUgb3BlbmluZyBldmFsdWF0aW9uc1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBST1VORCAzXCIpO1xuICAgIGF3YWl0IHJvdW5kMygpO1xuXG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkE7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkM7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlo7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlQxO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMjtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuU2lnbWExO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5TaWdtYTI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlNpZ21hMztcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUUw7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlFSO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5RTTtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUUM7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlFPO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCA0LiBDb21wdXRlIFcoWCkgcG9seW5vbWlhbFxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBST1VORCA0XCIpO1xuICAgIGF3YWl0IHJvdW5kNCgpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCA1LiBDb21wdXRlIFcnKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgNVwiKTtcbiAgICBhd2FpdCByb3VuZDUoKTtcblxuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5DMDtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuQzE7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkMyO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5SMTtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUjI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkY7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkw7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlpUO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5aVFMyO1xuICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiaW52XCIsIGdldE1vbnRnb21lcnlCYXRjaGVkSW52ZXJzZSgpKTtcblxuICAgIC8vIFByZXBhcmUgcHJvb2ZcbiAgICBsZXQgX3Byb29mID0gcHJvb2YudG9PYmplY3RQcm9vZigpO1xuICAgIF9wcm9vZi5wcm90b2NvbCA9IFwiZmZsb25rXCI7XG4gICAgX3Byb29mLmN1cnZlID0gY3VydmUubmFtZTtcblxuICAgIC8vIFByZXBhcmUgcHVibGljIGlucHV0c1xuICAgIGxldCBwdWJsaWNTaWduYWxzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBzRnI7XG5cbiAgICAgICAgY29uc3QgcHViID0gYnVmZldpdG5lc3Muc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgcHVibGljU2lnbmFscy5wdXNoKFNjYWxhci5mcm9tUnByTEUocHViKSk7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgUFJPVkVSIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvb2Y6IHN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKSxcbiAgICAgICAgcHVibGljU2lnbmFsczogc3RyaW5naWZ5QmlnSW50cyhwdWJsaWNTaWduYWxzKVxuICAgIH07XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVBZGRpdGlvbnMoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBhZGRpdGlvbnNcIik7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uc0J1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfQURESVRJT05TX1NFQ1RJT04pO1xuXG4gICAgICAgIC8vIHNpemVzOiB3aXJlSWRfeCA9IDQgYnl0ZXMgKDMyIGJpdHMpLCBmYWN0b3JfeCA9IGZpZWxkIHNpemUgYml0c1xuICAgICAgICAvLyBBZGRpdGlvbiBmb3JtOiB3aXJlSWRfYSB3aXJlSWRfYiBmYWN0b3JfYSBmYWN0b3JfYiAoc2l6ZSBpcyA0ICsgNCArIHNGciArIHNGcilcbiAgICAgICAgY29uc3Qgc1N1bSA9IDggKyBzRnIgKiAyO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5uQWRkaXRpb25zOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIgJiYgKDAgIT09IGkpICYmIChpICUgMTAwMDAwID09PSAwKSkgbG9nZ2VyLmluZm8oYCAgICBhZGRpdGlvbiAke2l9LyR7emtleS5uQWRkaXRpb25zfWApO1xuXG4gICAgICAgICAgICAvLyBSZWFkIGFkZGl0aW9uIHZhbHVlc1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IGkgKiBzU3VtO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsSWQxID0gcmVhZFVJbnQzMihhZGRpdGlvbnNCdWZmLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICBjb25zdCBzaWduYWxJZDIgPSByZWFkVUludDMyKGFkZGl0aW9uc0J1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcjEgPSBhZGRpdGlvbnNCdWZmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc0ZyKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBzRnI7XG4gICAgICAgICAgICBjb25zdCBmYWN0b3IyID0gYWRkaXRpb25zQnVmZi5zbGljZShvZmZzZXQsIG9mZnNldCArIHNGcik7XG5cbiAgICAgICAgICAgIC8vIEdldCB3aXRuZXNzIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzMSA9IGdldFdpdG5lc3Moc2lnbmFsSWQxKTtcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3MyID0gZ2V0V2l0bmVzcyhzaWduYWxJZDIpO1xuXG4gICAgICAgICAgICAvL0NhbGN1bGF0ZSBmaW5hbCByZXN1bHRcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEZyLmFkZChGci5tdWwoZmFjdG9yMSwgd2l0bmVzczEpLCBGci5tdWwoZmFjdG9yMiwgd2l0bmVzczIpKTtcblxuICAgICAgICAgICAgYnVmZkludGVybmFsV2l0bmVzcy5zZXQocmVzdWx0LCBzRnIgKiBpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRVSW50MzIoYiwgbykge1xuICAgICAgICBjb25zdCBidWZmID0gYi5zbGljZShvLCBvICsgNCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiBidWZmVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2l0bmVzcyhpZHgpIHtcbiAgICAgICAgbGV0IGRpZmYgPSB6a2V5Lm5WYXJzIC0gemtleS5uQWRkaXRpb25zO1xuICAgICAgICBpZiAoaWR4IDwgZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZXaXRuZXNzLnNsaWNlKGlkeCAqIHNGciwgaWR4ICogc0ZyICsgc0ZyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZHggPCB6a2V5Lm5WYXJzKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoaWR4IC0gZGlmZikgKiBzRnI7XG4gICAgICAgICAgICByZXR1cm4gYnVmZkludGVybmFsV2l0bmVzcy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNGcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRnIuemVybztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDEoKSB7XG4gICAgICAgIC8vIFNURVAgMS4xIC0gR2VuZXJhdGUgcmFuZG9tIGJsaW5kaW5nIHNjYWxhcnMgKGJfMSwgLi4uLCBiOSkg4oiIIEZcbiAgICAgICAgY2hhbGxlbmdlcy5iID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDk7IGkrKykge1xuICAgICAgICAgICAgY2hhbGxlbmdlcy5iW2ldID0gRnIucmFuZG9tKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTVEVQIDEuMiAtIENvbXB1dGUgd2lyZSBwb2x5bm9taWFscyBhKFgpLCBiKFgpIGFuZCBjKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgQSwgQiwgQyB3aXJlIHBvbHlub21pYWxzXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlV2lyZVBvbHlub21pYWxzKCk7XG5cbiAgICAgICAgLy8gU1RFUCAxLjMgLSBDb21wdXRlIHRoZSBxdW90aWVudCBwb2x5bm9taWFsIFQwKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVDAgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVQwKCk7XG5cbiAgICAgICAgLy8gU1RFUCAxLjQgLSBDb21wdXRlIHRoZSBGRlQtc3R5bGUgY29tYmluYXRpb24gcG9seW5vbWlhbCBDMShYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMxIHBvbHlub21pYWxcIik7XG4gICAgICAgIGF3YWl0IGNvbXB1dGVDMSgpO1xuXG4gICAgICAgIC8vIFRoZSBmaXJzdCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW0MxXV8xKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMxIG11bHRpIGV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBsZXQgY29tbWl0QzEgPSBhd2FpdCBwb2x5bm9taWFscy5DMS5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiQzFcIik7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJDMVwiLCBjb21taXRDMSk7XG5cbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVdpcmVQb2x5bm9taWFscygpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IFJlYWRpbmcgZGF0YSBmcm9tIHprZXkgZmlsZVwiKTtcbiAgICAgICAgICAgIC8vIEJ1aWxkIEEsIEIgYW5kIEMgZXZhbHVhdGlvbnMgYnVmZmVyIGZyb20gemtleSBhbmQgd2l0bmVzcyBmaWxlc1xuICAgICAgICAgICAgYnVmZmVycy5BID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQiA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbik7XG4gICAgICAgICAgICBidWZmZXJzLkMgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuXG4gICAgICAgICAgICAvLyBSZWFkIHprZXkgc2VjdGlvbnMgYW5kIGZpbGwgdGhlIGJ1ZmZlcnNcbiAgICAgICAgICAgIGNvbnN0IGFNYXBCdWZmID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgemtleVNlY3Rpb25zLCBaS0VZX0ZGX0FfTUFQX1NFQ1RJT04pO1xuICAgICAgICAgICAgY29uc3QgYk1hcEJ1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfQl9NQVBfU0VDVElPTik7XG4gICAgICAgICAgICBjb25zdCBjTWFwQnVmZiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHprZXlTZWN0aW9ucywgWktFWV9GRl9DX01BUF9TRUNUSU9OKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSBhbGwgd2l0bmVzcyBmcm9tIHNpZ25hbCBpZHMgYW5kIHNldCB0aGVtIHRvIEEsQiAmIEMgYnVmZmVyc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5Lm5Db25zdHJhaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaV9zRnIgPSBpICogc0ZyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGkgKiA0O1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBBIHZhbHVlIGZyb20gYSBzaWduYWwgaWRcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYWxJZEEgPSByZWFkVUludDMyKGFNYXBCdWZmLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuQS5zZXQoZ2V0V2l0bmVzcyhzaWduYWxJZEEpLCBpX3NGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIEIgdmFsdWUgZnJvbSBhIHNpZ25hbCBpZFxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hbElkQiA9IHJlYWRVSW50MzIoYk1hcEJ1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5CLnNldChnZXRXaXRuZXNzKHNpZ25hbElkQiksIGlfc0ZyKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgQyB2YWx1ZSBmcm9tIGEgc2lnbmFsIGlkXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsSWRDID0gcmVhZFVJbnQzMihjTWFwQnVmZiwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBidWZmZXJzLkMuc2V0KGdldFdpdG5lc3Moc2lnbmFsSWRDKSwgaV9zRnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCbGluZCBhKFgpLCBiKFgpIGFuZCBjKFgpIHBvbHlub21pYWxzIGNvZWZmaWNpZW50cyB3aXRoIGJsaW5kaW5nIHNjYWxhcnMgYlxuICAgICAgICAgICAgYnVmZmVycy5BLnNldChjaGFsbGVuZ2VzLmJbMV0sIHNEb21haW4gLSA2NCk7XG4gICAgICAgICAgICBidWZmZXJzLkEuc2V0KGNoYWxsZW5nZXMuYlsyXSwgc0RvbWFpbiAtIDMyKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQi5zZXQoY2hhbGxlbmdlcy5iWzNdLCBzRG9tYWluIC0gNjQpO1xuICAgICAgICAgICAgYnVmZmVycy5CLnNldChjaGFsbGVuZ2VzLmJbNF0sIHNEb21haW4gLSAzMik7XG4gICAgICAgICAgICBidWZmZXJzLkMuc2V0KGNoYWxsZW5nZXMuYls1XSwgc0RvbWFpbiAtIDY0KTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQy5zZXQoY2hhbGxlbmdlcy5iWzZdLCBzRG9tYWluIC0gMzIpO1xuXG4gICAgICAgICAgICBidWZmZXJzLkEgPSBhd2FpdCBGci5iYXRjaFRvTW9udGdvbWVyeShidWZmZXJzLkEpO1xuICAgICAgICAgICAgYnVmZmVycy5CID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZmVycy5CKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQyA9IGF3YWl0IEZyLmJhdGNoVG9Nb250Z29tZXJ5KGJ1ZmZlcnMuQyk7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgd2lyZSBwb2x5bm9taWFscyBhKFgpLCBiKFgpIGFuZCBjKFgpIGZyb20gQSxCICYgQyBidWZmZXJzXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQSBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQSA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQSwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQiBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQiA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQiwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQyBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQyA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQywgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgZXh0ZW5kZWQgZXZhbHVhdGlvbnMgb2YgYShYKSwgYihYKSBhbmQgYyhYKSBwb2x5bm9taWFsc1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEEgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQSA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkEsIDQsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEIgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQiA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkIsIDQsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQyA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMsIDQsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVzXG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuQS5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5CLmRlZ3JlZSgpID49IHprZXkuZG9tYWluU2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkIgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLkMuZGVncmVlKCkgPj0gemtleS5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQyBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlVDAoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgwrfCt8K3IFJlYWRpbmcgc2VjdGlvbnMgJHtaS0VZX0ZGX1FMX1NFQ1RJT059LCAke1pLRVlfRkZfUVJfU0VDVElPTn1gICtcbiAgICAgICAgICAgICAgICBgLCAke1pLRVlfRkZfUU1fU0VDVElPTn0sICR7WktFWV9GRl9RT19TRUNUSU9OfSwgJHtaS0VZX0ZGX1FDX1NFQ1RJT059LiBRIHNlbGVjdG9yc2ApO1xuICAgICAgICAgICAgLy8gUmVzZXJ2ZSBtZW1vcnkgZm9yIFEncyBldmFsdWF0aW9uc1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUUwgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUVIgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUU0gPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUU8gPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUUMgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBSZWFkIFEncyBldmFsdWF0aW9ucyBmcm9tIHprZXkgZmlsZVxuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTC5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUxfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RUi5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUVJfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTS5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU1fU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU9fU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RQy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUNfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuXG4gICAgICAgICAgICAvLyBSZWFkIExhZ3JhbmdlIHBvbHlub21pYWxzICYgZXZhbHVhdGlvbnMgZnJvbSB6a2V5IGZpbGVcbiAgICAgICAgICAgIGNvbnN0IGxhZ3JhbmdlUG9seW5vbWlhbHMgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfTEFHUkFOR0VfU0VDVElPTik7XG4gICAgICAgICAgICBldmFsdWF0aW9ucy5sYWdyYW5nZTEgPSBuZXcgRXZhbHVhdGlvbnMobGFncmFuZ2VQb2x5bm9taWFscywgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIFJlc2VydmUgbWVtb3J5IGZvciBidWZmZXJzIFQwXG4gICAgICAgICAgICBidWZmZXJzLlQwID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCk7XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMCBldmFsdWF0aW9uc1wiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplICogNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgICAgVDAgZXZhbHVhdGlvbiAke2l9LyR7emtleS5kb21haW5TaXplICogNH1gKTtcblxuICAgICAgICAgICAgICAgIC8vIEdldCByZWxhdGVkIGV2YWx1YXRpb25zIHRvIGNvbXB1dGUgY3VycmVudCBUMCBldmFsdWF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGV2YWx1YXRpb25zLkEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gZXZhbHVhdGlvbnMuQi5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBldmFsdWF0aW9ucy5DLmdldEV2YWx1YXRpb24oaSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBxbCA9IGV2YWx1YXRpb25zLlFMLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcXIgPSBldmFsdWF0aW9ucy5RUi5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHFtID0gZXZhbHVhdGlvbnMuUU0uZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxbyA9IGV2YWx1YXRpb25zLlFPLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcWMgPSBldmFsdWF0aW9ucy5RQy5nZXRFdmFsdWF0aW9uKGkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBjdXJyZW50IHB1YmxpYyBpbnB1dFxuICAgICAgICAgICAgICAgIGxldCBwaSA9IEZyLnplcm87XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB6a2V5Lm5QdWJsaWM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoaiAqIDUgKiB6a2V5LmRvbWFpblNpemUpICsgemtleS5kb21haW5TaXplICsgaTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsUG9sID0gZXZhbHVhdGlvbnMubGFncmFuZ2UxLmdldEV2YWx1YXRpb24ob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYVZhbCA9IGJ1ZmZlcnMuQS5zbGljZShqICogc0ZyLCAoaiArIDEpICogc0ZyKTtcblxuICAgICAgICAgICAgICAgICAgICBwaSA9IEZyLnN1YihwaSwgRnIubXVsKGxQb2wsIGFWYWwpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL1QwKFgpID0gW3FfTChYKcK3YShYKSArIHFfUihYKcK3YihYKSArIHFfTShYKcK3YShYKcK3YihYKSArIHFfTyhYKcK3YyhYKSArIHFfQyhYKSArIFBJKFgpXSDCtyAxL1pfSChYKVxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgZmlyc3QgVDAoWCnCt1pfSChYKSwgc28gZGl2aWRlIGxhdGVyIHRoZSByZXN1bHRpbmcgcG9seW5vbWlhbCBieSBaX0goWClcbiAgICAgICAgICAgICAgICAvLyBleHByZXNzaW9uIDEgLT4gcV9MKFgpwrdhKFgpXG4gICAgICAgICAgICAgICAgY29uc3QgZTEgPSBGci5tdWwoYSwgcWwpO1xuXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiAyIC0+IHFfUihYKcK3YihYKVxuICAgICAgICAgICAgICAgIGNvbnN0IGUyID0gRnIubXVsKGIsIHFyKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gMyAtPiBxX00oWCnCt2EoWCnCt2IoWClcbiAgICAgICAgICAgICAgICBjb25zdCBlMyA9IEZyLm11bChGci5tdWwoYSwgYiksIHFtKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gNCAtPiBxX08oWCnCt2MoWClcbiAgICAgICAgICAgICAgICBjb25zdCBlNCA9IEZyLm11bChjLCBxbyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0MCA9IGV4cHJlc3Npb25zIDEgKyBleHByZXNzaW9uIDIgKyBleHByZXNzaW9uIDMgKyBleHByZXNzaW9uIDQgKyBxYyArIHBpXG4gICAgICAgICAgICAgICAgY29uc3QgdDAgPSBGci5hZGQoZTEsIEZyLmFkZChlMiwgRnIuYWRkKGUzLCBGci5hZGQoZTQsIEZyLmFkZChxYywgcGkpKSkpKTtcblxuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuVDAuc2V0KHQwLCBpICogc0ZyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJidWZmZXIgVDA6IFwiICsgYnVmZmVycy5UMC5ieXRlTGVuZ3RoIC8gc0ZyKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBwb2x5bm9taWFsIFQwKFgpIGZyb20gYnVmZmVycy5UMFxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQwIGlmZnRcIik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5UMCA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuVDAsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlQwIGxlbmd0aDogXCIgKyBwb2x5bm9taWFscy5UMC5sZW5ndGgoKSk7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlQwIGRlZ3JlZTogXCIgKyBwb2x5bm9taWFscy5UMC5kZWdyZWUoKSk7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMCBieSBaX0goWClcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMCAvIFpIXCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDAuZGl2QnlaZXJvZmllcih6a2V5LmRvbWFpblNpemUsIEZyLm9uZSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlQwLmRlZ3JlZSgpID49IDIgKiB6a2V5LmRvbWFpblNpemUgLSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUMCBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWQgKGRlZ3JlZSBpcyAke3BvbHlub21pYWxzLlQwLmRlZ3JlZSgpfSBhbmQgbXVzdCBiZSBsZXNzIHRoYW4gJHsyICogemtleS5kb21haW5TaXplICsgMn1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuVDA7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlQzEoKSB7XG4gICAgICAgICAgICBsZXQgQzEgPSBuZXcgQ1BvbHlub21pYWwoNCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBDMS5hZGRQb2x5bm9taWFsKDAsIHBvbHlub21pYWxzLkEpO1xuICAgICAgICAgICAgQzEuYWRkUG9seW5vbWlhbCgxLCBwb2x5bm9taWFscy5CKTtcbiAgICAgICAgICAgIEMxLmFkZFBvbHlub21pYWwoMiwgcG9seW5vbWlhbHMuQyk7XG4gICAgICAgICAgICBDMS5hZGRQb2x5bm9taWFsKDMsIHBvbHlub21pYWxzLlQwKTtcblxuICAgICAgICAgICAgcG9seW5vbWlhbHMuQzEgPSBDMS5nZXRQb2x5bm9taWFsKCk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLkMxLmRlZ3JlZSgpID49IDggKiB6a2V5LmRvbWFpblNpemUgLSA4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQzEgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQyKCkge1xuICAgICAgICAvLyBTVEVQIDIuMSAtIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGEgYW5kIGdhbW1hIOKIiCBGXG4gICAgICAgIC8vIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGFcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2VzIGJldGEgYW5kIGdhbW1hXCIpO1xuICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuXG4gICAgICAgIC8vIEFkZCBDMCB0byB0aGUgdHJhbnNjcmlwdFxuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQoemtleS5DMCk7XG5cbiAgICAgICAgLy8gQWRkIEEgdG8gdGhlIHRyYW5zY3JpcHRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoYnVmZmVycy5BLnNsaWNlKGkgKiBzRnIsIGkgKiBzRnIgKyBzRnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBDMSB0byB0aGUgdHJhbnNjcmlwdFxuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIkMxXCIpKTtcblxuICAgICAgICBjaGFsbGVuZ2VzLmJldGEgPSB0cmFuc2NyaXB0LmdldENoYWxsZW5nZSgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBjaGFsbGVuZ2VzLmJldGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5iZXRhKSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBwZXJtdXRhdGlvbiBjaGFsbGVuZ2UgZ2FtbWFcbiAgICAgICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmJldGEpO1xuICAgICAgICBjaGFsbGVuZ2VzLmdhbW1hID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy5nYW1tYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmdhbW1hKSk7XG5cbiAgICAgICAgLy8gU1RFUCAyLjIgLSBDb21wdXRlIHBlcm11dGF0aW9uIHBvbHlub21pYWwgeihYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFogcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVooKTtcblxuICAgICAgICAvLyBTVEVQIDIuMyAtIENvbXB1dGUgcXVvdGllbnQgcG9seW5vbWlhbCBUMShYKSBhbmQgVDIoWClcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBUMSBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlVDEoKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBUMiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlVDIoKTtcblxuICAgICAgICAvLyBTVEVQIDIuNCAtIENvbXB1dGUgdGhlIEZGVC1zdHlsZSBjb21iaW5hdGlvbiBwb2x5bm9taWFsIEMyKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgQzIgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZUMyKCk7XG5cbiAgICAgICAgLy8gVGhlIHNlY29uZCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW0MyXV8xKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMyIG11bHRpIGV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBsZXQgY29tbWl0QzIgPSBhd2FpdCBwb2x5bm9taWFscy5DMi5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiQzJcIik7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJDMlwiLCBjb21taXRDMik7XG5cbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVooKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgWiBldmFsdWF0aW9uc1wiKTtcblxuICAgICAgICAgICAgbGV0IG51bUFyciA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbik7XG4gICAgICAgICAgICBsZXQgZGVuQXJyID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluKTtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBmaXJzdCB2YWx1ZXMgdG8gMVxuICAgICAgICAgICAgbnVtQXJyLnNldChGci5vbmUsIDApO1xuICAgICAgICAgICAgZGVuQXJyLnNldChGci5vbmUsIDApO1xuXG4gICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCBvbWVnYVxuICAgICAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgIFogZXZhbHVhdGlvbiAke2l9LyR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIHNGcjtcblxuICAgICAgICAgICAgICAgIC8vIFooWCkgOj0gbnVtQXJyIC8gZGVuQXJyXG4gICAgICAgICAgICAgICAgLy8gbnVtQXJyIDo9IChhICsgYmV0YcK3z4kgKyBnYW1tYSkoYiArIGJldGHCt8+JwrdrMSArIGdhbW1hKShjICsgYmV0YcK3z4nCt2syICsgZ2FtbWEpXG4gICAgICAgICAgICAgICAgY29uc3QgYmV0YXcgPSBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCB3KTtcblxuICAgICAgICAgICAgICAgIGxldCBudW0xID0gYnVmZmVycy5BLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgbnVtMSA9IEZyLmFkZChudW0xLCBiZXRhdyk7XG4gICAgICAgICAgICAgICAgbnVtMSA9IEZyLmFkZChudW0xLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBudW0yID0gYnVmZmVycy5CLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgbnVtMiA9IEZyLmFkZChudW0yLCBGci5tdWwoemtleS5rMSwgYmV0YXcpKTtcbiAgICAgICAgICAgICAgICBudW0yID0gRnIuYWRkKG51bTIsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IG51bTMgPSBidWZmZXJzLkMuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgICAgICAgICBudW0zID0gRnIuYWRkKG51bTMsIEZyLm11bCh6a2V5LmsyLCBiZXRhdykpO1xuICAgICAgICAgICAgICAgIG51bTMgPSBGci5hZGQobnVtMywgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gRnIubXVsKG51bTEsIEZyLm11bChudW0yLCBudW0zKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBkZW5BcnIgOj0gKGEgKyBiZXRhwrdzaWdtYTEgKyBnYW1tYSkoYiArIGJldGHCt3NpZ21hMiArIGdhbW1hKShjICsgYmV0YcK3c2lnbWEzICsgZ2FtbWEpXG4gICAgICAgICAgICAgICAgbGV0IGRlbjEgPSBidWZmZXJzLkEuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgICAgICAgICBkZW4xID0gRnIuYWRkKGRlbjEsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIGV2YWx1YXRpb25zLlNpZ21hMS5nZXRFdmFsdWF0aW9uKGkgKiA0KSkpO1xuICAgICAgICAgICAgICAgIGRlbjEgPSBGci5hZGQoZGVuMSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGVuMiA9IGJ1ZmZlcnMuQi5zbGljZShpX3NGciwgaV9zRnIgKyBzRnIpO1xuICAgICAgICAgICAgICAgIGRlbjIgPSBGci5hZGQoZGVuMiwgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgZXZhbHVhdGlvbnMuU2lnbWEyLmdldEV2YWx1YXRpb24oaSAqIDQpKSk7XG4gICAgICAgICAgICAgICAgZGVuMiA9IEZyLmFkZChkZW4yLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBkZW4zID0gYnVmZmVycy5DLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgZGVuMyA9IEZyLmFkZChkZW4zLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBldmFsdWF0aW9ucy5TaWdtYTMuZ2V0RXZhbHVhdGlvbihpICogNCkpKTtcbiAgICAgICAgICAgICAgICBkZW4zID0gRnIuYWRkKGRlbjMsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRlbiA9IEZyLm11bChkZW4xLCBGci5tdWwoZGVuMiwgZGVuMykpO1xuXG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbHkgY3VycmVudCBudW0gdmFsdWUgd2l0aCB0aGUgcHJldmlvdXMgb25lIHNhdmVkIGluIG51bUFyclxuICAgICAgICAgICAgICAgIG51bSA9IEZyLm11bChudW1BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKSwgbnVtKTtcbiAgICAgICAgICAgICAgICBudW1BcnIuc2V0KG51bSwgKChpICsgMSkgJSB6a2V5LmRvbWFpblNpemUpICogc0ZyKTtcblxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGx5IGN1cnJlbnQgZGVuIHZhbHVlIHdpdGggdGhlIHByZXZpb3VzIG9uZSBzYXZlZCBpbiBkZW5BcnJcbiAgICAgICAgICAgICAgICBkZW4gPSBGci5tdWwoZGVuQXJyLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGciksIGRlbik7XG4gICAgICAgICAgICAgICAgZGVuQXJyLnNldChkZW4sICgoaSArIDEpICUgemtleS5kb21haW5TaXplKSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBOZXh0IG9tZWdhXG4gICAgICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3prZXkucG93ZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGludmVyc2Ugb2YgZGVuQXJyIHRvIGNvbXB1dGUgaW4gdGhlIG5leHQgY29tbWFuZCB0aGVcbiAgICAgICAgICAgIC8vIGRpdmlzaW9uIG51bUFyci9kZW5BcnIgYnkgbXVsdGlwbHlpbmcgbnVtIMK3IDEvZGVuQXJyXG4gICAgICAgICAgICBkZW5BcnIgPSBhd2FpdCBGci5iYXRjaEludmVyc2UoZGVuQXJyKTtcblxuICAgICAgICAgICAgLy8gVE9ETzogRG8gaXQgaW4gYXNzZW1ibHkgYW5kIGluIHBhcmFsbGVsXG4gICAgICAgICAgICAvLyBNdWx0aXBseSBudW1BcnIgwrcgZGVuQXJyIHdoZXJlIGRlbkFyciB3YXMgaW52ZXJ0ZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBzRnI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB6ID0gRnIubXVsKG51bUFyci5zbGljZShpX3NGciwgaV9zRnIgKyBzRnIpLCBkZW5BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKSk7XG4gICAgICAgICAgICAgICAgbnVtQXJyLnNldCh6LCBpX3NGcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGcm9tIG5vdyBvbiB0aGUgdmFsdWVzIHNhdmVkIG9uIG51bUFyciB3aWxsIGJlIFooWCkgYnVmZmVyXG4gICAgICAgICAgICBidWZmZXJzLlogPSBudW1BcnI7XG5cbiAgICAgICAgICAgIGlmICghRnIuZXEobnVtQXJyLnNsaWNlKDAsIHNGciksIEZyLm9uZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3B5IGNvbnN0cmFpbnRzIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHBvbHlub21pYWwgY29lZmZpY2llbnRzIHooWCkgZnJvbSBidWZmZXJzLlpcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBaIGlmZnRcIik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5aID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5aLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSBleHRlbmRlZCBldmFsdWF0aW9ucyBvZiB6KFgpIHBvbHlub21pYWxcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBaIGZmdFwiKTtcbiAgICAgICAgICAgIGV2YWx1YXRpb25zLlogPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5aLCA0LCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQmxpbmQgeihYKSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cyB3aXRoIGJsaW5kaW5nIHNjYWxhcnMgYlxuICAgICAgICAgICAgcG9seW5vbWlhbHMuWi5ibGluZENvZWZmaWNpZW50cyhbY2hhbGxlbmdlcy5iWzldLCBjaGFsbGVuZ2VzLmJbOF0sIGNoYWxsZW5nZXMuYls3XV0pO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5aLmRlZ3JlZSgpID49IHprZXkuZG9tYWluU2l6ZSArIDMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJaIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuWjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVUMSgpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMSBldmFsdWF0aW9uc1wiKTtcblxuICAgICAgICAgICAgYnVmZmVycy5UMSA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDIpO1xuICAgICAgICAgICAgYnVmZmVycy5UMXogPSBuZXcgQmlnQnVmZmVyKHNEb21haW4gKiAyKTtcblxuICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgb21lZ2FcbiAgICAgICAgICAgIGxldCBvbWVnYSA9IEZyLm9uZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplICogMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgIFQxIGV2YWx1YXRpb24gJHtpfS8ke3prZXkuZG9tYWluU2l6ZSAqIDR9YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvbWVnYTIgPSBGci5zcXVhcmUob21lZ2EpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IGV2YWx1YXRpb25zLlouZ2V0RXZhbHVhdGlvbihpICogMik7XG4gICAgICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaGFsbGVuZ2VzLmJbN10sIG9tZWdhMiksIEZyLm11bChjaGFsbGVuZ2VzLmJbOF0sIG9tZWdhKSksIGNoYWxsZW5nZXMuYls5XSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUMShYKSA6PSAoeihYKSAtIDEpIMK3IExfMShYKVxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgZmlyc3QgVDEoWCnCt1pfSChYKSwgc28gZGl2aWRlIGxhdGVyIHRoZSByZXN1bHRpbmcgcG9seW5vbWlhbCBieSBaX0goWClcbiAgICAgICAgICAgICAgICBjb25zdCBsYWdyYW5nZTEgPSBldmFsdWF0aW9ucy5sYWdyYW5nZTEuZ2V0RXZhbHVhdGlvbih6a2V5LmRvbWFpblNpemUgKyBpICogMik7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gRnIubXVsKEZyLnN1Yih6LCBGci5vbmUpLCBsYWdyYW5nZTEpO1xuICAgICAgICAgICAgICAgIGxldCB0MXogPSBGci5tdWwoenAsIGxhZ3JhbmdlMSk7XG5cbiAgICAgICAgICAgICAgICBidWZmZXJzLlQxLnNldCh0MSwgaSAqIHNGcik7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5UMXouc2V0KHQxeiwgaSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgb21lZ2FcbiAgICAgICAgICAgICAgICBvbWVnYSA9IEZyLm11bChvbWVnYSwgRnIud1t6a2V5LnBvd2VyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDEoWCkgZnJvbSBidWZmZXJzLlQxXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDEgaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMSwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMSBieSBaX0goWClcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxLmRpdkJ5WmVyb2ZpZXIoemtleS5kb21haW5TaXplLCBGci5vbmUpO1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDF6KFgpIGZyb20gYnVmZmVycy5UMXpcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMXogaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxeiA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuVDF6LCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBwb2x5bm9taWFsIFQxeiB0byBUMSB0byBnZXQgdGhlIGZpbmFsIHBvbHlub21pYWwgVDFcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxLmFkZChwb2x5bm9taWFscy5UMXopO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5UMS5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVDEgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgYnVmZmVycy5UMTtcbiAgICAgICAgICAgIGRlbGV0ZSBidWZmZXJzLlQxejtcbiAgICAgICAgICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMXo7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlVDIoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDIgZXZhbHVhdGlvbnNcIik7XG5cbiAgICAgICAgICAgIGJ1ZmZlcnMuVDIgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuVDJ6ID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCk7XG5cbiAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIG9tZWdhXG4gICAgICAgICAgICBsZXQgb21lZ2EgPSBGci5vbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZSAqIDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIgJiYgKDAgIT09IGkpICYmIChpICUgMTAwMDAwID09PSAwKSkgbG9nZ2VyLmluZm8oYCAgICBUMiBldmFsdWF0aW9uICR7aX0vJHt6a2V5LmRvbWFpblNpemUgKiA0fWApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb21lZ2EyID0gRnIuc3F1YXJlKG9tZWdhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbWVnYVcgPSBGci5tdWwob21lZ2EsIEZyLndbemtleS5wb3dlcl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9tZWdhVzIgPSBGci5zcXVhcmUob21lZ2FXKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBldmFsdWF0aW9ucy5BLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGV2YWx1YXRpb25zLkIuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZXZhbHVhdGlvbnMuQy5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHogPSBldmFsdWF0aW9ucy5aLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgelcgPSBldmFsdWF0aW9ucy5aLmdldEV2YWx1YXRpb24oKHprZXkuZG9tYWluU2l6ZSAqIDQgKyA0ICsgaSkgJSAoemtleS5kb21haW5TaXplICogNCkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaGFsbGVuZ2VzLmJbN10sIG9tZWdhMiksIEZyLm11bChjaGFsbGVuZ2VzLmJbOF0sIG9tZWdhKSksIGNoYWxsZW5nZXMuYls5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeldwID0gRnIuYWRkKEZyLmFkZChGci5tdWwoY2hhbGxlbmdlcy5iWzddLCBvbWVnYVcyKSwgRnIubXVsKGNoYWxsZW5nZXMuYls4XSwgb21lZ2FXKSksIGNoYWxsZW5nZXMuYls5XSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTEgPSBldmFsdWF0aW9ucy5TaWdtYTEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTIgPSBldmFsdWF0aW9ucy5TaWdtYTIuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTMgPSBldmFsdWF0aW9ucy5TaWdtYTMuZ2V0RXZhbHVhdGlvbihpKTtcblxuICAgICAgICAgICAgICAgIC8vIFQyKFgpIDo9IFsgKGEoWCkgKyBiZXRhwrdYICsgZ2FtbWEpKGIoWCkgKyBiZXRhwrdrMcK3WCArIGdhbW1hKShjKFgpICsgYmV0YcK3azLCt1ggKyBnYW1tYSl6KFgpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIC0oYShYKSArIGJldGHCt3NpZ21hMShYKSArIGdhbW1hKShiKFgpICsgYmV0YcK3c2lnbWEyKFgpICsgZ2FtbWEpKGMoWCkgKyBiZXRhwrdzaWdtYTMoWCkgKyBnYW1tYSl6KFjPiSldIMK3IDEvWl9IKFgpXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBmaXJzdCBUMihYKcK3Wl9IKFgpLCBzbyBkaXZpZGUgbGF0ZXIgdGhlIHJlc3VsdGluZyBwb2x5bm9taWFsIGJ5IFpfSChYKVxuXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiAxIC0+IChhKFgpICsgYmV0YcK3WCArIGdhbW1hKShiKFgpICsgYmV0YcK3azHCt1ggKyBnYW1tYSkoYyhYKSArIGJldGHCt2sywrdYICsgZ2FtbWEpeihYKVxuICAgICAgICAgICAgICAgIGNvbnN0IGJldGFYID0gRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgb21lZ2EpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUxMSA9IEZyLmFkZChhLCBiZXRhWCk7XG4gICAgICAgICAgICAgICAgZTExID0gRnIuYWRkKGUxMSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZTEyID0gRnIuYWRkKGIsIEZyLm11bChiZXRhWCwgemtleS5rMSkpO1xuICAgICAgICAgICAgICAgIGUxMiA9IEZyLmFkZChlMTIsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUxMyA9IEZyLmFkZChjLCBGci5tdWwoYmV0YVgsIHprZXkuazIpKTtcbiAgICAgICAgICAgICAgICBlMTMgPSBGci5hZGQoZTEzLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBlMSA9IEZyLm11bChGci5tdWwoRnIubXVsKGUxMSwgZTEyKSwgZTEzKSwgeik7XG4gICAgICAgICAgICAgICAgbGV0IGUxeiA9IEZyLm11bChGci5tdWwoRnIubXVsKGUxMSwgZTEyKSwgZTEzKSwgenApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IFtlMSwgZTF6XSA9IE11bFoubXVsNChlMTEsIGUxMiwgZTEzLCB6LCBhcCwgYnAsIGNwLCB6cCwgaSAlIDQsIEZyKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gMiAtPiAoYShYKSArIGJldGHCt3NpZ21hMShYKSArIGdhbW1hKShiKFgpICsgYmV0YcK3c2lnbWEyKFgpICsgZ2FtbWEpKGMoWCkgKyBiZXRhwrdzaWdtYTMoWCkgKyBnYW1tYSl6KFjPiSlcbiAgICAgICAgICAgICAgICBsZXQgZTIxID0gRnIuYWRkKGEsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIHNpZ21hMSkpO1xuICAgICAgICAgICAgICAgIGUyMSA9IEZyLmFkZChlMjEsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUyMiA9IEZyLmFkZChiLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBzaWdtYTIpKTtcbiAgICAgICAgICAgICAgICBlMjIgPSBGci5hZGQoZTIyLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBlMjMgPSBGci5hZGQoYywgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgc2lnbWEzKSk7XG4gICAgICAgICAgICAgICAgZTIzID0gRnIuYWRkKGUyMywgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZTIgPSBGci5tdWwoRnIubXVsKEZyLm11bChlMjEsIGUyMiksIGUyMyksIHpXKTtcbiAgICAgICAgICAgICAgICBsZXQgZTJ6ID0gRnIubXVsKEZyLm11bChGci5tdWwoZTIxLCBlMjIpLCBlMjMpLCB6V3ApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IFtlMiwgZTJ6XSA9IE11bFoubXVsNChlMjEsIGUyMiwgZTIzLCB6VywgYXAsIGJwLCBjcCwgeldwLCBpICUgNCwgRnIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHQyID0gRnIuc3ViKGUxLCBlMik7XG4gICAgICAgICAgICAgICAgbGV0IHQyeiA9IEZyLnN1YihlMXosIGUyeik7XG5cbiAgICAgICAgICAgICAgICBidWZmZXJzLlQyLnNldCh0MiwgaSAqIHNGcik7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5UMnouc2V0KHQyeiwgaSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgb21lZ2FcbiAgICAgICAgICAgICAgICBvbWVnYSA9IEZyLm11bChvbWVnYSwgRnIud1t6a2V5LnBvd2VyICsgMl0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDIoWCkgZnJvbSBidWZmZXJzLlQyXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDIgaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQyID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMiwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMiBieSBaX0goWClcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMiAvIFpIXCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDIuZGl2QnlaZXJvZmllcih6a2V5LmRvbWFpblNpemUsIEZyLm9uZSk7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcG9seW5vbWlhbCBUMnooWCkgZnJvbSBidWZmZXJzLlQyelxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQyeiBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDJ6ID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMnosIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHBvbHlub21pYWwgVDJ6IHRvIFQyIHRvIGdldCB0aGUgZmluYWwgcG9seW5vbWlhbCBUMlxuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDIuYWRkKHBvbHlub21pYWxzLlQyeik7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlQyLmRlZ3JlZSgpID49IDMgKiB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUMiBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSBidWZmZXJzLlQyO1xuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuVDJ6O1xuICAgICAgICAgICAgZGVsZXRlIHBvbHlub21pYWxzLlQyejtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVDMigpIHtcbiAgICAgICAgICAgIGxldCBDMiA9IG5ldyBDUG9seW5vbWlhbCgzLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIEMyLmFkZFBvbHlub21pYWwoMCwgcG9seW5vbWlhbHMuWik7XG4gICAgICAgICAgICBDMi5hZGRQb2x5bm9taWFsKDEsIHBvbHlub21pYWxzLlQxKTtcbiAgICAgICAgICAgIEMyLmFkZFBvbHlub21pYWwoMiwgcG9seW5vbWlhbHMuVDIpO1xuXG4gICAgICAgICAgICBwb2x5bm9taWFscy5DMiA9IEMyLmdldFBvbHlub21pYWwoKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZGVncmVlXG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuQzIuZGVncmVlKCkgPj0gOSAqIHprZXkuZG9tYWluU2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkMyIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kMygpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2UgeGlcIik7XG4gICAgICAgIC8vIFNURVAgMy4xIC0gQ29tcHV0ZSBldmFsdWF0aW9uIGNoYWxsZW5nZSB4aSDiiIggU1xuICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmdhbW1hKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLmdldFBvbHlub21pYWwoXCJDMlwiKSk7XG5cbiAgICAgICAgLy8gT2J0YWluIGEgeGlfc2VlZGVyIGZyb20gdGhlIHRyYW5zY3JpcHRcbiAgICAgICAgLy8gVG8gZm9yY2UgaDFeNCA9IHhpLCBoMl4zID0geGkgYW5kIGhfM14yID0geGnPiVxuICAgICAgICAvLyB3ZSBjb21wdXRlIHhpID0geGlfc2VlZGVyXjEyLCBoMSA9IHhpX3NlZWRlcl4zLCBoMiA9IHhpX3NlZWRlcl40IGFuZCBoMyA9IHhpX3NlZWRlcl42XG4gICAgICAgIGNoYWxsZW5nZXMueGlTZWVkID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgY29uc3QgeGlTZWVkMiA9IEZyLnNxdWFyZShjaGFsbGVuZ2VzLnhpU2VlZCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBvbWVnYTgsIG9tZWdhNCBhbmQgb21lZ2EzXG4gICAgICAgIHJvb3RzLnc4ID0gW107XG4gICAgICAgIHJvb3RzLnc4WzBdID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICAgICAgcm9vdHMudzhbaV0gPSBGci5tdWwocm9vdHMudzhbaSAtIDFdLCB6a2V5Lnc4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RzLnc0ID0gW107XG4gICAgICAgIHJvb3RzLnc0WzBdID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgcm9vdHMudzRbaV0gPSBGci5tdWwocm9vdHMudzRbaSAtIDFdLCB6a2V5Lnc0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RzLnczID0gW107XG4gICAgICAgIHJvb3RzLnczWzBdID0gRnIub25lO1xuICAgICAgICByb290cy53M1sxXSA9IHprZXkudzM7XG4gICAgICAgIHJvb3RzLnczWzJdID0gRnIuc3F1YXJlKHprZXkudzMpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgaDAgPSB4aVNlZWRlcl4zXG4gICAgICAgIHJvb3RzLlMwID0ge307XG4gICAgICAgIHJvb3RzLlMwLmgwdzggPSBbXTtcbiAgICAgICAgcm9vdHMuUzAuaDB3OFswXSA9IEZyLm11bCh4aVNlZWQyLCBjaGFsbGVuZ2VzLnhpU2VlZCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICByb290cy5TMC5oMHc4W2ldID0gRnIubXVsKHJvb3RzLlMwLmgwdzhbMF0sIHJvb3RzLnc4W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgaDEgPSB4aV9zZWVkZXJeNlxuICAgICAgICByb290cy5TMSA9IHt9O1xuICAgICAgICByb290cy5TMS5oMXc0ID0gW107XG4gICAgICAgIHJvb3RzLlMxLmgxdzRbMF0gPSBGci5zcXVhcmUocm9vdHMuUzAuaDB3OFswXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByb290cy5TMS5oMXc0W2ldID0gRnIubXVsKHJvb3RzLlMxLmgxdzRbMF0sIHJvb3RzLnc0W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgaDIgPSB4aV9zZWVkZXJeOFxuICAgICAgICByb290cy5TMiA9IHt9O1xuICAgICAgICByb290cy5TMi5oMnczID0gW107XG4gICAgICAgIHJvb3RzLlMyLmgydzNbMF0gPSBGci5tdWwocm9vdHMuUzEuaDF3NFswXSwgeGlTZWVkMik7XG4gICAgICAgIHJvb3RzLlMyLmgydzNbMV0gPSBGci5tdWwocm9vdHMuUzIuaDJ3M1swXSwgcm9vdHMudzNbMV0pO1xuICAgICAgICByb290cy5TMi5oMnczWzJdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHJvb3RzLnczWzJdKTtcblxuICAgICAgICByb290cy5TMi5oM3czID0gW107XG4gICAgICAgIC8vIE11bHRpcGx5IGgzIGJ5IHRoaXJkLXJvb3Qtb21lZ2EgdG8gb2J0YWluIGhfM14zID0geGnPiVxuICAgICAgICAvLyBTbywgaDMgPSB4aV9zZWVkZXJeOCDPiV57MS8zfVxuICAgICAgICByb290cy5TMi5oM3czWzBdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHprZXkud3IpO1xuICAgICAgICByb290cy5TMi5oM3czWzFdID0gRnIubXVsKHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLnczWzFdKTtcbiAgICAgICAgcm9vdHMuUzIuaDN3M1syXSA9IEZyLm11bChyb290cy5TMi5oM3czWzBdLCByb290cy53M1syXSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB4aSA9IHhpX3NlZWRlcl4yNFxuICAgICAgICBjaGFsbGVuZ2VzLnhpID0gRnIubXVsKEZyLnNxdWFyZShyb290cy5TMi5oMnczWzBdKSwgcm9vdHMuUzIuaDJ3M1swXSk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy54aTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnhpKSk7XG5cbiAgICAgICAgLy8gUmVzZXJ2ZSBtZW1vcnkgZm9yIFEncyBwb2x5bm9taWFsc1xuICAgICAgICBwb2x5bm9taWFscy5RTCA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RUiA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RTSA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RTyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RQyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIFJlYWQgUSdzIGV2YWx1YXRpb25zIGZyb20gemtleSBmaWxlXG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUUwuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUxfU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUVIuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUVJfU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUU0uY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU1fU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUU8uY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU9fU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUUMuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUNfU0VDVElPTl1bMF0ucCk7XG5cbiAgICAgICAgLy8gU1RFUCAzLjIgLSBDb21wdXRlIG9wZW5pbmcgZXZhbHVhdGlvbnMgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcm9vZiAodGhpcmQgb3V0cHV0IG9mIHRoZSBwcm92ZXIpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBldmFsdWF0aW9uc1wiKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFsXCIsIHBvbHlub21pYWxzLlFMLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFyXCIsIHBvbHlub21pYWxzLlFSLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFtXCIsIHBvbHlub21pYWxzLlFNLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFvXCIsIHBvbHlub21pYWxzLlFPLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFjXCIsIHBvbHlub21pYWxzLlFDLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInMxXCIsIHBvbHlub21pYWxzLlNpZ21hMS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJzMlwiLCBwb2x5bm9taWFscy5TaWdtYTIuZXZhbHVhdGUoY2hhbGxlbmdlcy54aSkpO1xuICAgICAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiczNcIiwgcG9seW5vbWlhbHMuU2lnbWEzLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcImFcIiwgcG9seW5vbWlhbHMuQS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJiXCIsIHBvbHlub21pYWxzLkIuZXZhbHVhdGUoY2hhbGxlbmdlcy54aSkpO1xuICAgICAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiY1wiLCBwb2x5bm9taWFscy5DLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInpcIiwgcG9seW5vbWlhbHMuWi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG5cbiAgICAgICAgY2hhbGxlbmdlcy54aXcgPSBGci5tdWwoY2hhbGxlbmdlcy54aSwgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJ6d1wiLCBwb2x5bm9taWFscy5aLmV2YWx1YXRlKGNoYWxsZW5nZXMueGl3KSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJ0MXdcIiwgcG9seW5vbWlhbHMuVDEuZXZhbHVhdGUoY2hhbGxlbmdlcy54aXcpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInQyd1wiLCBwb2x5bm9taWFscy5UMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpdykpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kNCgpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2UgYWxwaGFcIik7XG4gICAgICAgIC8vIFNURVAgNC4xIC0gQ29tcHV0ZSBjaGFsbGVuZ2UgYWxwaGEg4oiIIEZcbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IG5ldyBLZWNjYWsyNTZUcmFuc2NyaXB0KGN1cnZlKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy54aVNlZWQpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicWxcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicXJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicW1cIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicW9cIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicWNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczFcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiYVwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJiXCIpKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZ2V0RXZhbHVhdGlvbihcImNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwielwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJ6d1wiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJ0MXdcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwidDJ3XCIpKTtcbiAgICAgICAgY2hhbGxlbmdlcy5hbHBoYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMuYWxwaGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5hbHBoYSkpO1xuXG4gICAgICAgIC8vIFNURVAgNC4yIC0gQ29tcHV0ZSBGKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBSZWFkaW5nIEMwIHBvbHlub21pYWxcIik7XG4gICAgICAgIHBvbHlub21pYWxzLkMwID0gbmV3IFBvbHlub21pYWwobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogOCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLkMwLmNvZWYsIDAsIHNEb21haW4gKiA4LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9DMF9TRUNUSU9OXVswXS5wKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIwIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMCgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIxIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMSgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIyIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMigpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgRiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlRigpO1xuXG4gICAgICAgIC8vIFRoZSBmb3VydGggb3V0cHV0IG9mIHRoZSBwcm92ZXIgaXMgKFtXMV1fMSksIHdoZXJlIFcxOj0oZi9aX3QpKHgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVzEgbXVsdGkgZXhwb25lbnRpYXRpb25cIik7XG4gICAgICAgIGxldCBjb21taXRXMSA9IGF3YWl0IHBvbHlub21pYWxzLkYubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIlcxXCIpO1xuICAgICAgICBwcm9vZi5hZGRQb2x5bm9taWFsKFwiVzFcIiwgY29tbWl0VzEpO1xuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVSMCgpIHtcbiAgICAgICAgICAgIC8vIENPTVBVVEUgUjBcbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiBSMChYKSBmcm9tIDggZXZhbHVhdGlvbnMgdXNpbmcgbGFncmFuZ2UgaW50ZXJwb2xhdGlvbi4gUjAoWCkg4oiIIEZfezw4fVtYXVxuICAgICAgICAgICAgLy8gV2UgZGVjaWRlIHRvIHVzZSBMYWdyYW5nZSBpbnRlcnBvbGF0aW9ucyBiZWNhdXNlIHRoZSBSMCBkZWdyZWUgaXMgdmVyeSBzbWFsbCAoZGVnKFIwKT09PTcpLFxuICAgICAgICAgICAgLy8gYW5kIHdlIHdlcmUgbm90IGFibGUgdG8gY29tcHV0ZSBpdCB1c2luZyBjdXJyZW50IGlmZnQgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGUgb21lZ2EgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgcG9seW5vbWlhbHMuUjAgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMwLmgwdzhbMF0sIHJvb3RzLlMwLmgwdzhbMV0sIHJvb3RzLlMwLmgwdzhbMl0sIHJvb3RzLlMwLmgwdzhbM10sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMwLmgwdzhbNF0sIHJvb3RzLlMwLmgwdzhbNV0sIHJvb3RzLlMwLmgwdzhbNl0sIHJvb3RzLlMwLmgwdzhbN11dLFxuICAgICAgICAgICAgICAgIFtwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzBdKSwgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFsxXSksXG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWxzLkMwLmV2YWx1YXRlKHJvb3RzLlMwLmgwdzhbMl0pLCBwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzNdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFs0XSksIHBvbHlub21pYWxzLkMwLmV2YWx1YXRlKHJvb3RzLlMwLmgwdzhbNV0pLFxuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzZdKSwgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFs3XSldLCBjdXJ2ZSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBkZWdyZWUgb2YgcjAoWCkgPCA4XG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuUjAuZGVncmVlKCkgPiA3KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUjAgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZVIxKCkge1xuICAgICAgICAgICAgLy8gQ09NUFVURSBSMVxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29lZmZpY2llbnRzIG9mIFIxKFgpIGZyb20gNCBldmFsdWF0aW9ucyB1c2luZyBsYWdyYW5nZSBpbnRlcnBvbGF0aW9uLiBSMShYKSDiiIggRl97PDR9W1hdXG4gICAgICAgICAgICAvLyBXZSBkZWNpZGUgdG8gdXNlIExhZ3JhbmdlIGludGVycG9sYXRpb25zIGJlY2F1c2UgdGhlIFIxIGRlZ3JlZSBpcyB2ZXJ5IHNtYWxsIChkZWcoUjEpPT09MyksXG4gICAgICAgICAgICAvLyBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBjb21wdXRlIGl0IHVzaW5nIGN1cnJlbnQgaWZmdCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZSBvbWVnYSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICBwb2x5bm9taWFscy5SMSA9IFBvbHlub21pYWwubGFncmFuZ2VQb2x5bm9taWFsSW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICBbcm9vdHMuUzEuaDF3NFswXSwgcm9vdHMuUzEuaDF3NFsxXSwgcm9vdHMuUzEuaDF3NFsyXSwgcm9vdHMuUzEuaDF3NFszXV0sXG4gICAgICAgICAgICAgICAgW3BvbHlub21pYWxzLkMxLmV2YWx1YXRlKHJvb3RzLlMxLmgxdzRbMF0pLCBwb2x5bm9taWFscy5DMS5ldmFsdWF0ZShyb290cy5TMS5oMXc0WzFdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzEuZXZhbHVhdGUocm9vdHMuUzEuaDF3NFsyXSksIHBvbHlub21pYWxzLkMxLmV2YWx1YXRlKHJvb3RzLlMxLmgxdzRbM10pXSwgY3VydmUpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGVncmVlIG9mIHIxKFgpIDwgNFxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlIxLmRlZ3JlZSgpID4gMykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlIxIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVSMigpIHtcbiAgICAgICAgICAgIC8vIENPTVBVVEUgUjJcbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiByMihYKSBmcm9tIDYgZXZhbHVhdGlvbnMgdXNpbmcgbGFncmFuZ2UgaW50ZXJwb2xhdGlvbi4gcjIoWCkg4oiIIEZfezw2fVtYXVxuICAgICAgICAgICAgLy8gV2UgZGVjaWRlIHRvIHVzZSBMYWdyYW5nZSBpbnRlcnBvbGF0aW9ucyBiZWNhdXNlIHRoZSBSMi5kZWdyZWUgaXMgdmVyeSBzbWFsbCAoZGVnKFIyKT09PTUpLFxuICAgICAgICAgICAgLy8gYW5kIHdlIHdlcmUgbm90IGFibGUgdG8gY29tcHV0ZSBpdCB1c2luZyBjdXJyZW50IGlmZnQgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGUgb21lZ2EgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgcG9seW5vbWlhbHMuUjIgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMyLmgydzNbMF0sIHJvb3RzLlMyLmgydzNbMV0sIHJvb3RzLlMyLmgydzNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLlMyLmgzdzNbMV0sIHJvb3RzLlMyLmgzdzNbMl1dLFxuICAgICAgICAgICAgICAgIFtwb2x5bm9taWFscy5DMi5ldmFsdWF0ZShyb290cy5TMi5oMnczWzBdKSwgcG9seW5vbWlhbHMuQzIuZXZhbHVhdGUocm9vdHMuUzIuaDJ3M1sxXSksXG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWxzLkMyLmV2YWx1YXRlKHJvb3RzLlMyLmgydzNbMl0pLCBwb2x5bm9taWFscy5DMi5ldmFsdWF0ZShyb290cy5TMi5oM3czWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzIuZXZhbHVhdGUocm9vdHMuUzIuaDN3M1sxXSksIHBvbHlub21pYWxzLkMyLmV2YWx1YXRlKHJvb3RzLlMyLmgzdzNbMl0pXSwgY3VydmUpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGVncmVlIG9mIHIyKFgpIDwgNlxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlIyLmRlZ3JlZSgpID4gNSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlIyIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVGKCkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEYgcG9seW5vbWlhbFwiKTtcblxuICAgICAgICAgICAgLy8gQ09NUFVURSBGKFgpXG4gICAgICAgICAgICBwb2x5bm9taWFscy5GID0gUG9seW5vbWlhbC5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5DMCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLnN1Yihwb2x5bm9taWFscy5SMCk7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmRpdkJ5WmVyb2ZpZXIoOCwgY2hhbGxlbmdlcy54aSk7XG5cbiAgICAgICAgICAgIGxldCBmMiA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzEsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZjIuc3ViKHBvbHlub21pYWxzLlIxKTtcbiAgICAgICAgICAgIGYyLm11bFNjYWxhcihjaGFsbGVuZ2VzLmFscGhhKTtcbiAgICAgICAgICAgIGYyLmRpdkJ5WmVyb2ZpZXIoNCwgY2hhbGxlbmdlcy54aSk7XG5cbiAgICAgICAgICAgIGxldCBmMyA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzIsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZjMuc3ViKHBvbHlub21pYWxzLlIyKTtcbiAgICAgICAgICAgIGYzLm11bFNjYWxhcihGci5zcXVhcmUoY2hhbGxlbmdlcy5hbHBoYSkpO1xuICAgICAgICAgICAgZjMuZGl2QnlaZXJvZmllcigzLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICAgICAgICAgIGYzLmRpdkJ5WmVyb2ZpZXIoMywgY2hhbGxlbmdlcy54aXcpO1xuXG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmFkZChmMik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmFkZChmMyk7XG5cbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5GLmRlZ3JlZSgpID49IDkgKiB6a2V5LmRvbWFpblNpemUgLSA2KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRiBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDUoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgY2hhbGxlbmdlIHlcIik7XG5cbiAgICAgICAgLy8gU1RFUCA1LjEgLSBDb21wdXRlIHJhbmRvbSBldmFsdWF0aW9uIHBvaW50IHkg4oiIIEZcbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IG5ldyBLZWNjYWsyNTZUcmFuc2NyaXB0KGN1cnZlKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5hbHBoYSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5nZXRQb2x5bm9taWFsKFwiVzFcIikpO1xuXG4gICAgICAgIGNoYWxsZW5nZXMueSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMueTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnkpKTtcblxuICAgICAgICAvLyBTVEVQIDUuMiAtIENvbXB1dGUgTChYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEwgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZUwoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFpUUzIgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVpUUzIoKTtcblxuICAgICAgICBsZXQgWlRTMlkgPSBwb2x5bm9taWFscy5aVFMyLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgIFpUUzJZID0gRnIuaW52KFpUUzJZKTtcbiAgICAgICAgcG9seW5vbWlhbHMuTC5tdWxTY2FsYXIoWlRTMlkpO1xuXG4gICAgICAgIGNvbnN0IHBvbERpdmlkZW5kID0gUG9seW5vbWlhbC5mcm9tQ29lZmZpY2llbnRzQXJyYXkoW0ZyLm5lZyhjaGFsbGVuZ2VzLnkpLCBGci5vbmVdLCBjdXJ2ZSk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVycgPSBMIC8gWlRTMiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBjb25zdCBwb2xSZW1haW5kZXIgPSBwb2x5bm9taWFscy5MLmRpdkJ5KHBvbERpdmlkZW5kKTtcblxuICAgICAgICAvL0NoZWNrIHBvbFJlbWluZGVyIGRlZ3JlZSBpcyBlcXVhbCB0byB6ZXJvXG4gICAgICAgIGlmIChwb2xSZW1haW5kZXIuZGVncmVlKCkgPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlZ3JlZSBvZiBMKFgpLyhaVFMyKHkpKFgteSkpIHJlbWFpbmRlciBpcyAke3BvbFJlbWFpbmRlci5kZWdyZWUoKX0gYW5kIHNob3VsZCBiZSAwYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9seW5vbWlhbHMuTC5kZWdyZWUoKSA+PSA5ICogemtleS5kb21haW5TaXplIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVncmVlIG9mIEwoWCkvKFpUUzIoeSkoWC15KSkgaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlmdGggb3V0cHV0IG9mIHRoZSBwcm92ZXIgaXMgKFtXMl1fMSksIHdoZXJlIFcyOj0oZi9aX3QpKHgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVycgbXVsdGkgZXhwb25lbnRpYXRpb25cIik7XG4gICAgICAgIGxldCBjb21taXRXMiA9IGF3YWl0IHBvbHlub21pYWxzLkwubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIlcyXCIpO1xuICAgICAgICBwcm9vZi5hZGRQb2x5bm9taWFsKFwiVzJcIiwgY29tbWl0VzIpO1xuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVMKCkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEwgcG9seW5vbWlhbFwiKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFIwWSA9IHBvbHlub21pYWxzLlIwLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgICAgICBjb25zdCBldmFsUjFZID0gcG9seW5vbWlhbHMuUjEuZXZhbHVhdGUoY2hhbGxlbmdlcy55KTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWxSMlkgPSBwb2x5bm9taWFscy5SMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnkpO1xuXG4gICAgICAgICAgICBsZXQgbXVsTDAgPSBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMC5oMHc4WzBdKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbXVsTDAgPSBGci5tdWwobXVsTDAsIEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMwLmgwdzhbaV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG11bEwxID0gRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzEuaDF3NFswXSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIG11bEwxID0gRnIubXVsKG11bEwxLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMS5oMXc0W2ldKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtdWxMMiA9IEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMyLmgydzNbMF0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtdWxMMiA9IEZyLm11bChtdWxMMiwgRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzIuaDJ3M1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtdWxMMiA9IEZyLm11bChtdWxMMiwgRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzIuaDN3M1tpXSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcHJlTDAgPSBGci5tdWwobXVsTDEsIG11bEwyKTtcbiAgICAgICAgICAgIGxldCBwcmVMMSA9IEZyLm11bChjaGFsbGVuZ2VzLmFscGhhLCBGci5tdWwobXVsTDAsIG11bEwyKSk7XG4gICAgICAgICAgICBsZXQgcHJlTDIgPSBGci5tdWwoRnIuc3F1YXJlKGNoYWxsZW5nZXMuYWxwaGEpLCBGci5tdWwobXVsTDAsIG11bEwxKSk7XG5cbiAgICAgICAgICAgIHRvSW52ZXJzZVtcImRlbkgxXCJdID0gbXVsTDE7XG4gICAgICAgICAgICB0b0ludmVyc2VbXCJkZW5IMlwiXSA9IG11bEwyO1xuXG4gICAgICAgICAgICAvLyBDT01QVVRFIEwoWClcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwgPSBQb2x5bm9taWFsLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMwLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwuc3ViU2NhbGFyKGV2YWxSMFkpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5tdWxTY2FsYXIocHJlTDApO1xuXG4gICAgICAgICAgICBsZXQgbDIgPSBQb2x5bm9taWFsLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMxLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIGwyLnN1YlNjYWxhcihldmFsUjFZKTtcbiAgICAgICAgICAgIGwyLm11bFNjYWxhcihwcmVMMSk7XG5cbiAgICAgICAgICAgIGxldCBsMyA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzIsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgbDMuc3ViU2NhbGFyKGV2YWxSMlkpO1xuICAgICAgICAgICAgbDMubXVsU2NhbGFyKHByZUwyKTtcblxuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5hZGQobDIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5hZGQobDMpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFpUIHBvbHlub21pYWxcIik7XG4gICAgICAgICAgICBhd2FpdCBjb21wdXRlWlQoKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFpUWSA9IHBvbHlub21pYWxzLlpULmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLm11bFNjYWxhcihldmFsWlRZKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwuc3ViKHBvbHlub21pYWxzLkYpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5MLmRlZ3JlZSgpID49IDkgKiB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuTDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVaVCgpIHtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlpUID0gUG9seW5vbWlhbC56ZXJvZmllclBvbHlub21pYWwoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICByb290cy5TMC5oMHc4WzBdLCByb290cy5TMC5oMHc4WzFdLCByb290cy5TMC5oMHc4WzJdLCByb290cy5TMC5oMHc4WzNdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMC5oMHc4WzRdLCByb290cy5TMC5oMHc4WzVdLCByb290cy5TMC5oMHc4WzZdLCByb290cy5TMC5oMHc4WzddLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMS5oMXc0WzBdLCByb290cy5TMS5oMXc0WzFdLCByb290cy5TMS5oMXc0WzJdLCByb290cy5TMS5oMXc0WzNdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMi5oMnczWzBdLCByb290cy5TMi5oMnczWzFdLCByb290cy5TMi5oMnczWzJdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMi5oM3czWzBdLCByb290cy5TMi5oM3czWzFdLCByb290cy5TMi5oM3czWzJdXSwgY3VydmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVpUUzIoKSB7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5aVFMyID0gUG9seW5vbWlhbC56ZXJvZmllclBvbHlub21pYWwoXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMxLmgxdzRbMF0sIHJvb3RzLlMxLmgxdzRbMV0sIHJvb3RzLlMxLmgxdzRbMl0sIHJvb3RzLlMxLmgxdzRbM10sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgydzNbMF0sIHJvb3RzLlMyLmgydzNbMV0sIHJvb3RzLlMyLmgydzNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLlMyLmgzdzNbMV0sIHJvb3RzLlMyLmgzdzNbMl1dLCBjdXJ2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNb250Z29tZXJ5QmF0Y2hlZEludmVyc2UoKSB7XG4gICAgICAgIC8vICAgwrcgZGVub21pbmF0b3IgbmVlZGVkIGluIHN0ZXAgOCBhbmQgOSBvZiB0aGUgdmVyaWZpZXIgdG8gbXVsdGlwbHkgYnkgMS9aX0goeGkpXG4gICAgICAgIGxldCB4aU4gPSBjaGFsbGVuZ2VzLnhpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkucG93ZXI7IGkrKykge1xuICAgICAgICAgICAgeGlOID0gRnIuc3F1YXJlKHhpTik7XG4gICAgICAgIH1cbiAgICAgICAgdG9JbnZlcnNlW1wiemhcIl0gPSBGci5zdWIoeGlOLCBGci5vbmUpO1xuXG4gICAgICAgIC8vICAgwrcgZGVub21pbmF0b3IgbmVlZGVkIGluIHN0ZXAgMTAgYW5kIDExIG9mIHRoZSB2ZXJpZmllclxuICAgICAgICAvLyAgICAgdG9JbnZlcnNlLmRlbkgxICYgdG9JbnZlcnNlLmRlbkgyICAtPiBDb21wdXRlZCBpbiByb3VuZDUsIGNvbXB1dGVMKClcblxuICAgICAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiB0aGUgdmVyaWZpZXIgd2hlbiBjb21wdXRpbmcgTF9pXntTMH0oWCksIExfaV57UzF9KFgpIGFuZCBMX2lee1MyfShYKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgICAgICAgdG9JbnZlcnNlW1wiTGlTMF9cIiArIChpICsgMSldID0gY29tcHV0ZUxpUzAoaSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgdG9JbnZlcnNlW1wiTGlTMV9cIiArIChpICsgMSldID0gY29tcHV0ZUxpUzEoaSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgdG9JbnZlcnNlW1wiTGlTMl9cIiArIChpICsgMSldID0gY29tcHV0ZUxpUzIoaSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAgIMK3IExfaSBpPTEgdG8gbnVtIHB1YmxpYyBpbnB1dHMsIG5lZWRlZCBpbiBzdGVwIDYgYW5kIDcgb2YgdGhlIHZlcmlmaWVyIHRvIGNvbXB1dGUgTF8xKHhpKSBhbmQgUEkoeGkpXG4gICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLm1heCgxLCB6a2V5Lm5QdWJsaWMpO1xuXG4gICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgdG9JbnZlcnNlW1wiTGlfXCIgKyAoaSArIDEpXSA9IEZyLm11bChGci5lKHprZXkuZG9tYWluU2l6ZSksIEZyLnN1YihjaGFsbGVuZ2VzLnhpLCB3KSk7XG5cbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgemtleS53KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtdWxBY2N1bXVsYXRvciA9IEZyLm9uZTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModG9JbnZlcnNlKSkge1xuICAgICAgICAgICAgbXVsQWNjdW11bGF0b3IgPSBGci5tdWwobXVsQWNjdW11bGF0b3IsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGci5pbnYobXVsQWNjdW11bGF0b3IpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVMaVMwKGkpIHtcbiAgICAgICAgICAgIC8vIENvbXB1dGUgTF9pXnsoUzApfSh5KVxuICAgICAgICAgICAgbGV0IGlkeCA9IGk7XG4gICAgICAgICAgICBsZXQgZGVuID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSA4O1xuXG4gICAgICAgICAgICAgICAgZGVuID0gRnIubXVsKGRlbiwgRnIuc3ViKHJvb3RzLlMwLmgwdzhbaV0sIHJvb3RzLlMwLmgwdzhbaWR4XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVMaVMxKGkpIHtcbiAgICAgICAgICAgIC8vIENvbXB1dGUgTF9pXnsoUzEpfSh5KVxuICAgICAgICAgICAgbGV0IGlkeCA9IGk7XG4gICAgICAgICAgICBsZXQgZGVuID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSA0O1xuXG4gICAgICAgICAgICAgICAgZGVuID0gRnIubXVsKGRlbiwgRnIuc3ViKHJvb3RzLlMxLmgxdzRbaV0sIHJvb3RzLlMxLmgxdzRbaWR4XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVMaVMyKGkpIHtcbiAgICAgICAgICAgIC8vIENvbXB1dGUgTF9pXnsoUzEpfSh5KVxuICAgICAgICAgICAgbGV0IGlkeCA9IGk7XG4gICAgICAgICAgICBsZXQgZGVuID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA1OyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSA2O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdDEgPSBpIDwgMyA/IHJvb3RzLlMyLmgydzNbaV0gOiByb290cy5TMi5oM3czW2kgLSAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290MiA9IGlkeCA8IDMgPyByb290cy5TMi5oMnczW2lkeF0gOiByb290cy5TMi5oM3czW2lkeCAtIDNdO1xuICAgICAgICAgICAgICAgIGRlbiA9IEZyLm11bChkZW4sIEZyLnN1Yihyb290MSwgcm9vdDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZW47XG4gICAgICAgIH1cbiAgICB9XG59IiwiLypcbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCBmZmxvbmtQcm92ZSBmcm9tIFwiLi9mZmxvbmtfcHJvdmUuanNcIjtcbmltcG9ydCB3dG5zX2NhbGN1bGF0ZSBmcm9tIFwiLi93dG5zX2NhbGN1bGF0ZS5qc1wiO1xuaW1wb3J0IHt1dGlsc30gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZmZsb25rRnVsbFByb3ZlKF9pbnB1dCwgd2FzbUZpbGVuYW1lLCB6a2V5RmlsZW5hbWUsIGxvZ2dlcikge1xuICAgIGNvbnN0IGlucHV0ID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9pbnB1dCk7XG5cbiAgICBjb25zdCB3dG5zPSB7dHlwZTogXCJtZW1cIn07XG5cbiAgICAvLyBDb21wdXRlIHRoZSB3aXRuZXNzXG4gICAgYXdhaXQgd3Ruc19jYWxjdWxhdGUoaW5wdXQsIHdhc21GaWxlbmFtZSwgd3Rucyk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcm9vZlxuICAgIHJldHVybiBhd2FpdCBmZmxvbmtQcm92ZSh6a2V5RmlsZW5hbWUsIHd0bnMsIGxvZ2dlcik7XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgY3VydmVzIGZyb20gXCIuL2N1cnZlcy5qc1wiO1xuaW1wb3J0IHsgQmlnQnVmZmVyLCB1dGlscyB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCB7IFByb29mIH0gZnJvbSBcIi4vcHJvb2YuanNcIjtcbmltcG9ydCB7IEtlY2NhazI1NlRyYW5zY3JpcHQgfSBmcm9tIFwiLi9LZWNjYWsyNTZUcmFuc2NyaXB0LmpzXCI7XG5pbXBvcnQgeyBQb2x5bm9taWFsIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzXCI7XG5cbmNvbnN0IHsgdW5zdHJpbmdpZnlCaWdJbnRzIH0gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZmZsb25rVmVyaWZ5KF92a192ZXJpZmllciwgX3B1YmxpY1NpZ25hbHMsIF9wcm9vZiwgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgVkVSSUZJRVIgU1RBUlRFRFwiKTtcblxuICAgIF92a192ZXJpZmllciA9IHVuc3RyaW5naWZ5QmlnSW50cyhfdmtfdmVyaWZpZXIpO1xuICAgIF9wcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBjdXJ2ZXMuZ2V0Q3VydmVGcm9tTmFtZShfdmtfdmVyaWZpZXIuY3VydmUpO1xuXG4gICAgY29uc3QgdmsgPSBmcm9tT2JqZWN0VmsoY3VydmUsIF92a192ZXJpZmllcik7XG5cbiAgICAvLyBUT0RPID8/PyBDb21wdXRlIHdyXjMgYW5kIGNoZWNrIGlmIGl0IG1hdGNoZXMgd2l0aCB3XG5cbiAgICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBwcm9vZi5mcm9tT2JqZWN0UHJvb2YoX3Byb29mKTtcblxuICAgIGNvbnN0IHB1YmxpY1NpZ25hbHMgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3B1YmxpY1NpZ25hbHMpO1xuXG4gICAgaWYgKHB1YmxpY1NpZ25hbHMubGVuZ3RoICE9PSB2ay5uUHVibGljKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk51bWJlciBvZiBwdWJsaWMgc2lnbmFscyBkb2VzIG5vdCBtYXRjaCB3aXRoIHZrXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIiAgRkZMT05LIFZFUklGWSBTRVRUSU5HU1wiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VydmU6ICAgICAgICAgJHtjdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDaXJjdWl0IHBvd2VyOiAke3ZrLnBvd2VyfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBEb21haW4gc2l6ZTogICAkezIgKiogdmsucG93ZXJ9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIFB1YmxpYyB2YXJzOiAgICR7dmsublB1YmxpY31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgIH1cblxuICAgIC8vIFNURVAgMSAtIFZhbGlkYXRlIHRoYXQgYWxsIHBvbHlub21pYWwgY29tbWl0bWVudHMg4oiIIEdfMVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDaGVja2luZyBjb21taXRtZW50cyBiZWxvbmcgdG8gRzFcIik7XG4gICAgaWYgKCFjb21taXRtZW50c0JlbG9uZ1RvRzEoY3VydmUsIHByb29mLCB2aykpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiUHJvb2YgaXMgbm90IHdlbGwgY29uc3RydWN0ZWRcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUT0RPXG4gICAgLy8gU1RFUCAyIC0gVmFsaWRhdGUgdGhhdCBhbGwgZXZhbHVhdGlvbnMg4oiIIEZcblxuICAgIC8vIFRPRE9cbiAgICAvLyBTVEVQIDMgLSBWYWxpZGF0ZSB0aGF0IHdfaSDiiIggRiBmb3IgaSDiiIggW2xdXG5cbiAgICAvLyBTVEVQIDQgLSBDb21wdXRlIHRoZSBjaGFsbGVuZ2VzOiBiZXRhLCBnYW1tYSwgeGksIGFscGhhIGFuZCB5IOKIiCBGXG4gICAgLy8gYXMgaW4gcHJvdmVyIGRlc2NyaXB0aW9uLCBmcm9tIHRoZSBjb21tb24gcHJlcHJvY2Vzc2VkIGlucHV0cywgcHVibGljIGlucHV0cyBhbmQgZWxlbWVudHMgb2Ygz4BfU05BUktcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIGNoYWxsZW5nZXNcIik7XG4gICAgY29uc3QgeyBjaGFsbGVuZ2VzLCByb290cyB9ID0gY29tcHV0ZUNoYWxsZW5nZXMoY3VydmUsIHByb29mLCB2aywgcHVibGljU2lnbmFscywgbG9nZ2VyKTtcblxuICAgIC8vIFNURVAgNSAtIENvbXB1dGUgdGhlIHplcm8gcG9seW5vbWlhbCBldmFsdWF0aW9uIFpfSCh4aSkgPSB4aV5uIC0gMVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgWmVybyBwb2x5bm9taWFsIGV2YWx1YXRpb24gWl9IKHhpKVwiKTtcbiAgICBjaGFsbGVuZ2VzLnpoID0gRnIuc3ViKGNoYWxsZW5nZXMueGlOLCBGci5vbmUpO1xuICAgIGNoYWxsZW5nZXMuaW52emggPSBGci5pbnYoY2hhbGxlbmdlcy56aCk7XG5cbiAgICAvLyBTVEVQIDYgLSBDb21wdXRlIHRoZSBsYWdyYW5nZSBwb2x5bm9taWFsIGV2YWx1YXRpb24gTF8xKHhpKVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgTGFncmFuZ2UgZXZhbHVhdGlvbnNcIik7XG4gICAgY29uc3QgbGFncmFuZ2VFdmFscyA9IGF3YWl0IGNvbXB1dGVMYWdyYW5nZUV2YWx1YXRpb25zKGN1cnZlLCBjaGFsbGVuZ2VzLCB2ayk7XG5cbiAgICAvLyBTVEVQIDcgLSBDb21wdXRlIHB1YmxpYyBpbnB1dCBldmFsdWF0aW9uIFBJKHhpKVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgcG9seW5vbWlhbCBpZGVudGl0aWVzIFBJKFgpXCIpO1xuICAgIGNvbnN0IHBpID0gY2FsY3VsYXRlUEkoY3VydmUsIHB1YmxpY1NpZ25hbHMsIGxhZ3JhbmdlRXZhbHMpO1xuXG4gICAgLy8gU1RFUCA4IC0gQ29tcHV0ZSBwb2x5bm9taWFsIHIwIOKIiCBGX3s8NH1bWF1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIHIwKHkpXCIpO1xuICAgIGNvbnN0IHIwID0gY29tcHV0ZVIwKHByb29mLCBjaGFsbGVuZ2VzLCByb290cywgcGksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgLy8gU1RFUCA5IC0gQ29tcHV0ZSBwb2x5bm9taWFsIHIxIOKIiCBGX3s8NH1bWF1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIHIxKHkpXCIpO1xuICAgIGNvbnN0IHIxID0gY29tcHV0ZVIxKHByb29mLCBjaGFsbGVuZ2VzLCByb290cywgcGksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgLy8gU1RFUCA5IC0gQ29tcHV0ZSBwb2x5bm9taWFsIHIyIOKIiCBGX3s8Nn1bWF1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIHIyKHkpXCIpO1xuICAgIGNvbnN0IHIyID0gY29tcHV0ZVIyKHByb29mLCBjaGFsbGVuZ2VzLCByb290cywgbGFncmFuZ2VFdmFsc1sxXSwgdmssIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBGXCIpO1xuICAgIGNvbnN0IEYgPSBjb21wdXRlRihjdXJ2ZSwgcHJvb2YsIHZrLCBjaGFsbGVuZ2VzLCByb290cyk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEVcIik7XG4gICAgY29uc3QgRSA9IGNvbXB1dGVFKGN1cnZlLCBwcm9vZiwgY2hhbGxlbmdlcywgdmssIHIwLCByMSwgcjIpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBKXCIpO1xuICAgIGNvbnN0IEogPSBjb21wdXRlSihjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFZhbGlkYXRlIGFsbCBldmFsdWF0aW9ucyB3aXRoIGEgcGFpcmluZ1wiKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBpc1ZhbGlkUGFpcmluZyhjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrLCBGLCBFLCBKKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJQUk9PRiBWRVJJRklFRCBTVUNDRVNTRlVMTFlcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIkludmFsaWQgUHJvb2ZcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBWRVJJRklFUiBGSU5JU0hFRFwiKTtcblxuICAgIHJldHVybiByZXM7XG5cbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdFZrKGN1cnZlLCB2aykge1xuICAgIGNvbnN0IHJlcyA9IHZrO1xuICAgIHJlcy5rMSA9IGN1cnZlLkZyLmZyb21PYmplY3QodmsuazEpO1xuICAgIHJlcy5rMiA9IGN1cnZlLkZyLmZyb21PYmplY3QodmsuazIpO1xuICAgIHJlcy53ID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53KTtcbiAgICAvLyByZXMud1cgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLndXKTtcbiAgICByZXMudzMgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLnczKTtcbiAgICByZXMudzQgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLnc0KTtcbiAgICByZXMudzggPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLnc4KTtcbiAgICByZXMud3IgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLndyKTtcbiAgICByZXMuWF8yID0gY3VydmUuRzIuZnJvbU9iamVjdCh2ay5YXzIpO1xuICAgIHJlcy5DMCA9IGN1cnZlLkcxLmZyb21PYmplY3QodmsuQzApO1xuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdG1lbnRzQmVsb25nVG9HMShjdXJ2ZSwgcHJvb2YsIHZrKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICByZXR1cm4gRzEuaXNWYWxpZChwcm9vZi5wb2x5bm9taWFscy5DMSlcbiAgICAgICAgJiYgRzEuaXNWYWxpZChwcm9vZi5wb2x5bm9taWFscy5DMilcbiAgICAgICAgJiYgRzEuaXNWYWxpZChwcm9vZi5wb2x5bm9taWFscy5XMSlcbiAgICAgICAgJiYgRzEuaXNWYWxpZChwcm9vZi5wb2x5bm9taWFscy5XMilcbiAgICAgICAgJiYgRzEuaXNWYWxpZCh2ay5DMCk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDaGFsbGVuZ2VzKGN1cnZlLCBwcm9vZiwgdmssIHB1YmxpY1NpZ25hbHMsIGxvZ2dlcikge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBjaGFsbGVuZ2VzID0ge307XG4gICAgY29uc3Qgcm9vdHMgPSB7fTtcbiAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuXG4gICAgLy8gQWRkIEMwIHRvIHRoZSB0cmFuc2NyaXB0XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHZrLkMwKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHVibGljU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihGci5lKHB1YmxpY1NpZ25hbHNbaV0pKTtcbiAgICB9XG5cbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YucG9seW5vbWlhbHMuQzEpO1xuICAgIGNoYWxsZW5nZXMuYmV0YSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuXG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5iZXRhKTtcbiAgICBjaGFsbGVuZ2VzLmdhbW1hID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcblxuICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmdhbW1hKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YucG9seW5vbWlhbHMuQzIpO1xuICAgIGNvbnN0IHhpU2VlZCA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgY29uc3QgeGlTZWVkMiA9IEZyLnNxdWFyZSh4aVNlZWQpO1xuXG4gICAgbGV0IHc4ID0gW107XG4gICAgdzhbMV0gPSB2ay53ODtcbiAgICB3OFsyXSA9IEZyLnNxdWFyZSh2ay53OCk7XG4gICAgdzhbM10gPSBGci5tdWwodzhbMl0sIHZrLnc4KTtcbiAgICB3OFs0XSA9IEZyLm11bCh3OFszXSwgdmsudzgpO1xuICAgIHc4WzVdID0gRnIubXVsKHc4WzRdLCB2ay53OCk7XG4gICAgdzhbNl0gPSBGci5tdWwodzhbNV0sIHZrLnc4KTtcbiAgICB3OFs3XSA9IEZyLm11bCh3OFs2XSwgdmsudzgpO1xuICAgIGxldCB3NCA9IFtdO1xuICAgIHc0WzFdID0gdmsudzQ7XG4gICAgdzRbMl0gPSBGci5zcXVhcmUodmsudzQpO1xuICAgIHc0WzNdID0gRnIubXVsKHc0WzJdLCB2ay53NCk7XG4gICAgbGV0IHczID0gW107XG4gICAgdzNbMV0gPSB2ay53MztcbiAgICB3M1syXSA9IEZyLnNxdWFyZSh2ay53Myk7XG5cbiAgICAvLyBjb25zdCB3NF8yID0gRnIuc3F1YXJlKHZrLnc0KTtcbiAgICAvLyBjb25zdCB3NF8zID0gRnIubXVsKHc0XzIsIHZrLnc0KTtcbiAgICAvLyBjb25zdCB3M18yID0gRnIuc3F1YXJlKHZrLnczKTtcblxuICAgIC8vIENvbXB1dGUgaDAgPSB4aVNlZWRlcl4zXG4gICAgcm9vdHMuUzAgPSB7fTtcbiAgICByb290cy5TMC5oMHc4ID0gW107XG4gICAgcm9vdHMuUzAuaDB3OFswXSA9IEZyLm11bCh4aVNlZWQyLCB4aVNlZWQpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIHJvb3RzLlMwLmgwdzhbaV0gPSBGci5tdWwocm9vdHMuUzAuaDB3OFswXSwgdzhbaV0pO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgaDEgPSB4aV9zZWVkZXJeNlxuICAgIHJvb3RzLlMxID0ge307XG4gICAgcm9vdHMuUzEuaDF3NCA9IFtdO1xuICAgIHJvb3RzLlMxLmgxdzRbMF0gPSBGci5zcXVhcmUocm9vdHMuUzAuaDB3OFswXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgcm9vdHMuUzEuaDF3NFtpXSA9IEZyLm11bChyb290cy5TMS5oMXc0WzBdLCB3NFtpXSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBoMiA9IHhpX3NlZWRlcl44XG4gICAgcm9vdHMuUzIgPSB7fTtcbiAgICByb290cy5TMi5oMnczID0gW107XG4gICAgcm9vdHMuUzIuaDJ3M1swXSA9IEZyLm11bChyb290cy5TMS5oMXc0WzBdLCB4aVNlZWQyKTtcbiAgICByb290cy5TMi5oMnczWzFdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHczWzFdKTtcbiAgICByb290cy5TMi5oMnczWzJdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHczWzJdKTtcblxuICAgIHJvb3RzLlMyLmgzdzMgPSBbXTtcbiAgICAvLyBNdWx0aXBseSBoMyBieSB0aGlyZC1yb290LW9tZWdhIHRvIG9idGFpbiBoXzNeMyA9IHhpz4lcbiAgICAvLyBTbywgaDMgPSB4aV9zZWVkZXJeOCDPiV57MS8zfVxuICAgIHJvb3RzLlMyLmgzdzNbMF0gPSBGci5tdWwocm9vdHMuUzIuaDJ3M1swXSwgdmsud3IpO1xuICAgIHJvb3RzLlMyLmgzdzNbMV0gPSBGci5tdWwocm9vdHMuUzIuaDN3M1swXSwgdzNbMV0pO1xuICAgIHJvb3RzLlMyLmgzdzNbMl0gPSBGci5tdWwocm9vdHMuUzIuaDN3M1swXSwgdzNbMl0pO1xuXG4gICAgLy8gQ29tcHV0ZSB4aSA9IHhpX3NlZWRlcl4xMlxuICAgIGNoYWxsZW5nZXMueGkgPSBGci5tdWwoRnIuc3F1YXJlKHJvb3RzLlMyLmgydzNbMF0pLCByb290cy5TMi5oMnczWzBdKTtcblxuICAgIGNoYWxsZW5nZXMueGlOID0gY2hhbGxlbmdlcy54aTtcbiAgICB2ay5kb21haW5TaXplID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZrLnBvd2VyOyBpKyspIHtcbiAgICAgICAgY2hhbGxlbmdlcy54aU4gPSBGci5zcXVhcmUoY2hhbGxlbmdlcy54aU4pO1xuICAgICAgICB2ay5kb21haW5TaXplICo9IDI7XG4gICAgfVxuXG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHhpU2VlZCk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMucWwpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnFyKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5xbSk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMucW8pO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnFjKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5zMSk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuczIpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnMzKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5hKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5iKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5jKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy56KTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy56dyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMudDF3KTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy50MncpO1xuICAgIGNoYWxsZW5nZXMuYWxwaGEgPSB0cmFuc2NyaXB0LmdldENoYWxsZW5nZSgpO1xuXG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKGNoYWxsZW5nZXMuYWxwaGEpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5wb2x5bm9taWFscy5XMSk7XG4gICAgY2hhbGxlbmdlcy55ID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy5iZXRhOiAgXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmJldGEpKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy5nYW1tYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMueGk6ICAgIFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy54aSkpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIsK3wrfCtyBjaGFsbGVuZ2VzLmFscGhhOiBcIiArIEZyLnRvU3RyaW5nKGNoYWxsZW5nZXMuYWxwaGEpKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy55OiAgICAgXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjaGFsbGVuZ2VzOiBjaGFsbGVuZ2VzLCByb290czogcm9vdHMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZUxhZ3JhbmdlRXZhbHVhdGlvbnMoY3VydmUsIGNoYWxsZW5nZXMsIHZrKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IHNpemUgPSBNYXRoLm1heCgxLCB2ay5uUHVibGljKTtcbiAgICBjb25zdCBudW1BcnIgPSBuZXcgQmlnQnVmZmVyKHNpemUgKiBGci5uOCk7XG4gICAgbGV0IGRlbkFyciA9IG5ldyBCaWdCdWZmZXIoc2l6ZSAqIEZyLm44KTtcblxuICAgIGxldCB3ID0gRnIub25lO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIEZyLm44O1xuICAgICAgICBudW1BcnIuc2V0KEZyLm11bCh3LCBjaGFsbGVuZ2VzLnpoKSwgaV9zRnIpO1xuICAgICAgICBkZW5BcnIuc2V0KEZyLm11bChGci5lKHZrLmRvbWFpblNpemUpLCBGci5zdWIoY2hhbGxlbmdlcy54aSwgdykpLCBpX3NGcik7XG4gICAgICAgIHcgPSBGci5tdWwodywgdmsudyk7XG4gICAgfVxuXG4gICAgZGVuQXJyID0gYXdhaXQgRnIuYmF0Y2hJbnZlcnNlKGRlbkFycik7XG5cbiAgICBsZXQgTCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIEZyLm44O1xuICAgICAgICBMW2kgKyAxXSA9IEZyLm11bChudW1BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgRnIubjgpLCBkZW5BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgRnIubjgpKTtcbiAgICB9XG4gICAgcmV0dXJuIEw7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBJKGN1cnZlLCBwdWJsaWNTaWduYWxzLCBsYWdyYW5nZUV2YWxzKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBwaSA9IEZyLnplcm87XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNTaWduYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHcgPSBGci5lKHB1YmxpY1NpZ25hbHNbaV0pO1xuICAgICAgICBwaSA9IEZyLnN1YihwaSwgRnIubXVsKHcsIGxhZ3JhbmdlRXZhbHNbaSArIDFdKSk7XG4gICAgfVxuICAgIHJldHVybiBwaTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVIwKHByb29mLCBjaGFsbGVuZ2VzLCByb290cywgcGksIGN1cnZlLCBsb2dnZXIpIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgLy8gcjAoeSkgPSDiiJFfMV44IENfMChoXzAgz4lfOF57aS0xfSkgTF9pKHkpLiBUbyB0aGlzIGVuZCB3ZSBuZWVkIHRvIGNvbXB1dGVcblxuICAgIC8vIENvbXB1dGUgdGhlIDggQzAgdmFsdWVzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMwKGhfMM+JXzheaSkgdmFsdWVzXCIpO1xuXG4gICAgbGV0IGMwVmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgbGV0IGNvZWZWYWx1ZXMgPSBbXTtcbiAgICAgICAgY29lZlZhbHVlc1sxXSA9IHJvb3RzLlMwLmgwdzhbaV07XG4gICAgICAgIGZvciAobGV0IGogPSAyOyBqIDwgODsgaisrKSB7XG4gICAgICAgICAgICBjb2VmVmFsdWVzW2pdID0gRnIubXVsKGNvZWZWYWx1ZXNbaiAtIDFdLCByb290cy5TMC5oMHc4W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMwVmFsdWVzW2ldID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLnFsLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucXIsIGNvZWZWYWx1ZXNbMV0pKTtcbiAgICAgICAgYzBWYWx1ZXNbaV0gPSBGci5hZGQoYzBWYWx1ZXNbaV0sIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xbywgY29lZlZhbHVlc1syXSkpO1xuICAgICAgICBjMFZhbHVlc1tpXSA9IEZyLmFkZChjMFZhbHVlc1tpXSwgRnIubXVsKHByb29mLmV2YWx1YXRpb25zLnFtLCBjb2VmVmFsdWVzWzNdKSk7XG4gICAgICAgIGMwVmFsdWVzW2ldID0gRnIuYWRkKGMwVmFsdWVzW2ldLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucWMsIGNvZWZWYWx1ZXNbNF0pKTtcbiAgICAgICAgYzBWYWx1ZXNbaV0gPSBGci5hZGQoYzBWYWx1ZXNbaV0sIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5zMSwgY29lZlZhbHVlc1s1XSkpO1xuICAgICAgICBjMFZhbHVlc1tpXSA9IEZyLmFkZChjMFZhbHVlc1tpXSwgRnIubXVsKHByb29mLmV2YWx1YXRpb25zLnMyLCBjb2VmVmFsdWVzWzZdKSk7XG4gICAgICAgIGMwVmFsdWVzW2ldID0gRnIuYWRkKGMwVmFsdWVzW2ldLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMuczMsIGNvZWZWYWx1ZXNbN10pKTtcbiAgICB9XG5cbiAgICAvLyBJbnRlcnBvbGF0ZSBhIHBvbHlub21pYWwgd2l0aCB0aGUgcG9pbnRzIGNvbXB1dGVkIHByZXZpb3VzbHlcbiAgICBjb25zdCBSMCA9IFBvbHlub21pYWwubGFncmFuZ2VQb2x5bm9taWFsSW50ZXJwb2xhdGlvbihcbiAgICAgICAgW3Jvb3RzLlMwLmgwdzhbMF0sIHJvb3RzLlMwLmgwdzhbMV0sIHJvb3RzLlMwLmgwdzhbMl0sIHJvb3RzLlMwLmgwdzhbM10sXG4gICAgICAgICAgICByb290cy5TMC5oMHc4WzRdLCByb290cy5TMC5oMHc4WzVdLCByb290cy5TMC5oMHc4WzZdLCByb290cy5TMC5oMHc4WzddXSxcbiAgICAgICAgYzBWYWx1ZXMsIGN1cnZlKTtcblxuICAgIC8vIENoZWNrIHRoZSBkZWdyZWUgb2YgcjEoWCkgPCA0XG4gICAgaWYgKFIwLmRlZ3JlZSgpID4gNykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSMCBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgdGhlIHBvbHlub21pYWwgaW4gY2hhbGxlbmdlcy55XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIGV2YWx1YXRpb24gcjAoeSlcIik7XG4gICAgcmV0dXJuIFIwLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSMShwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIHBpLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIC8vIHIxKHkpID0g4oiRXzFeNCBDXzEoaF8xIM+JXzRee2ktMX0pIExfaSh5KS4gVG8gdGhpcyBlbmQgd2UgbmVlZCB0byBjb21wdXRlXG4gICAgLy8gWjEgPSB7QzEoaF8xfSwgQzEoaF8xIM+JXzQpLCBDMShoXzEgz4lfNF4yKSwgQzEoaF8xIM+JXzReMyl9XG4gICAgLy8gd2hlcmUgQ18xKGhfMSDPiV80XntpLTF9KSA9IGV2YWwuYSArIGhfMSDPiV80XmkgZXZhbC5iICsgKGhfMSDPiV80XmkpXjIgZXZhbC5jICsgKGhfMSDPiV80XmkpXjMgVDAoeGkpLFxuICAgIC8vIHdoZXJlIFQwKHhpKSA9IFsgcUzCt2EgKyBxUsK3YiArIHFNwrdhwrdiICsgcU/Ct2MgKyBxQyArIFBJKHhpKSBdIC8gWl9IKHhpKVxuXG4gICAgLy8gQ29tcHV0ZSBUMCh4aSlcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDAoeGkpXCIpO1xuICAgIGxldCB0MCA9IEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xbCwgcHJvb2YuZXZhbHVhdGlvbnMuYSk7XG4gICAgdDAgPSBGci5hZGQodDAsIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xciwgcHJvb2YuZXZhbHVhdGlvbnMuYikpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucW0sIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5hLCBwcm9vZi5ldmFsdWF0aW9ucy5iKSkpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucW8sIHByb29mLmV2YWx1YXRpb25zLmMpKTtcbiAgICB0MCA9IEZyLmFkZCh0MCwgcHJvb2YuZXZhbHVhdGlvbnMucWMpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBwaSk7XG4gICAgdDAgPSBGci5tdWwodDAsIGNoYWxsZW5nZXMuaW52emgpO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgNCBDMSB2YWx1ZXNcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQzEoaF8xz4lfNF5pKSB2YWx1ZXNcIik7XG5cbiAgICBsZXQgYzFWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBjMVZhbHVlc1tpXSA9IHByb29mLmV2YWx1YXRpb25zLmE7XG4gICAgICAgIGMxVmFsdWVzW2ldID0gRnIuYWRkKGMxVmFsdWVzW2ldLCBGci5tdWwocm9vdHMuUzEuaDF3NFtpXSwgcHJvb2YuZXZhbHVhdGlvbnMuYikpO1xuICAgICAgICBjb25zdCBoMXc0U3F1YXJlZCA9IEZyLnNxdWFyZShyb290cy5TMS5oMXc0W2ldKTtcbiAgICAgICAgYzFWYWx1ZXNbaV0gPSBGci5hZGQoYzFWYWx1ZXNbaV0sIEZyLm11bChoMXc0U3F1YXJlZCwgcHJvb2YuZXZhbHVhdGlvbnMuYykpO1xuICAgICAgICBjMVZhbHVlc1tpXSA9IEZyLmFkZChjMVZhbHVlc1tpXSwgRnIubXVsKEZyLm11bChoMXc0U3F1YXJlZCwgcm9vdHMuUzEuaDF3NFtpXSksIHQwKSk7XG4gICAgfVxuXG4gICAgLy8gSW50ZXJwb2xhdGUgYSBwb2x5bm9taWFsIHdpdGggdGhlIHBvaW50cyBjb21wdXRlZCBwcmV2aW91c2x5XG4gICAgY29uc3QgUjEgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgIFtyb290cy5TMS5oMXc0WzBdLCByb290cy5TMS5oMXc0WzFdLCByb290cy5TMS5oMXc0WzJdLCByb290cy5TMS5oMXc0WzNdXSxcbiAgICAgICAgYzFWYWx1ZXMsIGN1cnZlKTtcblxuICAgIC8vIENoZWNrIHRoZSBkZWdyZWUgb2YgcjEoWCkgPCA0XG4gICAgaWYgKFIxLmRlZ3JlZSgpID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSMSBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgdGhlIHBvbHlub21pYWwgaW4gY2hhbGxlbmdlcy55XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIGV2YWx1YXRpb24gcjEoeSlcIik7XG4gICAgcmV0dXJuIFIxLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSMihwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIGxhZ3JhbmdlMSwgdmssIGN1cnZlLCBsb2dnZXIpIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgLy8gcjIoeSkgPSDiiJFfMV4zIENfMihoXzIgz4lfM157aS0xfSkgTF9pKHkpICsg4oiRXzFeMyBDXzIoaF8zIM+JXzNee2ktMX0pIExfe2krM30oeSkuIFRvIHRoaXMgZW5kIHdlIG5lZWQgdG8gY29tcHV0ZVxuICAgIC8vIFoyID0ge1tDMihoXzJ9LCBDMihoXzIgz4lfMyksIEMyKGhfMiDPiV8zXjIpXSwgW0MyKGhfM30sIEMyKGhfMyDPiV8zKSwgQzIoaF8zIM+JXzNeMildfVxuICAgIC8vIHdoZXJlIENfMihoXzIgz4lfM157aS0xfSkgPSBldmFsLnogKyBoXzIgz4lfMl5pIFQxKHhpKSArIChoXzIgz4lfM15pKV4yIFQyKHhpKSxcbiAgICAvLyB3aGVyZSBDXzIoaF8zIM+JXzNee2ktMX0pID0gZXZhbC56ICsgaF8zIM+JXzJeaSBUMSh4aSkgKyAoaF8zIM+JXzNeaSleMiBUMih4aSksXG4gICAgLy8gd2hlcmUgVDEoeGkpID0gWyBMXzEoeGkpKHotMSldIC8gWl9IKHhpKVxuICAgIC8vIGFuZCBUMih4aSkgPSBbICAoYSArIGJldGHCt3hpICsgZ2FtbWEpKGIgKyBiZXRhwrd4acK3azEgKyBnYW1tYSkoYyArIGJldGHCt3hpwrdrMiArIGdhbW1hKXpcbiAgICAvLyAgICAgICAgICAgICAgIC0gKGEgKyBiZXRhwrdzaWdtYTEgKyBnYW1tYSkoYiArIGJldGHCt3NpZ21hMiArIGdhbW1hKShjICsgYmV0YcK3c2lnbWEzICsgZ2FtbWEpes+JICBdIC8gWl9IKHhpKVxuXG4gICAgLy8gQ29tcHV0ZSBUMSh4aSlcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDEoeGkpXCIpO1xuICAgIGxldCB0MSA9IEZyLnN1Yihwcm9vZi5ldmFsdWF0aW9ucy56LCBGci5vbmUpO1xuICAgIHQxID0gRnIubXVsKHQxLCBsYWdyYW5nZTEpO1xuICAgIHQxID0gRnIubXVsKHQxLCBjaGFsbGVuZ2VzLmludnpoKTtcblxuICAgIC8vIENvbXB1dGUgVDIoeGkpXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQyKHhpKVwiKTtcbiAgICBjb25zdCBiZXRheGkgPSBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICBjb25zdCB0MjExID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmEsIEZyLmFkZChiZXRheGksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEyID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmIsIEZyLmFkZChGci5tdWwoYmV0YXhpLCB2ay5rMSksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEzID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmMsIEZyLmFkZChGci5tdWwoYmV0YXhpLCB2ay5rMiksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEgPSBGci5tdWwodDIxMSwgRnIubXVsKHQyMTIsIEZyLm11bCh0MjEzLCBwcm9vZi5ldmFsdWF0aW9ucy56KSkpO1xuXG4gICAgY29uc3QgdDIyMSA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5hLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczEpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyMiA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5iLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczIpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyMyA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5jLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczMpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyID0gRnIubXVsKHQyMjEsIEZyLm11bCh0MjIyLCBGci5tdWwodDIyMywgcHJvb2YuZXZhbHVhdGlvbnMuencpKSk7XG5cbiAgICBsZXQgdDIgPSBGci5zdWIodDIxLCB0MjIpO1xuICAgIHQyID0gRnIubXVsKHQyLCBjaGFsbGVuZ2VzLmludnpoKTtcblxuICAgIC8vIENvbXB1dGUgdGhlIDYgQzIgdmFsdWVzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMyKGhfMs+JXzNeaSkgdmFsdWVzXCIpO1xuICAgIGxldCBjMlZhbHVlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIGMyVmFsdWVzW2ldID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLnosIEZyLm11bChyb290cy5TMi5oMnczW2ldLCB0MSkpO1xuICAgICAgICBjMlZhbHVlc1tpXSA9IEZyLmFkZChjMlZhbHVlc1tpXSwgRnIubXVsKEZyLnNxdWFyZShyb290cy5TMi5oMnczW2ldKSwgdDIpKTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQzIoaF8zz4lfM15pKSB2YWx1ZXNcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgYzJWYWx1ZXNbaSArIDNdID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLnp3LCBGci5tdWwocm9vdHMuUzIuaDN3M1tpXSwgcHJvb2YuZXZhbHVhdGlvbnMudDF3KSk7XG4gICAgICAgIGMyVmFsdWVzW2kgKyAzXSA9IEZyLmFkZChjMlZhbHVlc1tpICsgM10sIEZyLm11bChGci5zcXVhcmUocm9vdHMuUzIuaDN3M1tpXSksIHByb29mLmV2YWx1YXRpb25zLnQydykpO1xuICAgIH1cblxuICAgIC8vIEludGVycG9sYXRlIGEgcG9seW5vbWlhbCB3aXRoIHRoZSBwb2ludHMgY29tcHV0ZWQgcHJldmlvdXNseVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyByMih4aSlcIik7XG4gICAgY29uc3QgUjIgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgIFtyb290cy5TMi5oMnczWzBdLCByb290cy5TMi5oMnczWzFdLCByb290cy5TMi5oMnczWzJdLFxuICAgICAgICAgICAgcm9vdHMuUzIuaDN3M1swXSwgcm9vdHMuUzIuaDN3M1sxXSwgcm9vdHMuUzIuaDN3M1syXV0sXG4gICAgICAgIGMyVmFsdWVzLCBjdXJ2ZSk7XG5cbiAgICAvLyBDaGVjayB0aGUgZGVncmVlIG9mIHIyKFgpIDwgNlxuICAgIGlmIChSMi5kZWdyZWUoKSA+IDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUjIgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgIH1cblxuICAgIC8vIEV2YWx1YXRlIHRoZSBwb2x5bm9taWFsIGluIGNoYWxsZW5nZXMueVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBldmFsdWF0aW9uIHIyKHkpXCIpO1xuICAgIHJldHVybiBSMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnkpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRihjdXJ2ZSwgcHJvb2YsIHZrLCBjaGFsbGVuZ2VzLCByb290cykge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBtdWxIMCA9IEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMwLmgwdzhbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIG11bEgwID0gRnIubXVsKG11bEgwLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMC5oMHc4W2ldKSk7XG4gICAgfVxuXG4gICAgY2hhbGxlbmdlcy50ZW1wID0gbXVsSDA7XG5cbiAgICBsZXQgbXVsSDEgPSBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMS5oMXc0WzBdKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICBtdWxIMSA9IEZyLm11bChtdWxIMSwgRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzEuaDF3NFtpXSkpO1xuICAgIH1cblxuICAgIGxldCBtdWxIMiA9IEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMyLmgydzNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIG11bEgyID0gRnIubXVsKG11bEgyLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMi5oMnczW2ldKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIG11bEgyID0gRnIubXVsKG11bEgyLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMi5oM3czW2ldKSk7XG4gICAgfVxuXG4gICAgY2hhbGxlbmdlcy5xdW90aWVudDEgPSBGci5tdWwoY2hhbGxlbmdlcy5hbHBoYSwgRnIuZGl2KG11bEgwLCBtdWxIMSkpO1xuICAgIGNoYWxsZW5nZXMucXVvdGllbnQyID0gRnIubXVsKEZyLnNxdWFyZShjaGFsbGVuZ2VzLmFscGhhKSwgRnIuZGl2KG11bEgwLCBtdWxIMikpO1xuXG4gICAgbGV0IEYyID0gRzEudGltZXNGcihwcm9vZi5wb2x5bm9taWFscy5DMSwgY2hhbGxlbmdlcy5xdW90aWVudDEpO1xuICAgIGxldCBGMyA9IEcxLnRpbWVzRnIocHJvb2YucG9seW5vbWlhbHMuQzIsIGNoYWxsZW5nZXMucXVvdGllbnQyKTtcblxuICAgIHJldHVybiBHMS5hZGQodmsuQzAsIEcxLmFkZChGMiwgRjMpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUUoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgcjAsIHIxLCByMikge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBFMiA9IEZyLm11bChyMSwgY2hhbGxlbmdlcy5xdW90aWVudDEpO1xuICAgIGxldCBFMyA9IEZyLm11bChyMiwgY2hhbGxlbmdlcy5xdW90aWVudDIpO1xuXG4gICAgcmV0dXJuIEcxLnRpbWVzRnIoRzEub25lLCBGci5hZGQocjAsIEZyLmFkZChFMiwgRTMpKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVKKGN1cnZlLCBwcm9vZiwgY2hhbGxlbmdlcykge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG5cbiAgICByZXR1cm4gRzEudGltZXNGcihwcm9vZi5wb2x5bm9taWFscy5XMSwgY2hhbGxlbmdlcy50ZW1wKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNWYWxpZFBhaXJpbmcoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgRiwgRSwgSikge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG5cbiAgICBsZXQgQTEgPSBHMS50aW1lc0ZyKHByb29mLnBvbHlub21pYWxzLlcyLCBjaGFsbGVuZ2VzLnkpO1xuICAgIEExID0gRzEuYWRkKEcxLnN1YihHMS5zdWIoRiwgRSksIEopLCBBMSk7XG4gICAgY29uc3QgQTIgPSBjdXJ2ZS5HMi5vbmU7XG5cbiAgICBjb25zdCBCMSA9IHByb29mLnBvbHlub21pYWxzLlcyO1xuICAgIGNvbnN0IEIyID0gdmsuWF8yO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1cnZlLnBhaXJpbmdFcShHMS5uZWcoQTEpLCBBMiwgQjEsIEIyKTtcbn0iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQge2dldEN1cnZlRnJvbU5hbWV9IGZyb20gXCIuL2N1cnZlcy5qc1wiO1xuaW1wb3J0IHt1dGlsc30gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuXG5jb25zdCB7dW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5mdW5jdGlvbiBpMmhleChpKSB7XG4gICAgcmV0dXJuIChcIjBcIiArIGkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG59XG5cbmZ1bmN0aW9uIHAyNTYobikge1xuICAgIGxldCBuc3RyID0gbi50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKG5zdHIubGVuZ3RoIDwgNjQpIG5zdHIgPSBcIjBcIiArIG5zdHI7XG4gICAgbnN0ciA9IGBcIjB4JHtuc3RyfVwiYDtcbiAgICByZXR1cm4gbnN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZmZsb25rRXhwb3J0Q2FsbERhdGEoX3B1YiwgX3Byb29mKSB7XG4gICAgY29uc3QgcHJvb2YgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKTtcbiAgICBjb25zdCBwdWIgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3B1Yik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlRnJvbU5hbWUocHJvb2YuY3VydmUpO1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBpbnB1dHMgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHViLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbnB1dHMgIT09IFwiXCIpIGlucHV0cyA9IGlucHV0cyArIFwiLFwiO1xuICAgICAgICBpbnB1dHMgPSBpbnB1dHMgKyBwMjU2KHB1YltpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvb2ZCdWZmID0gbmV3IFVpbnQ4QXJyYXkoRzEuRi5uOCAqIDIgKiA0ICsgRnIubjggKiAxNik7XG5cbiAgICBHMS50b1JwclVuY29tcHJlc3NlZChwcm9vZkJ1ZmYsIDAsIEcxLmUocHJvb2YucG9seW5vbWlhbHMuQzEpKTtcbiAgICBHMS50b1JwclVuY29tcHJlc3NlZChwcm9vZkJ1ZmYsIEcxLkYubjggKiAyLCBHMS5lKHByb29mLnBvbHlub21pYWxzLkMyKSk7XG4gICAgRzEudG9ScHJVbmNvbXByZXNzZWQocHJvb2ZCdWZmLCBHMS5GLm44ICogNCwgRzEuZShwcm9vZi5wb2x5bm9taWFscy5XMSkpO1xuICAgIEcxLnRvUnByVW5jb21wcmVzc2VkKHByb29mQnVmZiwgRzEuRi5uOCAqIDYsIEcxLmUocHJvb2YucG9seW5vbWlhbHMuVzIpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDgsIEZyLmUocHJvb2YuZXZhbHVhdGlvbnMucWwpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDggKyBGci5uOCwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5xcikpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogMiwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5xbSkpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogMywgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5xbykpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogNCwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5xYykpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogNSwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5zMSkpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogNiwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5zMikpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogNywgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5zMykpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogOCwgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy5hKSk7XG4gICAgRnIudG9ScHJCRShwcm9vZkJ1ZmYsIEcxLkYubjggKiA4ICsgRnIubjggKiA5LCBGci5lKHByb29mLmV2YWx1YXRpb25zLmIpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDggKyBGci5uOCAqIDEwLCBGci5lKHByb29mLmV2YWx1YXRpb25zLmMpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDggKyBGci5uOCAqIDExLCBGci5lKHByb29mLmV2YWx1YXRpb25zLnopKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDggKyBGci5uOCAqIDEyLCBGci5lKHByb29mLmV2YWx1YXRpb25zLnp3KSk7XG4gICAgRnIudG9ScHJCRShwcm9vZkJ1ZmYsIEcxLkYubjggKiA4ICsgRnIubjggKiAxMywgRnIuZShwcm9vZi5ldmFsdWF0aW9ucy50MXcpKTtcbiAgICBGci50b1JwckJFKHByb29mQnVmZiwgRzEuRi5uOCAqIDggKyBGci5uOCAqIDE0LCBGci5lKHByb29mLmV2YWx1YXRpb25zLnQydykpO1xuICAgIEZyLnRvUnByQkUocHJvb2ZCdWZmLCBHMS5GLm44ICogOCArIEZyLm44ICogMTUsIEZyLmUocHJvb2YuZXZhbHVhdGlvbnMuaW52KSk7XG5cbiAgICBjb25zdCBwcm9vZkhleCA9IEFycmF5LmZyb20ocHJvb2ZCdWZmKS5tYXAoaTJoZXgpLmpvaW4oXCJcIik7XG5cbiAgICByZXR1cm4gYDB4JHtwcm9vZkhleH0sWyR7aW5wdXRzfV1gO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBzZXR1cCB9IGZyb20gXCIuL2ZmbG9ua19zZXR1cC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcm92ZSB9IGZyb20gXCIuL2ZmbG9ua19wcm92ZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmdWxsUHJvdmUgfSBmcm9tIFwiLi9mZmxvbmtfZnVsbF9wcm92ZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJpZnkgfSBmcm9tIFwiLi9mZmxvbmtfdmVyaWZ5LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5VmVyaWZpZXIgfSBmcm9tIFwiLi9mZmxvbmtfZXhwb3J0X3NvbGlkaXR5X3ZlcmlmaWVyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5Q2FsbERhdGEgfSBmcm9tIFwiLi9mZmxvbmtfZXhwb3J0X2NhbGxkYXRhLmpzXCI7XG4iXSwibmFtZXMiOlsiYml0TGVuZ3RoIiwiaXNOZWdhdGl2ZSIsImlzWmVybyIsImlzT2RkIiwidG9OdW1iZXIiLCJzcXVhcmUiLCJleHAiLCJhYnMiLCJ0b1N0cmluZyIsIlNjYWxhci5pc1plcm8iLCJTY2FsYXIuYml0cyIsIlNjYWxhci5lcSIsIlNjYWxhci5tb2QiLCJTY2FsYXIucG93IiwiU2NhbGFyLnN1YiIsIlNjYWxhci5pc09kZCIsIlNjYWxhci5kaXYiLCJTY2FsYXIuYWRkIiwiU2NhbGFyLm11bCIsImdldFJhbmRvbUJ5dGVzIiwibG9nMiIsIlNjYWxhci5iaXRMZW5ndGgiLCJGRkZUIiwiZnV0aWxzLmV4cCIsIlNjYWxhci50b1JwckxFIiwiU2NhbGFyLnRvUnByQkUiLCJTY2FsYXIuZnJvbVJwckxFIiwiU2NhbGFyLmZyb21ScHJCRSIsInV0aWxzIiwiYnVpbGRCYXRjaEludmVyc2UiLCJidWlsZEJhdGNoQ29udmVydGlvbiIsIm1vZEludiIsIm1vZFBvdyIsImlzUHJpbWUiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsImJ1aWxkRXhwIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJidWlsZEYxbSIsImJ1aWxkTXVsdGlleHAiLCJidWlsZEYxIiwiYnVpbGRGMm0iLCJidWlsZEYzbSIsImJ1aWxkQ3VydmUiLCJidWlsZEZGVCIsImJ1aWxkUG9sIiwicmVxdWlyZSQkNyIsImJ1aWxkUUFQIiwicmVxdWlyZSQkOCIsImJ1aWxkQXBwbHlLZXkiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJidWlsZEJuMTI4IiwiYnVpbGRCbHMxMjM4MSIsInN0cmluZ2lmeUJpZ0ludHMiLCJ1bnN0cmluZ2lmeUJpZ0ludHMiLCJQQUdFX1NJWkUiLCJTY2FsYXIuc2hpZnRSaWdodCIsIlNjYWxhci5vbmUiLCJTY2FsYXIuc2hpZnRMZWZ0IiwiU2NhbGFyLnRvTEVCdWZmIiwiU2NhbGFyLmUiLCJTY2FsYXIuaXNOZWdhdGl2ZSIsIlNjYWxhci5uZWciLCJTY2FsYXIuZ3QiLCJ1dGlscy5sZUludDJCdWZmIiwiU2NhbGFyLnRvU3RyaW5nIiwiU2NhbGFyLnplcm8iLCJTY2FsYXIuYmFuZCIsIlNjYWxhci5nZXEiLCJ1dGlscy5hcnJheTJidWZmZXIiLCJ1dGlscy5idWZmZXIyYXJyYXkiLCJicm93c2VyIiwiV29ya2VyIiwiYnVpbGRNdWx0aUV4cCIsInV0aWxzLnZhcnVpbnQzMiIsInV0aWxzLnZhcmludDY0IiwidXRpbHMudmFyaW50MzIiLCJ1dGlscy51MzIiLCJ1dGlscy50b0hleFN0cmluZyIsInV0aWxzLnN0cmluZyIsImJ1aWxkQm4xMjh3YXNtIiwiYnVpbGRCbHMxMjM4MXdhc20iLCJibHMxMjM4MXIiLCJibjEyOHIiLCJnZXRDdXJ2ZUZyb21SIiwiY3JlYXRlTmV3IiwicmVhZEV4aXN0aW5nIiwidG1wQnVmZjMyIiwidG1wQnVmZjMydiIsInRtcEJ1ZmY2NCIsInRtcEJ1ZmY2NHYiLCJtZW1GaWxlLmNyZWF0ZU5ldyIsImJpZ01lbUZpbGUuY3JlYXRlTmV3IiwibWVtRmlsZS5yZWFkRXhpc3RpbmciLCJiaWdNZW1GaWxlLnJlYWRFeGlzdGluZyIsImZhc3RGaWxlLnJlYWRFeGlzdGluZyIsImZhc3RGaWxlLmNyZWF0ZU92ZXJyaWRlIiwiYXNzZXJ0IiwiYnl0ZUxlbmd0aCIsIndyaXRlIiwiYXNjaWkiLCJiYXNlNjQiLCJoZXgiLCJ1dGY4IiwidXRmMTZsZSIsImJsYWtlMmJXYXNtTW9kdWxlIiwiYmxha2UyYldhc20iLCJCbGFrZTJiIiwic2FtZVJhdGlvIiwiYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uIiwiYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbiIsImdldEN1cnZlIiwiYmluRmlsZVV0aWxzLndyaXRlQmlnSW50IiwicmVhZEhlYWRlciIsImJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uIiwiYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uIiwiYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQiLCJiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUiLCJGMUZpZWxkIiwicmVhZENvbnRyaWJ1dGlvbiIsIndyaXRlQ29udHJpYnV0aW9uIiwid3Ruc1V0aWxzLnJlYWRIZWFkZXIiLCJ6a2V5VXRpbHMucmVhZEhlYWRlciIsImJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbiIsIldpdG5lc3NDYWxjdWxhdG9yQnVpbGRlciIsImJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlIiwid3Ruc1V0aWxzLndyaXRlQmluIiwid3Ruc19jYWxjdWxhdGUiLCJncm90aDE2X3Byb3ZlIiwiY3VydmVzLmdldEN1cnZlRnJvbU5hbWUiLCJwMjU2IiwiYmxha2UyYiIsIm1pc2Mucm5nRnJvbUJlYWNvblBhcmFtcyIsImtleVBhaXIuY3JlYXRlUFRhdUtleSIsInB0YXVVdGlscy53cml0ZVBUYXVIZWFkZXIiLCJwdGF1VXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoIiwibWlzYy5mb3JtYXRIYXNoIiwidXRpbHMucmVhZFBUYXVIZWFkZXIiLCJ1dGlscy5yZWFkQ29udHJpYnV0aW9ucyIsInV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaCIsIm1pc2MuaGFzaElzRXF1YWwiLCJ1dGlscy53cml0ZVBUYXVIZWFkZXIiLCJ1dGlscy5mcm9tUHRhdVB1YktleVJwciIsInV0aWxzLndyaXRlQ29udHJpYnV0aW9ucyIsIm1pc2Muc2FtZVJhdGlvIiwidXRpbHMua2V5RnJvbUJlYWNvbiIsImtleVBhaXIuZ2V0RzJzcCIsInV0aWxzLnRvUHRhdVB1YktleVJwciIsIm1pc2MuYnl0ZUFycmF5MmhleCIsIm1pc2MuZ2V0UmFuZG9tQnl0ZXMiLCJtaXNjLnJlYWRVSW50MzJCRSIsIm1pc2MuZ2V0UmFuZG9tUm5nIiwiYmVhY29uIiwibWlzYy5oZXgyQnl0ZUFycmF5IiwiYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uIiwiU1VCQVJSQVlfU0laRSIsIkJpZ0FycmF5SGFuZGxlciIsIl9CaWdBcnJheSIsIkJpZ0FycmF5IiwibG9hZFN5bXMiLCJ3dG5zVXRpbHMud3JpdGUiLCJjdXJ2ZXMuZ2V0Q3VydmVGcm9tUiIsInprZXlVdGlscy5yZWFkTVBDUGFyYW1zIiwiemtleVV0aWxzLndyaXRlSGVhZGVyIiwiemtleVV0aWxzLndyaXRlTVBDUGFyYW1zIiwibWlzYy5jbG9uZUhhc2hlciIsImJpbkZpbGVVdGlscy5zZWN0aW9uSXNFcXVhbCIsInV0aWxzLmhhc2hQdWJLZXkiLCJ1dGlscy5oYXNoRzEiLCJleHBvcnRWZXJpZmljYXRpb25LZXkiLCJmZmxvbmtFeHBvcnRTb2xpZGl0eVZlcmlmaWVyQ21kIiwiZ2xvYmFsIiwia2VjY2FrMjU2IiwicGxvbmtfcHJvdmUiLCJmcm9tT2JqZWN0VmsiLCJpc1ZhbGlkUGFpcmluZyIsImkyaGV4Il0sIm1hcHBpbmdzIjoiOzs7SUFDQTtJQUNBLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFF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Q0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0YsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR0gsVUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7QUFDRDtJQUNBO0lBQ08sU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ILElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztBQUNEO0lBQ0E7SUFDTyxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN2QyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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QUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2QsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUNsQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTLE1BQU07SUFDZixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QixTQUFTO0lBQ1QsUUFBUSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxLQUFLLENBQUM7SUFDTixDQUFDO0FBQ0Q7QUFDQTtJQUNBLFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN4QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN0RCxLQUFLLENBQUM7SUFDTjs7SUNoS0EsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QztJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0Q7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7QUFDRDtJQUNBLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRTtJQUN6QixJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakM7SUFDQSxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNEO0lBQ2UsTUFBTSxNQUFNLENBQUM7QUFDNUI7SUFDQSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7SUFDdEIsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRztJQUNyQixZQUFZLFVBQVU7SUFDdEIsWUFBWSxVQUFVO0lBQ3RCLFlBQVksVUFBVTtJQUN0QixZQUFZLFVBQVU7SUFDdEIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixZQUFZLENBQUM7SUFDYixZQUFZLENBQUM7SUFDYixZQUFZLENBQUM7SUFDYixZQUFZLENBQUM7SUFDYixTQUFTLENBQUM7SUFDVixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sR0FBRztJQUNkLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckMsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLEdBQUc7SUFDZCxRQUFRLE9BQU9HLEdBQVUsQ0FBQ0MsR0FBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRixLQUFLO0FBQ0w7SUFDQSxJQUFJLFFBQVEsR0FBRztJQUNmLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxHQUFHO0lBQ2I7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0lBQ0E7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RDtJQUNBO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JGO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQjtJQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTztJQUN4QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU87SUFDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUss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QUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQztJQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQixZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ2hCLFNBQVM7QUFDVDtBQUNBO0lBQ0EsUUFBUSxJ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QUNoRCxRQUFRLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEUsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7SUFDcEIsS0FBSztBQUNMO0FBQ0E7SUFDQSxDQUFDO0FBQ0Q7SUFDQSxTQUFTQSxNQUFJLEVBQUUsQ0FBQztJQUNoQjtJQUNBLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsVUFBVSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUM1UixDQUFDO0FBQ0Q7QUFDQTtJQUNBLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0M7SUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDeEIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDZCxRQUFRLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLFFBQVEsT0FBTztJQUNmLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkQsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0I7SUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUNmOztJQ2xKQTtBQU1BO0lBQ2UsTUFBTSxPQUFPLENBQUM7SUFDN0IsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN2QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUdDLFdBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDMUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDM0MsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFNBQVM7QUFDVDtBQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QjtJQUNBLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ2pELFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3hDLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsUUFBUSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEI7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSUMsR0FBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RDtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDOUI7SUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUs7QUFDTDtJQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDWCxRQUFRLElBQUksR0FBRyxDQUFDO0lBQ2hCLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNoQixZQUFZLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsU0FBUyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUMxQixZQUFZLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFNBQVM7SUFDVCxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtJQUNyQixZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzVCLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLFNBQVMsTUFBTTtJQUNmLFlBQVksT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNyRCxTQUFTO0FBQ1Q7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLFFBQVEsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ1gsUUFBUSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDYixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNiLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxRQUFRLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixLQUFLO0FBQ0w7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDZCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJ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LENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRCxJQUFJLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFEO0lBQ0EsSUFBSSxTQUFTLFFBQVEsR0FBRztJQUN4QixRQUFRLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDckMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsS0FBSztBQUNMO0lBQ0EsSUFB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USxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0E7SUFD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QUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDN0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDdEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUMxRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsaUJBQWlCLEdBQUc7SUFDakMsUUFB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QUFLLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRDtBQUNBO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDdEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDdEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFDdEQ7SUFDQSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDNUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDN0MsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxTQUFTLENBQUM7QUFDVjtJQUNBLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxXQUFXLEdBQUc7SUFDM0IsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDM0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxF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QUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDM0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDM0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFl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QUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FB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VyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDaEUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDaEU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENB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RUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7SUFDL0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDekUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDekUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFN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QUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQs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QUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQztJQUM3RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzdEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsYUFBYSxHQUFHO0FBQzdCO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFD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RSxFQUFFLENBQUMsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM3RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwRCxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxjQUFjLEdBQUc7QUFDOUI7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQzVELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JB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QUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM3RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUks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QyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0E7SUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELGdCQUFnQjtJQUNoQixvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNqRSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNyRSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDMUUsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ2xFLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNsRSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7SUFDQTtJQUNBLElBQUksU0FBUyxhQUFhLEdBQUc7SUFDN0IsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0E7SUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFN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QU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxD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QUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRztJQUNuQixRQUFRO0lBQ1IsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSztJQUNoQyxRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9CLFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELEtBQUssQ0FBQyxDQUFDO0FBQ1A7SUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdkMsUUFBUSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDMUQsUUFBUSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDMUQsS0FBSyxDQUFDLENBQUM7QUFDUDtJQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQyxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsUUFBUSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7SUFDN0MsS0FBSyxDQUFDLENBQUM7QUFDUDtJQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBQ3pDO0lBQ0EsSUFBSSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3JDLFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsOEVBQThFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdkksUUFBUSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyw0RUFBNEUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUNySSxLQUFLLENBQUMsQ0FBQztBQUNQO0lBQ0EsSUFBSSxTQUFTLFlBQVksR0FBRztJQUM1QixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJO0lBQ2xCLGdCQUFnQixTQUFTLEdBQUcsTUFBTTtJQUNsQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDMUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQy9CLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNoQyxhQUFhO0lBQ2IsU0FBUyxDQUFDO0lBQ1YsS0FBSztJQUNMLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbkI7SUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHa0IsVUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RTtJQUNBLElBQUksU0FBUyxhQUFhLEdBQUc7SUFDN0IsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMxRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsSUFBSTtJQUNsQixnQkFBZ0IsU0FBUyxHQUFHLE1BQU07SUFDbEMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQzFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ2hDLGFBQWE7SUFDYixZQUFZLENBQUMsQ0FBQyxJQUFJO0lBQ2xCLGdCQUFnQixTQUFTLEdBQUcsT0FBTztJQUNuQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDL0IsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxhQUFhO0lBQ2IsWUFBWSxDQUFDLENBQUMsSUFBSTtJQUNsQixnQkFBZ0IsU0FBUyxHQUFHLE9BQU87SUFDbkMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELGFBQWE7SUFDYixTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNwQjtJQUNBLElBQUksTUFBTSxTQUFTLEdBQUdELFVBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUU7QUFDQTtJQUNBLElBQUksTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7SUFDL0MsSUFBSSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsSUFBSSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFM0Q7SUFDQSxJQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkMsSUFBSSxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RixJQUFJLE1BQU0sU0FBUyxHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUIsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBRXBEO0FBQ0E7SUFDQSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7SUFDN0IsUUFBUSxHQUFHLEVBQUUsR0FBRztJQUNoQixRQUFRLE1BQU0sRUFBRSxNQUFNO0lBQ3RCLFFBQVEsT0FBTyxFQUFFLE9BQU87SUFDeEIsUUFBUSxJQUFJLEVBQUUsSUFBSTtJQUNsQixRQUFRLE1BQU0sRUFBRSxNQUFNO0lBQ3RCLFFBQVEsT0FBTyxFQUFFLE9BQU87SUFDeEIsUUFBUSxJQUFJLEVBQUUsSUFBSTtJQUNsQixRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDcEMsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUNkLFFBQVEsS0FBSyxFQUFFLEtBQUs7SUFDcEIsUUFBUSxRQUFRLEVBQUUsUUFBUTtJQUMxQixRQUFRLFFBQVEsRUFBRSxRQUFRO0lBQzFCLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDdkIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2QixLQUFLLENBQUM7QUFDTjtJQUNBO0lBQ0E7QUFDQTtJQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUM7QUFDM0M7SUFDQSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUN2QixRQUFRLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUN2QixZQUFZLElBQUkxQyxPQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDMUIsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDOUIsYUFBYTtJQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsU0FBUztJQUNULFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDckIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDdkIsUUFBUSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDdkIsWUFBWSxJQUFJQSxPQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDMUIsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDOUIsYUFBYSxNQUFNO0lBQ25CLGdCQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlCLGFBQWE7SUFDYixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLFNBQVM7SUFDVCxRQUFRLE9BQU8sR0FBRyxDQUFDO0lBQ25CLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxjQUFjLEdBQUc7SUFDOUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25GLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxnQkFBZ0IsR0FBRztJQUNoQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0lBQ0EsUUFBUSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDekIsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakQ7QUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDcEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7SUFDekQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ2pGO0FBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7QUFDakQ7SUFDQTtJQUNBO0FBQ0E7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0lBQ0EsSUFBSSxTQUFTLG1CQUFtQixHQUFHO0lBQ25DLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkU7SUFDQSxRQUFRLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdFO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ2pEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUN6RDtJQUNBLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxXQUFXLEdBQUc7SUFDM0IsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN6RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqRCxZQUFZLEdBQUd5QixPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQywrRUFBK0UsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUM1SSxZQUFZLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLCtFQUErRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzVJLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWjtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pELFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsOEVBQThFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDM0ksWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyw4RUFBOEUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzSSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1o7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsY0FBYyxHQUFHO0lBQzlCLFFBQVEsV0FBVyxFQUFFLENBQUM7SUFDdEIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxH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LEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxRTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0FBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0lBQ0EsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsZUFBZSxHQUFHO0lBQy9CLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0lBQ0EsUUFBUSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxP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LENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkcsWUFBWSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsWUFBWSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkYsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRyxZQUFZLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixZQUFZLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRixZQUFZLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdkMsZ0JBQWdCLEdBQUdBLE9BQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FB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TUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0M7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMscUJBQXFCLEdBQUc7SUFDckMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO0lBQ2xELFFBQVEsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRSxRQUFRLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDeEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzNDO0lBQ0EsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNHLGdCQUFnQixDQUFDLENBQUMsRUFBRTtJQUNwQixvQkFBb0IsQ0FBQyxDQUFDLE1BQU07SUFDNUIsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0QyxxQkFBcUI7SUFDckIsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUMzRCxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ2pFLGlCQUFpQjtJQUNqQixhQUFhO0FBQ2I7SUFDQSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtJQUMxQixnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUMvRCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7SUFDcEIsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hGLG9CQUFvQixDQUFDLENBQUMsRUFBRTtJQUN4Qix3QkFBd0IsQ0FBQyxDQUFDLE1BQU07SUFDaEMsNEJBQTRCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdDLDRCQUE0QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxQyx5QkFBeUI7SUFDekIsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUMvRCx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ3JFLHFCQUFxQjtJQUNyQixpQkFBaUI7SUFDakIsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3pELGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixhQUFhLENBQUM7SUFDZCxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0lBQ0EsSUFBSSxTQUFTLGlDQUFpQyxHQUFHO0lBQ2pELFFBQVEscUJBQXFCLEVBQUUsQ0FBQztJQUNoQyxRQUFRLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUMvRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0FBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6RCxZQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFlBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFlBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQztJQUNBLFlBQVks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LENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3RFLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxLQUFLLEdBQUc7SUFDbEIsUUFBUTtJQUNSLFlBQVksbUhBQW1IO0lBQy9ILFlBQVksb0hBQW9IO0lBQ2hJLFNBQVMsQ0FBQztJQUNWLFlBQVksb0hBQW9IO0lBQ2hJLFlBQVksbUhBQW1IO0lBQy9ILFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUs7SUFDL0IsUUFBUTtJQUNSLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUc7SUFDbkIsUUFBUTtJQUNSLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUs7SUFDaEMsUUFBUTtJQUNSLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMvQixRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdB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QUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBO0lBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQztBQUN2RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzlDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsZ0JBQWdCLEdBQUc7SUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN4RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQzFEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztBQUMzRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFB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LEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkU7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFT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Q0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUNyRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDckQ7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDdkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0FBQ0E7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0lBQ0EsSUFBSSxTQUFTLGNBQWMsR0FBRztBQUM5QjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7QUFDQTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUN0RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDdEQsU0FBUyxDQUFDO0lBQ1YsS0FBSztJQUNMLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckI7QUFDQTtJQUNBLElBQUksU0FBUyxRQUFRLEdBQUc7SUFDeEIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLFFBQVEsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxD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TSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDNUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVB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QyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QztBQUNBO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLGFBQWE7SUFDYixZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRixnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLGFBQWE7SUFDYixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN4RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUN4RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzVELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzNEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDM0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQzlELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUM5RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO0FBQ3BEO0lBQ0Es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QUM7SUFDOUYsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUNBLE9BQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRztJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDQSxPQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkY7QUFDQTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFD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Q2hCLEtBQUs7SUFDTCxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNEO0lBQ08sU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN0QyxJQUFJO0lBQ0osUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQzlCLFNBQVMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsU0FBUyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNuQixNQUFNO0lBQ04sQ0FBQztBQUNEO0lBQ08sU0FBU0QsTUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4QixJQUFJO0lBQ0osUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLEVBQUUsSUFBSSxDQUFDO0lBQzdELFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxTQUFTLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNO0lBQ04sQ0FBQztBQUNEO0lBQ08sU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLElBQUksTUFBTSxJQUFJLEdBQUdBLE1BQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7SUFDeEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDdEQsS0FBSztJQUNMLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbkIsWUFBWSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQy9ELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN4RSxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNyQyxTQUFTO0lBQ1QsS0FBSztJQUNMLENBQUM7QUFDRDtJQUNPLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDdEMsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN6QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDRDtJQUNPLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRCxLQUFLO0lBQ0wsSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUNmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDdlBBLE1BQU13QyxXQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4QjtJQUNlLE1BQU0sU0FBUyxDQUFDO0FBQy9CO0lBQ0EsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDMUIsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMvQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHQSxXQUFTLEVBQUU7SUFDN0MsWUFBWSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUVBLFdBQVMsQ0FBQyxDQUFDO0lBQ2xELFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxTQUFTO0FBQ1Q7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ2xCLFFBQVEsS0FBSyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3JELFFBQVEsS0FBSyxFQUFFLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFCO0lBQ0EsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBR0EsV0FBUyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUlBLFdBQVMsQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLFlBQVksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUNBLFdBQVMsRUFBRSxFQUFFLENBQUNBLFdBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuRjtJQUNBLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDakI7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBR0EsV0FBUyxDQUFDO0lBQy9CO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDcEIsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDcEI7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsV0FBUyxLQUFLQSxXQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxZQUFZLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqRCxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUU7SUFDdkIsZ0JBQWdCLElBQUksR0FBRyxJQUFJQSxXQUFTLEVBQUU7SUFDdEMsb0JBQW9CLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxpQkFBaUIsTUFBTTtJQUN2QixvQkFBb0IsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxDQUFDO0lBQ2pCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDdEIsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM3QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNwQztJQUNBLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU87QUFDM0I7SUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHQSxXQUFTLENBQUMsQ0FBQztJQUN6RCxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSUEsV0FBUyxDQUFDLENBQUM7QUFDaEU7SUFDQSxRQUFRLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRTtJQUNuQyxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLGdCQUFnQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHQSxXQUFTLENBQUMsQ0FBQztJQUN4RixhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBR0EsV0FBUyxDQUFDLENBQUM7SUFDN0UsYUFBYTtBQUNiO0lBQ0EsU0FBUztBQUNUO0FBQ0E7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBR0EsV0FBUyxDQUFDO0lBQ25DLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxXQUFTLEtBQUtBLFdBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFlBQVksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsWUFBWSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEcsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUNqQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsU0FBUztBQUNUO0lBQ0EsS0FBSztJQUNMOztJQ3JGZSxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUNqRSxJQUFJLE9BQU8sZUFBZSxZQUFZLENBQUMsTUFBTSxFQUFFO0lBQy9DLFFBQVEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVELFFBQVEsS0FBSyxPQUFPLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUU7SUFDbEQsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkQsU0FBUztJQUNULFFBQVEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0MsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUNsQixZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0lBQ3JDLGdCQUFnQixDQUFDLEdBQUcsY0FBYyxDQUFDO0lBQ25DLGFBQWEsTUFBTTtJQUNuQixnQkFBZ0IsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQy9DLGFBQWE7SUFDYixZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTO0FBQy9CO0lBQ0EsWUFBWSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRixZQUFZLE1BQU0sSUFBSSxHQUFHO0lBQ3pCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQ3RELG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDNUIsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1QixvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLGlCQUFpQixDQUFDO0lBQ2xCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzFELGFBQWEsQ0FBQztJQUNkLFlBQVksVUFBVSxDQUFDLElBQUk7SUFDM0IsZ0JBQWdCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ3BDLGFBQWEsQ0FBQztJQUNkLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxJQUFJLFdBQVcsQ0FBQztJQUN4QixRQUFRLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRTtJQUN6QyxZQUFZLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsU0FBUyxNQUFNO0lBQ2YsWUFBWSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDNUMsWUFBWSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxXQUFXLENBQUM7SUFDM0IsS0FBSyxDQUFDO0lBQ047O0lDN0NlLE1BQU0sVUFBVSxDQUFDO0FBQ2hDO0lBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ25DLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUM3QjtJQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUdDLFVBQWlCLENBQUMsQ0FBQyxFQUFFQyxHQUFVLENBQUMsQ0FBQztJQUNyRCxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUd6QyxXQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBR1AsR0FBVSxDQUFDaUQsU0FBZ0IsQ0FBQ0QsR0FBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRUEsR0FBVSxDQUFDLENBQUM7QUFDekY7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RDtJQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRDtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMxRCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUdELFVBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRUMsR0FBVSxDQUFDLENBQUM7SUFDMUQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUN6QyxZQUFZ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SUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RixRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0UsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7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Q2hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RixRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0UsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDdkIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEYsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNiLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNaLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FB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QUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDZCxRQUFRLElBQUksRUFBRSxDQUFDLFlBQVksVUFBVSxDQUFDLEVBQUU7SUFDeEMsWUFBWSxDQUFDLEdBQUdYLFFBQWUsQ0FBQ0MsQ0FBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEcsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDWixRQUFRLElBQUksQ0FBQyxZQUFZLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDbkQsWUFBWSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RixRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFF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QUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0UsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtJQUNqQixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxRQUFRLE9BQU8sR0FBRyxDQUFDO0lBQ25CLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxHQUFHO0lBQ2IsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUM1QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDaEIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUIsS0FBSztBQUNMO0lBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFO0lBQ2xCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsT0FBTyxJQUFJLENBQUM7SUFDcEIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ1YsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ1YsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ1YsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsS0FBSztBQUNMO0lBQ0E7O0lDOUxlLE1BQU0sU0FBUyxDQUFDO0FBQy9CO0lBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7SUFDcEQsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVB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TSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQztJQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0lBQ0EsWUFBWSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFF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QyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFlBQVksSUFBSSxRQUFRLEVBQUU7SUFDMUIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVB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VUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVDLFlBQVksWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsWUFBWSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1QyxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxlQUFlLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDckUsUUFBUSxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0UsS0FBSyxDQUFDO0FBQ047SUFDQSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsZUFBZSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQ3RFLFFBQVEsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQztBQUNO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QUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RDLFlBQVksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0lBQ0EsWUFBWSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM1RSxZQUFZLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkYsWUFBWSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQzVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO0lBQ3JDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsWUFBWSxVQUFVLENBQUMsSUFBSTtJQUMzQixnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDcEMsYUFBYSxDQUFDO0FBQ2Q7SUFDQSxTQUFTO0FBQ1Q7QUFDQTtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxJQUFJLFlBQVksQ0FBQztJQUN6QixRQUFRLElBQUksWUFBWSxDQUFDO0lBQ3pCLFFBQVEsSUFBSSxLQUFLLFlBQVksU0FBUyxFQUFFO0lBQ3hDLFlBQVksWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxZQUFZLFlBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsU0FBUyxNQUFNO0lBQ2YsWUFBWSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELFlBQVksWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVDLFlBQVksWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsWUFBWSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUM7QUFDTjtBQUNBO0FBQ0E7SUFDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksZUFBZSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUN4RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QixRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQixRQUFRLElBQUksTUFBTSxFQUFFLFVBQVUsQ0FBQztJQUMvQixRQUFRLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtJQUMvQixZQUFZLE1BQU0sR0FBRyxjQUFjLENBQUM7SUFDcEMsWUFBWSxVQUFVLEdBQUcsbUJBQW1CLENBQUM7SUFDN0MsU0FBUyxNQUFNLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtJQUN0QyxZQUFZLE1BQU0sR0FBRyxjQUFjLENBQUM7SUFDcEMsWUFBWSxVQUFVLEdBQUcsbUJBQW1CLENBQUM7SUFDN0MsU0FBUyxNQUFNO0lBQ2YsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJQSxNQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDM0MsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDeEQsU0FBUztBQUNUO0lBQ0EsUUFBUSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEU7SUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUM5QixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDbEIsWUFBWSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtJQUNyQyxnQkFBZ0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQztJQUNuQyxhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUMvQyxhQUFhO0lBQ2IsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUztJQUMvQixZQUFZLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtJQUM1RCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDaEUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNoQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEUsWUFBWSxVQUFVLENBQUMsSUFBSTtJQUMzQixnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDcEMsYUFBYSxDQUFDO0FBQ2Q7SUFDQSxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRDtJQUNBLFFBQVEsSUFBSSxXQUFXLENBQUM7SUFDeEIsUUFBUSxJQUFJLElBQUksWUFBWSxTQUFTLEVBQUU7SUFDdkMsWUFBWSxXQUFXLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELFNBQVMsTUFBTTtJQUNmLFlBQVksV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMvQyxZQUFZLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkMsU0FBUztBQUNUO0lBQ0EsUUFBUSxPQUFPLFdBQVcsQ0FBQztJQUMzQixLQUFLLENBQUM7SUFDTjs7SUNqdkJlLGVBQWUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsRDtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMxRTtBQUNBO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckI7SUFDQSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUc2QyxDQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRCxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUdBLENBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEIsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxL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LElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHQSxTQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUMxQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzFDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJ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QU0sRUFBRTtJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDdkMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7SUFDbEQsUUFBUSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ25DLFFBQVEs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QUFDLENBQUMsRUFBRTtBQUM3RDtBQUNBO0lBQ0EsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN2RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzVELElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDNUQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDbkQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDbkQ7SUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNuRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDdkUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDdkUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDbkQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDbkQ7SUFDQSxJQUFJLFdBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDO0lBQ0EsSUFBSSxjQUFjLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0M7SUFDQSxJQUFJLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDNUI7O0lDM1ZBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUlBO0lBQ0EsTUFBTSxTQUFTLEdBQUc7SUFDbEIsSUFBSSxLQUFLLEVBQUUsSUFBSTtJQUNmLElBQUksS0FBSyxFQUFFLElBQUk7SUFDZixJQUFJLEtBQUssRUFBRSxJQUFJO0lBQ2YsSUFBSSxLQUFLLEVBQUUsSUFBSTtJQUNmLElBQUksU0FBUyxFQUFFLElBQUk7SUFDbkIsSUFBSSxNQUFNLEVBQUUsSUFBSTtJQUNoQixJQUFJLFlBQVksRUFBRSxJQUFJO0lBQ3RCLENBQUMsQ0FBQztBQUNGO0FBQ0E7SUFDTyxNQUFNLGVBQWUsQ0FBQztBQUM3QjtJQUNBLElBQUksV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtJQUNoRSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtJQUNoQyxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ25DLFlBQVksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDekMsWUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUN2QyxTQUFTLE1BQU0sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFO0lBQ3pDLFlBQVksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7SUFDckMsU0FBUyxNQUFNO0lBQ2YsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDakMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2QixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQy9CLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUIsS0FBSztBQUNMO0lBQ0EsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7SUFDMUMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEcsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM3QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3pCLFlBQVksSUFBSSxFQUFFLFNBQVM7SUFDM0IsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtJQUM1QyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO0lBQzFDLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDN0MsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixZQUFZLElBQUksRUFBRSxTQUFTO0lBQzNCLFlBQVksTUFBTSxFQUFFLE1BQU07SUFDMUIsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7SUFDOUIsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVO0lBQzNCLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNyQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFlBQVksR0FBRztJQUNuQixRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBR0YsU0FBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RyxRQUFRLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDN0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLEdBQUc7SUFDZCxRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBQzlDLFlBQVksR0FBR0EsU0FBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsWUFBWSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3QixTQUFTLENBQUMsQ0FBQztBQUNYO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRztJQUNyQixZQUFZLEdBQUdBLFNBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsRCxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUk7SUFDeEIsWUFBWSxJQUFJO0lBQ2hCLFNBQVMsQ0FBQztJQUNWLFFBQVEsT0FBTztJQUNmLFlBQVksR0FBR0EsU0FBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0MsWUFBWSxHQUFHLElBQUk7SUFDbkIsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUU7SUFDckIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksY0FBYyxHQUFHO0lBQ3JCLFFBQVEsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxLQUFLO0lBQ0w7O0lDbEhBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUtBO0lBQ08sTUFBTSxhQUFhLENBQUM7QUFDM0I7SUFDQSxJQUFJLFdBQVcsR0FBRztJQUNsQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQzVCLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUNwQyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDbEMsUUFBUSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRztJQUN0QixZQUFZLFNBQVMsRUFBRSxDQUFDO0lBQ3hCLFlBQVksVUFBVSxFQUFFLEtBQUs7SUFDN0IsWUFBWSxTQUFTLEVBQUUsUUFBUTtJQUMvQixTQUFTLENBQUM7SUFDVixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDeEIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMxQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQzFCLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDakMsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLEdBQUc7SUFDWixRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUM7SUFDOUIsWUFBWSxHQUFHRyxHQUFTLENBQUMsVUFBVSxDQUFDO0lBQ3BDLFlBQVksR0FBR0EsR0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzQixZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtJQUNoQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRTtJQUNsQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFO0lBQ2hELFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7SUFDMUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7SUFDbkMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7SUFDcEMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7SUFDaEMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7SUFDaEMsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssV0FBVztJQUNsRSxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQzFDLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3QztJQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0lBQ0EsUUFBUSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0lBQ3ZELFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLFdBQVc7SUFDbEUsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxlQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztJQUMxRSxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxtREFBbUQsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUY7SUFDQSxRQUFRLElBQUksU0FBUyxHQUFHLFVBQVUsSUFBSSxNQUFNLENBQUM7QUFDN0M7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQzFDLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3QztJQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDaEc7SUFDQSxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDO0lBQ2pDLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRztJQUN0QixZQUFZLFNBQVMsRUFBRSxTQUFTO0lBQ2hDLFlBQVksVUFBVSxFQUFFLFVBQVUsSUFBSSxLQUFLO0lBQzNDLFlBQVksU0FBUyxFQUFFLFNBQVMsSUFBSSxRQUFRO0lBQzVDLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7SUFDeEMsUUFBUSxNQUFNLFVBQVUsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDO0lBQ2pELFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLFdBQVc7SUFDbEUsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELFFBQVEsSUFBSSxVQUFVLElBQUksTUFBTSxFQUFFO0lBQ2xDLFlBQVksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNyRCxTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMxQixZQUFZLFVBQVUsRUFBRSxVQUFVO0lBQ2xDLFlBQVksR0FBRyxFQUFFLEdBQUc7SUFDcEIsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtJQUMvQixRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDM0IsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN4QixZQUFZLE1BQU0sRUFBRSxNQUFNO0lBQzFCLFlBQVksS0FBSyxFQUFFLEtBQUs7SUFDeEIsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hCLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDakIsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUNsQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRTtJQUN4RixZQUFZLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVCLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN0QixTQUFTLE1BQU07SUFDZixZQUFZLElBQUksR0FBRyxDQUFDLENBQUM7SUFDckIsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFNBQVM7SUFDVCxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQzFCLFFBQVEsSUFBSSxLQUFLLEVBQUU7SUFDbkIsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxTQUFTO0lBQ1QsUUFBUSxPQUFPLENBQUMsQ0FBQztJQUNqQixLQUFLO0FBQ0w7SUFDQSxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUU7SUFDbkIsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLEtBQUs7QUFDTDtJQUNBLElBQUksY0FBYyxHQUFHO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDN0IsUUFBUSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQzFDLFlBQVksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEYsWUFBWSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUNDLFdBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEUsWUFBWSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxTQUFTO0lBQ1QsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEQsWUFBWSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9ELFlBQVksTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDQSxXQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLFlBQVksSUFBSSxPQUFPLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQzNFLGdCQUFnQixrQkFBa0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMzRSxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsYUFBYTtBQUNiO0lBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRSxTQUFTO0FBQ1Q7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0lBQ3hDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHSixTQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDN0UsS0FBSztBQUNMO0lBQ0EsSUFBSSxVQUFVLEdBQUc7SUFDakIsUUFBUSxPQUFPLElBQUksQ0FBQyxhQUFhO0lBQ2pDLFlBQVksSUFBSTtJQUNoQixZQUFZO0lBQ1osZ0JBQWdCLEdBQUdBLFNBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMxRCxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoRCxhQUFhO0lBQ2IsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLEdBQUc7SUFDbkIsUUFBUSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDM0IsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JCLFlBQVksR0FBR0ssTUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ25ELFlBQVksR0FBR0EsTUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ2xELFlBQVksSUFBSTtJQUNoQixZQUFZLElBQUk7SUFDaEIsWUFBWSxHQUFHTCxTQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDckQsU0FBUyxDQUFDLENBQUM7SUFDWCxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDckQsWUFBWSxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3pCLGdCQUFnQixHQUFHSyxNQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDN0QsZ0JBQWdCLEdBQUdBLE1BQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RCxnQkFBZ0IsSUFBSTtJQUNwQixnQkFBZ0IsR0FBR0wsU0FBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ2xFLGFBQWEsQ0FBQyxDQUFDO0lBQ2YsU0FBUztJQUNULFFBQVEsT0FBTyxJQUFJLENBQUMsYUFBYTtJQUNqQyxZQUFZLElBQUk7SUFDaEIsWUFBWUEsU0FBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDOUQsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSwwQkFBMEIsR0FBRztJQUNqQyxRQUFRLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25HLFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHQSxTQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzdFLFNBQVM7SUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLGFBQWE7SUFDakMsWUFBWSxJQUFJO0lBQ2hCLFlBQVk7SUFDWixnQkFBZ0IsR0FBR0EsU0FBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDbEQsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUMvQixhQUFhO0lBQ2IsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxvQkFBb0IsR0FBRztJQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELFFBQVEsT0FBTyxJQUFJLENBQUMsYUFBYTtJQUNqQyxZQUFZLElBQUk7SUFDaEIsWUFBWTtJQUNaLGdCQUFnQixHQUFHQSxTQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUN2RSxhQUFhO0lBQ2IsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxjQUFjLEdBQUc7SUFDckIsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN2RCxRQUFRLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN6RCxZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBR0EsU0FBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFNBQVM7SUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLGFBQWE7SUFDakMsWUFBWSxJQUFJO0lBQ2hCLFlBQVk7SUFDWixnQkFBZ0IsR0FBR0EsU0FBZSxDQUFDLENBQUMsQ0FBQztJQUNyQyxnQkFBZ0IsR0FBR0EsU0FBZSxDQUFDLENBQUMsQ0FBQztJQUNyQyxnQkFBZ0IsSUFBSTtJQUNwQixnQkFBZ0IsR0FBR0UsUUFBYyxDQUFDLENBQUMsQ0FBQztJQUNwQyxnQkFBZ0IsSUFBSTtJQUNwQixnQkFBZ0IsR0FBR0YsU0FBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQzlELGdCQUFnQixHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDL0IsYUFBYTtJQUNiLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksYUFBYSxHQUFHO0lBQ3BCLFFBQVEsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25ELFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQztJQUN6QixnQkFBZ0IsR0FBR0ssTUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzNELGdCQUFnQixJQUFJO0lBQ3BCLGdCQUFnQixHQUFHTCxTQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdkQsYUFBYSxDQUFDLENBQUM7SUFDZixTQUFTO0lBQ1QsUUFBUSxPQUFPLElBQUksQ0FBQyxhQUFhO0lBQ2pDLFlBQVksSUFBSTtJQUNoQixZQUFZQSxTQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM5RCxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFVBQVUsR0FBRztJQUNqQixRQUFRLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25HLFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEQsU0FBUztJQUNULFFBQVEsT0FBTyxJQUFJLENBQUMsYUFBYTtJQUNqQyxZQUFZLElBQUk7SUFDaEIsWUFBWUEsU0FBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDOUQsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxVQUFVLEdBQUc7SUFDakIsUUFBUSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDM0IsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JCLFlBQVksSUFBSTtJQUNoQixZQUFZLElBQUk7SUFDaEIsWUFBWSxJQUFJO0lBQ2hCLFlBQVksSUFBSTtJQUNoQixZQUFZLElBQUk7SUFDaEIsWUFBWSxHQUFHRyxHQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQyxTQUFTLENBQUMsQ0FBQztJQUNYLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2pELFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQztJQUN6QixnQkFBZ0IsSUFBSTtJQUNwQixnQkFBZ0IsSUFBSTtJQUNwQixnQkFBZ0IsR0FBR0QsUUFBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZELGdCQUFnQixJQUFJO0lBQ3BCLGdCQUFnQixHQUFHRixTQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlELGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztJQUN0QyxhQUFhLENBQUMsQ0FBQztJQUNmLFNBQVM7SUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLGFBQWE7SUFDakMsWUFBWSxJQUFJO0lBQ2hCLFlBQVlBLFNBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzlELFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBOztJQzVTQSxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM5QjtJQUNlLGVBQWUsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUU7QUFDaEU7SUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLElBQUlNLFlBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsQztJQUNBLElBQUksSUFBSSxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekI7SUFDQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNDLElBQUksU0FBUyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDaEQsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksU0FBUyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDNUQsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksU0FBUyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDNUQsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0RCxJQUFJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3hELElBQUksU0FBUyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDOUQsSUFBSSxTQUFTLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM5RCxJQUFJLFNBQVMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUNuRixJQUFJLE1BQU0sTUFBTSxHQUFHO0lBQ25CLFFBQVEsSUFBSSxFQUFFLE9BQU87SUFDckIsUUFBUSxJQUFJLEVBQUUsU0FBUztJQUN2QixRQUFRLENBQUMsRUFBRXBCLENBQVEsQ0FBQywrRUFBK0UsQ0FBQztJQUNwRyxRQUFRLENBQUMsRUFBRUEsQ0FBUSxDQUFDLCtFQUErRSxDQUFDO0lBQ3BHLFFBQVEsR0FBRyxFQUFFLEVBQUU7SUFDZixRQUFRLEdBQUcsRUFBRSxFQUFFO0lBQ2YsUUFBUSxVQUFVLEVBQUVBLENBQVEsQ0FBQyxrRUFBa0UsRUFBRSxFQUFFLENBQUM7SUFDcEcsUUFBUSxZQUFZLEVBQUUsWUFBWSxHQUFHLElBQUksR0FBRyxLQUFLO0lBQ2pELEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsa0JBQWtCO0lBQ3hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7SUFDbEMsWUFBWSxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQyxZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxTQUFTO0lBQ1QsS0FBSyxDQUFDO0FBQ047SUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7SUFDdkIsUUFBUSxVQUFVLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN2QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0lBQ2pCOztJQ3REQSxVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUNqQztJQUNlLGVBQWUsYUFBYSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUU7QUFDbkU7SUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLElBQUlxQixlQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsSUFBSSxJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUM1QjtJQUNBLElBQUksWUFBWSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUMsSUFBSSxZQUFZLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxJQUFJLFlBQVksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ25ELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEUsSUFBSSxZQUFZLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNsRSxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzVELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEUsSUFBSSxZQUFZLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNsRSxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzVELElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDOUQsSUFBSSxZQUFZLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNwRSxJQUFJLFlBQVksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ3BFLElBQUksWUFBWSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDMUIsSUFBSSxZQUFZLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtJQUNBLElBQUksSUFBSSxDQUFDLENBQUMsWUFBWSxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUM7SUFDekYsSUFBSSxNQUFNLE1BQU0sR0FBRztJQUNuQixRQUFRLElBQUksRUFBRSxVQUFVO0lBQ3hCLFFBQVEsSUFBSSxFQUFFLFlBQVk7SUFDMUIsUUFBUSxDQUFDLEVBQUVyQixDQUFRLENBQUMsa0dBQWtHLEVBQUUsRUFBRSxDQUFDO0lBQzNILFFBQVEsQ0FBQyxFQUFFQSxDQUFRLENBQUMsa0VBQWtFLEVBQUUsRUFBRSxDQUFDO0lBQzNGLFFBQVEsR0FBRyxFQUFFLEVBQUU7SUFDZixRQUFRLEdBQUcsRUFBRSxFQUFFO0lBQ2YsUUFBUSxVQUFVLEVBQUVBLENBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLENBQUM7SUFDdEUsUUFBUSxVQUFVLEVBQUVBLENBQVEsQ0FBQyxtSUFBbUksRUFBRSxFQUFFLENBQUM7SUFDckssUUFBUSxZQUFZLEVBQUUsWUFBWSxHQUFHLElBQUksR0FBRyxLQUFLO0lBQ2pELEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsa0JBQWtCO0lBQ3hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7SUFDbEMsWUFBWSxVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QyxZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxTQUFTO0lBQ1QsS0FBSyxDQUFDO0FBQ047SUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7SUFDdkIsUUFBUSxVQUFVLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMxQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0lBQ2pCOztJQ3pEQSxNQUFNc0IsV0FBUyxHQUFHdEIsQ0FBUSxDQUFDLGtFQUFrRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLE1BQU11QixRQUFNLEdBQUd2QixDQUFRLENBQUMsK0VBQStFLENBQUMsQ0FBQztBQUN6RztBQUNrQkEsS0FBUSxDQUFDLGtHQUFrRyxFQUFFLEVBQUUsRUFBRTtBQUNwSEEsS0FBUSxDQUFDLCtFQUErRSxFQUFFO0FBQ3pHO0lBQ08sZUFBZXdCLGVBQWEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRTtJQUM5RCxJQUFJLElBQUksS0FBSyxDQUFDO0lBQ2QsSUFBSSxJQUFJOUUsRUFBUyxDQUFDLENBQUMsRUFBRTZFLFFBQU0sQ0FBQyxFQUFFO0lBQzlCLFFBQVEsS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxLQUFLLE1BQU0sSUFBSTdFLEVBQVMsQ0FBQyxDQUFDLEVBQUU0RSxXQUFTLENBQUMsRUFBRTtJQUN4QyxRQUFRLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsS0FBSyxNQUFNO0lBQ1gsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUVqQixVQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsS0FBSztJQUNMLElBQUksT0FBTyxLQUFLLENBQUM7SUFDakI7O0lDbEJPLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQztJQWVyQixNQUFNLEtBQUssR0FBRyxNQUFNOzs7O0lDZHBCLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTtJQUNyRSxJQUFJLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0lBQzlGLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9DLElBQUksTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQ7SUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xDO0lBQ0EsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0FBQ0Q7QUFDQTtJQUNBLE1BQU0sUUFBUSxDQUFDO0FBQ2Y7SUFDQSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0lBQzFELFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDakMsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDOUMsWUFBWSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUMvQixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDcEMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDeEIsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMvQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMxQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQzFCLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxDQUFDLENBQUMsRUFBRTtJQUNqQixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSTtJQUNsRCxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ25DLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztJQUN2QixnQkFBZ0IsT0FBTyxFQUFFLE9BQU87SUFDaEMsZ0JBQWdCLE1BQU0sRUFBRSxNQUFNO0lBQzlCLGFBQWEsQ0FBQyxDQUFDO0lBQ2YsU0FBUyxDQUFDLENBQUM7SUFDWCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxPQUFPLENBQUMsQ0FBQztJQUNqQixLQUFLO0FBQ0w7SUFDQSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLFFBQVEsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQzVCLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTztJQUNyQyxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdkQsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEUsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRTtJQUNqRCxZQUFZLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsU0FBUztJQUNULFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkQsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDckQsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDNUQsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxhQUFhO0lBQ2IsU0FBUztJQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7SUFDQSxJQUFJLFlBQVksR0FBRztJQUNuQixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87SUFDakMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPO0FBQ2hEO0lBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRDtJQUNBLFFBQVEsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUMsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxSSxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM5RDtJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0lBQ0E7SUFDQTtJQUNBLFFBQVE7SUFDUixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXO0lBQzVFLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLG9CQUFvQixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNoRCxZQUFZLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkQsWUFBWSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxFQUFFO0lBQzdELGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUNwRCxnQkFBZ0IsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDbkQsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsaUJBQWlCLE1BQU07SUFDdkIsb0JBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxpQkFBaUI7SUFDakIsZ0JBQWdCLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RFO0lBQ0EsYUFBYSxNQUFNO0lBQ25CLGdCQUFnQixJQUFJLFNBQVMsRUFBRTtJQUMvQixvQkFBb0IsU0FBUyxFQUFFLENBQUM7SUFDaEMsaUJBQWlCLE1BQU07SUFDdkIsb0JBQW9CLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0RCxvQkFBb0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RCxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELG9CQUFvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsb0JBQW9CLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsaUJBQWlCO0FBQ2pCO0lBQ0EsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO0lBQ2hELG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUN6RCxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLG9CQUFvQixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxpQkFBaUIsTUFBTTtJQUN2QixvQkFBb0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ3pELG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQzlILHdCQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUNuRSx3QkFBd0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3RFLHdCQUF3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM3RCx3QkFBd0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0QsNEJBQTRCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqRCx5QkFBeUI7SUFDekIsd0JBQXdCLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlFLHdCQUF3QixPQUFPLEdBQUcsQ0FBQztJQUNuQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsS0FBSztJQUNoQyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDeEIsb0JBQW9CLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsU0FBUztJQUNUO0FBQ0E7SUFDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDckMsWUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNqQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7SUFDQSxRQUFRLFNBQVMsVUFBVSxHQUFHO0lBQzlCLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7SUFDdkMsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0MsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLGdCQUFnQixDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNqQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUIsZ0JBQWdCLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLGFBQWEsTUFBTTtJQUNuQixnQkFBZ0IsT0FBTztJQUN2QixvQkFBb0IsS0FBSyxFQUFFLEtBQUs7SUFDaEMsb0JBQW9CLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZELG9CQUFvQixVQUFVLEVBQUUsQ0FBQztJQUNqQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7SUFDM0IsaUJBQWlCLENBQUM7SUFDbEIsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxhQUFhLEdBQUc7SUFDcEIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTztBQUNqQztJQUNBLFFBQVEsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQ7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUMsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0lBQzVCLGdCQUFnQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDcEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtJQUNqSCxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekMsb0JBQW9CLE9BQU87SUFDM0IsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEtBQUs7SUFDNUIsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsb0JBQW9CLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLG9CQUFvQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtJQUMxQixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDekMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLGdCQUFnQixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRixhQUFhLENBQUMsQ0FBQztJQUNmLFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsR0FBRztJQUNwQixRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtJQUNsQyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsU0FBUztJQUNULFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsQixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLE9BQU87SUFDekMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN0RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdkMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzRixRQUFRLElBQUksSUFBSSxDQUFDLFlBQVk7SUFDN0IsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEQsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRjtJQUNBLFFBQVEsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2hDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLFlBQVksTUFBTSxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLFlBQVksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RixZQUFZLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUN4QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLFlBQVksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtJQUNwQyxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLGFBQWE7SUFDYixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDakIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUN6QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtJQUN0QixZQUFZLE9BQU87SUFDbkIsU0FBUztJQUNULFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRTtJQUN6RCxZQUFZLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELFlBQVksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFNBQVM7SUFDVCxRQUFRLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWTtJQUM3QixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEU7SUFDQSxRQUFRLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNoQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckY7SUFDQSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDcEM7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFH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QUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO0lBQ3JCLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUs7SUFDcEIsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLFlBQVksT0FBTyxHQUFHLEVBQUU7SUFDeEIsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHO0lBQ3BCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsUUFBUSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDN0IsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sVUFBVSxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRDtJQUNBLFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQ7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQ7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRTtJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUN6QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUM7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQztJQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDMUIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7SUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtJQUMvQixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0RCxTQUFTO0FBQ1Q7SUFDQSxR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QUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssR0FBRztJQUNaLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxPQUFPLEdBQUc7SUFDcEIsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLE1BQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDN0IsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDN0IsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFO0lBQ3pCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFO0lBQ3pCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENB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QyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLE1BQUs7SUFDTCxHQUFHO0FBQ0g7SUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDckIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFHO0lBQ3pELEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSTtJQUMxRCxHQUFHO0FBQ0g7SUFDQSxFQUFFLE9BQU8sTUFBTTtJQUNmLENBQ0E7SUFDQSxTQUFTZ0csT0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUdELFlBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUN6RSxFQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFDO0FBQzFEO0lBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUMxQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDO0lBQ3pDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQzdDO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQztJQUNyQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDO0lBQzVDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUM7SUFDM0MsR0FBRztBQUNIO0lBQ0EsRUFBRSxPQUFPLEdBQUc7SUFDWixDQUNBO0lBQ0EsSUFBQSxNQUFjLEdBQUc7SUFDakIsY0FBRUEsWUFBVTtJQUNaLFlBQUUvRixVQUFRO0lBQ1YsU0FBRWdHLE9BQUs7SUFDUDs7SUNoRUEsU0FBU0QsWUFBVSxFQUFFLE1BQU0sRUFBRTtJQUM3QixFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO0lBQzVCLENBQUM7QUFDRDtJQUNBLFNBQVMvRixVQUFRLEVBQUUsTUFBTSxFQUFFO0lBQzNCLEVBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVU7QUFDL0I7SUFDQSxFQUFFLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFDO0FBQzlEO0lBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxHQUFFO0lBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUNYO0lBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQy9DLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFDO0lBQy9ELEdBQUc7QUFDSDtJQUNBLEVBQUUsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFDO0lBQzlELEdBQUc7QUFDSDtJQUNBLEVBQUUsT0FBTyxNQUFNO0lBQ2YsQ0FBQztBQUNEO0lBQ0EsU0FBU2dHLE9BQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHRCxZQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDekUsRUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBQztBQUMxRDtJQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxD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O0lBQ0EsR0FBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7U0FDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQztTQUN0QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQztTQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQztTQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQztRQUMzQjtBQUNIO0lBQ0EsR0FBRSxPQUFPLE1BQU07TUFDZDtBQUNEO0tBQ0EsU0FBUyxRQUFRLEVBQUUsTUFBTSxFQUFFO0lBQzNCLEdBQUUsT0FBTyxNQUFNO01BQ2Q7QUFDRDtJQUNBLENBQUEsU0FBUyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFO0lBQ3pFLEdBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVU7QUFDL0I7SUFDQSxHQUFFLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUU7SUFDN0IsR0FBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQzdCLEdBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFDO0lBQzFCLEdBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFHO0FBQzFCO0lBQ0EsR0FBRSxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFDO0FBQ3BFO09BQ0UsT0FBTyxR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SUFDRixDQUFBLElBQUksVUFBVSxtQkFBbUIsQ0FBQyxNQUFNO09BQ3RDLElBQUksS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEtBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzlFLE9BQU8sQ0FBQyxNQUFNLEtBQUs7SUFDckIsS0FBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0SCxLQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSTtXQUNoQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUM3RSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUss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LEdBQUcsQ0FBQyxDQUFDO0lBQzlELEVBQUM7QUFDRDtJQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQ2pELEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxFQUFDO0FBQ0Q7SUFDQSxTQUFTLElBQUksSUFBSTs7SUNySWpCO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQWdDQTtBQUNBO0lBQ08sU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUN2QjtJQUNBLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsVUFBVSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLFVBQVUsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUM1UixDQUFDO0FBQ0Q7QUFDQTtJQUNPLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2YsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDM0IsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDO0lBQ3BCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0lBQzlCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckUsU0FBUztJQUNULEtBQUs7SUFDTCxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztBQUNEO0lBQ08sU0FBUyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNwQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3JELElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtJQUM3QyxJQUFJO0lBQ0osUUFBUSxJ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S0FBSyxHQUFHLE1BQU1DLGFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7SUFDQSxJQUFJLE1BQU1GLGlCQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RTtJQUNBLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksTUFBTUcsV0FBd0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pD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QUMsS0FBSyxHQUFHLE1BQU1MLGFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3RDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzNDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakM7SUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFF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LEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsS0FBSztBQUNMO0lBQ0EsQ0FBQztBQUNEO0FBQ0E7SUFDQSxlQUFlRyxrQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNyRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2xDO0lBQ0EsSUFBSSxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDMUIsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRTtJQUN4QyxRQUFRLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FB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QU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBSSxNQUFNLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckM7SUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtJQUNoQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsS0FBSztJQUNMLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtJQUNyQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7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QyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRDtJQUNBLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQTtJQUNBLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUY7QUFDQTtJQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0lBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN6QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzdCO0lBQ0EsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3pCO0lBQ0EsSUFBSSxLQUFLLEdBQUd0RSxrQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLGFBQWEsR0FBR0Esa0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDcEQ7SUFDQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbEMsQ0FBQztBQUNEO0FBQ0E7SUFDQSxlQUFlLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQy9ELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDM0IsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDakMsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNoRDtJQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6RCxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pEO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUMxQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxRQUFRLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEUsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsUUFBUSxNQUFN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LENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUM5RCxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixTQUFTLENB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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN2QyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSWlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUM7SUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEQsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUN2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S0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEUsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkM7SUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRDtJQUNBLElBQUksTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTO0lBQ3JDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtJQUNqQyxRQUFRLElBQUksR0FBRyxVQUFVO0lBQ3pCLFFBQVEsSUFBSSxHQUFHLFVBQVU7QUFDekI7SUFDQSxRQUFRLFVBQVUsRUFBRSxTQUFTO0lBQzdCLEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2YsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLElBQUksT0FBTyxJQUFJLENBQUM7SUFDaEI7O0lDNUVBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUVBLE1BQU0sc0JBQUUzRSxvQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQztJQUNBLFNBQVM0RSxNQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ2pCLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDN0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNEO0lBQ2UsZUFBZSw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQzFFLElBQUksTUFBTSxLQUFLLEdBQUc1RSxvQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLE1BQU0sR0FBRyxHQUFHQSxvQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QztJQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDckMsUUFBUSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDaEQsUUFBUSxNQUFNLEdBQUcsTUFBTSxHQUFHNEUsTUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxDQUFDLENBQUM7SUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxFQUFFLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzFILFFBQVEsQ0FBQyxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QjtJQUNBLElBQUksT0FBTyxDQUFDLENBQUM7SUFDYjs7SUM3Q0E7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBOzs7Ozs7Ozs7O0lDakJBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUtBO0lBQ08sU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtJQUN0QyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUUsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFDcEIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFB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LElBQUksS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2xDLFFBQVEsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7SUFDTCxJQUFJLE1BQU1DLGVBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0M7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNRCxpQkFBOEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNFLEtBQUs7SUFDTCxJQUFJLE1BQU1DLGVBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0M7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNRCxpQkFBOEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLEtBQUs7SUFDTCxJQUFJLE1BQU1DLGVBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0M7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNRCxpQkFBOEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxNQUFNQyxlQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNDO0lBQ0E7SUFDQTtJQUNBLElBQUksTUFBTUQsaUJBQThCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksTUFBTUMsZUFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQztJQUNBLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckI7SUFDQSxJQUFJLE1BQU0sa0JBQWtCLEdBQUd5QiwyQkFBcUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNGO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDQyxVQUFlLENBQUM3QixtQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztBQUNoRztJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQzZCLFVBQWUsQ0FBQyxrQkFBa0IsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7QUFDN0Y7SUFDQSxJQUFJLE9BQU8sa0JBQWtCLENBQUM7QUFDOUI7SUFDQTs7SUNqSkE7QUFhQTtJQUNlLGVBQWUsZUFBZSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUU7SUFDdkYsSUFBSSxNQUFNN0IsbUJBQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU1VLFdBQXdCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRjtJQUNBLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNb0IsY0FBb0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEU7SUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLE1BQU1DLGlCQUF1QixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakYsSUFBSSxJQUFJLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQzNDLElBQUksSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtJQUNuQyxRQUFRLGdCQUFnQixHQUFHL0IsbUJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoRCxRQUFRLGdCQUFnQixHQUFHZ0MsMkJBQWlDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNFLEtBQUssTUFBTTtJQUNYLFFBQVEsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzlFLFFBQVEsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQy9FLEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQ0gsVUFBZSxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUN2RjtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQ0EsVUFBZSxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUN2RjtBQUNBO0lBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNeEMsY0FBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBR1csbUJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsSUFBSSxNQUFNLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELElBQUksTUFBTSxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELElBQUksTUFBTSxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLElBQUksTUFBTSxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLFdBQVcsQ0FBQyxDQUFDO0lBQ25FLElBQUksTUFBTSxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLG9CQUFvQixRQUFRLENBQUMsQ0FBQztBQUNoRTtJQUNBLElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QjtJQUNBLElBQUksTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakQ7SUFDQSxJQUFJLElBQUksQ0FBQ2lDLFdBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtJQUNwRSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUNKLFVBQWUsQ0FBQyxvQkFBb0IsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDdkc7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkZBQTJGLENBQUMsQ0FBQztJQUM5SCxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsMkZBQTJGLENBQUMsQ0FBQztJQUNySCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sZ0JBQWdCLENBQUM7QUFDNUI7SUFDQSxJQUFJLGVBQWUsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtJQUM3RSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QixRQUFRLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxNQUFNdEIsc0JBQW1DLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvRSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRTtJQUNwRCxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxZQUFZLElBQUksSUFBSSxDQUFDO0lBQ3JCLFlBQVksSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsWUFBWSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLFlBQVksTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLFlBQVksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxTQUFTO0lBQ1QsUUFBUSxNQUFNQyxjQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELEtBQUs7QUFDTDtBQUNBO0lBQ0E7O0lDaEZBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQU9BO0lBQ2UsZUFBZSxjQUFjLENBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRTtBQUNqSTtJQUNBLElBQUksTUFBTVIsbUJBQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQjtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUM7SUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU1VLFdBQXdCLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTW9CLGNBQW9CLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksTUFBTSxhQUFhLEdBQUcsTUFBTUMsaUJBQXVCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixJQUFJLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQ25DO0lBQ0EsSUFBSSxJQUFJLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBSSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3QixJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdCO0lBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxNQUFNM0MsWUFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3pFO0lBQ0EsSUFBSSxLQUFLLFVBQVUsQ0FBQyxTQUFTO0lBQzdCLFFBQVEsRUFBRTtJQUNWLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUk7SUFDekIsUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSTtJQUN6QixRQUFRLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJO0lBQ3pCLFFBQVEsSUFBSTtJQUNaLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNyQixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUMvRDtJQUNBLElBQUksSUFBSSxpQkFBaUIsQ0FBQztBQUMxQjtJQUNBLElBQUksSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtJQUNoQyxRQUFRLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUNoRixLQUFLLE1BQU07SUFDWCxRQUFRLGlCQUFpQixHQUFHNEMsMkJBQWlDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU1kLGFBQTBCLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRyxJQUFJLE1BQU1nQixlQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQ7SUFDQSxJQUFJLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsSUFBSSxJQUFJRCxXQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3BELFFBQVEsaUJBQWlCLEdBQUcsd0JBQXdCLENBQUM7SUFDckQsUUFBUSxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7SUFDaEYsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUNBLFdBQWdCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7SUFDcEUsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7QUFDbEc7SUFDQSxJQUFJLE1BQU0sY0FBYyxHQUFHLElBQUlqQyxtQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUNaLElBQUksR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLElBQUksbUJBQW1CLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLElBQUksbUJBQW1CLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hHLElBQUksbUJBQW1CLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9GLElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLG1CQUFtQixDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEU7QUFDQTtJQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0lBQ0EsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEdBQUdtQyxpQkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRjtJQUNBLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDTixVQUFlLENBQUMsWUFBWSxFQUFFLHVDQUF1QyxDQUFDLENBQUMsQ0FBQztBQUNwRztJQUNBLElBQUksSUFBSSxZQUFZLEVBQUU7SUFDdEIsUUFBUSxNQUFNLG1CQUFtQixHQUFHLElBQUk3QixtQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsUUFBUSxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckcsUUFBUSxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRyxRQUFRLE1BQU0sV0FBVyxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFHLFFBQVEsTUFBTSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekcsUUFBUSxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLG9CQUFvQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEc7SUFDQSxRQUFRLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQzZCLFVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQzdHLEtBQUssTUFBTTtJQUNYLFFBQVEsbUJBQW1CLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM1QztJQUNBLElBQUksTUFBTU8sa0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNoRTtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxPQUFPLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztBQUM3QztJQUNBLElBQUksZUFBZSxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUU7SUFDbEgsUUFBUSxJQUFJLFlBQVksRUFBRTtJQUMxQixZQUFZLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BJLFNBQVMsTUFBTTtJQUNmLFlBQVksT0FBTyxNQUFNLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEksU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRTtBQUM5SDtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUI7SUFDQSxRQUFRLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUNsQztJQUNBLFFBQVEsTUFBTWxDLGlCQUE4QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxRQUFRLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1QztJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFO0lBQ3JELFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3hEO0lBQ0EsWUFBWSxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELFlBQVksY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QztJQUNBLFlBQVksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZEO0lBQ0EsWUFBWSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzlELGdCQUFnQixNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUM1QyxvQkFBb0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELG9CQUFvQixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsU0FBUztBQUNUO0lBQ0EsUUFBUSxNQUFNQyxlQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsUUFBUSxPQUFPLGNBQWMsQ0FBQztJQUM5QixLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksZUFBZSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRTtBQUNoSTtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0I7SUFDQSxRQUFRLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUNsQztJQUNBLFFBQVEsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckQ7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLFlBQVksRUFBRTtJQUNyRCxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN4RDtJQUNBLFlBQVksTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNyRCxZQUFZLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekM7SUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUQsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELGdCQUFnQixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQzVDLG9CQUFvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRSxvQkFBb0IsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxjQUFjLENBQUM7SUFDOUIsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLGVBQWUsV0FBVyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO0FBQzlHO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsUUFBUSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRDtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNoQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUU7SUFDckQsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsWUFBWSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDeEQ7SUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDcEQ7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2RDtJQUNBLFlBQVksbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDMUIsS0FBSztBQUNMO0lBQ0E7O0lDdE9BO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVFBLE1BQU1GLFdBQVMsR0FBR29DLFdBQWMsQ0FBQztBQUNqQztJQUNBLGVBQWUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQzVELElBQUksSUFBSSxFQUFFLENBQUM7SUFDWCxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7SUFDdkIsUUFBUSxNQUFNLFNBQVMsR0FBRyxNQUFNQyxhQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDckg7SUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUNoRSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwSSxZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNsRSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQywrREFBK0QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNySSxZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUNwRSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0SSxZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ3BFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3RFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3hFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDbEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsK0RBQStELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDcEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDdEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNDLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUgsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNBLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNBLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakk7SUFDQSxJQUFJLEVBQUUsR0FBRyxNQUFNdEMsV0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLEdBQUcsTUFBTUEsV0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwSCxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLEdBQUcsTUFBTUEsV0FBUyxDQUFDLEtBQUss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LEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4RSxRQUFRLE1BQU1BLFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzlGLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMxRixRQUFRLE1BQU1BLFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUYsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUs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Q3RCLFFBQVEsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3JCO0lBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELFFBQVEsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQ7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pFLFFBQVEsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNuQyxZQUFZLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsWUFBWSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzFC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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsSUFBSSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBSSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLElBQUksT0FBTyxDQUFDO0lBQ2hCLElBQUksT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLElBQUksT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQztJQUNmLElBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQztJQUNmLElBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRDtJQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEM7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRyxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUs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LEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxTQUFTO0FBQ1Q7QUFDQTtJQUNBLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0M7SUFDQSxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0U7SUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDekIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMzQyxZQUFZLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLFlBQVksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFB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SUFBSSxLQUFLLENBQUM7SUFDZCxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pGLElBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRixJQUFJLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVB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LENBQUM7SUFDNUQsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDMUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0QsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNqRCxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRixJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJ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QUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFO0lBQzlELFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEU7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLFlBQVksTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0U7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRSxZQUFZLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxD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QUMsQ0FBQztBQUM5RDtJQUNBO0lBQ0EsSUFBSSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0lBQ0E7SUFDQSxJQUFJLE1BQU1BLFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7SUFDQTtJQUNBLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RDtJQUNBO0lBQ0EsSUFBSSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0lBQ0EsSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLElBQUksTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xILElBQUksTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xIO0lBQ0EsSUFBSSxNQUFNVSxjQUF3QixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQ7SUFDQSxJQUFJLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFB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LEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ3JDLElBQUksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUI7SUFDQTtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsSUFBSSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEI7SUFDQTtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsSUFBSSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsSUFBSSxNQUFNLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hJO0lBQ0E7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLElBQUksTUFBTSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElB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QUFTLENBQUMsQ0FBQztBQUMzRTtJQUNBLElBQUksSUFBSSxJQUFJLEdBQUc7SUFDZixRQUFRLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtJQUMvQixRQUFRLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtJQUN6QixRQUFRLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztBQUM3QjtJQUNBLFFBQVEsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDdEQ7SUFDQSxRQUFRLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3BELFFBQVEsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdEQsUUFBUSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN0RDtJQUNBLFFBQVEsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNyRCxLQUFLLENBQUM7QUFDTjtJQUNBO0lBQ0E7SUFDQSxJQUFJLE1BQU1HLHNCQUFtQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVDLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFD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LENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlDLElBQUksSUFB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RyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFlBQVksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxZQUFZLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxTQUFTO0FBQ1Q7SUFDQSxRQUFRLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDakQsWUFBWSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFlBQVksTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQTtJQUNBLFlBQVksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixZQUFZLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsWUFBWSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFlBQVksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsU0FBUztBQUNUO0lBQ0EsUUFBUSxTQUFTLHdCQUF3QixDQUFDLEVBQUUsRUFBRTtJQUM5QyxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDNUIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsWUFBWSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNyQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JGLEtBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtXQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztXQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQjtJQUNBLE9BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDMUM7SUFDQSxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO1dBQ00sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ25CO0lBQ0wsSUFBRyxDQUFDO0FBQ0o7T0FDRSxJQUFJLFNBQVMsRUFBRTtTQUNiLE1BQUEsQ0FBQSxPQUFBLEdBQWlCLE9BQU8sQ0FBQztJQUM3QixJQUFHLE1BQU07SUFDVCxLQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtJQUM3QyxPQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDaEQ7UUFNRjtJQUNILEVBQUMsR0FBRyxDQUFBOzs7OztJQy9vQko7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBUUEsTUFBTSxtQkFBQ3RILGtCQUFnQixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWpDLE1BQU0sYUFBRXVILFdBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUM3QjtJQUNlLGVBQWUsWUFBWSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFO0lBQ2xGLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU12RCxXQUF3QixDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBZSxDQUFDLENBQUM7QUFDMUg7SUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU1JLFVBQW9CLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEdBQUcsTUFBTUosV0FBd0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQWUsQ0FBQyxDQUFDO0FBQ3ZIO0lBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNSyxZQUFvQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUU7SUFDbEMsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDbEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNyQyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUM1RixLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7SUFDdEQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDN0IsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxXQUFXLEdBQUcsTUFBTUMsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGO0lBQ0E7SUFDQSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRTtJQUNBLElBQUksTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0FBQy9CO0lBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUMvQyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQjtJQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUN4RCxJQUFJLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNGO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5RztJQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTUEsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFFO0FBQ0E7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQjtJQUNBLElBQUksTUFBTSxNQUFNLEVBQUUsQ0FBQztJQUNuQixJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7SUFDbkIsSUFBSSxNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ25CLElBQUksTUFBTSxNQUFNLEVBQUUsQ0FBQztJQUNuQixJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFDbkI7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUM3QjtJQUNBLElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QjtJQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0lBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN6QyxRQUFRLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlELFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckM7SUFDQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENB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RDtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTUEsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTUEsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTUEsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMvQyxZQUFZLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsWUFBWSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxpQkFB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QUFFLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4QztJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEM7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDO0lBQ0EsWUFBWSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUgsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEksWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0EsWUFBWSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxNQUFNLENBQUMsR0FBRztJQUN0QixnQkFBZ0IsRUFBRSxDQUFDLEdBQUc7SUFDdEIsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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LEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxTQUFTLENBQUM7QUFDVjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RDtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN2QixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoRCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakc7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsWUFBWSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3SSxZQUFZLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELFlBQVksTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsWUFBWSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxZQUFZLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELFlBQVksTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsWUFBWSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RCxZQUFZLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRyxZQUFZLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRyxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsWUFBWSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLFlBQVksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Y7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDN0IsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMvQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHO0lBQ3RDLG9CQUFvQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pJLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM3QyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25CLGFBQWE7QUFDYjtJQUNBLFlBQVksSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsWUFBWSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsWUFBWSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsWUFBWSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsWUFBWSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEI7SUFDQSxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUN6QixZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0lBQ0EsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QztJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEQ7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUQ7SUFDQSxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRTtJQUNBLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0lBQ0EsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFD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QVUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRDtJQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckQ7SUFDQTtJQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNqRSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRjtJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQztJQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckQ7SUFDQTtJQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsRSxRQUFRLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFH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QUM7SUFDcEMsWUFBWSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxZQUFZLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFlBQVksTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEM7SUFDQSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQztJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0M7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoRDtJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQ7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLFlBQVksSUFBSSxDQUFDLEVBQUU7SUFDbkIsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsYUFBYTtBQUNiO0lBQ0EsWUFBWSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGVBQWUsTUFBTSxHQUFHO0lBQzVCLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRjtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRjtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkg7SUFDQSxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxRQUFRLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxRQUFRLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0lBQ0EsUUFBUSxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRDtJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQixRQUFRLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQy9CLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQztJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQixRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDL0IsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNELFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQztJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQixRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQztJQUNBLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pFLFFBQVEsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUc7SUFDOUIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRSxTQUFTLENBQUM7QUFDVjtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDMUIsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQztJQUNBLFFBQVEsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkQ7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsRCxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7SUFDbkMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLGFBQWE7SUFDYixZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLE1BQU0sR0FBRztJQUM1QixRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkU7SUFDQSxRQUFRLElBQUksT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0Q7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN0RCxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDNUI7SUFDQSxZQUFZLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMvRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtJQUN6QyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENB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LEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELGFBQWE7QUFDYjtJQUNBO0lBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO0lBQ3ZDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELGFBQWE7QUFDYjtJQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFR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LENBQUMsQ0FBQyxDQUFDO0lBQ3RGLFFBQVEsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ25DLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25DLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFNBQVM7SUFDVCxRQUFRLE9BQU8sR0FBRyxDQUFDO0lBQ25CLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENB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LENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsS0FBSztJQUNMLElBQUksTUFBTSxDQUFDLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRSxJQUFJLElBQUksTUFBTSxFQUFFO0lBQ2hCLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFNBQVM7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QUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFP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RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9FLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0MsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxLQUFLO0lBQ0wsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckY7SUFDQSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1QztJQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzdDO0lBQ0EsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM3QztJQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxJQUFJLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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QUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMvQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztJQUNMLElBQUksT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0FBQ0Q7SUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3RELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUI7SUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzFCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekI7SUFDQSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7SUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QztJQUNBLElBQUksT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0FBQ0Q7SUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3RELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEM7SUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7SUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7SUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7SUFDQSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7SUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QztJQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtJQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QjtJQUNBLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQztBQUNBO0lBQ0EsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QztJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0lBQ0EsSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDRDtJQUNBLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDckQsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN2QjtJQUNBLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENB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S0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsRSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRDtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTO0lBQ3JDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFF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aUJBQWlCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzhDLE9BQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRDtJQUNBLElBQUksTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMxQztJQUNBLElBQUksT0FBTyxDQUFDLENBQUM7SUFDYjs7SUN2RUE7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBOzs7Ozs7Ozs7OztJQ2pCQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDTyxTQUFTLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDekQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNEO0lBQ08sU0FBUywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQzdGLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0FBQ0Q7SUFDTyxTQUFTLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3ZHLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RDs7SUNsQ0E7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQSxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUN0QztJQUNPLE1BQU0sdUJBQXVCLENBQUM7SUFDckMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLE1BQU0sRUFBRTtJQUM3RyxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDL0QsUUFBUSxJQUFJLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7SUFDM0UsS0FBSztBQUNMO0lBQ0EsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsUUFBUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsUUFBUSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0M7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RDtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksS0FBSywyQkFBMkIsTUFBTSxJQUFJLEtBQUssMkJBQTJCLENBQUMsRUFBRTtJQUM5RixZQUFZLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRSxTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssMkJBQTJCLEVBQUU7SUFDekQsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxZQUFZLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssMkJBQTJCLEVBQUU7SUFDekQsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxZQUFZLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxTQUFTLE1BQU07SUFDZixZQUFZLE9BQU8sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JGLFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRTtJQUNyQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFFBQVEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVDLFlBQVksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ3JDLGdCQUFnQixPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxhQUFhLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ25DLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELGFBQWEsTUFBTTtJQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7SUFDcEIsYUFBYTtJQUNiLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLDJCQUEyQixDQUFDO0lBQ3RELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sMkJBQTJCLENBQUM7SUFDbkUsUUFBUSxPQUFPLDJCQUEyQixDQUFDO0lBQzNDLEtBQUs7QUFDTDtJQUNBLElBQUksMEJBQTBCLENBQUMsTUFBTSxFQUFFO0lBQ3ZDLFFBQVEsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25ELFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDO0lBQ3RCLEtBQUs7QUFDTDtJQUNBLElBQUksc0JBQXNCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDaEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7SUFDL0IsWUFBWSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRTtJQUM5QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7SUFDL0IsWUFBWSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRTtJQUM5QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUN0RSxRQUFRLE1BQU0sR0FBRyxHQUFHO0lBQ3BCLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSTtJQUMzQixZQUFZLE9BQU8sRUFBRSxFQUFFO0lBQ3ZCLFlBQVksS0FBSyxFQUFFLEVBQUU7SUFDckIsU0FBUyxDQUFDO0lBQ1YsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdEI7SUFDQSxRQUFRLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0lBQ3JDLFlBQVksSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0lBQy9CLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0QsYUFBYSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUMvQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7SUFDakMsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsWUFBWSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEM7SUFDQSxZQUFZLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUI7SUFDNUQsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNoQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRztJQUNBLFlBQVksY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxZQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzVDLFlBQVksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO0lBQ3hDLFlBQVksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSztBQUNMO0lBQ0EsSUFBSSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO0lBQ3BELFFBQVEsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RjtJQUNBLFFBQVEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QjtJQUN4RCxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsT0FBTyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLG1DQUFtQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNqRSxRQUFRLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkYsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25GO0lBQ0EsUUFBUSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNkJBQTZCO0lBQzlELFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxPQUFPLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzlDLEtBQUs7SUFDTDs7SUM3TUE7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0FBR0E7SUFDTyxNQUFNLFVBQVUsQ0FBQztJQUN4QixJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUM3QyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBQ2pDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUM3QixLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ3hELFFBQVEsSUFBSSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RDtJQUNBLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUN2RCxRQUFRLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDNUIsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFO0lBQ3pDLFlBQVksSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkYsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdFO0lBQ0EsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNyRCxRQUFRLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDMUI7SUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRTtJQUNuQyxZQUFZLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QztJQUNBLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtJQUN4QixRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyQyxRQUFRLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUN6RDtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0MsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEYsU0FBUztBQUNUO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsRUFBRTtJQUN2QyxRQUFRLGVBQWUsR0FBRyxlQUFlLElBQUksRUFBRSxDQUFDO0FBQ2hEO0lBQ0EsUUFBUSxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUU7SUFDdEYsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2hGLFlBQVksSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0lBQ0EsUUFBUSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3pELFlBQVksbUJBQW1CLENBQUMsR0FBRztJQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0lBQzNCLG9CQUFvQixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckgsb0JBQW9CLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsaUJBQWlCO0lBQ2pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hELGFBQWEsQ0FBQztJQUNkLFlBQVksbUJBQW1CLENBQUMsR0FBRztJQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO0lBQzNCLG9CQUFvQixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNuRixvQkFBb0IsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN0QyxpQkFBaUI7SUFDakIsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsYUFBYSxDQUFDO0lBQ2QsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztJQUN4QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7SUFDbkIsUUFBUSxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEM7SUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDMUU7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDMUIsUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDekMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDM0QsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsS0FBSztBQUNMO0lBQ0EsSUFBSSxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7SUFDL0QsUUFBUSxlQUFlLEdBQUcsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQzdDLFlBQVksSUFBSSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0YsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQjtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsUUFBUSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQzFDLFlBQVksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFO0lBQ2hFLFlBQVksSUFBSSxTQUFTLENBQUMsQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hFLFlBQVksSUFBSSxVQUFVLENBQUMsQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUU7SUFDQSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDekQsWUFBWSxFQUFFLENBQUMsR0FBRztJQUNsQixnQkFBZ0IsRUFBRSxDQUFDLEdBQUc7SUFDdEIsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3BGLG9CQUFvQixlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLGlCQUFpQjtJQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3hDLGFBQWEsQ0FBQztJQUNkLFlBQVksRUFBRSxDQUFDLEdBQUc7SUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHO0lBQ3RCLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hELG9CQUFvQixlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLGlCQUFpQjtJQUNqQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLGFBQWEsQ0FBQztJQUNkLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sR0FBRztJQUNiLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdkQsUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEUsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDakYsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssTUFBTSxFQUFFO0lBQzFCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0lBQzdCLGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQy9ELGFBQWE7SUFDYixTQUFTO0lBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztJQUN0QixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sR0FBRztJQUNiLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEQsWUFBWSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDeEMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDckYsZ0JBQWdCLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLEtBQUs7QUFDTDtJQUNBLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtJQUNwQixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwRCxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFO0lBQ3hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QjtJQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdEQsUUFBUSxJQUFJLGFBQWEsR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztBQUM1RDtJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0lBQ0EsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUN2QjtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMzQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzdCO0lBQ0EsWUFBWSxJQUFJLE1BQU0sR0FBRyxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDO0lBQzFGLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM3QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEc7SUFDQSxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRCxhQUFhO0lBQ2IsU0FBUztBQUNUO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzNDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUU7SUFDbkMsUUFBUSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDMUI7SUFDQSxRQUFRLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUNqRCxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDekIsU0FBUztBQUNUO0lBQ0EsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekMsUUFBUSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDbkUsWUFBWSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEM7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFB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QUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO0lBQ3JCLFFBQVEsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxLQUFLO0FBQ0w7SUFDQTtJQUNBLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRTtJQUN2QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEUsUUFBUSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkcsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEU7SUFDQTtJQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkU7SUFDQTtJQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEM7SUFDQTtJQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QjtJQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDN0IsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzNCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsRSxRQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRTtJQUNBO0lBQ0EsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RTtJQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCO0lBQ0E7SUFDQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEI7SUFDQTtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQzdCLEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO0lBQ3RCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QyxRQUFRLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QztJQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RTtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUU7SUFDM0MsWUFBWSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekY7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3JELFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0MsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pILGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTtJQUN4QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0I7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM5QjtJQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFO0lBQzVDLFlBQVksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFO0lBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEI7SUFDQTtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwQyxZQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBR3pCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMzQyxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUU7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QTtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEYsUUFBUSxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ3BELFlBQVksSUFBSSxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Y7SUFDQTtJQUNBLFFBQVEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzFDLFlBQVksTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEM7SUFDQSxZQUFZLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsWUFBWSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsU0FBUztBQUNUO0lBQ0EsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRTtJQUM3QyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsRUFB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QU0sRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENB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QUUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkc7SUFDQSxRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxRQUFRLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxPQUFPLENBQUMsTUFBTSxFQUFFO0lBQ25DO0lBQ0E7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVDO0lBQ0E7SUFDQSxRQUFRLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRTtJQUNoRSxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNwRSxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE1BQU0saUJBQWlCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDNUQsUUFBUSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7SUFDN0MsUUFBUSxNQUFNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQ2hFO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9CLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RSxRQUFRLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0M7SUFDQSxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0IsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlFLFFBQVEsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQztJQUNBO0lBQ0EsUUFBUSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hEO0lBQ0EsUUFBUSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQ7SUFDQSxRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQztJQUNqQixRQUFRLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDbEUsUUFBUSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakM7SUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUUsUUFBUSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtJQUN6QyxRQUFRLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxRQUFRLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsV0FBVyxHQUFHO0lBQzNCLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN4QixRQUFRLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCO0lBQ0EsUUFBUSxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUMxQyxZQUFZLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDeEMsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNCLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNqRCxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdEQsb0JBQW9CLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztJQUNsRSxpQkFBaUI7SUFDakIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsYUFBYTtJQUNiLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxTQUFTLEdBQUc7SUFDekIsUUFBUSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDO0lBQ0E7SUFDQSxRQUFRLElBQUksVUFBVSxHQUFHLDZFQUE2RSxDQUFDO0lBQ3ZHLFFBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0lBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxTQUFTLEdBQUc7SUFDekIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFNBQVMsR0FBRztJQUN6QixRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMxQztJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO0FBQzdHO0lBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxLQUFLO0lBQ0w7O0lDN2lCQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFJQSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQzdCO0lBQ0EsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQjtJQUNPLE1BQU0sbUJBQW1CLENBQUM7SUFDakMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFO0lBQ3ZCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzNCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzNCO0lBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLEdBQUc7SUFDWixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLEtBQUs7QUFDTDtJQUNBLElBQUksZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUU7SUFDM0MsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUN2RSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7SUFDdEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLEdBQUc7SUFDbkIsUUFBUSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtJQUNuQyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUNyRixTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QjtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFVBQVUsS0FBSyxPQUFPLENBQUMsSUFBSSxHQUFHLFlBQVksRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDaEc7SUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdGLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDbkQsWUFBWSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtJQUNsRCxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0UsZ0JBQWdCLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLGFBQWEsTUFBTTtJQUNuQixnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLGdCQUFnQixNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckMsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsS0FBSztJQUNMOztJQ3hFQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNPLE1BQU0sS0FBSyxDQUFDO0lBQ25CLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzdCO0lBQ0EsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUIsS0FBSztBQUNMO0lBQ0EsSUFBSSxVQUFVLEdBQUc7SUFDakIsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUM5QixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzlCLEtBQUs7QUFDTDtJQUNBLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUU7SUFDbkMsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0lBQ3JDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQzNDLEtBQUs7QUFDTDtJQUNBLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRTtJQUN2QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO0lBQ3hDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLFNBQVM7SUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFO0lBQ25DLFFBQVEsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtJQUNyQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUNqRixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUMzQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUU7SUFDdkIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtJQUN4QyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNqRixTQUFTO0lBQ1QsUUFBUSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsS0FBSztBQUNMO0lBQ0EsSUFBSSxhQUFhLEdBQUc7SUFDcEIsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJO0lBQ3JELFlBQVksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7SUFDQSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUk7SUFDckQsWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsU0FBUyxDQUFDLENBQUM7QUFDWDtJQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFO0lBQ2pDLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzFCO0lBQ0EsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJO0lBQzVELFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNGLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7SUFDQSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUk7SUFDNUQsWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsU0FBUyxDQUFDLENBQUM7SUFDWCxLQUFLO0lBQ0w7O0lDckZBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQTZCQTtJQUNBLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNuQztBQUNBO0lBQ2UsZUFBZSxXQUFXLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUU7SUFDakYsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDckQ7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTTtJQUNWLFFBQVEsRUFBRSxFQUFFLE1BQU07SUFDbEIsUUFBUSxRQUFRLEVBQUUsWUFBWTtJQUM5QixLQUFLLEdBQUcsTUFBTU4sV0FBd0IsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLENBQW1CLENBQUMsQ0FBQztJQUNyRixJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU1JLFVBQW9CLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2xFO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuRCxJQUFJLE1BQU07SUFDVixRQUFRLEVBQUUsRUFBRSxNQUFNO0lBQ2xCLFFBQVEsUUFBUSxFQUFFLFlBQVk7SUFDOUIsS0FBSyxHQUFHLE1BQU1KLFdBQXdCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFtQixDQUFDLENBQUM7SUFDbEYsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNSyxZQUFvQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNsRTtJQUNBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixFQUFFO0lBQ2hELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDcEMsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDNUYsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0lBQ3hELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekgsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM1QixJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEMsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMxQztJQUNBLElBQUksSUFBSSxNQUFNLEVBQUU7SUFDaEIsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNwRCxLQUFLO0FBQ0w7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNELElBQUksTUFBTSxXQUFXLEdBQUcsTUFBTUMsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekI7SUFDQTtJQUNBO0lBQ0EsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsSUFBSSxNQUFNLG1CQUFtQixHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckU7SUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN6QixJQUFJLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN6QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDdkI7SUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN4QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQjtJQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6RixJQUFJLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztBQUMvQjtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQzFKLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzlELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0UsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9FO0lBQ0EsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RyxJQUFJLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlHLElBQUksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUc7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUM3RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRjtJQUNBLElBQUksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUM1SCxJQUFJLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDNUgsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzVIO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN4RixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNEO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEg7SUFDQTtJQUNBLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QztJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFDbkI7SUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkM7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFDbkI7SUFDQSxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNqQyxJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkM7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFDbkI7SUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxV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LElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELGdCQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsZ0JBQWdCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RDtJQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENB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SUFDQSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELGdCQUFnQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1SDtJQUNBO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0YsZ0JBQWdCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNoRDtJQUNBLGdCQUFnQixPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0lBQ0E7SUFDQSxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtB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QkFBZ0IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBLGdCQUFnQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0Q7SUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEU7QUFDQTtJQUNBO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsU0FBUztBQUNUO0lBQ0EsUUFBUSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM3QixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELFNBQVM7QUFDVDtJQUNBLFFBQVEsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDN0IsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDOUIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0lBQ0E7SUFDQSxRQUFRLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFNBQVM7QUFDVDtJQUNBO0lBQ0EsUUFBUSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxTQUFTO0FBQ1Q7SUFDQTtJQUNBLFFBQVEsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRTtJQUNBLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCO0lBQ0E7SUFDQSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdELFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRTtJQUNBO0lBQ0EsUUFBUSxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRjtJQUNBO0lBQ0EsUUFBUSxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRSxRQUFRLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0UsUUFBUSxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRSxRQUFRLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9FO0lBQ0E7SUFDQSxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFHLFFBQVEsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUcsUUFBUSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRyxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFHLFFBQVEsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUc7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxNQUFNLEdBQUc7SUFDNUIsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDL0Q7SUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JELFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFGO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMzRCxRQUFRLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRixRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RztJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdELFFBQVEsU0FBUyxFQUFFLENBQUM7SUFDcEIsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsUUFBUSxTQUFTLEVBQUUsQ0FBQztJQUNwQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM3RCxRQUFRLFNBQVMsRUFBRSxDQUFDO0FBQ3BCO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDNUQsUUFBUSxNQUFNLFFBQVEsRUFBRSxDQUFDO0FBQ3pCO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN2RSxRQUFRLElBQUksUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0UsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7SUFDQSxRQUFRLFNBQVMsU0FBUyxHQUFHO0lBQzdCO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxXQUFXLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQywrQkFBK0I7SUFDdkUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLG9CQUFvQixXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLG9CQUFvQixXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLG9CQUFvQixXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsSDtJQUNBO0lBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0lBQzdDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDeEUsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsU0FBUyxTQUFTLEdBQUc7SUFDN0I7SUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLCtCQUErQjtJQUN2RSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLG9CQUFvQixXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsSDtJQUNBO0lBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0lBQzdDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDeEUsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsU0FBUyxTQUFTLEdBQUc7SUFDN0I7SUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLCtCQUErQjtJQUN2RSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsb0JBQW9CLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEcsb0JBQW9CLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xIO0lBQ0E7SUFDQSxZQUFZLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDN0MsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN4RSxhQUFhO0lBQ2IsU0FBUztBQUNUO0lBQ0EsUUFBUSxlQUFlLFFBQVEsR0FBRztJQUNsQyxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUNsRTtJQUNBO0lBQ0EsWUFBWSxXQUFXLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckYsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFEO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQztJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDO0lBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO0lBQ25FLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdkUsYUFBYTtJQUNiLFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLGVBQWUsTUFBTSxHQUFHO0lBQzVCLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxRQUFRLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0Q7SUFDQSxRQUFRLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sUUFBUSxFQUFFLENBQUM7QUFDekI7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMvRCxRQUFRLE1BQU0sV0FBVyxFQUFFLENBQUM7QUFDNUI7SUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLFFBQVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkM7SUFDQSxRQUFRLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRyxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN4RSxRQUFRLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlEO0lBQ0E7SUFDQSxRQUFRLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtJQUN2QyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQywyQ0FBMkMsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ25ILFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtJQUMvRCxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM1RSxTQUFTO0FBQ1Q7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3ZFLFFBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtJQUNBLFFBQVEsZUFBZSxRQUFRLEdBQUc7SUFDbEMsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDbEU7SUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3hDLGdCQUFnQixLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxhQUFhO0FBQ2I7SUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN4QyxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsYUFBYTtBQUNiO0lBQ0EsWUFBWSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDeEMsZ0JBQWdCLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLGFBQWE7SUFDYixZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDeEMsZ0JBQWdCLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FB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RSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUYsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsU0FBUztBQUNUO0lBQ0EsUUFBUSxlQUFlLFdBQVcsR0FBRztJQUNyQyxZQUFZLFdBQVcsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLGtCQUFrQjtJQUM1RCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixTQUFTO0lBQ1QsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLDJCQUEyQixHQUFHO0lBQzNDO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ2hDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxTQUFTO0lBQ1QsUUFBUSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxTQUFTO0FBQ1Q7SUFDQTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9DO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN2QyxZQUFZLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxD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LENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtJQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCO0lBQ0E7SUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7SUFDQTtJQUNBLElBQUksVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0lBQ0EsSUFBSSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDbkMsSUFBSSxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLFFBQVEsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQzNCLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0M7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFO0lBQ2hCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxD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QUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsK0JBQStCO0lBQ3pELFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0UsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRixRQUFRLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QjtJQUNBO0lBQ0EsSUFBSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDaEUsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUM5RCxJQUFJLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztBQUNEO0lBQ0EsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDaEUsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcs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QUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0UsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlGLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0lBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEgsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEgsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEgsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRTtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNqRSxJQUFJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNqRSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEcsUUFBUSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUcsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQywrQkFBK0I7SUFDekQsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCO0lBQ0E7SUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtJQUN6QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNoRSxLQUFLO0FBQ0w7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzlELElBQUksT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0FBQ0Q7SUFDQSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO0lBQ3ZELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDNUI7SUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2hDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsS0FBSztJQUNMLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JGO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7QUFDRDtJQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUM1RCxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUM7SUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0Q7SUFDQSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUM1QyxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNEO0lBQ0EsZUFBZSxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDNUI7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQ3BDLElBQUksTUFBTSxFQUFFLEdBQUcsRUFB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QUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRjtJQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDOztJQzNFQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcmtqcy5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvc2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZnV0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZnNxcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9jaGFjaGEuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9yYW5kb20uanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mZnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mMWZpZWxkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2ludC5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF90aW1lc3NjYWxhci5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9iYXRjaGludmVyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfYmF0Y2hjb252ZXJ0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2JhdGNob3AuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYmlnaW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2YxbS5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mMS5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mMm0uanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfZjNtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX3RpbWVzc2NhbGFybmFmLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX211bHRpZXhwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2ZmdC5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9wb2wuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfcWFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2FwcGx5a2V5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2JuMTI4L2J1aWxkX2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2JsczEyMzgxL2J1aWxkX2JsczEyMzgxLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JpZ2J1ZmZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2VuZ2luZV9iYXRjaGNvbnZlcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy93YXNtX2ZpZWxkMS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL3dhc21fZmllbGQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9maWVsZDMuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy93YXNtX2N1cnZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdGhyZWFkbWFuX3RocmVhZC5qcyIsIi4uL25vZGVfbW9kdWxlcy93ZWItd29ya2VyL2Nqcy9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdGhyZWFkbWFuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX2FwcGx5a2V5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX3BhaXJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9lbmdpbmVfbXVsdGlleHAuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9lbmdpbmVfZmZ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dhc21idWlsZGVyL3NyYy91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtYnVpbGRlci9zcmMvY29kZWJ1aWxkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvd2FzbWJ1aWxkZXIvc3JjL2Z1bmN0aW9uYnVpbGRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXNtYnVpbGRlci9zcmMvbW9kdWxlYnVpbGRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvYmxzMTIzODEuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9jdXJ2ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L21haW4uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdGZpbGUvc3JjL29zZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvbWVtZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvYmlnbWVtZmlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0ZmlsZS9zcmMvZmFzdGZpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQGlkZW4zL2JpbmZpbGV1dGlscy9zcmMvYmluZmlsZXV0aWxzLmpzIiwiLi4vc3JjL2N1cnZlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9uYW5vYXNzZXJ0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2I0YS9saWIvYXNjaWkuanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi9oZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYjRhL2xpYi91dGY4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2I0YS9saWIvdXRmMTZsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9iNGEvYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ibGFrZTJiLXdhc20vYmxha2UyYi5qcyIsIi4uL25vZGVfbW9kdWxlcy9ibGFrZTJiLXdhc20vaW5kZXguanMiLCIuLi9zcmMvbWlzYy5qcyIsIi4uL3NyYy96a2V5X2NvbnN0YW50cy5qcyIsIi4uL3NyYy9mZmxvbmtfY29uc3RhbnRzLmpzIiwiLi4vc3JjL3prZXlfdXRpbHMuanMiLCIuLi9zcmMvd3Ruc191dGlscy5qcyIsIi4uL3NyYy9ncm90aDE2X3Byb3ZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL2pzL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL3NjYWxhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9jaXJjb21fcnVudGltZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvY2lyY29tX3J1bnRpbWUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZnNxcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvY2lyY29tX3J1bnRpbWUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvcmFuZG9tLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2ZmdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jaXJjb21fcnVudGltZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mMWZpZWxkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL3RocmVhZG1hbl90aHJlYWQuanMiLCIuLi9ub2RlX21vZHVsZXMvY2lyY29tX3J1bnRpbWUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdGhyZWFkbWFuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JsczEyMzgxLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NpcmNvbV9ydW50aW1lL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2N1cnZlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jaXJjb21fcnVudGltZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L21haW4uanMiLCIuLi9ub2RlX21vZHVsZXMvY2lyY29tX3J1bnRpbWUvanMvd2l0bmVzc19jYWxjdWxhdG9yLmpzIiwiLi4vc3JjL3d0bnNfY2FsY3VsYXRlLmpzIiwiLi4vc3JjL2dyb3RoMTZfZnVsbHByb3ZlLmpzIiwiLi4vc3JjL2dyb3RoMTZfdmVyaWZ5LmpzIiwiLi4vc3JjL2dyb3RoMTZfZXhwb3J0c29saWRpdHljYWxsZGF0YS5qcyIsIi4uL3NyYy9ncm90aDE2LmpzIiwiLi4vc3JjL2tleXBhaXIuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfdXRpbHMuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfbmV3LmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2V4cG9ydF9jaGFsbGVuZ2UuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfaW1wb3J0LmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X3ZlcmlmeS5qcyIsIi4uL3NyYy9tcGNfYXBwbHlrZXkuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfY2hhbGxlbmdlX2NvbnRyaWJ1dGUuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfYmVhY29uLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2NvbnRyaWJ1dGUuanMiLCIuLi9zcmMvcG93ZXJzb2Z0YXVfcHJlcGFyZXBoYXNlMi5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV90cnVuY2F0ZS5qcyIsIi4uL3NyYy9wb3dlcnNvZnRhdV9jb252ZXJ0LmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1X2V4cG9ydF9qc29uLmpzIiwiLi4vc3JjL3Bvd2Vyc29mdGF1LmpzIiwiLi4vc3JjL3IxY3NfcHJpbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvc2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2Z1dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mc3FydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9jaGFjaGEuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvcmFuZG9tLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2ZmdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9mMWZpZWxkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfaW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF90aW1lc3NjYWxhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfYmF0Y2hpbnZlcnNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9iYXRjaGNvbnZlcnRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2JhdGNob3AuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2JpZ2ludC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfZjFtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mMS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfZjJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9mM20uanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX3RpbWVzc2NhbGFybmFmLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9tdWx0aWV4cC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfY3VydmVfamFjb2JpYW5fYTAuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2ZmdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYnVpbGRfcG9sLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9idWlsZF9xYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvc3JjL2J1aWxkX2FwcGx5a2V5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy93YXNtY3VydmVzL3NyYy9ibjEyOC9idWlsZF9ibjEyOC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvd2FzbWN1cnZlcy9zcmMvYmxzMTIzODEvYnVpbGRfYmxzMTIzODEuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL3dhc21jdXJ2ZXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvYmlnYnVmZmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2VuZ2luZV9iYXRjaGNvbnZlcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9maWVsZDEuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9maWVsZDIuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9maWVsZDMuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvd2FzbV9jdXJ2ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy90aHJlYWRtYW5fdGhyZWFkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL3RocmVhZG1hbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9yMWNzZmlsZS9ub2RlX21vZHVsZXMvZmZqYXZhc2NyaXB0L3NyYy9lbmdpbmVfYXBwbHlrZXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX3BhaXJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lX211bHRpZXhwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2VuZ2luZV9mZnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcjFjc2ZpbGUvbm9kZV9tb2R1bGVzL2ZmamF2YXNjcmlwdC9zcmMvZW5naW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JuMTI4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2JsczEyMzgxLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL25vZGVfbW9kdWxlcy9mZmphdmFzY3JpcHQvc3JjL2N1cnZlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AaWRlbjMvYmlnYXJyYXkvc3JjL2JpZ2FycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3IxY3NmaWxlL3NyYy9yMWNzZmlsZS5qcyIsIi4uL3NyYy9yMWNzX2luZm8uanMiLCIuLi9zcmMvcjFjc19leHBvcnRfanNvbi5qcyIsIi4uL3NyYy9yMWNzLmpzIiwiLi4vc3JjL2xvYWRzeW1zLmpzIiwiLi4vc3JjL3d0bnNfZGVidWcuanMiLCIuLi9zcmMvd3Ruc19leHBvcnRfanNvbi5qcyIsIi4uL3NyYy93dG5zX2NoZWNrLmpzIiwiLi4vc3JjL3d0bnMuanMiLCIuLi9zcmMvYmlnYXJyYXkuanMiLCIuLi9zcmMvemtleV9uZXcuanMiLCIuLi9zcmMvemtleV9leHBvcnRfYmVsbG1hbi5qcyIsIi4uL3NyYy96a2V5X2ltcG9ydF9iZWxsbWFuLmpzIiwiLi4vc3JjL3prZXlfdmVyaWZ5X2Zyb21pbml0LmpzIiwiLi4vc3JjL3prZXlfdmVyaWZ5X2Zyb21yMWNzLmpzIiwiLi4vc3JjL3prZXlfY29udHJpYnV0ZS5qcyIsIi4uL3NyYy96a2V5X2JlYWNvbi5qcyIsIi4uL3NyYy96a2V5X2V4cG9ydF9qc29uLmpzIiwiLi4vc3JjL3prZXlfYmVsbG1hbl9jb250cmlidXRlLmpzIiwiLi4vc3JjL3prZXlfZXhwb3J0X3ZlcmlmaWNhdGlvbmtleS5qcyIsIi4uL3NyYy9mZmxvbmtfZXhwb3J0X3NvbGlkaXR5X3ZlcmlmaWVyLmpzIiwiLi4vc3JjL3prZXlfZXhwb3J0X3NvbGlkaXR5dmVyaWZpZXIuanMiLCIuLi9zcmMvemtleS5qcyIsIi4uL3NyYy9wbG9ua19zZXR1cC5qcyIsIi4uL3NyYy9wcm9vZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9qcy1zaGEzL3NyYy9zaGEzLmpzIiwiLi4vc3JjL0tlY2NhazI1NlRyYW5zY3JpcHQuanMiLCIuLi9zcmMvbXVsX3ouanMiLCIuLi9zcmMvcGxvbmtfY29uc3RhbnRzLmpzIiwiLi4vc3JjL3BvbHlub21pYWwvcG9seW5vbWlhbC5qcyIsIi4uL3NyYy9wb2x5bm9taWFsL2V2YWx1YXRpb25zLmpzIiwiLi4vc3JjL3Bsb25rX3Byb3ZlLmpzIiwiLi4vc3JjL3Bsb25rX2Z1bGxwcm92ZS5qcyIsIi4uL3NyYy9wbG9ua192ZXJpZnkuanMiLCIuLi9zcmMvcGxvbmtfZXhwb3J0c29saWRpdHljYWxsZGF0YS5qcyIsIi4uL3NyYy9wbG9uay5qcyIsIi4uL3NyYy9wbG9ua19lcXVhdGlvbi5qcyIsIi4uL3NyYy9yMWNzX2NvbnN0cmFpbnRfcHJvY2Vzc29yLmpzIiwiLi4vc3JjL3BvbHlub21pYWwvY3BvbHlub21pYWwuanMiLCIuLi9zcmMvZmZsb25rX3NldHVwLmpzIiwiLi4vc3JjL2ZmbG9ua19wcm92ZS5qcyIsIi4uL3NyYy9mZmxvbmtfZnVsbF9wcm92ZS5qcyIsIi4uL3NyYy9mZmxvbmtfdmVyaWZ5LmpzIiwiLi4vc3JjL2ZmbG9ua19leHBvcnRfY2FsbGRhdGEuanMiLCIuLi9zcmMvZmZsb25rLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyogZ2xvYmFsIEJpZ0ludCAqL1xuY29uc3QgaGV4TGVuID0gWyAwLCAxLCAyLCAyLCAzLCAzLCAzLCAzLCA0ICw0ICw0ICw0ICw0ICw0ICw0ICw0XTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJpbmcocywgcmFkaXgpIHtcbiAgICBpZiAoKCFyYWRpeCl8fChyYWRpeD09MTApKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQocyk7XG4gICAgfSBlbHNlIGlmIChyYWRpeD09MTYpIHtcbiAgICAgICAgaWYgKHMuc2xpY2UoMCwyKSA9PSBcIjB4XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBCaWdJbnQocyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQmlnSW50KFwiMHhcIitzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGUgPSBmcm9tU3RyaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUFycmF5KGEsIHJhZGl4KSB7XG4gICAgbGV0IGFjYyA9QmlnSW50KDApO1xuICAgIHJhZGl4ID0gQmlnSW50KHJhZGl4KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgPSBhY2MqcmFkaXggKyBCaWdJbnQoYVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRMZW5ndGgoYSkge1xuICAgIGNvbnN0IGFTID1hLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gKGFTLmxlbmd0aC0xKSo0ICtoZXhMZW5bcGFyc2VJbnQoYVNbMF0sIDE2KV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lZ2F0aXZlKGEpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDwgQmlnSW50KDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNaZXJvKGEpIHtcbiAgICByZXR1cm4gIWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlmdExlZnQoYSwgbikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPDwgQmlnSW50KG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hpZnRSaWdodChhLCBuKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PiBCaWdJbnQobik7XG59XG5cbmV4cG9ydCBjb25zdCBzaGwgPSBzaGlmdExlZnQ7XG5leHBvcnQgY29uc3Qgc2hyID0gc2hpZnRSaWdodDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2RkKGEpIHtcbiAgICByZXR1cm4gKEJpZ0ludChhKSAmIEJpZ0ludCgxKSkgPT0gQmlnSW50KDEpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBuYWYobikge1xuICAgIGxldCBFID0gQmlnSW50KG4pO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIHdoaWxlIChFKSB7XG4gICAgICAgIGlmIChFICYgQmlnSW50KDEpKSB7XG4gICAgICAgICAgICBjb25zdCB6ID0gMiAtIE51bWJlcihFICUgQmlnSW50KDQpKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKCB6ICk7XG4gICAgICAgICAgICBFID0gRSAtIEJpZ0ludCh6KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgIH1cbiAgICAgICAgRSA9IEUgPj4gQmlnSW50KDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRzKG4pIHtcbiAgICBsZXQgRSA9IEJpZ0ludChuKTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICB3aGlsZSAoRSkge1xuICAgICAgICBpZiAoRSAmIEJpZ0ludCgxKSkge1xuICAgICAgICAgICAgcmVzLnB1c2goMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICB9XG4gICAgICAgIEUgPSBFID4+IEJpZ0ludCgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHMpIHtcbiAgICBpZiAocz5CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgdG9vIGJpZ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkocywgcmFkaXgpIHtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBsZXQgcmVtID0gQmlnSW50KHMpO1xuICAgIHJhZGl4ID0gQmlnSW50KHJhZGl4KTtcbiAgICB3aGlsZSAocmVtKSB7XG4gICAgICAgIHJlcy51bnNoaWZ0KCBOdW1iZXIocmVtICUgcmFkaXgpKTtcbiAgICAgICAgcmVtID0gcmVtIC8gcmFkaXg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSArIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAtIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZyhhKSB7XG4gICAgcmV0dXJuIC1CaWdJbnQoYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmUoYSkge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiBCaWdJbnQoYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3coYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiogQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICoqIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFicyhhKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PSAwID8gQmlnSW50KGEpIDogLUJpZ0ludChhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAvIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAlIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID09IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAhPSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsdChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA8IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd0KGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID4gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDw9IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYW5kKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICYgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9yKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIHwgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnhvcihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSBeIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmQoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgJiYgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9yKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIHx8IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxub3QoYSkge1xuICAgIHJldHVybiAhQmlnSW50KGEpO1xufVxuXG4vLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggTGl0dGxlIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHRvUnByTEUoYnVmZiwgbywgZSwgbjgpIHtcbiAgICBjb25zdCBzID0gXCIwMDAwMDAwXCIgKyBlLnRvU3RyaW5nKDE2KTtcbiAgICBjb25zdCB2ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQgKyBvLCBuOC80KTtcbiAgICBjb25zdCBsID0gKCgocy5sZW5ndGgtNykqNCAtIDEpID4+IDUpKzE7ICAgIC8vIE51bWJlciBvZiAzMmJpdCB3b3JkcztcbiAgICBmb3IgKGxldCBpPTA7IGk8bDsgaSsrKSB2W2ldID0gcGFyc2VJbnQocy5zdWJzdHJpbmcocy5sZW5ndGgtOCppLTgsIHMubGVuZ3RoLTgqaSksIDE2KTtcbiAgICBmb3IgKGxldCBpPWw7IGk8di5sZW5ndGg7IGkrKykgdltpXSA9IDA7XG4gICAgZm9yIChsZXQgaT12Lmxlbmd0aCo0OyBpPG44OyBpKyspIGJ1ZmZbaV0gPSB0b051bWJlcihiYW5kKHNoaWZ0UmlnaHQoZSwgaSo4KSwgMHhGRikpO1xufVxuXG4vLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHRvUnByQkUoYnVmZiwgbywgZSwgbjgpIHtcbiAgICBjb25zdCBzID0gXCIwMDAwMDAwXCIgKyBlLnRvU3RyaW5nKDE2KTtcbiAgICBjb25zdCB2ID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQgKyBvLCBuOCk7XG4gICAgY29uc3QgbCA9ICgoKHMubGVuZ3RoLTcpKjQgLSAxKSA+PiA1KSsxOyAgICAvLyBOdW1iZXIgb2YgMzJiaXQgd29yZHM7XG4gICAgZm9yIChsZXQgaT0wOyBpPGw7IGkrKykgdi5zZXRVaW50MzIobjgtaSo0IC00LCBwYXJzZUludChzLnN1YnN0cmluZyhzLmxlbmd0aC04KmktOCwgcy5sZW5ndGgtOCppKSwgMTYpLCBmYWxzZSk7XG4gICAgZm9yIChsZXQgaT0wOyBpPG44LzQtbDsgaSsrKSB2W2ldID0gMDtcbn1cblxuLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJwckxFKGJ1ZmYsIG8sIG44KSB7XG4gICAgbjggPSBuOCB8fCBidWZmLmJ5dGVMZW5ndGg7XG4gICAgbyA9IG8gfHwgMDtcbiAgICBjb25zdCB2ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQgKyBvLCBuOC80KTtcbiAgICBjb25zdCBhID0gbmV3IEFycmF5KG44LzQpO1xuICAgIHYuZm9yRWFjaCggKGNoLGkpID0+IGFbYS5sZW5ndGgtaS0xXSA9IGNoLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LFwiMFwiKSApO1xuICAgIHJldHVybiBmcm9tU3RyaW5nKGEuam9pbihcIlwiKSwgMTYpO1xufVxuXG4vLyBQYXNlcyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gUmVwcmVzZW50YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUnByQkUoYnVmZiwgbywgbjgpIHtcbiAgICBuOCA9IG44IHx8IGJ1ZmYuYnl0ZUxlbmd0aDtcbiAgICBvID0gbyB8fCAwO1xuICAgIGNvbnN0IHYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCArIG8sIG44KTtcbiAgICBjb25zdCBhID0gbmV3IEFycmF5KG44LzQpO1xuICAgIGZvciAobGV0IGk9MDsgaTxuOC80OyBpKyspIHtcbiAgICAgICAgYVtpXSA9IHYuZ2V0VWludDMyKGkqNCwgZmFsc2UpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tU3RyaW5nKGEuam9pbihcIlwiKSwgMTYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoYSwgcmFkaXgpIHtcbiAgICByZXR1cm4gYS50b1N0cmluZyhyYWRpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xFQnVmZihhKSB7XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KE1hdGguZmxvb3IoKGJpdExlbmd0aChhKSAtIDEpIC8gOCkgKzEpO1xuICAgIHRvUnByTEUoYnVmZiwgMCwgYSwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGNvbnN0IHplcm8gPSBlKDApO1xuZXhwb3J0IGNvbnN0IG9uZSA9IGUoMSk7XG5cblxuXG5cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWxTY2FsYXIoRiwgYmFzZSwgZSkge1xuICAgIGxldCByZXM7XG5cbiAgICBpZiAoU2NhbGFyLmlzWmVybyhlKSkgcmV0dXJuIEYuemVybztcblxuICAgIGNvbnN0IG4gPSBTY2FsYXIubmFmKGUpO1xuXG4gICAgaWYgKG5bbi5sZW5ndGgtMV0gPT0gMSkge1xuICAgICAgICByZXMgPSBiYXNlO1xuICAgIH0gZWxzZSBpZiAobltuLmxlbmd0aC0xXSA9PSAtMSkge1xuICAgICAgICByZXMgPSBGLm5lZyhiYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZsYXVkIE5BRlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpPW4ubGVuZ3RoLTI7IGk+PTA7IGktLSkge1xuXG4gICAgICAgIHJlcyA9IEYuZG91YmxlKHJlcyk7XG5cbiAgICAgICAgaWYgKG5baV0gPT0gMSkge1xuICAgICAgICAgICAgcmVzID0gRi5hZGQocmVzLCBiYXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChuW2ldID09IC0xKSB7XG4gICAgICAgICAgICByZXMgPSBGLnN1YihyZXMsIGJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4vKlxuZXhwb3J0cy5tdWxTY2FsYXIgPSAoRiwgYmFzZSwgZSkgPT57XG4gICAgbGV0IHJlcyA9IEYuemVybztcbiAgICBsZXQgcmVtID0gYmlnSW50KGUpO1xuICAgIGxldCBleHAgPSBiYXNlO1xuXG4gICAgd2hpbGUgKCEgcmVtLmVxKGJpZ0ludC56ZXJvKSkge1xuICAgICAgICBpZiAocmVtLmFuZChiaWdJbnQub25lKS5lcShiaWdJbnQub25lKSkge1xuICAgICAgICAgICAgcmVzID0gRi5hZGQocmVzLCBleHApO1xuICAgICAgICB9XG4gICAgICAgIGV4cCA9IEYuZG91YmxlKGV4cCk7XG4gICAgICAgIHJlbSA9IHJlbS5zaGlmdFJpZ2h0KDEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59O1xuKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZXhwKEYsIGJhc2UsIGUpIHtcblxuICAgIGlmIChTY2FsYXIuaXNaZXJvKGUpKSByZXR1cm4gRi5vbmU7XG5cbiAgICBjb25zdCBuID0gU2NhbGFyLmJpdHMoZSk7XG5cbiAgICBpZiAobi5sZW5ndGg9PTApIHJldHVybiBGLm9uZTtcblxuICAgIGxldCByZXMgPSBiYXNlO1xuXG4gICAgZm9yIChsZXQgaT1uLmxlbmd0aC0yOyBpPj0wOyBpLS0pIHtcblxuICAgICAgICByZXMgPSBGLnNxdWFyZShyZXMpO1xuXG4gICAgICAgIGlmIChuW2ldKSB7XG4gICAgICAgICAgICByZXMgPSBGLm11bChyZXMsIGJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG4vLyBDaGVjayBoZXJlOiBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDEyLzY4NS5wZGZcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRTcXJ0IChGKSB7XG4gICAgaWYgKChGLm0gJSAyKSA9PSAxKSB7XG4gICAgICAgIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDQpLCAxICkpIHtcbiAgICAgICAgICAgIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDgpLCAxICkpIHtcbiAgICAgICAgICAgICAgICBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCAxNiksIDEgKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhbGc3X211bGxlcihGKTtcbiAgICAgICAgICAgICAgICAgICAgYWxnNV90b25lbGxpU2hhbmtzKEYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCAxNiksIDkgKSkge1xuICAgICAgICAgICAgICAgICAgICBhbGc0X2tvbmcoRik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2l0aG90IHNxcnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDgpLCA1ICkpIHtcbiAgICAgICAgICAgICAgICBhbGczX2F0a2luKEYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3aXRob3Qgc3FydFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDQpLCAzICkpIHtcbiAgICAgICAgICAgIGFsZzJfc2hhbmtzKEYpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG0ybW9kNCA9IFNjYWxhci5tb2QoU2NhbGFyLnBvdyhGLnAsIEYubS8yKSwgNCk7XG4gICAgICAgIGlmIChwbTJtb2Q0ID09IDEpIHtcbiAgICAgICAgICAgIGFsZzEwX2FkaihGKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbTJtb2Q0ID09IDMpIHtcbiAgICAgICAgICAgIGFsZzlfYWRqKEYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxnOF9jb21wbGV4KEYpO1xuICAgICAgICB9XG5cbiAgICB9XG59XG5cblxuZnVuY3Rpb24gYWxnNV90b25lbGxpU2hhbmtzKEYpIHtcbiAgICBGLnNxcnRfcSA9IFNjYWxhci5wb3coRi5wLCBGLm0pO1xuXG4gICAgRi5zcXJ0X3MgPSAwO1xuICAgIEYuc3FydF90ID0gU2NhbGFyLnN1YihGLnNxcnRfcSwgMSk7XG5cbiAgICB3aGlsZSAoIVNjYWxhci5pc09kZChGLnNxcnRfdCkpIHtcbiAgICAgICAgRi5zcXJ0X3MgPSBGLnNxcnRfcyArIDE7XG4gICAgICAgIEYuc3FydF90ID0gU2NhbGFyLmRpdihGLnNxcnRfdCwgMik7XG4gICAgfVxuXG4gICAgbGV0IGMwID0gRi5vbmU7XG5cbiAgICB3aGlsZSAoRi5lcShjMCwgRi5vbmUpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBGLnJhbmRvbSgpO1xuICAgICAgICBGLnNxcnRfeiA9IEYucG93KGMsIEYuc3FydF90KTtcbiAgICAgICAgYzAgPSBGLnBvdyhGLnNxcnRfeiwgMiAqKiAoRi5zcXJ0X3MtMSkgKTtcbiAgICB9XG5cbiAgICBGLnNxcnRfdG0xZDIgPSBTY2FsYXIuZGl2KFNjYWxhci5zdWIoRi5zcXJ0X3QsIDEpLDIpO1xuXG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICBjb25zdCBGPXRoaXM7XG4gICAgICAgIGlmIChGLmlzWmVybyhhKSkgcmV0dXJuIEYuemVybztcbiAgICAgICAgbGV0IHcgPSBGLnBvdyhhLCBGLnNxcnRfdG0xZDIpO1xuICAgICAgICBjb25zdCBhMCA9IEYucG93KCBGLm11bChGLnNxdWFyZSh3KSwgYSksIDIgKiogKEYuc3FydF9zLTEpICk7XG4gICAgICAgIGlmIChGLmVxKGEwLCBGLm5lZ29uZSkpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCB2ID0gRi5zcXJ0X3M7XG4gICAgICAgIGxldCB4ID0gRi5tdWwoYSwgdyk7XG4gICAgICAgIGxldCBiID0gRi5tdWwoeCwgdyk7XG4gICAgICAgIGxldCB6ID0gRi5zcXJ0X3o7XG4gICAgICAgIHdoaWxlICghRi5lcShiLCBGLm9uZSkpIHtcbiAgICAgICAgICAgIGxldCBiMmsgPSBGLnNxdWFyZShiKTtcbiAgICAgICAgICAgIGxldCBrPTE7XG4gICAgICAgICAgICB3aGlsZSAoIUYuZXEoYjJrLCBGLm9uZSkpIHtcbiAgICAgICAgICAgICAgICBiMmsgPSBGLnNxdWFyZShiMmspO1xuICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdyA9IHo7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8di1rLTE7IGkrKykge1xuICAgICAgICAgICAgICAgIHcgPSBGLnNxdWFyZSh3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHogPSBGLnNxdWFyZSh3KTtcbiAgICAgICAgICAgIGIgPSBGLm11bChiLCB6KTtcbiAgICAgICAgICAgIHggPSBGLm11bCh4LCB3KTtcbiAgICAgICAgICAgIHYgPSBrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGLmdlcSh4LCBGLnplcm8pID8geCA6IEYubmVnKHgpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzRfa29uZyhGKSB7XG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNxcnQgYWxnIDQgbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzNfYXRraW4oRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyAzIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGcyX3NoYW5rcyhGKSB7XG5cbiAgICBGLnNxcnRfcSA9IFNjYWxhci5wb3coRi5wLCBGLm0pO1xuICAgIEYuc3FydF9lMSA9IFNjYWxhci5kaXYoIFNjYWxhci5zdWIoRi5zcXJ0X3EsIDMpICwgNCk7XG5cbiAgICBGLnNxcnQgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzWmVybyhhKSkgcmV0dXJuIHRoaXMuemVybztcblxuICAgICAgICAvLyBUZXN0IHRoYXQgaGF2ZSBzb2x1dGlvblxuICAgICAgICBjb25zdCBhMSA9IHRoaXMucG93KGEsIHRoaXMuc3FydF9lMSk7XG5cbiAgICAgICAgY29uc3QgYTAgPSB0aGlzLm11bCh0aGlzLnNxdWFyZShhMSksIGEpO1xuXG4gICAgICAgIGlmICggdGhpcy5lcShhMCwgdGhpcy5uZWdvbmUpICkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgeCA9IHRoaXMubXVsKGExLCBhKTtcblxuICAgICAgICByZXR1cm4gRi5nZXEoeCwgRi56ZXJvKSA/IHggOiBGLm5lZyh4KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGcxMF9hZGooRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyAxMCBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnOV9hZGooRikge1xuICAgIEYuc3FydF9xID0gU2NhbGFyLnBvdyhGLnAsIEYubS8yKTtcbiAgICBGLnNxcnRfZTM0ID0gU2NhbGFyLmRpdiggU2NhbGFyLnN1YihGLnNxcnRfcSwgMykgLCA0KTtcbiAgICBGLnNxcnRfZTEyID0gU2NhbGFyLmRpdiggU2NhbGFyLnN1YihGLnNxcnRfcSwgMSkgLCAyKTtcblxuICAgIEYuZnJvYmVuaXVzID0gZnVuY3Rpb24obiwgeCkge1xuICAgICAgICBpZiAoKG4lMikgPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIEYuY29uanVnYXRlKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICBjb25zdCBGID0gdGhpcztcbiAgICAgICAgY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgY29uc3QgYWxmYSA9IEYubXVsKEYuc3F1YXJlKGExKSwgYSk7XG4gICAgICAgIGNvbnN0IGEwID0gRi5tdWwoRi5mcm9iZW5pdXMoMSwgYWxmYSksIGFsZmEpO1xuICAgICAgICBpZiAoRi5lcShhMCwgRi5uZWdvbmUpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgeDAgPSBGLm11bChhMSwgYSk7XG4gICAgICAgIGxldCB4O1xuICAgICAgICBpZiAoRi5lcShhbGZhLCBGLm5lZ29uZSkpIHtcbiAgICAgICAgICAgIHggPSBGLm11bCh4MCwgW0YuRi56ZXJvLCBGLkYub25lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiID0gRi5wb3coRi5hZGQoRi5vbmUsIGFsZmEpLCBGLnNxcnRfZTEyKTtcbiAgICAgICAgICAgIHggPSBGLm11bChiLCB4MCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEYuZ2VxKHgsIEYuemVybykgPyB4IDogRi5uZWcoeCk7XG4gICAgfTtcbn1cblxuXG5mdW5jdGlvbiBhbGc4X2NvbXBsZXgoRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyA4IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuIiwiXG5cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5mdW5jdGlvbiBxdWFydGVyUm91bmQoc3QsIGEsIGIsIGMsIGQpIHtcblxuICAgIHN0W2FdID0gKHN0W2FdICsgc3RbYl0pID4+PiAwO1xuICAgIHN0W2RdID0gKHN0W2RdIF4gc3RbYV0pID4+PiAwO1xuICAgIHN0W2RdID0gKChzdFtkXSA8PCAxNikgfCAoKHN0W2RdPj4+MTYpICYgMHhGRkZGKSkgPj4+IDA7XG5cbiAgICBzdFtjXSA9IChzdFtjXSArIHN0W2RdKSA+Pj4gMDtcbiAgICBzdFtiXSA9IChzdFtiXSBeIHN0W2NdKSA+Pj4gMDtcbiAgICBzdFtiXSA9ICgoc3RbYl0gPDwgMTIpIHwgKChzdFtiXT4+PjIwKSAmIDB4RkZGKSkgPj4+IDA7XG5cbiAgICBzdFthXSA9IChzdFthXSArIHN0W2JdKSA+Pj4gMDtcbiAgICBzdFtkXSA9IChzdFtkXSBeIHN0W2FdKSA+Pj4gMDtcbiAgICBzdFtkXSA9ICgoc3RbZF0gPDwgOCkgfCAoKHN0W2RdPj4+MjQpICYgMHhGRikpID4+PiAwO1xuXG4gICAgc3RbY10gPSAoc3RbY10gKyBzdFtkXSkgPj4+IDA7XG4gICAgc3RbYl0gPSAoc3RbYl0gXiBzdFtjXSkgPj4+IDA7XG4gICAgc3RbYl0gPSAoKHN0W2JdIDw8IDcpIHwgKChzdFtiXT4+PjI1KSAmIDB4N0YpKSA+Pj4gMDtcbn1cblxuZnVuY3Rpb24gZG91YmxlUm91bmQoc3QpIHtcbiAgICBxdWFydGVyUm91bmQoc3QsIDAsIDQsIDgsMTIpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMSwgNSwgOSwxMyk7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAyLCA2LDEwLDE0KTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDMsIDcsMTEsMTUpO1xuXG4gICAgcXVhcnRlclJvdW5kKHN0LCAwLCA1LDEwLDE1KTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDEsIDYsMTEsMTIpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMiwgNywgOCwxMyk7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAzLCA0LCA5LDE0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhQ2hhIHtcblxuICAgIGNvbnN0cnVjdG9yKHNlZWQpIHtcbiAgICAgICAgc2VlZCA9IHNlZWQgfHwgWzAsMCwwLDAsMCwwLDAsMF07XG4gICAgICAgIHRoaXMuc3RhdGUgPSBbXG4gICAgICAgICAgICAweDYxNzA3ODY1LFxuICAgICAgICAgICAgMHgzMzIwNjQ2RSxcbiAgICAgICAgICAgIDB4Nzk2MjJEMzIsXG4gICAgICAgICAgICAweDZCMjA2NTc0LFxuICAgICAgICAgICAgc2VlZFswXSxcbiAgICAgICAgICAgIHNlZWRbMV0sXG4gICAgICAgICAgICBzZWVkWzJdLFxuICAgICAgICAgICAgc2VlZFszXSxcbiAgICAgICAgICAgIHNlZWRbNF0sXG4gICAgICAgICAgICBzZWVkWzVdLFxuICAgICAgICAgICAgc2VlZFs2XSxcbiAgICAgICAgICAgIHNlZWRbN10sXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuaWR4ID0gMTY7XG4gICAgICAgIHRoaXMuYnVmZiA9IG5ldyBBcnJheSgxNik7XG4gICAgfVxuXG4gICAgbmV4dFUzMigpIHtcbiAgICAgICAgaWYgKHRoaXMuaWR4ID09IDE2KSB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmW3RoaXMuaWR4KytdO1xuICAgIH1cblxuICAgIG5leHRVNjQoKSB7XG4gICAgICAgIHJldHVybiBTY2FsYXIuYWRkKFNjYWxhci5tdWwodGhpcy5uZXh0VTMyKCksIDB4MTAwMDAwMDAwKSwgdGhpcy5uZXh0VTMyKCkpO1xuICAgIH1cblxuICAgIG5leHRCb29sKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMubmV4dFUzMigpICYgMSkgPT0gMTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIC8vIENvcHkgdGhlIHN0YXRlXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwxNjsgaSsrKSB0aGlzLmJ1ZmZbaV0gPSB0aGlzLnN0YXRlW2ldO1xuXG4gICAgICAgIC8vIEFwcGx5IHRoZSByb3VuZHNcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDEwOyBpKyspIGRvdWJsZVJvdW5kKHRoaXMuYnVmZik7XG5cbiAgICAgICAgLy8gQWRkIHRvIHRoZSBpbml0aWFsXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwxNjsgaSsrKSB0aGlzLmJ1ZmZbaV0gPSAodGhpcy5idWZmW2ldICsgdGhpcy5zdGF0ZVtpXSkgPj4+IDA7XG5cbiAgICAgICAgdGhpcy5pZHggPSAwO1xuXG4gICAgICAgIHRoaXMuc3RhdGVbMTJdID0gKHRoaXMuc3RhdGVbMTJdICsgMSkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlWzEyXSAhPSAwKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3RhdGVbMTNdID0gKHRoaXMuc3RhdGVbMTNdICsgMSkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlWzEzXSAhPSAwKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3RhdGVbMTRdID0gKHRoaXMuc3RhdGVbMTRdICsgMSkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlWzE0XSAhPSAwKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3RhdGVbMTVdID0gKHRoaXMuc3RhdGVbMTVdICsgMSkgPj4+IDA7XG4gICAgfVxufVxuIiwiaW1wb3J0IENoYUNoYSBmcm9tIFwiLi9jaGFjaGEuanNcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tQnl0ZXMobikge1xuICAgIGxldCBhcnJheSA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHsgLy8gQnJvd3NlclxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIFN1cHBvcnRlZFxuICAgICAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICAgICAgfSBlbHNlIHsgLy8gZmFsbGJhY2tcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IChNYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTYpPj4+MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHsgLy8gTm9kZUpTXG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQoKSB7XG4gICAgY29uc3QgYXJyID0gZ2V0UmFuZG9tQnl0ZXMoMzIpO1xuICAgIGNvbnN0IGFyclYgPSBuZXcgVWludDMyQXJyYXkoYXJyLmJ1ZmZlcik7XG4gICAgY29uc3Qgc2VlZCA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgc2VlZC5wdXNoKGFyclZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VlZDtcbn1cblxubGV0IHRocmVhZFJuZyA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRSbmcoKSB7XG4gICAgaWYgKHRocmVhZFJuZykgcmV0dXJuIHRocmVhZFJuZztcbiAgICB0aHJlYWRSbmcgPSBuZXcgQ2hhQ2hhKGdldFJhbmRvbVNlZWQoKSk7XG4gICAgcmV0dXJuIHRocmVhZFJuZztcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qXG4gICAgVGhpcyBsaWJyYXJ5IGRvZXMgb3BlcmF0aW9ucyBvbiBwb2x5bm9taWFscyB3aXRoIGNvZWZmaWNpZW50cyBpbiBhIGZpZWxkIEYuXG5cbiAgICBBIHBvbHlub21pYWwgUCh4KSA9IHAwICsgcDEgKiB4ICsgcDIgKiB4XjIgKyAuLi4gKyBwbiAqIHhebiAgaXMgcmVwcmVzZW50ZWRcbiAgICBieSB0aGUgYXJyYXkgWyBwMCwgcDEsIHAyLCAuLi4gLCBwbiBdLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZGVCB7XG4gICAgY29uc3RydWN0b3IgKEcsIEYsIG9wTXVsR0YpIHtcbiAgICAgICAgdGhpcy5GID0gRjtcbiAgICAgICAgdGhpcy5HID0gRztcbiAgICAgICAgdGhpcy5vcE11bEdGID0gb3BNdWxHRjtcblxuICAgICAgICBsZXQgcmVtID0gRi5zcXJ0X3QgfHwgRi50O1xuICAgICAgICBsZXQgcyA9IEYuc3FydF9zIHx8IEYucztcblxuICAgICAgICBsZXQgbnFyID0gRi5vbmU7XG4gICAgICAgIHdoaWxlIChGLmVxKEYucG93KG5xciwgRi5oYWxmKSwgRi5vbmUpKSBucXIgPSBGLmFkZChucXIsIEYub25lKTtcblxuICAgICAgICB0aGlzLncgPSBuZXcgQXJyYXkocysxKTtcbiAgICAgICAgdGhpcy53aSA9IG5ldyBBcnJheShzKzEpO1xuICAgICAgICB0aGlzLndbc10gPSB0aGlzLkYucG93KG5xciwgcmVtKTtcbiAgICAgICAgdGhpcy53aVtzXSA9IHRoaXMuRi5pbnYodGhpcy53W3NdKTtcblxuICAgICAgICBsZXQgbj1zLTE7XG4gICAgICAgIHdoaWxlIChuPj0wKSB7XG4gICAgICAgICAgICB0aGlzLndbbl0gPSB0aGlzLkYuc3F1YXJlKHRoaXMud1tuKzFdKTtcbiAgICAgICAgICAgIHRoaXMud2lbbl0gPSB0aGlzLkYuc3F1YXJlKHRoaXMud2lbbisxXSk7XG4gICAgICAgICAgICBuLS07XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucm9vdHMgPSBbXTtcbiAgICAgICAgLypcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDE2OyBpKyspIHtcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5GLm9uZTtcbiAgICAgICAgICAgIG4gPSAxIDw8IGk7XG4gICAgICAgICAgICBjb25zdCByb290c2kgPSBuZXcgQXJyYXkobik7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bjsgaisrKSB7XG4gICAgICAgICAgICAgICAgcm9vdHNpW2pdID0gcjtcbiAgICAgICAgICAgICAgICByID0gdGhpcy5GLm11bChyLCB0aGlzLndbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvb3RzLnB1c2gocm9vdHNpKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLl9zZXRSb290cyhNYXRoLm1pbihzLCAxNSkpO1xuICAgIH1cblxuICAgIF9zZXRSb290cyhuKSB7XG4gICAgICAgIGZvciAobGV0IGk9bjsgKGk+PTApICYmICghdGhpcy5yb290c1tpXSk7IGktLSkge1xuICAgICAgICAgICAgbGV0IHIgPSB0aGlzLkYub25lO1xuICAgICAgICAgICAgY29uc3QgbnJvb3RzID0gMSA8PCBpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdHNpID0gbmV3IEFycmF5KG5yb290cyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bnJvb3RzOyBqKyspIHtcbiAgICAgICAgICAgICAgICByb290c2lbal0gPSByO1xuICAgICAgICAgICAgICAgIHIgPSB0aGlzLkYubXVsKHIsIHRoaXMud1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm9vdHNbaV0gPSByb290c2k7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmZnQocCkge1xuICAgICAgICBpZiAocC5sZW5ndGggPD0gMSkgcmV0dXJuIHA7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKHAubGVuZ3RoLTEpKzE7XG4gICAgICAgIHRoaXMuX3NldFJvb3RzKGJpdHMpO1xuXG4gICAgICAgIGNvbnN0IG0gPSAxIDw8IGJpdHM7XG4gICAgICAgIGlmIChwLmxlbmd0aCAhPSBtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBfX2ZmdCh0aGlzLCBwLCBiaXRzLCAwLCAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZmZ0KHApIHtcblxuICAgICAgICBpZiAocC5sZW5ndGggPD0gMSkgcmV0dXJuIHA7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKHAubGVuZ3RoLTEpKzE7XG4gICAgICAgIHRoaXMuX3NldFJvb3RzKGJpdHMpO1xuICAgICAgICBjb25zdCBtID0gMSA8PCBiaXRzO1xuICAgICAgICBpZiAocC5sZW5ndGggIT0gbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gIF9fZmZ0KHRoaXMsIHAsIGJpdHMsIDAsIDEpO1xuICAgICAgICBjb25zdCB0d29pbnZtID0gdGhpcy5GLmludiggdGhpcy5GLm11bFNjYWxhcih0aGlzLkYub25lLCBtKSApO1xuICAgICAgICBjb25zdCByZXNuID0gbmV3IEFycmF5KG0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bTsgaSsrKSB7XG4gICAgICAgICAgICByZXNuW2ldID0gdGhpcy5vcE11bEdGKHJlc1sobS1pKSVtXSwgdHdvaW52bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzbjtcbiAgICB9XG5cblxufVxuXG5mdW5jdGlvbiBsb2cyKCBWIClcbntcbiAgICByZXR1cm4oICggKCBWICYgMHhGRkZGMDAwMCApICE9PSAwID8gKCBWICY9IDB4RkZGRjAwMDAsIDE2ICkgOiAwICkgfCAoICggViAmIDB4RkYwMEZGMDAgKSAhPT0gMCA/ICggViAmPSAweEZGMDBGRjAwLCA4ICkgOiAwICkgfCAoICggViAmIDB4RjBGMEYwRjAgKSAhPT0gMCA/ICggViAmPSAweEYwRjBGMEYwLCA0ICkgOiAwICkgfCAoICggViAmIDB4Q0NDQ0NDQ0MgKSAhPT0gMCA/ICggViAmPSAweENDQ0NDQ0NDLCAyICkgOiAwICkgfCAoICggViAmIDB4QUFBQUFBQUEgKSAhPT0gMCApICk7XG59XG5cblxuZnVuY3Rpb24gX19mZnQoUEYsIHBhbGwsIGJpdHMsIG9mZnNldCwgc3RlcCkge1xuXG4gICAgY29uc3QgbiA9IDEgPDwgYml0cztcbiAgICBpZiAobj09MSkge1xuICAgICAgICByZXR1cm4gWyBwYWxsW29mZnNldF0gXTtcbiAgICB9IGVsc2UgaWYgKG49PTIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFBGLkcuYWRkKHBhbGxbb2Zmc2V0XSwgcGFsbFtvZmZzZXQgKyBzdGVwXSksXG4gICAgICAgICAgICBQRi5HLnN1YihwYWxsW29mZnNldF0sIHBhbGxbb2Zmc2V0ICsgc3RlcF0pXTtcbiAgICB9XG5cbiAgICBjb25zdCBuZGl2MiA9IG4gPj4gMTtcbiAgICBjb25zdCBwMSA9IF9fZmZ0KFBGLCBwYWxsLCBiaXRzLTEsIG9mZnNldCwgc3RlcCoyKTtcbiAgICBjb25zdCBwMiA9IF9fZmZ0KFBGLCBwYWxsLCBiaXRzLTEsIG9mZnNldCtzdGVwLCBzdGVwKjIpO1xuXG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5KG4pO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPG5kaXYyOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gUEYuRy5hZGQocDFbaV0sIFBGLm9wTXVsR0YocDJbaV0sIFBGLnJvb3RzW2JpdHNdW2ldKSk7XG4gICAgICAgIG91dFtpK25kaXYyXSA9IFBGLkcuc3ViKHAxW2ldLCBQRi5vcE11bEdGKHAyW2ldLCBQRi5yb290c1tiaXRzXVtpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59XG5cbiIsIi8qIGdsb2JhbCBCaWdJbnQgKi9cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCAqIGFzIGZ1dGlscyBmcm9tIFwiLi9mdXRpbHMuanNcIjtcbmltcG9ydCBidWlsZFNxcnQgZnJvbSBcIi4vZnNxcnQuanNcIjtcbmltcG9ydCB7Z2V0UmFuZG9tQnl0ZXN9IGZyb20gXCIuL3JhbmRvbS5qc1wiO1xuaW1wb3J0IEZGRlQgZnJvbSBcIi4vZmZ0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpxRmllbGQge1xuICAgIGNvbnN0cnVjdG9yKHApIHtcbiAgICAgICAgdGhpcy50eXBlPVwiRjFcIjtcbiAgICAgICAgdGhpcy5vbmUgPSBCaWdJbnQoMSk7XG4gICAgICAgIHRoaXMuemVybyA9IEJpZ0ludCgwKTtcbiAgICAgICAgdGhpcy5wID0gQmlnSW50KHApO1xuICAgICAgICB0aGlzLm0gPSAxO1xuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMucC10aGlzLm9uZTtcbiAgICAgICAgdGhpcy50d28gPSBCaWdJbnQoMik7XG4gICAgICAgIHRoaXMuaGFsZiA9IHRoaXMucCA+PiB0aGlzLm9uZTtcbiAgICAgICAgdGhpcy5iaXRMZW5ndGggPSBTY2FsYXIuYml0TGVuZ3RoKHRoaXMucCk7XG4gICAgICAgIHRoaXMubWFzayA9ICh0aGlzLm9uZSA8PCBCaWdJbnQodGhpcy5iaXRMZW5ndGgpKSAtIHRoaXMub25lO1xuXG4gICAgICAgIHRoaXMubjY0ID0gTWF0aC5mbG9vcigodGhpcy5iaXRMZW5ndGggLSAxKSAvIDY0KSsxO1xuICAgICAgICB0aGlzLm4zMiA9IHRoaXMubjY0KjI7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLm42NCo4O1xuICAgICAgICB0aGlzLlIgPSB0aGlzLmUodGhpcy5vbmUgPDwgQmlnSW50KHRoaXMubjY0KjY0KSk7XG4gICAgICAgIHRoaXMuUmkgPSB0aGlzLmludih0aGlzLlIpO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLm5lZ29uZSA+PiB0aGlzLm9uZTtcbiAgICAgICAgdGhpcy5ucXIgPSB0aGlzLnR3bztcbiAgICAgICAgbGV0IHIgPSB0aGlzLnBvdyh0aGlzLm5xciwgZSk7XG4gICAgICAgIHdoaWxlICghdGhpcy5lcShyLCB0aGlzLm5lZ29uZSkpIHtcbiAgICAgICAgICAgIHRoaXMubnFyID0gdGhpcy5ucXIgKyB0aGlzLm9uZTtcbiAgICAgICAgICAgIHIgPSB0aGlzLnBvdyh0aGlzLm5xciwgZSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucyA9IDA7XG4gICAgICAgIHRoaXMudCA9IHRoaXMubmVnb25lO1xuXG4gICAgICAgIHdoaWxlICgodGhpcy50ICYgdGhpcy5vbmUpID09IHRoaXMuemVybykge1xuICAgICAgICAgICAgdGhpcy5zID0gdGhpcy5zICsgMTtcbiAgICAgICAgICAgIHRoaXMudCA9IHRoaXMudCA+PiB0aGlzLm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubnFyX3RvX3QgPSB0aGlzLnBvdyh0aGlzLm5xciwgdGhpcy50KTtcblxuICAgICAgICBidWlsZFNxcnQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5GRlQgPSBuZXcgRkZGVCh0aGlzLCB0aGlzLCB0aGlzLm11bC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmZmdCA9IHRoaXMuRkZULmZmdC5iaW5kKHRoaXMuRkZUKTtcbiAgICAgICAgdGhpcy5pZmZ0ID0gdGhpcy5GRlQuaWZmdC5iaW5kKHRoaXMuRkZUKTtcbiAgICAgICAgdGhpcy53ID0gdGhpcy5GRlQudztcbiAgICAgICAgdGhpcy53aSA9IHRoaXMuRkZULndpOyBcbiAgICBcbiAgICAgICAgdGhpcy5zaGlmdCA9IHRoaXMuc3F1YXJlKHRoaXMubnFyKTtcbiAgICAgICAgdGhpcy5rID0gdGhpcy5leHAodGhpcy5ucXIsIDIqKnRoaXMucyk7XG4gICAgfVxuXG4gICAgZShhLGIpIHtcbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgaWYgKCFiKSB7XG4gICAgICAgICAgICByZXMgPSBCaWdJbnQoYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYj09MTYpIHtcbiAgICAgICAgICAgIHJlcyA9IEJpZ0ludChcIjB4XCIrYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcyA8IDApIHtcbiAgICAgICAgICAgIGxldCBucmVzID0gLXJlcztcbiAgICAgICAgICAgIGlmIChucmVzID49IHRoaXMucCkgbnJlcyA9IG5yZXMgJSB0aGlzLnA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wIC0gbnJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAocmVzPj0gdGhpcy5wKSA/IHJlcyV0aGlzLnAgOiByZXM7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGFkZChhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGEgKyBiO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgc3ViKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhID49IGIpID8gYS1iIDogdGhpcy5wLWIrYTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gYSA/IHRoaXMucC1hIDogYTtcbiAgICB9XG5cbiAgICBtdWwoYSwgYikge1xuICAgICAgICByZXR1cm4gKGEqYikldGhpcy5wO1xuICAgIH1cblxuICAgIG11bFNjYWxhcihiYXNlLCBzKSB7XG4gICAgICAgIHJldHVybiAoYmFzZSAqIHRoaXMuZShzKSkgJSB0aGlzLnA7XG4gICAgfVxuXG4gICAgc3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIChhKmEpICUgdGhpcy5wO1xuICAgIH1cblxuICAgIGVxKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGE9PWI7XG4gICAgfVxuXG4gICAgbmVxKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEhPWI7XG4gICAgfVxuXG4gICAgbHQoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPCBiYjtcbiAgICB9XG5cbiAgICBndChhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA+IGJiO1xuICAgIH1cblxuICAgIGxlcShhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA8PSBiYjtcbiAgICB9XG5cbiAgICBnZXEoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPj0gYmI7XG4gICAgfVxuXG4gICAgZGl2KGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKGEsIHRoaXMuaW52KGIpKTtcbiAgICB9XG5cbiAgICBpZGl2KGEsIGIpIHtcbiAgICAgICAgaWYgKCFiKSB0aHJvdyBuZXcgRXJyb3IoXCJEaXZpc2lvbiBieSB6ZXJvXCIpO1xuICAgICAgICByZXR1cm4gYSAvIGI7XG4gICAgfVxuXG4gICAgaW52KGEpIHtcbiAgICAgICAgaWYgKCFhKSB0aHJvdyBuZXcgRXJyb3IoXCJEaXZpc2lvbiBieSB6ZXJvXCIpO1xuXG4gICAgICAgIGxldCB0ID0gdGhpcy56ZXJvO1xuICAgICAgICBsZXQgciA9IHRoaXMucDtcbiAgICAgICAgbGV0IG5ld3QgPSB0aGlzLm9uZTtcbiAgICAgICAgbGV0IG5ld3IgPSBhICUgdGhpcy5wO1xuICAgICAgICB3aGlsZSAobmV3cikge1xuICAgICAgICAgICAgbGV0IHEgPSByL25ld3I7XG4gICAgICAgICAgICBbdCwgbmV3dF0gPSBbbmV3dCwgdC1xKm5ld3RdO1xuICAgICAgICAgICAgW3IsIG5ld3JdID0gW25ld3IsIHItcSpuZXdyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodDx0aGlzLnplcm8pIHQgKz0gdGhpcy5wO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG5cbiAgICBtb2QoYSwgYikge1xuICAgICAgICByZXR1cm4gYSAlIGI7XG4gICAgfVxuXG4gICAgcG93KGIsIGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1dGlscy5leHAodGhpcywgYiwgZSk7XG4gICAgfVxuXG4gICAgZXhwKGIsIGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1dGlscy5leHAodGhpcywgYiwgZSk7XG4gICAgfVxuXG4gICAgYmFuZChhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICAoKGEgJiBiKSAmIHRoaXMubWFzayk7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBib3IoYSwgYikge1xuICAgICAgICBjb25zdCByZXMgPSAgKChhIHwgYikgJiB0aGlzLm1hc2spO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgYnhvcihhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICAoKGEgXiBiKSAmIHRoaXMubWFzayk7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBibm90KGEpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYSBeIHRoaXMubWFzaztcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIHNobChhLCBiKSB7XG4gICAgICAgIGlmIChOdW1iZXIoYikgPCB0aGlzLmJpdExlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gKGEgPDwgYikgJiB0aGlzLm1hc2s7XG4gICAgICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuYiA9IHRoaXMucCAtIGI7XG4gICAgICAgICAgICBpZiAoTnVtYmVyKG5iKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPj4gbmI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnplcm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaHIoYSwgYikge1xuICAgICAgICBpZiAoTnVtYmVyKGIpIDwgdGhpcy5iaXRMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBhID4+IGI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuYiA9IHRoaXMucCAtIGI7XG4gICAgICAgICAgICBpZiAoTnVtYmVyKG5iKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gKGEgPDwgbmIpICYgdGhpcy5tYXNrO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsYW5kKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhICYmIGIpID8gdGhpcy5vbmUgOiB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgbG9yKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhIHx8IGIpID8gdGhpcy5vbmUgOiB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgbG5vdChhKSB7XG4gICAgICAgIHJldHVybiAoYSkgPyB0aGlzLnplcm8gOiB0aGlzLm9uZTtcbiAgICB9XG5cbiAgICBzcXJ0X29sZChuKSB7XG5cbiAgICAgICAgaWYgKG4gPT0gdGhpcy56ZXJvKSByZXR1cm4gdGhpcy56ZXJvO1xuXG4gICAgICAgIC8vIFRlc3QgdGhhdCBoYXZlIHNvbHV0aW9uXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucG93KG4sIHRoaXMubmVnb25lID4+IHRoaXMub25lKTtcbiAgICAgICAgaWYgKCByZXMgIT0gdGhpcy5vbmUgKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBsZXQgbSA9IHRoaXMucztcbiAgICAgICAgbGV0IGMgPSB0aGlzLm5xcl90b190O1xuICAgICAgICBsZXQgdCA9IHRoaXMucG93KG4sIHRoaXMudCk7XG4gICAgICAgIGxldCByID0gdGhpcy5wb3cobiwgdGhpcy5hZGQodGhpcy50LCB0aGlzLm9uZSkgPj4gdGhpcy5vbmUgKTtcblxuICAgICAgICB3aGlsZSAoIHQgIT0gdGhpcy5vbmUgKSB7XG4gICAgICAgICAgICBsZXQgc3EgPSB0aGlzLnNxdWFyZSh0KTtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIHdoaWxlIChzcSAhPSB0aGlzLm9uZSApIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgc3EgPSB0aGlzLnNxdWFyZShzcSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGIgPSBjIF4gbS1pLTFcbiAgICAgICAgICAgIGxldCBiID0gYztcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajwgbS1pLTE7IGogKyspIGIgPSB0aGlzLnNxdWFyZShiKTtcblxuICAgICAgICAgICAgbSA9IGk7XG4gICAgICAgICAgICBjID0gdGhpcy5zcXVhcmUoYik7XG4gICAgICAgICAgICB0ID0gdGhpcy5tdWwodCwgYyk7XG4gICAgICAgICAgICByID0gdGhpcy5tdWwociwgYik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAociA+ICh0aGlzLnAgPj4gdGhpcy5vbmUpKSB7XG4gICAgICAgICAgICByID0gdGhpcy5uZWcocik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBub3JtYWxpemUoYSwgYikge1xuICAgICAgICBhID0gQmlnSW50KGEsYik7XG4gICAgICAgIGlmIChhIDwgMCkge1xuICAgICAgICAgICAgbGV0IG5hID0gLWE7XG4gICAgICAgICAgICBpZiAobmEgPj0gdGhpcy5wKSBuYSA9IG5hICUgdGhpcy5wO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucCAtIG5hO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChhPj0gdGhpcy5wKSA/IGEldGhpcy5wIDogYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgY29uc3QgbkJ5dGVzID0gKHRoaXMuYml0TGVuZ3RoKjIgLyA4KTtcbiAgICAgICAgbGV0IHJlcyA9dGhpcy56ZXJvO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkJ5dGVzOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyA9IChyZXMgPDwgQmlnSW50KDgpKSArIEJpZ0ludChnZXRSYW5kb21CeXRlcygxKVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcyAlIHRoaXMucDtcbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCBiYXNlKSB7XG4gICAgICAgIGJhc2UgPSBiYXNlIHx8IDEwO1xuICAgICAgICBsZXQgdnM7XG4gICAgICAgIGlmICgoYSA+IHRoaXMuaGFsZikmJihiYXNlID09IDEwKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMucC1hO1xuICAgICAgICAgICAgdnMgPSBcIi1cIit2LnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdnMgPSBhLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2cztcbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICByZXR1cm4gYSA9PSB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHY9dGhpcy56ZXJvO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMubjY0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ICs9IHJuZy5uZXh0VTY0KCkgPDwgQmlnSW50KDY0ICppKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHYgJj0gdGhpcy5tYXNrO1xuICAgICAgICB9IHdoaWxlICh2ID49IHRoaXMucCk7XG4gICAgICAgIHYgPSAodiAqIHRoaXMuUmkpICUgdGhpcy5wOyAgIC8vIENvbnZlcnQgZnJvbSBtb250Z29tZXJ5XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cblxuICAgIGZmdChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkZGVC5mZnQoYSk7XG4gICAgfVxuXG4gICAgaWZmdChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkZGVC5pZmZ0KGEpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgdG9ScHJMRShidWZmLCBvLCBlKSB7XG4gICAgICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIG8sIGUsIHRoaXMubjY0KjgpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgdG9ScHJCRShidWZmLCBvLCBlKSB7XG4gICAgICAgIFNjYWxhci50b1JwckJFKGJ1ZmYsIG8sIGUsIHRoaXMubjY0KjgpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIE1vbnRnb21lcnkgUmVwcmVzZW50YXRpb25cbiAgICB0b1JwckJFTShidWZmLCBvLCBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUnByQkUoYnVmZiwgbywgdGhpcy5tdWwodGhpcy5SLCBlKSk7XG4gICAgfVxuXG4gICAgdG9ScHJMRU0oYnVmZiwgbywgZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1JwckxFKGJ1ZmYsIG8sIHRoaXMubXVsKHRoaXMuUiwgZSkpO1xuICAgIH1cblxuXG4gICAgLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgZnJvbVJwckxFKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByTEUoYnVmZiwgbywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgZnJvbVJwckJFKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByQkUoYnVmZiwgbywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgZnJvbVJwckxFTShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bCh0aGlzLmZyb21ScHJMRShidWZmLCBvKSwgdGhpcy5SaSk7XG4gICAgfVxuXG4gICAgZnJvbVJwckJFTShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bCh0aGlzLmZyb21ScHJCRShidWZmLCBvKSwgdGhpcy5SaSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnRzLmJpZ0ludDJCeXRlc0xFID0gZnVuY3Rpb24gYmlnSW50MkJ5dGVzTEUoX2EsIGxlbikge1xuICAgIGNvbnN0IGIgPSBBcnJheShsZW4pO1xuICAgIGxldCB2ID0gQmlnSW50KF9hKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuOyBpKyspIHtcbiAgICAgICAgYltpXSA9IE51bWJlcih2ICYgMHhGRm4pO1xuICAgICAgICB2ID0gdiA+PiA4bjtcbiAgICB9XG4gICAgcmV0dXJuIGI7XG59O1xuXG5leHBvcnRzLmJpZ0ludDJVMzJMRSA9IGZ1bmN0aW9uIGJpZ0ludDJCeXRlc0xFKF9hLCBsZW4pIHtcbiAgICBjb25zdCBiID0gQXJyYXkobGVuKTtcbiAgICBsZXQgdiA9IEJpZ0ludChfYSk7XG4gICAgZm9yIChsZXQgaT0wOyBpPGxlbjsgaSsrKSB7XG4gICAgICAgIGJbaV0gPSBOdW1iZXIodiAmIDB4RkZGRkZGRkZuKTtcbiAgICAgICAgdiA9IHYgPj4gMzJuO1xuICAgIH1cbiAgICByZXR1cm4gYjtcbn07XG5cbmV4cG9ydHMuaXNPY2FtTnVtID0gZnVuY3Rpb24oYSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPSAzKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhWzBdICE9PSBcIm51bWJlclwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhWzFdICE9PSBcIm51bWJlclwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFbMl0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEludChtb2R1bGUsIG42NCwgX3ByZWZpeCkge1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImludFwiO1xuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHt9O1xuXG4gICAgY29uc3QgbjMyID0gbjY0KjI7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29weSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfY29weVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjY0OyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgICAgICBpKjgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBpKjhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFplcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuNjQ7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgICAgIGkqOCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX29uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPG42NDsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICAgICAgaSo4LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldENvbXBDb2RlKG4pIHtcbiAgICAgICAgICAgIGlmIChuPT0wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBjLnJldChjLmk2NF9lcXooXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpKVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pNjRfZXF6KFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSwgbio4IClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGdldENvbXBDb2RlKG4tMSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGdldENvbXBDb2RlKG42NC0xKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnJldChjLmkzMl9jb25zdCgwKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2VxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q29tcENvZGUobikge1xuICAgICAgICAgICAgaWYgKG49PTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIGMucmV0KGMuaTY0X2VxKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB5XCIpKVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pNjRfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpLCBuKjggKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHlcIiksIG4qOCApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBnZXRDb21wQ29kZShuLTEpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShnZXRDb21wQ29kZShuNjQtMSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5yZXQoYy5pMzJfY29uc3QoMCkpKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRHdGUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2d0ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldENvbXBDb2RlKG4pIHtcbiAgICAgICAgICAgIGlmIChuPT0wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBjLnJldChjLmk2NF9nZV91KFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB5XCIpKVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pNjRfbHRfdShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIiksIG4qOCApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweVwiKSwgbio4IClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9ndF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIiksIG4qOCApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHlcIiksIG4qOCApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcENvZGUobi0xKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoZ2V0Q29tcENvZGUobjY0LTEpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMucmV0KGMuaTMyX2NvbnN0KDApKSk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2FkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImk2NFwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInhcIikpLFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ5XCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MTsgaTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoIFwiY1wiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInhcIiksIDQqaSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieVwiKSwgNCppKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdSAoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgaSo0LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShjLmkzMl93cmFwX2k2NChjLmk2NF9zaHJfdSAoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSkpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3N1YlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImk2NFwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICBjLmk2NF9zdWIoXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInhcIikpLFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ5XCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRlwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmb3IgKGxldCBpPTE7IGk8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKCBcImNcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ4XCIpLCA0KmkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInlcIiksIDQqaSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3MgKGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIGkqNCxcbiAgICAgICAgICAgICAgICBjLmk2NF9hbmQoIGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkZcIikpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShjLmkzMl93cmFwX2k2NCAoIGMuaTY0X3Nocl9zIChjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKSkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbXVsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMVwiLCBcImk2NFwiKTtcblxuXG4gICAgICAgIGZvciAobGV0IGk9MDtpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieFwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInlcIitpLCBcImk2NFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgbG9hZFggPSBbXTtcbiAgICAgICAgY29uc3QgbG9hZFkgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gbXVsaWooaSwgaikge1xuICAgICAgICAgICAgbGV0IFgsWTtcbiAgICAgICAgICAgIGlmICghbG9hZFhbaV0pIHtcbiAgICAgICAgICAgICAgICBYID0gYy50ZWVMb2NhbChcInhcIitpLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGkqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWCA9IGMuZ2V0TG9jYWwoXCJ4XCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvYWRZW2pdKSB7XG4gICAgICAgICAgICAgICAgWSA9IGMudGVlTG9jYWwoXCJ5XCIraiwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ5XCIpLCBqKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWVtqXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFkgPSBjLmdldExvY2FsKFwieVwiK2opO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBYLCBZICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYzAgPSBcImMwXCI7XG4gICAgICAgIGxldCBjMSA9IFwiYzFcIjtcblxuICAgICAgICBmb3IgKGxldCBrPTA7IGs8bjMyKjItMTsgaysrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDAsIGstbjMyKzEpOyAoaTw9aykmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgICAgICBrKjQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFtjMCwgYzFdID0gW2MxLCBjMF07XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIG4zMio0KjItNCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwX29sZFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxX29sZFwiLCBcImk2NFwiKTtcblxuXG4gICAgICAgIGZvciAobGV0IGk9MDtpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieFwiK2ksIFwiaTY0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBsb2FkWCA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBtdWxpaihpLCBqKSB7XG4gICAgICAgICAgICBsZXQgWCxZO1xuICAgICAgICAgICAgaWYgKCFsb2FkWFtpXSkge1xuICAgICAgICAgICAgICAgIFggPSBjLnRlZUxvY2FsKFwieFwiK2ksIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaSo0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBYID0gYy5nZXRMb2NhbChcInhcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9hZFhbal0pIHtcbiAgICAgICAgICAgICAgICBZID0gYy50ZWVMb2NhbChcInhcIitqLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGoqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWSA9IGMuZ2V0TG9jYWwoXCJ4XCIraik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFgsIFkgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjMCA9IFwiYzBcIjtcbiAgICAgICAgbGV0IGMxID0gXCJjMVwiO1xuICAgICAgICBsZXQgYzBfb2xkID0gXCJjMF9vbGRcIjtcbiAgICAgICAgbGV0IGMxX29sZCA9IFwiYzFfb2xkXCI7XG5cbiAgICAgICAgZm9yIChsZXQgaz0wOyBrPG4zMioyLTE7IGsrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsIGMuaTY0X2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLCBjLmk2NF9jb25zdCgwKSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDAsIGstbjMyKzEpOyAoaTwoKGsrMSk+PjEpICkmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IGJ5IDJcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGslMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihrPj4xLCBrPj4xKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2xkIGNhcnJ5XG5cbiAgICAgICAgICAgIGlmIChrPjApIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMV9vbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgICAgIGsqNCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgYzBfb2xkLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgYzFfb2xkLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB9XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgbjMyKjQqMi00LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZU9sZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlT2xkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2J1aWxkTXVsMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX211bDFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNcIiwgXCJpNjRcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJweFwiKSwgMCwgMCksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInlcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICApKTtcblxuICAgICAgICBmb3IgKGxldCBpPTE7IGk8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKCBcImNcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJweFwiKSwgNCppLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ5XCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91IChjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgaSo0LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIilcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2J1aWxkQWRkMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX2FkZDFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJweFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwicHhcIiwgYy5nZXRMb2NhbChcInhcIikpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJweFwiKSwgMCwgMCksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInlcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBjLmk2NF9lcXooYy5nZXRMb2NhbChcImNcIikpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInB4XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJweFwiKSwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGREaXYoKSB7XG4gICAgICAgIF9idWlsZE11bDEoKTtcbiAgICAgICAgX2J1aWxkQWRkMSgpO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2RpdlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJyclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZVhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJlWVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInN5XCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic3hcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJlY1wiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgQ2F1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBSYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmdldExvY2FsKFwiY2NcIik7XG4gICAgICAgIGNvbnN0IFIgPSBjLmdldExvY2FsKFwicnJcIik7XG4gICAgICAgIGNvbnN0IHByMSA9IG1vZHVsZS5hbGxvYyhuOCoyKTtcbiAgICAgICAgY29uc3QgUjEgPSBjLmkzMl9jb25zdChwcjEpO1xuICAgICAgICBjb25zdCBSMiA9IGMuaTMyX2NvbnN0KHByMStuOCk7XG5cbiAgICAgICAgLy8gSWMgYyBpcyAwIHRoZW4gc3RvcmUgaXQgaW4gYW4gYXV4aWxpYXJ5IGJ1ZmZlclxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImNjXCIsIGMuZ2V0TG9jYWwoXCJjXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjY1wiLCBDYXV4KVxuICAgICAgICApKTtcblxuICAgICAgICAvLyBJYyByIGlzIDAgdGhlbiBzdG9yZSBpdCBpbiBhbiBhdXhpbGlhcnkgYnVmZmVyXG4gICAgICAgIGYuYWRkQ29kZShjLmlmKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicnJcIiwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInJyXCIsIFJhdXgpXG4gICAgICAgICkpO1xuXG4gICAgICAgIC8vIENvcHlcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBSKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwieVwiKSwgWSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgQykpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgUjEpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiZVhcIiwgYy5pMzJfY29uc3QobjgtMSkpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJlWVwiLCBjLmkzMl9jb25zdChuOC0xKSkpO1xuXG4gICAgICAgIC8vIHdoaWxlIChlWT4zKSYmKFlbZVldPT0wKSBleS0tO1xuICAgICAgICBmLmFkZENvZGUoYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoWSAsIGMuZ2V0TG9jYWwoXCJlWVwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlWVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImVZXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiZVlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwic3lcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZCggWSwgYy5nZXRMb2NhbChcImVZXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEZvcmNlIGEgZGl2aWRlIGJ5IDAgaWYgcXVvdGllbiBpcyAwXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pNjRfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuZHJvcChjLmk2NF9kaXZfdShjLmk2NF9jb25zdCgwKSwgYy5pNjRfY29uc3QoMCkpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcblxuICAgICAgICAgICAgLy8gd2hpbGUgKGVYPjcpJiYoWVtlWF09PTApIGV4LS07XG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9vcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFIgLCBjLmdldExvY2FsKFwiZVhcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlWFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg3KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiZVhcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJlWFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInN4XCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKCBSLCBjLmdldExvY2FsKFwiZVhcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoNylcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJzeFwiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2Rpdl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3hcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiZWNcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlWFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlWVwiKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIC8vIFdoaWxlIGdyZWF0ZXIgdGhhbiAzMiBiaXRzIG9yIGVjIGlzIG5lZywgc2hyIGFuZCBpbmMgZXhwXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9lcXooXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRjAwMDAwMDAwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJzeFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJlY1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZWNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmk2NF9lcXooYy5nZXRMb2NhbChcInN4XCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChwcmVmaXggKyBcIl9ndGVcIiwgUiwgWSkpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzeFwiLCBjLmk2NF9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJlY1wiLCBjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX211bDFcIiwgWSwgYy5nZXRMb2NhbChcInN4XCIpLCBSMiksXG4gICAgICAgICAgICBjLmRyb3AoYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgIFIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFIyLCBjLmdldExvY2FsKFwiZWNcIikpLFxuICAgICAgICAgICAgICAgIFJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX19hZGQxXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKEMsIGMuZ2V0TG9jYWwoXCJlY1wiKSksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN4XCIpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbnZlcnNlTW9kKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ludmVyc2VNb2RcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBtXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibmV3dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJxcVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibmV3clwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInN3cFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzaWdudFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNpZ25uZXd0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic2lnbnhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXgxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGF1eDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgYXV4MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBhdXg0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGF1eDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgYXV4NiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBtdWxCdWZmID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjIpKTtcbiAgICAgICAgY29uc3QgYXV4NyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJ0XCIsIGF1eDEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYXV4MSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic2lnbnRcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJyXCIsIGF1eDIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInBtXCIpLCBhdXgyKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuZXd0XCIsIGF1eDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBhdXgzKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzaWdubmV3dFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5ld3JcIiwgYXV4NCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicHhcIiksIGF1eDQpXG4gICAgICAgICk7XG5cblxuXG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJxcVwiLCBhdXg1KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwicXJcIiwgYXV4NikpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInhcIiwgYXV4NykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJuZXdyXCIpIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZGl2XCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmdldExvY2FsKFwibmV3clwiKSwgYy5nZXRMb2NhbChcInFxXCIpLCBjLmdldExvY2FsKFwicXJcIikpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJxcVwiKSwgYy5nZXRMb2NhbChcIm5ld3RcIiksIG11bEJ1ZmYpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzaWdudFwiKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2lnbm5ld3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2d0ZVwiLCBtdWxCdWZmLCBjLmdldExvY2FsKFwidFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBjLmdldExvY2FsKFwidFwiKSwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBtdWxCdWZmLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNpZ25uZXd0XCIpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBtdWxCdWZmLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZ3RlXCIsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBtdWxCdWZmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBjLmdldExvY2FsKFwidFwiKSwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzd3BcIiwgYy5nZXRMb2NhbChcInRcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInRcIiwgYy5nZXRMb2NhbChcIm5ld3RcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5ld3RcIiwgYy5nZXRMb2NhbChcInhcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInhcIiwgYy5nZXRMb2NhbChcInN3cFwiKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzaWdudFwiLCBjLmdldExvY2FsKFwic2lnbm5ld3RcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNpZ25uZXd0XCIsIGMuZ2V0TG9jYWwoXCJzaWdueFwiKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzd3BcIiwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInJcIiwgYy5nZXRMb2NhbChcIm5ld3JcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5ld3JcIiwgYy5nZXRMb2NhbChcInFyXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJxclwiLCBjLmdldExvY2FsKFwic3dwXCIpKSxcblxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaWYoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwic2lnbnRcIiksXG4gICAgICAgICAgICBjLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBjLmdldExvY2FsKFwicG1cIiksIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwicHJcIikpKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwicHJcIikpXG4gICAgICAgICkpO1xuICAgIH1cblxuXG4gICAgYnVpbGRDb3B5KCk7XG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRJc1plcm8oKTtcbiAgICBidWlsZE9uZSgpO1xuICAgIGJ1aWxkRXEoKTtcbiAgICBidWlsZEd0ZSgpO1xuICAgIGJ1aWxkQWRkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZE11bCgpO1xuICAgIGJ1aWxkU3F1YXJlKCk7XG4gICAgYnVpbGRTcXVhcmVPbGQoKTtcbiAgICBidWlsZERpdigpO1xuICAgIGJ1aWxkSW52ZXJzZU1vZCgpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfY29weVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9vbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9lcVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2d0ZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2FkZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX211bFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZU9sZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2RpdlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ludmVyc2VNb2RcIik7XG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFRpbWVzU2NhbGFyKG1vZHVsZSwgZm5OYW1lLCBlbGVtZW50TGVuLCBvcEFCLCBvcEFBLCBvcENvcHksIG9wSW5pdCkge1xuXG4gICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgIGYuYWRkUGFyYW0oXCJiYXNlXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInNjYWxhckxlbmd0aFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiYlwiLCBcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZWxlbWVudExlbikpO1xuXG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLmlmKFxuICAgICAgICAgICAgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5ndGhcIikpLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEluaXQsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICk7XG4gICAgZi5hZGRDb2RlKGMuY2FsbChvcENvcHksIGMuZ2V0TG9jYWwoXCJiYXNlXCIpLCBhdXgpKTtcbiAgICBmLmFkZENvZGUoYy5jYWxsKG9wSW5pdCwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcImlcIiwgYy5nZXRMb2NhbChcInNjYWxhckxlbmd0aFwiKSkpO1xuICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcbiAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuXG4gICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImJcIixcbiAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgLi4uaW5uZXJMb29wKCksXG4gICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgIGMuYnIoMClcbiAgICApKSk7XG5cblxuICAgIGZ1bmN0aW9uIGlubmVyTG9vcCgpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgICAgICBjb2RlLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wQUEsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgLi4uYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfdSggYy5nZXRMb2NhbChcImJcIiksIGMuaTMyX2NvbnN0KDB4ODAgPj4gaSkpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4ODAgPj4gaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wQUIsIGMuZ2V0TG9jYWwoXCJyXCIpLGF1eCwgYy5nZXRMb2NhbChcInJcIikpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cblxufTtcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBidWlsZEJhdGNoSW52ZXJzZTtcblxuZnVuY3Rpb24gYnVpbGRCYXRjaEludmVyc2UobW9kdWxlLCBwcmVmaXgpIHtcblxuXG4gICAgY29uc3QgbjggPSBtb2R1bGUubW9kdWxlc1twcmVmaXhdLm42NCo4O1xuXG4gICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYmF0Y2hJbnZlcnNlXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcImluU3RlcFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwib3V0U3RlcFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRBdXhcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0SW5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0T3V0XCIsXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImlcIixcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuXG4gICAgLy8gQWxsb2MgV29ya2luZyBzcGFjZSBmb3IgYWNjdW11bGF0ZWQgdW1sdGlwbGljYXRpb25zXG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfbG9hZCggYy5pMzJfY29uc3QoMCkgKSksXG4gICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgZi5hZGRDb2RlKFxuXG4gICAgICAgIC8vIGF1eFswXSA9IGE7XG4gICAgICAgIGMuY2FsbChwcmVmaXgrXCJfb25lXCIsIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSksXG4gICAgICAgIC8vIGZvciAoaT0wO2k8bjtpKyspIGF1eFtpXSA9IGF1eFtpLTFdKmluW2ldXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcblxuICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXgrXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJpdEluXCIpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0SW5cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuZ2V0TG9jYWwoXCJpblN0ZXBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSksXG5cbiAgICAgICAgLy8gcG9pbnQgdG8gdGhlIGxhc3RcbiAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmdldExvY2FsKFwiaW5TdGVwXCIpKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgLy8gaXRPdXQgPSBwT3V0ICsgKG4tMSkqc3RlcE91dCAgIC8vIFBvaW50IHRvIHRoZSBsYXN0XG4gICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcIml0T3V0XCIsXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIm5cIiksIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm91dFN0ZXBcIiksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuXG4gICAgICAgIC8vIGF1eFtuLTFdID0gMS9hdXhbbi0xXVxuICAgICAgICBjLmNhbGwocHJlZml4K1wiX2ludmVyc2VcIiwgYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmdldExvY2FsKFwiaXRBdXhcIikgKSxcblxuICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6KCBjLmdldExvY2FsKFwiaVwiKSkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4K1wiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwiaXRJblwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRPdXRcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0sW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpLCBBVVgpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRJblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFVWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdE91dFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRJblwiKSwgYy5nZXRMb2NhbChcImluU3RlcFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuZ2V0TG9jYWwoXCJvdXRTdGVwXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpXG5cbiAgICApO1xuXG5cbiAgICAvLyBSZWNvdmVyIE9sZCBtZW1vcnlcbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIilcbiAgICAgICAgKVxuICAgICk7XG5cbn1cbiIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQmF0Y2hDb252ZXJ0aW9uO1xuXG5mdW5jdGlvbiBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIGZuTmFtZSwgaW50ZXJuYWxGbk5hbWUsIHNpemVJbiwgc2l6ZU91dCwgcmV2ZXJzZSkge1xuICAgIGlmICh0eXBlb2YgcmV2ZXJzZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBTZXQgdGhlIHJldmVyc2UgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdG8gdXNlIHRoZSBzYW1lIGJ1ZmZlciBhcyBpbi9vdXQuXG4gICAgICAgIGlmIChzaXplSW4gPCBzaXplT3V0KSB7XG4gICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdE91dFwiLCBcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3Qoc2l6ZUluKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHNpemVPdXQpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRlcm5hbEZuTmFtZSwgYy5nZXRMb2NhbChcIml0SW5cIiksIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3Qoc2l6ZU91dCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5nZXRMb2NhbChcInBJblwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRlcm5hbEZuTmFtZSwgYy5nZXRMb2NhbChcIml0SW5cIiksIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3Qoc2l6ZU91dCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRCYXRjaENvbnZlcnRpb247XG5cbmZ1bmN0aW9uIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgZm5OYW1lLCBpbnRlcm5hbEZuTmFtZSwgc2l6ZUluLCBzaXplT3V0LCByZXZlcnNlKSB7XG4gICAgaWYgKHR5cGVvZiByZXZlcnNlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIFNldCB0aGUgcmV2ZXJzZSBpbiBhIHdheSB0aGF0IGFsbG93cyB0byB1c2UgdGhlIHNhbWUgYnVmZmVyIGFzIGluL291dC5cbiAgICAgICAgaWYgKHNpemVJbiA8IHNpemVPdXQpIHtcbiAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgIGYuYWRkUGFyYW0oXCJwSW4xXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwSW4yXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdEluMVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRJbjJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0T3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJbjFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHNpemVJbilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjJcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSW4yXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChzaXplSW4pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3Qoc2l6ZU91dClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludGVybmFsRm5OYW1lLCBjLmdldExvY2FsKFwiaXRJbjFcIiksIGMuZ2V0TG9jYWwoXCJpdEluMlwiKSwgYy5nZXRMb2NhbChcIml0T3V0XCIpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0SW4xXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4yXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRJbjJcIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3Qoc2l6ZU91dCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4xXCIsIGMuZ2V0TG9jYWwoXCJwSW4xXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMlwiLCBjLmdldExvY2FsKFwicEluMlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRlcm5hbEZuTmFtZSwgYy5nZXRMb2NhbChcIml0SW4xXCIpLCBjLmdldExvY2FsKFwiaXRJbjJcIiksIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluMVwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW4yXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KHNpemVPdXQpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIE1hbnkgb2YgdGhlc2UgdXRpbGl0aWVzIGFyZSBmcm9tIHRoZSBgYmlnLWludGVnZXJgIGxpYnJhcnksXG4vLyBidXQgYWRqdXN0ZWQgdG8gb25seSB3b3JrIHdpdGggbmF0aXZlIEJpZ0ludCB0eXBlXG4vLyBSZWYgaHR0cHM6Ly9naXRodWIuY29tL3BldGVyb2xzb24vQmlnSW50ZWdlci5qcy9ibG9iL2U1ZDIxNTRkM2M0MTcwNjljNTFlNzExNmJhZmMzYjkxZDBiOWZlNDEvQmlnSW50ZWdlci5qc1xuLy8gT3JpZ2luYWxseSBsaWNlbnNlZCBUaGUgVW5saWNlbnNlXG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPiBiID8gMSA6IC0xO1xufVxuXG5mdW5jdGlvbiBzcXVhcmUobikge1xuICAgIHJldHVybiBuICogbjtcbn1cblxuZnVuY3Rpb24gaXNPZGQobikge1xuICAgIHJldHVybiBuICUgMm4gIT09IDBuO1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4obikge1xuICAgIHJldHVybiBuICUgMm4gPT09IDBuO1xufVxuXG5mdW5jdGlvbiBpc05lZ2F0aXZlKG4pIHtcbiAgICByZXR1cm4gbiA8IDBuO1xufVxuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlKG4pIHtcbiAgICByZXR1cm4gbiA+IDBuO1xufVxuXG5mdW5jdGlvbiBiaXRMZW5ndGgobikge1xuICAgIGlmIChpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aCAtIDE7IC8vIGRpc2NhcmQgdGhlIC0gc2lnblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFicyhuKSB7XG4gICAgcmV0dXJuIG4gPCAwbiA/IC1uIDogbjtcbn1cblxuZnVuY3Rpb24gaXNVbml0KG4pIHtcbiAgICByZXR1cm4gYWJzKG4pID09PSAxbjtcbn1cblxuZnVuY3Rpb24gbW9kSW52KGEsIG4pIHtcbiAgICB2YXIgdCA9IDBuLCBuZXdUID0gMW4sIHIgPSBuLCBuZXdSID0gYWJzKGEpLCBxLCBsYXN0VCwgbGFzdFI7XG4gICAgd2hpbGUgKG5ld1IgIT09IDBuKSB7XG4gICAgICAgIHEgPSByIC8gbmV3UjtcbiAgICAgICAgbGFzdFQgPSB0O1xuICAgICAgICBsYXN0UiA9IHI7XG4gICAgICAgIHQgPSBuZXdUO1xuICAgICAgICByID0gbmV3UjtcbiAgICAgICAgbmV3VCA9IGxhc3RUIC0gKHEgKiBuZXdUKTtcbiAgICAgICAgbmV3UiA9IGxhc3RSIC0gKHEgKiBuZXdSKTtcbiAgICB9XG4gICAgaWYgKCFpc1VuaXQocikpIHRocm93IG5ldyBFcnJvcihhLnRvU3RyaW5nKCkgKyBcIiBhbmQgXCIgKyBuLnRvU3RyaW5nKCkgKyBcIiBhcmUgbm90IGNvLXByaW1lXCIpO1xuICAgIGlmIChjb21wYXJlKHQsIDBuKSA9PT0gLTEpIHtcbiAgICAgICAgdCA9IHQgKyBuO1xuICAgIH1cbiAgICBpZiAoaXNOZWdhdGl2ZShhKSkge1xuICAgICAgICByZXR1cm4gLXQ7XG4gICAgfVxuICAgIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBtb2RQb3cobiwgZXhwLCBtb2QpIHtcbiAgICBpZiAobW9kID09PSAwbikgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHRha2UgbW9kUG93IHdpdGggbW9kdWx1cyAwXCIpO1xuICAgIHZhciByID0gMW4sXG4gICAgICAgIGJhc2UgPSBuICUgbW9kO1xuICAgIGlmIChpc05lZ2F0aXZlKGV4cCkpIHtcbiAgICAgICAgZXhwID0gZXhwICogLTFuO1xuICAgICAgICBiYXNlID0gbW9kSW52KGJhc2UsIG1vZCk7XG4gICAgfVxuICAgIHdoaWxlIChpc1Bvc2l0aXZlKGV4cCkpIHtcbiAgICAgICAgaWYgKGJhc2UgPT09IDBuKSByZXR1cm4gMG47XG4gICAgICAgIGlmIChpc09kZChleHApKSByID0gciAqIGJhc2UgJSBtb2Q7XG4gICAgICAgIGV4cCA9IGV4cCAvIDJuO1xuICAgICAgICBiYXNlID0gc3F1YXJlKGJhc2UpICUgbW9kO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY29tcGFyZUFicyhhLCBiKSB7XG4gICAgYSA9IGEgPj0gMG4gPyBhIDogLWE7XG4gICAgYiA9IGIgPj0gMG4gPyBiIDogLWI7XG4gICAgcmV0dXJuIGEgPT09IGIgPyAwIDogYSA+IGIgPyAxIDogLTE7XG59XG5cbmZ1bmN0aW9uIGlzRGl2aXNpYmxlQnkoYSwgbikge1xuICAgIGlmIChuID09PSAwbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc1VuaXQobikpIHJldHVybiB0cnVlO1xuICAgIGlmIChjb21wYXJlQWJzKG4sIDJuKSA9PT0gMCkgcmV0dXJuIGlzRXZlbihhKTtcbiAgICByZXR1cm4gYSAlIG4gPT09IDBuO1xufVxuXG5mdW5jdGlvbiBpc0Jhc2ljUHJpbWUodikge1xuICAgIHZhciBuID0gYWJzKHYpO1xuICAgIGlmIChpc1VuaXQobikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAobiA9PT0gMm4gfHwgbiA9PT0gM24gfHwgbiA9PT0gNW4pIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0V2ZW4obikgfHwgaXNEaXZpc2libGVCeShuLCAzbikgfHwgaXNEaXZpc2libGVCeShuLCA1bikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAobiA8IDQ5bikgcmV0dXJuIHRydWU7XG4gICAgLy8gd2UgZG9uJ3Qga25vdyBpZiBpdCdzIHByaW1lOiBsZXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBmaWd1cmUgaXQgb3V0XG59XG5cbmZ1bmN0aW9uIHByZXYobikge1xuICAgIHJldHVybiBuIC0gMW47XG59XG5cbmZ1bmN0aW9uIG1pbGxlclJhYmluVGVzdChuLCBhKSB7XG4gICAgdmFyIG5QcmV2ID0gcHJldihuKSxcbiAgICAgICAgYiA9IG5QcmV2LFxuICAgICAgICByID0gMCxcbiAgICAgICAgZCwgaSwgeDtcbiAgICB3aGlsZSAoaXNFdmVuKGIpKSBiID0gYiAvIDJuLCByKys7XG4gICAgbmV4dDogZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG4gPCBhW2ldKSBjb250aW51ZTtcbiAgICAgICAgeCA9IG1vZFBvdyhCaWdJbnQoYVtpXSksIGIsIG4pO1xuICAgICAgICBpZiAoaXNVbml0KHgpIHx8IHggPT09IG5QcmV2KSBjb250aW51ZTtcbiAgICAgICAgZm9yIChkID0gciAtIDE7IGQgIT0gMDsgZC0tKSB7XG4gICAgICAgICAgICB4ID0gc3F1YXJlKHgpICUgbjtcbiAgICAgICAgICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh4ID09PSBuUHJldikgY29udGludWUgbmV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1lKHApIHtcbiAgICB2YXIgaXNQcmltZSA9IGlzQmFzaWNQcmltZShwKTtcbiAgICBpZiAoaXNQcmltZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaXNQcmltZTtcbiAgICB2YXIgbiA9IGFicyhwKTtcbiAgICB2YXIgYml0cyA9IGJpdExlbmd0aChuKTtcbiAgICBpZiAoYml0cyA8PSA2NClcbiAgICAgICAgcmV0dXJuIG1pbGxlclJhYmluVGVzdChuLCBbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3XSk7XG4gICAgdmFyIGxvZ04gPSBNYXRoLmxvZygyKSAqIE51bWJlcihiaXRzKTtcbiAgICB2YXIgdCA9IE1hdGguY2VpbChsb2dOKTtcbiAgICBmb3IgKHZhciBhID0gW10sIGkgPSAwOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgIGEucHVzaChCaWdJbnQoaSArIDIpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1pbGxlclJhYmluVGVzdChuLCBhKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuYml0TGVuZ3RoID0gYml0TGVuZ3RoO1xubW9kdWxlLmV4cG9ydHMuaXNPZGQgPSBpc09kZDtcbm1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xubW9kdWxlLmV4cG9ydHMuYWJzID0gYWJzO1xubW9kdWxlLmV4cG9ydHMuaXNVbml0ID0gaXNVbml0O1xubW9kdWxlLmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG5tb2R1bGUuZXhwb3J0cy5tb2RJbnYgPSBtb2RJbnY7XG5tb2R1bGUuZXhwb3J0cy5tb2RQb3cgPSBtb2RQb3c7XG5tb2R1bGUuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbm1vZHVsZS5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgYnVpbGRJbnQgPSByZXF1aXJlKFwiLi9idWlsZF9pbnQuanNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgYnVpbGRFeHAgPSByZXF1aXJlKFwiLi9idWlsZF90aW1lc3NjYWxhclwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hJbnZlcnNlID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hpbnZlcnNlXCIpO1xuY29uc3QgYnVpbGRCYXRjaENvbnZlcnRpb24gPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaGNvbnZlcnRpb25cIik7XG5jb25zdCBidWlsZEJhdGNoT3AgPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaG9wXCIpO1xuY29uc3QgeyBiaXRMZW5ndGgsIG1vZEludiwgbW9kUG93LCBpc1ByaW1lLCBpc09kZCwgc3F1YXJlIH0gPSByZXF1aXJlKFwiLi9iaWdpbnQuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGMW0obW9kdWxlLCBfcSwgX3ByZWZpeCwgX2ludFByZWZpeCkge1xuICAgIGNvbnN0IHEgPSBCaWdJbnQoX3EpO1xuICAgIGNvbnN0IG42NCA9IE1hdGguZmxvb3IoKGJpdExlbmd0aChxIC0gMW4pIC0gMSkvNjQpICsxO1xuICAgIGNvbnN0IG4zMiA9IG42NCoyO1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG5cbiAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4IHx8IFwiZjFtXCI7XG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcblxuICAgIGNvbnN0IGludFByZWZpeCA9IGJ1aWxkSW50KG1vZHVsZSwgbjY0LCBfaW50UHJlZml4KTtcbiAgICBjb25zdCBwcSA9IG1vZHVsZS5hbGxvYyhuOCwgdXRpbHMuYmlnSW50MkJ5dGVzTEUocSwgbjgpKTtcblxuICAgIGNvbnN0IHBSMiA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRShzcXVhcmUoMW4gPDwgQmlnSW50KG42NCo2NCkpICUgcSwgbjgpKTtcbiAgICBjb25zdCBwT25lID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCgxbiA8PCBCaWdJbnQobjY0KjY0KSkgJSBxLCBuOCkpO1xuICAgIGNvbnN0IHBaZXJvID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKDBuLCBuOCkpO1xuICAgIGNvbnN0IF9taW51c09uZSA9IHEgLSAxbjtcbiAgICBjb25zdCBfZSA9IF9taW51c09uZSA+PiAxbjsgLy8gZSA9IChwLTEpLzJcbiAgICBjb25zdCBwZSA9IG1vZHVsZS5hbGxvYyhuOCwgdXRpbHMuYmlnSW50MkJ5dGVzTEUoX2UsIG44KSk7XG5cbiAgICBjb25zdCBfZVBsdXNPbmUgPSBfZSArIDFuOyAvLyBlID0gKHAtMSkvMlxuICAgIGNvbnN0IHBlUGx1c09uZSA9IG1vZHVsZS5hbGxvYyhuOCwgdXRpbHMuYmlnSW50MkJ5dGVzTEUoX2VQbHVzT25lLCBuOCkpO1xuXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgcHE6IHBxLFxuICAgICAgICBwUjI6IHBSMixcbiAgICAgICAgbjY0OiBuNjQsXG4gICAgICAgIHE6IHEsXG4gICAgICAgIHBPbmU6IHBPbmUsXG4gICAgICAgIHBaZXJvOiBwWmVybyxcbiAgICAgICAgcGVQbHVzT25lOiBwZVBsdXNPbmVcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX29uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChpbnRQcmVmaXggKyBcIl9jb3B5XCIsIGMuaTMyX2NvbnN0KHBPbmUpLCBjLmdldExvY2FsKFwicHJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYWRkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4K1wiX2FkZFwiLCBjLmdldExvY2FsKFwieFwiKSwgIGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCtcIl9ndGVcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5kcm9wKGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zdWJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXgrXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCAgYy5nZXRMb2NhbChcInlcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9hZGRcIiwgYy5nZXRMb2NhbChcInJcIiksICBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE5lZygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbmVnXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIGMuaTMyX2NvbnN0KHBaZXJvKSwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc05lZ2F0aXZlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc05lZ2F0aXZlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX2d0ZVwiLCBBVVgsIGMuaTMyX2NvbnN0KHBlUGx1c09uZSkgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU2lnbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc2lnblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYgKFxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInhcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwieFwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX2d0ZVwiLCBBVVgsIGMuaTMyX2NvbnN0KHBlUGx1c09uZSkpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KC0xKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTVJlZHVjdCgpIHtcbiAgICAgICAgY29uc3QgY2FycmllcyA9IG1vZHVsZS5hbGxvYyhuMzIqbjMyKjgpO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX21SZWR1Y3RcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5wMzJcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibVwiLCBcImk2NFwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IG5wMzIgPSBOdW1iZXIoMHgxMDAwMDAwMDBuIC0gbW9kSW52KHEsIDB4MTAwMDAwMDAwbikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwibnAzMlwiLCBjLmk2NF9jb25zdChucDMyKSkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJjXCIsIGMuaTY0X2NvbnN0KDApKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcIm1cIixcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ0XCIpLCBpKjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJucDMyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bjMyOyBqKyspIHtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ0XCIpLCAoaStqKSo0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5pMzJfY29uc3QocHEpLCBqKjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpK2opKjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KGNhcnJpZXMpLFxuICAgICAgICAgICAgICAgICAgICBpKjQsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXgrXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoY2FycmllcyksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjMyKjQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZE11bCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tdWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibnAzMlwiLCBcImk2NFwiKTtcblxuXG4gICAgICAgIGZvciAobGV0IGk9MDtpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieFwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInlcIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJtXCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwicVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBucDMyID0gTnVtYmVyKDB4MTAwMDAwMDAwbiAtIG1vZEludihxLCAweDEwMDAwMDAwMG4pKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcIm5wMzJcIiwgYy5pNjRfY29uc3QobnAzMikpKTtcblxuXG4gICAgICAgIGNvbnN0IGxvYWRYID0gW107XG4gICAgICAgIGNvbnN0IGxvYWRZID0gW107XG4gICAgICAgIGNvbnN0IGxvYWRRID0gW107XG4gICAgICAgIGZ1bmN0aW9uIG11bGlqKGksIGopIHtcbiAgICAgICAgICAgIGxldCBYLFk7XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2ldKSB7XG4gICAgICAgICAgICAgICAgWCA9IGMudGVlTG9jYWwoXCJ4XCIraSwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBpKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFggPSBjLmdldExvY2FsKFwieFwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2FkWVtqXSkge1xuICAgICAgICAgICAgICAgIFkgPSBjLnRlZUxvY2FsKFwieVwiK2osIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieVwiKSwgaio0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFlbal0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBZID0gYy5nZXRMb2NhbChcInlcIitqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggWCwgWSApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbXVscW0oaSwgaikge1xuICAgICAgICAgICAgbGV0IFEsTTtcbiAgICAgICAgICAgIGlmICghbG9hZFFbaV0pIHtcbiAgICAgICAgICAgICAgICBRID0gYy50ZWVMb2NhbChcInFcIitpLCBjLmk2NF9sb2FkMzJfdShjLmkzMl9jb25zdCgwKSwgcHEraSo0ICkpO1xuICAgICAgICAgICAgICAgIGxvYWRRW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUSA9IGMuZ2V0TG9jYWwoXCJxXCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBNID0gYy5nZXRMb2NhbChcIm1cIitqKTtcblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggUSwgTSApO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgYzAgPSBcImMwXCI7XG4gICAgICAgIGxldCBjMSA9IFwiYzFcIjtcblxuICAgICAgICBmb3IgKGxldCBrPTA7IGs8bjMyKjItMTsgaysrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDAsIGstbjMyKzEpOyAoaTw9aykmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgxLCBrLW4zMisxKTsgKGk8PWspJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHFtKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGs8bjMyKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtXCIrayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5wMzJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxxbSgwLGspXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZiAoaz49bjMyKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAoay1uMzIpKjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtjMCwgYzFdID0gW2MxLCBjMF07XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIG4zMio0LTQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX3dyYXBfaTY0KGMuZ2V0TG9jYWwoYzEpKSxcbiAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4K1wiX2d0ZVwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpICApLFxuICAgICAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMF9vbGRcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMV9vbGRcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJucDMyXCIsIFwiaTY0XCIpO1xuXG5cbiAgICAgICAgZm9yIChsZXQgaT0wO2k8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ4XCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwibVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInFcIitpLCBcImk2NFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgbnAzMiA9IE51bWJlcigweDEwMDAwMDAwMG4gLSBtb2RJbnYocSwgMHgxMDAwMDAwMDBuKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJucDMyXCIsIGMuaTY0X2NvbnN0KG5wMzIpKSk7XG5cblxuICAgICAgICBjb25zdCBsb2FkWCA9IFtdO1xuICAgICAgICBjb25zdCBsb2FkUSA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBtdWxpaihpLCBqKSB7XG4gICAgICAgICAgICBsZXQgWCxZO1xuICAgICAgICAgICAgaWYgKCFsb2FkWFtpXSkge1xuICAgICAgICAgICAgICAgIFggPSBjLnRlZUxvY2FsKFwieFwiK2ksIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaSo0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBYID0gYy5nZXRMb2NhbChcInhcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9hZFhbal0pIHtcbiAgICAgICAgICAgICAgICBZID0gYy50ZWVMb2NhbChcInhcIitqLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGoqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWSA9IGMuZ2V0TG9jYWwoXCJ4XCIraik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFgsIFkgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG11bHFtKGksIGopIHtcbiAgICAgICAgICAgIGxldCBRLE07XG4gICAgICAgICAgICBpZiAoIWxvYWRRW2ldKSB7XG4gICAgICAgICAgICAgICAgUSA9IGMudGVlTG9jYWwoXCJxXCIraSwgYy5pNjRfbG9hZDMyX3UoYy5pMzJfY29uc3QoMCksIHBxK2kqNCApKTtcbiAgICAgICAgICAgICAgICBsb2FkUVtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFEgPSBjLmdldExvY2FsKFwicVwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTSA9IGMuZ2V0TG9jYWwoXCJtXCIraik7XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFEsIE0gKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IGMwID0gXCJjMFwiO1xuICAgICAgICBsZXQgYzEgPSBcImMxXCI7XG4gICAgICAgIGxldCBjMF9vbGQgPSBcImMwX29sZFwiO1xuICAgICAgICBsZXQgYzFfb2xkID0gXCJjMV9vbGRcIjtcblxuICAgICAgICBmb3IgKGxldCBrPTA7IGs8bjMyKjItMTsgaysrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCwgYy5pNjRfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsIGMuaTY0X2NvbnN0KDApKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDAsIGstbjMyKzEpOyAoaTwoKGsrMSk+PjEpICkmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsaWooaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IGJ5IDJcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGslMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihrPj4xLCBrPj4xKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2xkIGNhcnJ5XG5cbiAgICAgICAgICAgIGlmIChrPjApIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMV9vbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMSwgay1uMzIrMSk7IChpPD1rKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxxbShpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrPG4zMikge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibVwiK2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJucDMyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVscW0oMCxrKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrPj1uMzIpIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChrLW4zMikqNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIGMwX29sZCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIGMxX29sZCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBuMzIqNC00LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfd3JhcF9pNjQoYy5nZXRMb2NhbChjMV9vbGQpKSxcbiAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4K1wiX2d0ZVwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpICApLFxuICAgICAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZU9sZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlT2xkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb01vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RvTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4K1wiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocFIyKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb21Nb250Z29tZXJ5KCkge1xuXG4gICAgICAgIGNvbnN0IHBBdXgyID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChpbnRQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwQXV4MikgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoaW50UHJlZml4ICsgXCJfemVyb1wiLCBjLmkzMl9jb25zdChwQXV4MiArIG44KSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXgrXCJfbVJlZHVjdFwiLCBjLmkzMl9jb25zdChwQXV4MiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbnZlcnNlKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9pbnZlcnNlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChpbnRQcmVmaXggKyBcIl9pbnZlcnNlTW9kXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSB2YXJpb3VzIHZhbHVzZSBuZWVkZWQgZm9yIHNxcnRcblxuXG4gICAgbGV0IF9ucXIgPSAybjtcbiAgICBpZiAoaXNQcmltZShxKSkge1xuICAgICAgICB3aGlsZSAobW9kUG93KF9ucXIsIF9lLCBxKSAhPT0gX21pbnVzT25lKSBfbnFyID0gX25xciArIDFuO1xuICAgIH1cblxuICAgIGxldCBzMiA9IDA7XG4gICAgbGV0IF90ID0gX21pbnVzT25lO1xuXG4gICAgd2hpbGUgKCghaXNPZGQoX3QpKSYmKF90ICE9PSAwbikpIHtcbiAgICAgICAgczIrKztcbiAgICAgICAgX3QgPSBfdCA+PiAxbjtcbiAgICB9XG4gICAgY29uc3QgcHQgPSBtb2R1bGUuYWxsb2MobjgsIHV0aWxzLmJpZ0ludDJCeXRlc0xFKF90LCBuOCkpO1xuXG4gICAgY29uc3QgX25xclRvVCA9IG1vZFBvdyhfbnFyLCBfdCwgcSk7XG4gICAgY29uc3QgcE5xclRvVCA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgoX25xclRvVCA8PCBCaWdJbnQobjY0KjY0KSkgJSBxLCBuOCkpO1xuXG4gICAgY29uc3QgX3RQbHVzT25lT3ZlcjIgPSAoX3QgKyAxbikgPj4gMW47XG4gICAgY29uc3QgcHRQbHVzT25lT3ZlcjIgPSBtb2R1bGUuYWxsb2MobjgsIHV0aWxzLmJpZ0ludDJCeXRlc0xFKF90UGx1c09uZU92ZXIyLCBuOCkpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXJ0KCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9zcXJ0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBPTkUgPSBjLmkzMl9jb25zdChwT25lKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgU1EgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgLy8gSWYgKG49PTApIHJldHVybiAwXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIm5cIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwiclwiKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibVwiLCBjLmkzMl9jb25zdChzMikpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5pMzJfY29uc3QocE5xclRvVCksIEMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QocHQpLCBjLmkzMl9jb25zdChuOCksIFQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QocHRQbHVzT25lT3ZlcjIpLCBjLmkzMl9jb25zdChuOCksIFIpLFxuXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuY2FsbChwcmVmaXggKyBcIl9lcVwiLCBULCBPTkUpKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgVCwgU1EpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmNhbGwocHJlZml4ICsgXCJfZXFcIiwgU1EsIE9ORSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIFNRLCBTUSksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgQywgQiksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfc3ViKGMuaTMyX3N1YiggYy5nZXRMb2NhbChcIm1cIiksIGMuZ2V0TG9jYWwoXCJpXCIpKSwgYy5pMzJfY29uc3QoMSkpICksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJqXCIpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgQiwgQiksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIm1cIiwgYy5nZXRMb2NhbChcImlcIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgQiwgQyksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBULCBDLCBUKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIFIsIEIsIFIpLFxuXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzTmVnYXRpdmVcIiwgUiksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ1wiLCBSLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgUiwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzU3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgT05FID0gYy5pMzJfY29uc3QocE9uZSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwiblwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QocGUpLCBjLmkzMl9jb25zdChuOCksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXFcIiwgQVVYLCBPTkUpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZExvYWQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2xvYWRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImxcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHBBdXggPSBtb2R1bGUuYWxsb2MobjgpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChwQXV4KTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5nZXRMb2NhbChcInNjYWxhclwiKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2d0X3UoYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIikpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIFIpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBSMiksIFIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJwXCIpLCBSLCBBVVgpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgYy5nZXRMb2NhbChcInJcIiksIEFVWCwgYy5nZXRMb2NhbChcInJcIikpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibFwiLCBjLmkzMl9yZW1fdSggYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICBjLmlmKGMuaTMyX2VxeihjLmdldExvY2FsKFwibFwiKSksIGMucmV0KFtdKSksXG4gICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfemVyb1wiLCBBVVgpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcShjLmdldExvY2FsKFwialwiKSwgYy5nZXRMb2NhbChcImxcIikpKSxcblxuICAgICAgICAgICAgICAgIGMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgIHBBdXgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoYy5nZXRMb2NhbChcInBcIikpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIFIpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgUiwgYy5pMzJfY29uc3QocFIyKSwgUilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgUiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgYy5nZXRMb2NhbChcInJcIiksIEFVWCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVGltZXNTY2FsYXIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RpbWVzU2NhbGFyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhckxlblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbG9hZFwiLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc09uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnJldChjLmNhbGwoaW50UHJlZml4ICsgXCJfZXFcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KHBPbmUpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihpbnRQcmVmaXggKyBcIl9jb3B5XCIsIHByZWZpeCtcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihpbnRQcmVmaXggKyBcIl96ZXJvXCIsIHByZWZpeCtcIl96ZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihpbnRQcmVmaXggKyBcIl9pc1plcm9cIiwgcHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oaW50UHJlZml4ICsgXCJfZXFcIiwgcHJlZml4K1wiX2VxXCIpO1xuXG4gICAgYnVpbGRJc09uZSgpO1xuICAgIGJ1aWxkQWRkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZE5lZygpO1xuICAgIGJ1aWxkTVJlZHVjdCgpO1xuICAgIGJ1aWxkTXVsKCk7XG4gICAgYnVpbGRTcXVhcmUoKTtcbiAgICBidWlsZFNxdWFyZU9sZCgpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkSXNOZWdhdGl2ZSgpO1xuICAgIGJ1aWxkU2lnbigpO1xuICAgIGJ1aWxkSW52ZXJzZSgpO1xuICAgIGJ1aWxkT25lKCk7XG4gICAgYnVpbGRMb2FkKCk7XG4gICAgYnVpbGRUaW1lc1NjYWxhcigpO1xuICAgIGJ1aWxkQmF0Y2hJbnZlcnNlKG1vZHVsZSwgcHJlZml4KTtcbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoVG9Nb250Z29tZXJ5XCIsIHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiLCBuOCwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hGcm9tTW9udGdvbWVyeVwiLCBwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiLCBuOCwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hOZWdcIiwgcHJlZml4ICsgXCJfbmVnXCIsIG44LCBuOCk7XG4gICAgYnVpbGRCYXRjaE9wKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hBZGRcIiwgcHJlZml4ICsgXCJfYWRkXCIsIG44LCBuOCk7XG4gICAgYnVpbGRCYXRjaE9wKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hTdWJcIiwgcHJlZml4ICsgXCJfc3ViXCIsIG44LCBuOCk7XG4gICAgYnVpbGRCYXRjaE9wKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hNdWxcIiwgcHJlZml4ICsgXCJfbXVsXCIsIG44LCBuOCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNPbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NpZ25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX21SZWR1Y3RcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX211bFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXVhcmVPbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ludmVyc2VcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX29uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbG9hZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIik7XG4gICAgYnVpbGRFeHAoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfZXhwXCIsXG4gICAgICAgIG44LFxuICAgICAgICBwcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgcHJlZml4ICsgXCJfc3F1YXJlXCIsXG4gICAgICAgIGludFByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgcHJlZml4ICsgXCJfb25lXCIsXG4gICAgKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXhwXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEludmVyc2VcIik7XG4gICAgaWYgKGlzUHJpbWUocSkpIHtcbiAgICAgICAgYnVpbGRTcXJ0KCk7XG4gICAgICAgIGJ1aWxkSXNTcXVhcmUoKTtcbiAgICAgICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxcnRcIik7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1NxdWFyZVwiKTtcbiAgICB9XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEZyb21Nb250Z29tZXJ5XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKG1vZHVsZS5mdW5jdGlvbklkeEJ5TmFtZSk7XG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgYnVpbGRGMW0gPXJlcXVpcmUoXCIuL2J1aWxkX2YxbS5qc1wiKTtcbmNvbnN0IHsgYml0TGVuZ3RoIH0gPSByZXF1aXJlKFwiLi9iaWdpbnQuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGMShtb2R1bGUsIF9xLCBfcHJlZml4LCBfZjFtUHJlZml4LCBfaW50UHJlZml4KSB7XG5cbiAgICBjb25zdCBxID0gQmlnSW50KF9xKTtcbiAgICBjb25zdCBuNjQgPSBNYXRoLmZsb29yKChiaXRMZW5ndGgocSAtIDFuKSAtIDEpLzY0KSArMTtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImYxXCI7XG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG42NFxuICAgIH07XG5cbiAgICBjb25zdCBpbnRQcmVmaXggPSBfaW50UHJlZml4IHx8IFwiaW50XCI7XG4gICAgY29uc3QgZjFtUHJlZml4ID0gYnVpbGRGMW0obW9kdWxlLCBxLCBfZjFtUHJlZml4LCBpbnRQcmVmaXgpO1xuXG5cbiAgICBjb25zdCBwUjIgPSAgICAgbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5wUjI7XG4gICAgY29uc3QgcHEgPSAgICAgbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5wcTtcbiAgICBjb25zdCBwZVBsdXNPbmUgPSBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLnBlUGx1c09uZTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsKCkge1xuICAgICAgICBjb25zdCBwQXV4MSA9IG1vZHVsZS5hbGxvYyhuOCk7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX211bFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KHBBdXgxKSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwQXV4MSksIGMuaTMyX2NvbnN0KHBSMiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbnZlcnNlKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9pbnZlcnNlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChpbnRQcmVmaXggKyBcIl9pbnZlcnNlTW9kXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwcSksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc05lZ2F0aXZlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc05lZ2F0aXZlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX2d0ZVwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocGVQbHVzT25lKSApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBidWlsZE11bCgpO1xuICAgIGJ1aWxkU3F1YXJlKCk7XG4gICAgYnVpbGRJbnZlcnNlKCk7XG4gICAgYnVpbGRJc05lZ2F0aXZlKCk7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX2FkZFwiLCBwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX3N1YlwiLCBwcmVmaXggKyBcIl9zdWJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX25lZ1wiLCBwcmVmaXggKyBcIl9uZWdcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX211bFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbnZlcnNlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc05lZ2F0aXZlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9jb3B5XCIsIHByZWZpeCtcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl96ZXJvXCIsIHByZWZpeCtcIl96ZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9vbmVcIiwgcHJlZml4K1wiX29uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX2VxXCIsIHByZWZpeCtcIl9lcVwiKTtcblxuICAgIHJldHVybiBwcmVmaXg7XG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuY29uc3QgYnVpbGRFeHAgPSByZXF1aXJlKFwiLi9idWlsZF90aW1lc3NjYWxhclwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hJbnZlcnNlID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hpbnZlcnNlXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEYybShtb2R1bGUsIG11bE5vblJlc2lkdWVGbiwgcHJlZml4LCBmMW1QcmVmaXgpIHtcblxuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG5cbiAgICBjb25zdCBmMW44ID0gbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5uNjQqODtcbiAgICBjb25zdCBxID0gbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5xO1xuXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0OiBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLm42NCoyXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9hZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgwLCB5MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgeDEsIHkxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUaW1lc1NjYWxhcigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdGltZXNTY2FsYXJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90aW1lc1NjYWxhclwiLCB4MCwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90aW1lc1NjYWxhclwiLCB4MSwgYy5nZXRMb2NhbChcInNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zdWJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHgwLCB5MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDEsIHkxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGROZWcoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX25lZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZENvbmp1Z2F0ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfY29uanVnYXRlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGYxbVByZWZpeCtcIl9pc05lZ2F0aXZlXCIsIHgwKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmNhbGwoZjFtUHJlZml4K1wiX2lzTmVnYXRpdmVcIiwgeDEpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tdWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCB4MCwgeTAsIEEpLCAgICAgICAgICAgICAvLyBBID0geDAqeTBcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgeDEsIHkxLCBCKSwgICAgICAgICAgICAgLy8gQiA9IHgxKnkxXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgxLCBDKSwgICAgICAgICAgICAgLy8gQyA9IHgwICsgeDFcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgeTAsIHkxLCBEKSwgICAgICAgICAgICAgLy8gRCA9IHkwICsgeTFcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgQywgRCwgQyksICAgICAgICAgICAgICAgLy8gQyA9ICh4MCArIHgxKSooeTAgKyB5MSkgPSB4MCp5MCt4MCp5MSt4MSp5MCt4MSp5MVxuXG4gICAgICAgICAgICAvLyAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBCLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZSksIHIwKSwgIC8vIHIwID0gbnIqKHgxKnkxKVxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgQiwgcjApLCAgLy8gcjAgPSBuciooeDEqeTEpXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEEsIHIwLCByMCksICAgICAgICAgICAgIC8vIHIwID0geDAqeTAgKyBuciooeDEqeTEpXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEEsIEIsIHIxKSwgICAgICAgICAgICAgLy8gcjEgPSB4MCp5MCt4MSp5MVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBDLCByMSwgcjEpICAgICAgICAgICAgICAvLyByMSA9IHgwKnkwK3gwKnkxK3gxKnkwK3gxKnkxIC0geDAqeTAreDEqeTEgPSB4MCp5MSt4MSp5MFxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tdWwxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeSA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCB4MCwgeSwgcjApLCAgICAgICAgICAgICAvLyBBID0geDAqeVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCB4MSwgeSwgcjEpLCAgICAgICAgICAgICAvLyBCID0geDEqeVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgY29uc3QgQUIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBUEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBUE5CID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQUJQTkFCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vIEFCID0geDAqeTFcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgeDAsIHgxLCBBQiksXG5cbiAgICAgICAgICAgIC8vIEFQQiA9IHgwK3kxXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MSwgQVBCKSxcblxuICAgICAgICAgICAgLy8gQVBCTjAgPSB4MCArIG5yKngxXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCB4MSwgQVBOQiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCBBUE5CLCBBUE5CKSxcblxuICAgICAgICAgICAgLy8gQUJQTkFCID0gYWIgKyBuciphYlxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgQUIsIEFCUE5BQiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEFCUE5BQiwgQUIsIEFCUE5BQiksXG5cbiAgICAgICAgICAgIC8vIHIwID0gQVBCICogQVBOQiAtIEFCUE5BQlxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBBUEIsIEFQTkIsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgcjAsIEFCUE5BQiwgcjApLFxuXG4gICAgICAgICAgICAvLyByMSA9IEFCICsgQUJcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQUIsIEFCLCByMSksXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90b01vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90b01vbnRnb21lcnlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIsIHgxLCByMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb21Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIsIHgxLCByMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZENvcHkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2NvcHlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDEsIHIxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfemVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX29uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfb25lXCIsIHgwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEVxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9lcVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2VxXCIsIHgwLCB5MCksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9lcVwiLCB4MSwgeTEpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1plcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgwKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEludmVyc2UoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ludmVyc2VcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgY29uc3QgdDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3F1YXJlXCIsIHgwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3NxdWFyZVwiLCB4MSwgdDEpLFxuICAgICAgICAgICAgLy8gYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgdDEsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlKSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgdDEsIHQyKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgdDAsIHQyLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2ludmVyc2VcIiwgdDIsIHQzKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDAsIHQzLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MSwgdDMsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHIxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFNpZ24oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NpZ25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic1wiICwgYy5jYWxsKCBmMW1QcmVmaXggKyBcIl9zaWduXCIsIHgxKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuZ2V0TG9jYWwoXCJzXCIpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuY2FsbCggZjFtUHJlZml4ICsgXCJfc2lnblwiLCB4MCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc09uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNPbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfaXNPbmVcIiwgeDApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgeDEpLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIC8vIENoZWNrIGhlcmU6IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTIvNjg1LnBkZlxuICAgIC8vIEFsZyA5YWRqXG4gICAgZnVuY3Rpb24gYnVpbGRTcXJ0KCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxcnRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICAvLyBCaWdJbnQgY2FuJ3QgdGFrZSBgdW5kZWZpbmVkYCBzbyB3ZSB1c2UgYHx8IDBgXG4gICAgICAgIGNvbnN0IGUzNCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgoQmlnSW50KHEgfHwgMCkgLSAzbikgLyA0biwgZjFuOCApKSk7XG4gICAgICAgIC8vIEJpZ0ludCBjYW4ndCB0YWtlIGB1bmRlZmluZWRgIHNvIHdlIHVzZSBgfHwgMGBcbiAgICAgICAgY29uc3QgZTEyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKChCaWdJbnQocSB8fCAwKSAtIDFuKSAvIDJuLCBmMW44ICkpKTtcblxuICAgICAgICBjb25zdCBhID0gYy5nZXRMb2NhbChcImFcIik7XG4gICAgICAgIGNvbnN0IGExID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBhbHBoYSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgYTAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IHBuMSA9IG1vZHVsZS5hbGxvYyhmMW44KjIpO1xuICAgICAgICBjb25zdCBuMSA9IGMuaTMyX2NvbnN0KHBuMSk7XG4gICAgICAgIGNvbnN0IG4xYSA9IGMuaTMyX2NvbnN0KHBuMSk7XG4gICAgICAgIGNvbnN0IG4xYiA9IGMuaTMyX2NvbnN0KHBuMStmMW44KTtcbiAgICAgICAgY29uc3QgeDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IGIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIG4xKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdcIiwgbjEsIG4xKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYSwgZTM0LCBjLmkzMl9jb25zdChmMW44KSwgYTEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMSA9IEYucG93KGEsIEYuc3FydF9lMzQpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBhMSwgYWxwaGEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBhLCBhbHBoYSwgYWxwaGEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMCA9IEYubXVsKEYuZnJvYmVuaXVzKDEsIGFsZmEpLCBhbGZhKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgYWxwaGEsIGEwKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYTAsIGFscGhhLCBhMCksXG5cbiAgICAgICAgICAgIC8vIGlmIChGLmVxKGEwLCBGLm5lZ29uZSkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYy5pZihjLmNhbGwocHJlZml4ICsgXCJfZXFcIixhMCxuMSksIGMudW5yZWFjaGFibGUoKSApLFxuXG4gICAgICAgICAgICAvLyBjb25zdCB4MCA9IEYubXVsKGExLCBhKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYTEsIGEsIHgwKSxcblxuICAgICAgICAgICAgLy8gaWYgKEYuZXEoYWxmYSwgRi5uZWdvbmUpKSB7XG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9lcVwiLCBhbHBoYSwgbjEpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLy8geCA9IEYubXVsKHgwLCBbRi5GLnplcm8sIEYuRi5vbmVdKTtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGYxbVByZWZpeCArIFwiX3plcm9cIiwgbjFhKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGYxbVByZWZpeCArIFwiX29uZVwiLCBuMWIpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIG4xLCB4MCwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgYiA9IEYucG93KEYuYWRkKEYub25lLCBhbGZhKSwgRi5zcXJ0X2UxMik7XG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgYiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgYiwgYWxwaGEsIGIpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGIsIGUxMiwgYy5pMzJfY29uc3QoZjFuOCksIGIpLFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHggPSBGLm11bChiLCB4MCk7XG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYiwgeDAsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZElzU3F1YXJlKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzU3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgLy8gQmlnSW50IGNhbid0IHRha2UgYHVuZGVmaW5lZGAgc28gd2UgdXNlIGB8fCAwYFxuICAgICAgICBjb25zdCBlMzQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoKEJpZ0ludChxIHx8IDApIC0gM24pIC8gNG4sIGYxbjggKSkpO1xuXG4gICAgICAgIGNvbnN0IGEgPSBjLmdldExvY2FsKFwiYVwiKTtcbiAgICAgICAgY29uc3QgYTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IGFscGhhID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBhMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgcG4xID0gbW9kdWxlLmFsbG9jKGYxbjgqMik7XG4gICAgICAgIGNvbnN0IG4xID0gYy5pMzJfY29uc3QocG4xKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgbjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ1wiLCBuMSwgbjEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMSA9IEYucG93KGEsIEYuc3FydF9lMzQpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBhLCBlMzQsIGMuaTMyX2NvbnN0KGYxbjgpLCBhMSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGExID0gRi5wb3coYSwgRi5zcXJ0X2UzNCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIGExLCBhbHBoYSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGEsIGFscGhhLCBhbHBoYSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGEwID0gRi5tdWwoRi5mcm9iZW5pdXMoMSwgYWxmYSksIGFsZmEpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBhbHBoYSwgYTApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBhMCwgYWxwaGEsIGEwKSxcblxuICAgICAgICAgICAgLy8gaWYgKEYuZXEoYTAsIEYubmVnb25lKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfZXFcIixcbiAgICAgICAgICAgICAgICAgICAgYTAsXG4gICAgICAgICAgICAgICAgICAgIG4xXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgYnVpbGRJc1plcm8oKTtcbiAgICBidWlsZElzT25lKCk7XG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRPbmUoKTtcbiAgICBidWlsZENvcHkoKTtcbiAgICBidWlsZE11bCgpO1xuICAgIGJ1aWxkTXVsMSgpO1xuICAgIGJ1aWxkU3F1YXJlKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZFN1YigpO1xuICAgIGJ1aWxkTmVnKCk7XG4gICAgYnVpbGRDb25qdWdhdGUoKTtcbiAgICBidWlsZFRvTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkRnJvbU1vbnRnb21lcnkoKTtcbiAgICBidWlsZEVxKCk7XG4gICAgYnVpbGRJbnZlcnNlKCk7XG4gICAgYnVpbGRUaW1lc1NjYWxhcigpO1xuICAgIGJ1aWxkU2lnbigpO1xuICAgIGJ1aWxkSXNOZWdhdGl2ZSgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNPbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX29uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfY29weVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWwxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NpZ25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ludmVyc2VcIik7XG4gICAgYnVpbGRCYXRjaEludmVyc2UobW9kdWxlLCBwcmVmaXgpO1xuICAgIGJ1aWxkRXhwKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX2V4cFwiLFxuICAgICAgICBmMW44KjIsXG4gICAgICAgIHByZWZpeCArIFwiX211bFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zcXVhcmVcIixcbiAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9vbmVcIixcbiAgICApO1xuICAgIGJ1aWxkU3FydCgpO1xuICAgIGJ1aWxkSXNTcXVhcmUoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9leHBcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RpbWVzU2NhbGFyXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEludmVyc2VcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxcnRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzU3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc05lZ2F0aXZlXCIpO1xuXG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cbmNvbnN0IGJ1aWxkRXhwID0gcmVxdWlyZShcIi4vYnVpbGRfdGltZXNzY2FsYXJcIik7XG5jb25zdCBidWlsZEJhdGNoSW52ZXJzZSA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNoaW52ZXJzZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEYzbShtb2R1bGUsIG11bE5vblJlc2lkdWVGbiwgcHJlZml4LCBmMW1QcmVmaXgpIHtcblxuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG5cbiAgICBjb25zdCBmMW44ID0gbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5uNjQqODtcbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ubjY0KjNcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2FkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgeDAsIHkwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MSwgeTEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgyLCB5MiwgcjIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVGltZXNTY2FsYXIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RpbWVzU2NhbGFyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhckxlblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RpbWVzU2NhbGFyXCIsIHgwLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RpbWVzU2NhbGFyXCIsIHgxLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RpbWVzU2NhbGFyXCIsIHgyLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCByMiksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3ViXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MCwgeTAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHgxLCB5MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDIsIHkyLCByMiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGROZWcoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX25lZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MiwgcjIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNOZWdhdGl2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MSksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChmMW1QcmVmaXgrXCJfaXNOZWdhdGl2ZVwiLCB4MCkpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwoZjFtUHJlZml4K1wiX2lzTmVnYXRpdmVcIiwgeDEpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmNhbGwoZjFtUHJlZml4K1wiX2lzTmVnYXRpdmVcIiwgeDIpKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX211bFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjZCA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhID0gY2QuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCBiID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInhcIiksIGNkLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IGMgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwieFwiKSwgY2QuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCBBID0gY2QuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCBCID0gY2QuaTMyX2FkZChjZC5nZXRMb2NhbChcInlcIiksIGNkLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IEMgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwieVwiKSwgY2QuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGNkLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwiclwiKSwgY2QuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwiclwiKSwgY2QuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IGFBID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGJCID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGNDID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGFfYiA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBX0IgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYV9jID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFfQyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBiX2MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQl9DID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGFBX2JCID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGFBX2NDID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGJCX2NDID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYSwgQSwgYUEpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYiwgQiwgYkIpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYywgQywgY0MpLFxuXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhLCBiLCBhX2IpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQSwgQiwgQV9CKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGEsIGMsIGFfYyksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBLCBDLCBBX0MpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYiwgYywgYl9jKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEIsIEMsIEJfQyksXG5cbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGFBLCBiQiwgYUFfYkIpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYUEsIGNDLCBhQV9jQyksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBiQiwgY0MsIGJCX2NDKSxcblxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYl9jLCBCX0MsIHIwKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIHIwLCBiQl9jQywgcjApLFxuICAgICAgICAgICAgY2QuY2FsbChtdWxOb25SZXNpZHVlRm4sIHIwLCByMCksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhQSwgcjAsIHIwKSxcblxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgYV9iLCBBX0IsIHIxKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIHIxLCBhQV9iQiwgcjEpLFxuICAgICAgICAgICAgY2QuY2FsbChtdWxOb25SZXNpZHVlRm4sIGNDLCBBVVgpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgcjEsIEFVWCwgcjEpLFxuXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBhX2MsIEFfQywgcjIpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgcjIsIGFBX2NDLCByMiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCByMiwgYkIsIHIyKSxcbiAgICAgICAgKTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEEgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGNvbnN0IHMwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYWIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBzMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYmMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBzMyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHM0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3NxdWFyZVwiLCBBLCBzMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIEEsIEIsIGFiKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYWIsIGFiLCBzMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgQSwgQiwgczIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMiwgQywgczIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3NxdWFyZVwiLCBzMiwgczIpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIEIsIEMsIGJjKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYmMsIGJjLCBzMyksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zcXVhcmVcIiwgQywgczQpLFxuXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCBzMywgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMCwgcjAsIHIwKSxcblxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgczQsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczEsIHIxLCByMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczAsIHM0LCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIHMzLCByMiwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMiwgcjIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgczEsIHIyLCByMiksXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90b01vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RvTW9udGdvbWVyeVwiLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90b01vbnRnb21lcnlcIiwgeDIsIHIyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvbU1vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIsIHgxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIsIHgyLCByMilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZENvcHkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2NvcHlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDIsIHIyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFplcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE9uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfb25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX29uZVwiLCB4MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEVxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9lcVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2VxXCIsIHgwLCB5MCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZXFcIiwgeDEsIHkxKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZXFcIiwgeDIsIHkyKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDApLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgyKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaW52ZXJzZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgY29uc3QgdDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYzAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBjMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3F1YXJlXCIsIHgwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3NxdWFyZVwiLCB4MSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zcXVhcmVcIiwgeDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgwLCB4MSwgdDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDAsIHgyLCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MSwgeDIsIHQ1KSxcblxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgdDUsIGMwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHQwLCBjMCwgYzApLFxuXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCB0MiwgYzEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgYzEsIHQzLCBjMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHQxLCB0NCwgYzIpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MiwgYzEsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgxLCBjMiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHQ2LCBBVVgsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHQ2LCB0NiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MCwgYzAsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCBBVVgsIHQ2LCB0NiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaW52ZXJzZVwiLCB0NiwgdDYpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB0NiwgYzAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHQ2LCBjMSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgdDYsIGMyLCByMilcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU2lnbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc2lnblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNcIiAsIGMuY2FsbCggZjFtUHJlZml4ICsgXCJfc2lnblwiLCB4MikpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmdldExvY2FsKFwic1wiKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic1wiICwgYy5jYWxsKCBmMW1QcmVmaXggKyBcIl9zaWduXCIsIHgxKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuZ2V0TG9jYWwoXCJzXCIpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuY2FsbCggZjFtUHJlZml4ICsgXCJfc2lnblwiLCB4MCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc09uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNPbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfaXNPbmVcIiwgeDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2lzWmVyb1wiLCB4MSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2lzWmVyb1wiLCB4MilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYnVpbGRJc1plcm8oKTtcbiAgICBidWlsZElzT25lKCk7XG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRPbmUoKTtcbiAgICBidWlsZENvcHkoKTtcbiAgICBidWlsZE11bCgpO1xuICAgIGJ1aWxkU3F1YXJlKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZFN1YigpO1xuICAgIGJ1aWxkTmVnKCk7XG4gICAgYnVpbGRTaWduKCk7XG4gICAgYnVpbGRUb01vbnRnb21lcnkoKTtcbiAgICBidWlsZEZyb21Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRFcSgpO1xuICAgIGJ1aWxkSW52ZXJzZSgpO1xuICAgIGJ1aWxkVGltZXNTY2FsYXIoKTtcbiAgICBidWlsZElzTmVnYXRpdmUoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzT25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl96ZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9vbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX211bFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zaWduXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9lcVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW52ZXJzZVwiKTtcbiAgICBidWlsZEJhdGNoSW52ZXJzZShtb2R1bGUsIHByZWZpeCk7XG4gICAgYnVpbGRFeHAoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfZXhwXCIsXG4gICAgICAgIGYxbjgqMyxcbiAgICAgICAgcHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3NxdWFyZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX29uZVwiXG4gICAgKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXhwXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hJbnZlcnNlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc05lZ2F0aXZlXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRUaW1lc1NjYWxhck5BRihtb2R1bGUsIGZuTmFtZSwgZWxlbWVudExlbiwgb3BBQiwgb3BBQSwgb3BBbUIsIG9wQ29weSwgb3BJbml0KSB7XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgZi5hZGRQYXJhbShcImJhc2VcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuZ3RoXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJvbGQwXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJuYml0c1wiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiY3VyXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJjYXJyeVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwicFwiLCBcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZWxlbWVudExlbikpO1xuXG4gICAgZnVuY3Rpb24gZ2V0Qml0KElEWCkge1xuICAgICAgICByZXR1cm4gYy5pMzJfYW5kKFxuICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgYy5pMzJfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRkZGRkZGQylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBJRFgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4MUYpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEJpdChiKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5jLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoYilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAuLi5jLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwicFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5pZihcbiAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwic2NhbGFyTGVuZ3RoXCIpKSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BJbml0LCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJuYml0c1wiLCBjLmkzMl9zaGwoYy5nZXRMb2NhbChcInNjYWxhckxlbmd0aFwiKSwgYy5pMzJfY29uc3QoMykpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcIm9sZDBcIiwgYy5pMzJfbG9hZChjLmkzMl9jb25zdCgwKSkpLFxuICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmdldExvY2FsKFwib2xkMFwiKSksXG4gICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2xkMFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmJpdHNcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkZGRkZGRjgpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDEpKSxcblxuICAgICAgICBjLnNldExvY2FsKFwibGFzdFwiLGdldEJpdChjLmkzMl9jb25zdCgwKSkpLFxuICAgICAgICBjLnNldExvY2FsKFwiY2FycnlcIixjLmkzMl9jb25zdCgwKSksXG5cbiAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5iaXRzXCIpKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjdXJcIiwgZ2V0Qml0KGMuZ2V0TG9jYWwoXCJpXCIpKSksXG4gICAgICAgICAgICBjLmlmKCBjLmdldExvY2FsKFwibGFzdFwiKSxcbiAgICAgICAgICAgICAgICBjLmlmKCBjLmdldExvY2FsKFwiY3VyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgyNTUpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDI1NSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZiggYy5nZXRMb2NhbChcImN1clwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpLFxuXG4gICAgICAgIGMuaWYoIGMuZ2V0TG9jYWwoXCJsYXN0XCIpLFxuICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDI1NSksXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMCksXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgxKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApLFxuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDEpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcblxuICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG5cbiAgICAgICAgLy8gcCBhbHJlYWR5IHBvaW50cyB0byB0aGUgbGFzdCBiaXRcblxuICAgICAgICBjLmNhbGwob3BDb3B5LCBjLmdldExvY2FsKFwiYmFzZVwiKSwgYXV4KSxcblxuICAgICAgICBjLmNhbGwob3BJbml0LCBjLmdldExvY2FsKFwiclwiKSksXG5cbiAgICAgICAgYy5ibG9jayhjLmxvb3AoXG5cblxuICAgICAgICAgICAgYy5jYWxsKG9wQUEsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmdldExvY2FsKFwiclwiKSksXG5cblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImN1clwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY3VyXCIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJjdXJcIiksIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKG9wQUIsICBjLmdldExvY2FsKFwiclwiKSwgYXV4LCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChvcEFtQiwgYy5nZXRMb2NhbChcInJcIiksIGF1eCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEoIGMuZ2V0TG9jYWwoXCJvbGQwXCIpLCBjLmdldExvY2FsKFwicFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5icigwKVxuXG4gICAgICAgICkpLFxuXG4gICAgICAgIGMuaTMyX3N0b3JlKCBjLmkzMl9jb25zdCgwKSwgYy5nZXRMb2NhbChcIm9sZDBcIikpXG5cbiAgICApO1xuXG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkTXVsdGlleHAobW9kdWxlLCBwcmVmaXgsIGZuTmFtZSwgb3BBZGQsIG44Yikge1xuXG4gICAgY29uc3QgbjY0ZyA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0ubjY0O1xuICAgIGNvbnN0IG44ZyA9IG42NGcqODtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkR2V0Q2h1bmsoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lICsgXCJfZ2V0Q2h1bmtcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwU2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyU2l6ZVwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBieXRlcyBvZiB0aGUgc2NhbGFyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJzdGFydEJpdFwiLCBcImkzMlwiKTsgIC8vIEJpdCB0byBzdGFydCBleHRyYWN0XG4gICAgICAgIGYuYWRkUGFyYW0oXCJjaHVua1NpemVcIiwgXCJpMzJcIik7ICAvLyBDaHVuayBzaXplIGluIGJpdHNcbiAgICAgICAgZi5hZGRMb2NhbChcImJpdHNUb0VuZFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1hc2tcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJiaXRzVG9FbmRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoOClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN0YXJ0Qml0XCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZ3RfcyhcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNUb0VuZFwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1RvRW5kXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTY2FsYXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzdGFydEJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCwgIC8vIG9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC8vIGFsaWduIHRvIGJ5dGUuXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzdGFydEJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4NylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm1hc2tcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11dGlleHBDaHVuaygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUgKyBcIl9jaHVua1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCYXNlc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBTY2FsYXJzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyU2l6ZVwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBwb2ludHNcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gICAgICAgIGYuYWRkUGFyYW0oXCJzdGFydEJpdFwiLCBcImkzMlwiKTsgIC8vIGJpdCB3aGVyZSBpdCBzdGFydHMgdGhlIGNodW5rXG4gICAgICAgIGYuYWRkUGFyYW0oXCJjaHVua1NpemVcIiwgXCJpMzJcIik7ICAvLyBiaXQgd2hlcmUgaXQgc3RhcnRzIHRoZSBjaHVua1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuQ2h1bmtzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRTY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJlbmRTY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEJhc2VcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5UYWJsZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBUYWJsZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBJZHhUYWJsZVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJuXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIC8vIEFsbG9jYXRlIG1lbW9yeVxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiblRhYmxlXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFRhYmxlXCIsIGMuaTMyX2xvYWQoIGMuaTMyX2NvbnN0KDApICkpLFxuICAgICAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgLy8gUmVzZXQgVGFibGVcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblRhYmxlXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSBlbGVtZW50c1xuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QmFzZVwiLCBjLmdldExvY2FsKFwicEJhc2VzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdFNjYWxhclwiLCBjLmdldExvY2FsKFwicFNjYWxhcnNcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImVuZFNjYWxhclwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTY2FsYXJzXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRTY2FsYXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZW5kU2NhbGFyXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHhcIixcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZuTmFtZSArIFwiX2dldENodW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRTY2FsYXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzdGFydEJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4XCIpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicElkeFRhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BBZGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJZHhUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRCYXNlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSWR4VGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0U2NhbGFyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRTY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QmFzZVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0QmFzZVwiKSwgYy5pMzJfY29uc3QobjhiKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZm5OYW1lICsgXCJfcmVkdWNlVGFibGVcIiwgYy5nZXRMb2NhbChcInBUYWJsZVwiKSwgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKSksXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIilcbiAgICAgICAgICAgIClcblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsdGlleHAoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCYXNlc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBTY2FsYXJzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyU2l6ZVwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBwb2ludHNcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7ICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNodW5rU2l6ZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5DaHVua3NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdFNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImVuZFNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0QmFzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0Qml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuVGFibGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwVGFibGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwSWR4VGFibGVcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgY29uc3QgcFRTaXplcyA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAxNywgMTcsIDE3LCAxNywgICAxNywgMTcsIDE3LCAxNyxcbiAgICAgICAgICAgIDE3LCAxNywgMTYsIDE2LCAgIDE1LCAxNCwgMTMsIDEzLFxuICAgICAgICAgICAgMTIsIDExLCAxMCwgIDksICAgIDgsICA3LCAgNywgIDYsXG4gICAgICAgICAgICA1ICwgIDQsICAzLCAgMiwgICAgMSwgIDEsICAxLCAgMVxuICAgICAgICBdKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcIm5cIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJjaHVua1NpemVcIiwgYy5pMzJfbG9hZDhfdSggYy5pMzJfY2x6KGMuZ2V0TG9jYWwoXCJuXCIpKSwgIHBUU2l6ZXMgKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibkNodW5rc1wiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZGl2X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgLy8gQWxsb2NhdGUgbWVtb3J5XG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJpdEJpdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5DaHVua3NcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2x0X3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRCaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIC8vIERvdWJsZSBuQ2h1bmsgdGltZXNcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicHJcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZG91YmxlXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZm5OYW1lICsgXCJfY2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCYXNlc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTY2FsYXJzXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYXV4XG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYXV4LFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEJpdFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0Qml0XCIpLCBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFJlZHVjZVRhYmxlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSArIFwiX3JlZHVjZVRhYmxlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFRhYmxlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBiaXRzIG9mIHRoZSB0YWJsZVxuICAgICAgICBmLmFkZExvY2FsKFwiaGFsZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBBY2NcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImhhbGZcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXQxXCIsIGMuZ2V0TG9jYWwoXCJwVGFibGVcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIml0MlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImhhbGZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBBY2NcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBY2NcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MVwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBY2NcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQWNjXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXQxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXQxXCIpLCBjLmkzMl9jb25zdChuOGcpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0MlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0MlwiKSwgYy5pMzJfY29uc3QobjhnKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZm5OYW1lICsgXCJfcmVkdWNlVGFibGVcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXooYy5nZXRMb2NhbChcInBcIikpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZG91YmxlXCIsIGMuZ2V0TG9jYWwoXCJwQWNjXCIpLCBjLmdldExvY2FsKFwicEFjY1wiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksIGMuZ2V0TG9jYWwoXCJwQWNjXCIpLCBjLmdldExvY2FsKFwicFRhYmxlXCIpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkR2V0Q2h1bmsoKTtcbiAgICBidWlsZFJlZHVjZVRhYmxlKCk7XG4gICAgYnVpbGRNdXRpZXhwQ2h1bmsoKTtcbiAgICBidWlsZE11bHRpZXhwKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZm5OYW1lKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZm5OYW1lICtcIl9jaHVua1wiKTtcblxuXG59O1xuXG5cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5jb25zdCBidWlsZFRpbWVzU2NhbGFyTkFGID0gcmVxdWlyZShcIi4vYnVpbGRfdGltZXNzY2FsYXJuYWZcIik7XG4vL2NvbnN0IGJ1aWxkVGltZXNTY2FsYXIgPSByZXF1aXJlKFwiLi9idWlsZF90aW1lc3NjYWxhclwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hDb252ZXJ0aW9uID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hjb252ZXJ0aW9uXCIpO1xuY29uc3QgYnVpbGRNdWx0aWV4cCA9IHJlcXVpcmUoXCIuL2J1aWxkX211bHRpZXhwXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkQ3VydmUobW9kdWxlLCBwcmVmaXgsIHByZWZpeEZpZWxkLCBwQikge1xuXG5cbiAgICBjb25zdCBuNjQgPSBtb2R1bGUubW9kdWxlc1twcmVmaXhGaWVsZF0ubjY0O1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIG42NDogbjY0KjNcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1plcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2lzWmVyb1wiLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOCoyKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRJc1plcm9BZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfaXNaZXJvXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2lzWmVyb1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZENvcHkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfY29weVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicGRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjY0KjM7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIiksXG4gICAgICAgICAgICAgICAgICAgIGkqOCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqOFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDb3B5QWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBkXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG42NCoyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBkXCIpLFxuICAgICAgICAgICAgICAgICAgICBpKjgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBpKjhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3plcm9cIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9vbmVcIixcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3plcm9cIixcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgqMilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFplcm9BZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb0FmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3plcm9cIixcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZXFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDEgPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejEgPSBjLmdldExvY2FsKFwiejFcIik7XG4gICAgICAgIGNvbnN0IHgyID0gYy5nZXRMb2NhbChcInAyXCIpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoyID0gYy5nZXRMb2NhbChcInoyXCIpO1xuXG4gICAgICAgIGNvbnN0IFoxWjEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJaMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMV9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMl9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAyXCIpKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKHByZWZpeCArIFwiX2VxTWl4ZWRcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicDFcIikpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejIpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChwcmVmaXggKyBcIl9lcU1peGVkXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInAyXCIpKSlcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MSwgWjFaMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejIsIFoyWjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgxLCBaMloyLCBVMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDIsIFoxWjEsIFUyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MSwgWjFaMSwgWjFfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoyLCBaMloyLCBaMl9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTEsIFoyX2N1YmVkLCBTMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTIsIFoxX2N1YmVkLCBTMiksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgVTEsIFUyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCBTMSwgUzIpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEVxTWl4ZWQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZXFNaXhlZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDEgPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejEgPSBjLmdldExvY2FsKFwiejFcIik7XG4gICAgICAgIGNvbnN0IHgyID0gYy5nZXRMb2NhbChcInAyXCIpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG5cbiAgICAgICAgY29uc3QgWjFaMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBVMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMV9jdWJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejEpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChwcmVmaXggKyBcIl9lcUFmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwMlwiKSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoxLCBaMVoxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MiwgWjFaMSwgVTIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoxLCBaMVoxLCBaMV9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTIsIFoxX2N1YmVkLCBTMiksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeDEsIFUyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB5MSwgUzIpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGREb3VibGUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZG91YmxlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBjb25zdCBBID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBEID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgRiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBHID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGVpZ2h0QyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6KSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KGMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHgsIEEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHksIEIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEIsIEMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeCwgQiwgRCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgRCwgRCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgRCwgQSwgRCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgRCwgQywgRCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgRCwgRCwgRCksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBBLCBBLCBFKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBFLCBBLCBFKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBFLCBGKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHksIHosIEcpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgRCwgRCwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIEYsIHgzLCB4MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBDLCBDLCBlaWdodEMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIGVpZ2h0QywgZWlnaHRDLCBlaWdodEMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIGVpZ2h0QywgZWlnaHRDLCBlaWdodEMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgRCwgeDMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MywgRSwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkzLCBlaWdodEMsIHkzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEcsIEcsIHozKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRG91YmxlQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgY29uc3QgWFggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWVkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWVlZWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IE0gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgZWlnaHRZWVlZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfdG9KYWNvYmlhblwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIC8vIFhYID0gWDFeMlxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHgsIFhYKSxcblxuICAgICAgICAgICAgLy8gWVkgPSBZMV4yXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgeSwgWVkpLFxuXG4gICAgICAgICAgICAvLyBZWVlZID0gWVleMlxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIFlZLCBZWVlZKSxcblxuICAgICAgICAgICAgLy8gUyA9IDIqKChYMStZWSleMi1YWC1ZWVlZKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHgsIFlZLCBTKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBTLCBTKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBTLCBYWCwgUyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgUywgWVlZWSwgUyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgUywgUywgUyksXG5cbiAgICAgICAgICAgIC8vIE0gPSAzKlhYK2EgIChIZXJhIGE9MClcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBYWCwgWFgsIE0pLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIE0sIFhYLCBNKSxcblxuICAgICAgICAgICAgLy8gWjMgPSAyKlkxXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeSwgeSwgejMpLFxuXG4gICAgICAgICAgICAvLyBUID0gTV4yLTIqU1xuICAgICAgICAgICAgLy8gWDMgPSBUXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgTSwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgzLCBTLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDMsIFMsIHgzKSxcblxuICAgICAgICAgICAgLy8gWTMgPSBNKihTLVQpLTgqWVlZWVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFlZWVksIFlZWVksIGVpZ2h0WVlZWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgZWlnaHRZWVlZLCBlaWdodFlZWVksIGVpZ2h0WVlZWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgZWlnaHRZWVlZLCBlaWdodFlZWVksIGVpZ2h0WVlZWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgUywgeDMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MywgTSwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkzLCBlaWdodFlZWVksIHkzKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXFBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZXFBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZXFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicDJcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9lcVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRvTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfdG9Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG4gICAgICAgIGZvciAobGV0IGk9MTsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChpKm44KSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoaSpuOCkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9Nb250Z29tZXJ5QWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeUFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPDI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3RvTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KGkqbjgpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChpKm44KSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9tTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9mcm9tTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZnJvbU1vbnRnb21lcnlcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChpKm44KSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoaSpuOCkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9tTW9udGdvbWVyeUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeUFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9mcm9tTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8MjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfZnJvbU1vbnRnb21lcnlcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChpKm44KSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoaSpuOCkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgxID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoxID0gYy5nZXRMb2NhbChcInoxXCIpO1xuICAgICAgICBjb25zdCB4MiA9IGMuZ2V0TG9jYWwoXCJwMlwiKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MiA9IGMuZ2V0TG9jYWwoXCJ6MlwiKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgY29uc3QgWjFaMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMloyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoxX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzJfbWludXNfUzEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBKID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgViA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMV9KMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoxKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9hZGRNaXhlZFwiLCB4MiwgeDEsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejIpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2FkZE1peGVkXCIsIHgxLCB4MiwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoxLCBaMVoxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MiwgWjJaMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDEsIFoyWjIsIFUxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MiwgWjFaMSwgVTIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoxLCBaMVoxLCBaMV9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejIsIFoyWjIsIFoyX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MSwgWjJfY3ViZWQsIFMxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MiwgWjFfY3ViZWQsIFMyKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCBVMSwgVTIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIFMxLCBTMiksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgVTIsIFUxLCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBTMiwgUzEsIFMyX21pbnVzX1MxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBILCBILCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBJLCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBILCBJLCBKKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBTMl9taW51c19TMSwgUzJfbWludXNfUzEsIHIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIFUxLCBJLCBWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCByLCByMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgViwgViwgVjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgcjIsIEosIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MywgVjIsIHgzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIFMxLCBKLCBTMV9KMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgUzFfSjIsIFMxX0oyLCBTMV9KMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBWLCB4MywgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkzLCByLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTMsIFMxX0oyLCB5MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB6MSwgejIsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MywgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHozLCBaMVoxLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgejMsIFoyWjIsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MywgSCwgejMpLFxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZE1peGVkKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkTWl4ZWRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgxID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoxID0gYy5nZXRMb2NhbChcInoxXCIpO1xuICAgICAgICBjb25zdCB4MiA9IGMuZ2V0TG9jYWwoXCJwMlwiKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBjb25zdCBaMVoxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoxX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzJfbWludXNfeTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBKID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgViA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCB5MV9KMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9vbmVcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSAsIGMuaTMyX2NvbnN0KG44KjIpKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejEpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2FkZEFmZmluZVwiLCB4MSwgeDIsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MSwgWjFaMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDIsIFoxWjEsIFUyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MSwgWjFaMSwgWjFfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkyLCBaMV9jdWJlZCwgUzIpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHgxLCBVMiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeTEsIFMyKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBVMiwgeDEsIEgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFMyLCB5MSwgUzJfbWludXNfeTEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEgsIEhIKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBISCAsIEhILCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBJICwgSSwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgSCwgSSwgSiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgUzJfbWludXNfeTEsIFMyX21pbnVzX3kxLCByKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MSwgSSwgViksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgciwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFYsIFYsIFYyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHIyLCBKLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDMsIFYyLCB4MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MSwgSiwgeTFfSjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHkxX0oyLCB5MV9KMiwgeTFfSjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgViwgeDMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MywgciwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkzLCB5MV9KMiwgeTMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgejEsIEgsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MywgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHozLCBaMVoxLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgejMsIEhILCB6MyksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZEFmZmluZSgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZEFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDEgPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmdldExvY2FsKFwicDJcIik7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgY29uc3QgSCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBISCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCB5Ml9taW51c195MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBJID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgciA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHkxX0oyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weUFmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX29uZVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpICwgYy5pMzJfY29uc3QobjgqMikpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9vbmVcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSAsIGMuaTMyX2NvbnN0KG44KjIpKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB4MSwgeDIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHkxLCB5MiksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDIsIHgxLCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MiwgeTEsIHkyX21pbnVzX3kxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBILCBISCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSEggLCBISCwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSSAsIEksIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIEgsIEksIEopLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHkyX21pbnVzX3kxLCB5Ml9taW51c195MSwgciksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDEsIEksIFYpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBWLCBWLCBWMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCByMiwgSiwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgzLCBWMiwgeDMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTEsIEosIHkxX0oyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB5MV9KMiwgeTFfSjIsIHkxX0oyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFYsIHgzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTMsIHIsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MywgeTFfSjIsIHkzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEgsIEgsIHozKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE5lZygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgeCwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbmVnXCIsIHksIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgeiwgejMpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZE5lZ0FmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB4LCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgeSwgeTMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjMpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWJNaXhlZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJNaXhlZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCozKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBBVVgsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YkFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgqMykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdBZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZEFmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIiksIEFVWCwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHNldHMgWiB0byBPbmVcbiAgICBmdW5jdGlvbiBidWlsZE5vcm1hbGl6ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9ub3JtYWxpemVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG5cbiAgICAgICAgY29uc3QgWl9pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFozX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9pbnZlcnNlXCIsIHosIFpfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIFpfaW52LCBaMl9pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgWl9pbnYsIFoyX2ludiwgWjNfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgsIFoyX2ludiwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeSwgWjNfaW52LCB5MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX29uZVwiLCB6MyksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLy8gRG9lcyBub3Qgc2V0IFouXG4gICAgZnVuY3Rpb24gYnVpbGRUb0FmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl90b0FmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcblxuXG4gICAgICAgIGNvbnN0IFpfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaM19pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIHkzKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaW52ZXJzZVwiLCB6LCBaX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBaX2ludiwgWjJfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIFpfaW52LCBaMl9pbnYsIFozX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4LCBaMl9pbnYsIHgzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHksIFozX2ludiwgeTMpLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9KYWNvYmlhbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl90b0phY29iaWFuXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfb25lXCIsIHozKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB5LCB5MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgeCwgeDMpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQmF0Y2hUb0FmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaFRvQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQXV4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0QXV4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgdG1wID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBBdXhcIiwgYy5pMzJfbG9hZCggYy5pMzJfY29uc3QoMCkgKSksXG4gICAgICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoYy5nZXRMb2NhbChcIm5cIiksIGMuaTMyX2NvbnN0KG44KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9iYXRjaEludmVyc2VcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBJblwiKSwgYy5pMzJfY29uc3QobjgqMikpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KjMpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQXV4XCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5nZXRMb2NhbChcInBJblwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5nZXRMb2NhbChcInBBdXhcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIml0QXV4XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwiaXRPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChuOCkpKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJblwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkK1wiX3NxdWFyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEluXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQrXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuaTMyX2NvbnN0KG44KjMpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KG44KjIpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQXV4XCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByaXZhdGUgYW5kIGRvZXMgbm90IGFsbG93IHRvIE9WRVJMQVAgYnVmZmVycy5cbiAgICBmdW5jdGlvbiBidWlsZFJldmVyc2VCeXRlcygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdE91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0SW5cIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiaXRPdXRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIml0SW5cIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEluXCIpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9sdF9zKCBjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuZ2V0TG9jYWwoXCJwT3V0XCIpICkpLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0T3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJpdEluXCIpKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJblwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTEVNdG9DKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX0xFTXRvQ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInBJblwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5pMzJfc3RvcmU4KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDQwKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInBJblwiKSwgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcCwgYy5pMzJfY29uc3QobjgpLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zaWduXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoLTEpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9vcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg4MClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRMRU10b1UoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfTEVNdG9VXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHBUbXAgPSBtb2R1bGUuYWxsb2MobjgqMik7XG4gICAgICAgIGNvbnN0IHRtcCA9IGMuaTMyX2NvbnN0KHBUbXApO1xuICAgICAgICBjb25zdCB0bXBYID0gYy5pMzJfY29uc3QocFRtcCk7XG4gICAgICAgIGNvbnN0IHRtcFkgPSBjLmkzMl9jb25zdChwVG1wICsgbjgpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl96ZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5QWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIiksIHRtcCksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcFgsIGMuaTMyX2NvbnN0KG44KSwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgdG1wWSwgYy5pMzJfY29uc3QobjgpLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVXRvTEVNKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX1V0b0xFTVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwVG1wID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWCA9IGMuaTMyX2NvbnN0KHBUbXApO1xuICAgICAgICBjb25zdCB0bXBZID0gYy5pMzJfY29uc3QocFRtcCArIG44KTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwSW5cIikpLCBjLmkzMl9jb25zdCgweDQwKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiLCBjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCksIHRtcFgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KSksIGMuaTMyX2NvbnN0KG44KSwgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5QWZmaW5lXCIsIHRtcCwgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ3RvTEVNKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX0N0b0xFTVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJmaXJzdEJ5dGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJncmVhdGVzdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHBUbXAgPSBtb2R1bGUuYWxsb2MobjgqMik7XG4gICAgICAgIGNvbnN0IHRtcFggPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWSA9IGMuaTMyX2NvbnN0KHBUbXAgKyBuOCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImZpcnN0Qnl0ZVwiLCBjLmkzMl9sb2FkOF91KGMuZ2V0TG9jYWwoXCJwSW5cIikpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmlyc3RCeXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDQwKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfemVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiZ3JlYXRlc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJmaXJzdEJ5dGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4ODApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicEluXCIpLCB0bXBZKSxcbiAgICAgICAgICAgIGMuaTMyX3N0b3JlOCh0bXBZLCBjLmkzMl9hbmQoYy5nZXRMb2NhbChcImZpcnN0Qnl0ZVwiKSwgYy5pMzJfY29uc3QoMHgzRikpKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcFksIGMuaTMyX2NvbnN0KG44KSwgdG1wWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIiwgdG1wWCwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgYy5nZXRMb2NhbChcInBPdXRcIiksIHRtcFkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCB0bXBZLCAgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgdG1wWSwgYy5pMzJfY29uc3QocEIpLCAgdG1wWSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxcnRcIiwgdG1wWSwgdG1wWSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgdG1wWSwgdG1wWCksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NpZ25cIiwgdG1wWSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KC0xKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImdyZWF0ZXN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHRtcFksIGMuaTMyX2FkZChjLmdldExvY2FsKFwicE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZ3JlYXRlc3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHRtcFksIGMuaTMyX2FkZChjLmdldExvY2FsKFwicE91dFwiKSwgYy5pMzJfY29uc3QobjgpKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkN1cnZlQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2luQ3VydmVBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicEluXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KSk7XG5cbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgeDNiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHksIHkyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB4LCB4M2IpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgsIHgzYiwgeDNiKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB4M2IsIGMuaTMyX2NvbnN0KHBCKSwgeDNiKSxcblxuICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeTIsIHgzYilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEluQ3VydmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfaW5DdXJ2ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfdG9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBJblwiKSwgYXV4KSxcblxuICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2luQ3VydmVBZmZpbmVcIiwgYXV4KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZElzWmVyb0FmZmluZSgpO1xuICAgIGJ1aWxkSXNaZXJvKCk7XG4gICAgYnVpbGRaZXJvQWZmaW5lKCk7XG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRDb3B5QWZmaW5lKCk7XG4gICAgYnVpbGRDb3B5KCk7XG4gICAgYnVpbGRUb0phY29iaWFuKCk7XG4gICAgYnVpbGRFcUFmZmluZSgpO1xuICAgIGJ1aWxkRXFNaXhlZCgpO1xuICAgIGJ1aWxkRXEoKTtcbiAgICBidWlsZERvdWJsZUFmZmluZSgpO1xuICAgIGJ1aWxkRG91YmxlKCk7XG4gICAgYnVpbGRBZGRBZmZpbmUoKTtcbiAgICBidWlsZEFkZE1peGVkKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZE5lZ0FmZmluZSgpO1xuICAgIGJ1aWxkTmVnKCk7XG4gICAgYnVpbGRTdWJBZmZpbmUoKTtcbiAgICBidWlsZFN1Yk1peGVkKCk7XG4gICAgYnVpbGRTdWIoKTtcbiAgICBidWlsZEZyb21Nb250Z29tZXJ5QWZmaW5lKCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5QWZmaW5lKCk7XG4gICAgYnVpbGRUb01vbnRnb21lcnkoKTtcbiAgICBidWlsZFRvQWZmaW5lKCk7XG4gICAgYnVpbGRJbkN1cnZlQWZmaW5lKCk7XG4gICAgYnVpbGRJbkN1cnZlKCk7XG5cbiAgICBidWlsZEJhdGNoVG9BZmZpbmUoKTtcblxuICAgIGJ1aWxkTm9ybWFsaXplKCk7XG5cblxuICAgIGJ1aWxkUmV2ZXJzZUJ5dGVzKCk7XG5cbiAgICBidWlsZExFTXRvVSgpO1xuICAgIGJ1aWxkTEVNdG9DKCk7XG4gICAgYnVpbGRVdG9MRU0oKTtcbiAgICBidWlsZEN0b0xFTSgpO1xuXG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaExFTXRvVVwiLCBwcmVmaXggKyBcIl9MRU10b1VcIiwgbjgqMiwgbjgqMik7XG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaExFTXRvQ1wiLCBwcmVmaXggKyBcIl9MRU10b0NcIiwgbjgqMiwgbjgpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIiwgcHJlZml4ICsgXCJfVXRvTEVNXCIsIG44KjIsIG44KjIpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hDdG9MRU1cIiwgcHJlZml4ICsgXCJfQ3RvTEVNXCIsIG44LCBuOCoyLCB0cnVlKTtcblxuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hUb0phY29iaWFuXCIsIHByZWZpeCArIFwiX3RvSmFjb2JpYW5cIiwgbjgqMiwgbjgqMywgdHJ1ZSk7XG5cbiAgICBidWlsZE11bHRpZXhwKG1vZHVsZSwgcHJlZml4LCBwcmVmaXggKyBcIl9tdWx0aWV4cFwiLCBwcmVmaXggKyBcIl9hZGRcIiwgbjgqMyk7XG4gICAgYnVpbGRNdWx0aWV4cChtb2R1bGUsIHByZWZpeCwgcHJlZml4ICsgXCJfbXVsdGlleHBBZmZpbmVcIiwgcHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgbjgqMik7XG5cbiAgICAvKlxuICAgIGJ1aWxkVGltZXNTY2FsYXIoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfdGltZXNTY2FsYXJPbGRcIixcbiAgICAgICAgbjgqMyxcbiAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2RvdWJsZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIixcbiAgICApO1xuICAgICovXG4gICAgYnVpbGRUaW1lc1NjYWxhck5BRihcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiLFxuICAgICAgICBuOCozLFxuICAgICAgICBwcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgcHJlZml4ICsgXCJfZG91YmxlXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIlxuICAgICk7XG5cbiAgICBidWlsZFRpbWVzU2NhbGFyTkFGKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX3RpbWVzU2NhbGFyQWZmaW5lXCIsXG4gICAgICAgIG44KjIsXG4gICAgICAgIHByZWZpeCArIFwiX2FkZE1peGVkXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2RvdWJsZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zdWJNaXhlZFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3plcm9cIlxuICAgICk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZXFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxTWl4ZWRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvcHlBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb0FmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9kb3VibGVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZE1peGVkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJNaXhlZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbm9ybWFsaXplXCIpO1xuXG4gICAgLy8gQ29udmVydGlvbiBmdW5jdGlvbnNcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfTEVNdG9VXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9MRU10b0NcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX1V0b0xFTVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfQ3RvTEVNXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoTEVNdG9VXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaExFTXRvQ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoQ3RvTEVNXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvQWZmaW5lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b0phY29iaWFuXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9BZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9KYWNvYmlhblwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbkN1cnZlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIpO1xuXG4gICAgLypcbiAgICBidWlsZEcxTXVsU2NhbGFyKG1vZHVsZSwgenEpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihcImcxTXVsU2NhbGFyXCIpO1xuICAgICovXG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgeyBpc09kZCwgbW9kSW52LCBtb2RQb3cgfSA9IHJlcXVpcmUoXCIuL2JpZ2ludC5qc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGRlQobW9kdWxlLCBwcmVmaXgsIGdQcmVmaXgsIGZQcmVmaXgsIG9wR3RpbWVzRikge1xuXG4gICAgY29uc3QgbjY0ZiA9IG1vZHVsZS5tb2R1bGVzW2ZQcmVmaXhdLm42NDtcbiAgICBjb25zdCBuOGYgPSBuNjRmKjg7XG5cbiAgICBjb25zdCBuNjRnID0gbW9kdWxlLm1vZHVsZXNbZ1ByZWZpeF0ubjY0O1xuICAgIGNvbnN0IG44ZyA9IG42NGcqODtcblxuICAgIGNvbnN0IHEgPSBtb2R1bGUubW9kdWxlc1tmUHJlZml4XS5xO1xuXG4gICAgbGV0IHJlbSA9IHEgLSAxbjtcbiAgICBsZXQgbWF4Qml0cyA9IDA7XG4gICAgd2hpbGUgKCFpc09kZChyZW0pKSB7XG4gICAgICAgIG1heEJpdHMgKys7XG4gICAgICAgIHJlbSA9IHJlbSA+PiAxbjtcbiAgICB9XG5cbiAgICBsZXQgbnIgPSAybjtcblxuICAgIHdoaWxlICggbW9kUG93KG5yLCBxID4+IDFuLCBxKSA9PT0gMW4gKSBuciA9IG5yICsgMW47XG5cbiAgICAvLyBjb25zb2xlLmxvZyhucik7XG5cbiAgICBjb25zdCB3ID0gbmV3IEFycmF5KG1heEJpdHMrMSk7XG4gICAgd1ttYXhCaXRzXSA9IG1vZFBvdyhuciwgcmVtLCBxKTtcblxuICAgIGxldCBuPW1heEJpdHMtMTtcbiAgICB3aGlsZSAobj49MCkge1xuICAgICAgICB3W25dID0gbW9kUG93KHdbbisxXSwgMm4sIHEpO1xuICAgICAgICBuLS07XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBbXTtcbiAgICBjb25zdCBSID0gKDFuIDw8IEJpZ0ludChuOGYqOCkpICUgcTtcblxuICAgIGZvciAobGV0IGk9MDsgaTx3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG0gPSB3W2ldICogUiAlIHE7XG4gICAgICAgIGJ5dGVzLnB1c2goLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUobSwgbjhmKSk7XG4gICAgfVxuXG4gICAgY29uc3QgUk9PVHMgPSBtb2R1bGUuYWxsb2MoYnl0ZXMpO1xuXG4gICAgY29uc3QgaTIgPSBuZXcgQXJyYXkobWF4Qml0cysxKTtcbiAgICBpMlswXSA9IDFuO1xuXG4gICAgZm9yIChsZXQgaT0xOyBpPD1tYXhCaXRzOyBpKyspIHtcbiAgICAgICAgaTJbaV0gPSBpMltpLTFdICogMm47XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXNpMiA9W107XG4gICAgZm9yIChsZXQgaT0wOyBpPD1tYXhCaXRzOyBpKyspIHtcbiAgICAgICAgY29uc3QgbSA9IG1vZEludihpMltpXSwgcSkgKiBSICUgcTtcbiAgICAgICAgYnl0ZXNpMi5wdXNoKC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKG0sIG44ZikpO1xuICAgIH1cblxuICAgIGNvbnN0IElOVjIgPSBtb2R1bGUuYWxsb2MoYnl0ZXNpMik7XG5cbiAgICBjb25zdCBzaGlmdCA9IG1vZFBvdyhuciwgMm4sIHEpO1xuICAgIGNvbnN0IGJ5dGVzU2hpZnRUb1NtYWxsTSA9W107XG4gICAgY29uc3QgYnl0ZXNTQ29uc3QgPVtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw9bWF4Qml0czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0VG9TbWFsbE0gPSBtb2RQb3coc2hpZnQsIDJuICoqIEJpZ0ludChpKSwgcSk7XG4gICAgICAgIGNvbnN0IHNDb25zdCA9IG1vZEludihxICsgMW4gLSBzaGlmdFRvU21hbGxNLCBxKTtcbiAgICAgICAgYnl0ZXNTaGlmdFRvU21hbGxNLnB1c2goLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoc2hpZnRUb1NtYWxsTSAqIFIgJSBxLCBuOGYpKTtcbiAgICAgICAgYnl0ZXNTQ29uc3QucHVzaCguLi51dGlscy5iaWdJbnQyQnl0ZXNMRShzQ29uc3QgKiBSICUgcSwgbjhmKSk7XG4gICAgfVxuXG4gICAgY29uc3QgU0hJRlRfVE9fTSA9IG1vZHVsZS5hbGxvYyggYnl0ZXNTaGlmdFRvU21hbGxNICApO1xuICAgIGNvbnN0IFNDT05TVCA9IG1vZHVsZS5hbGxvYyggYnl0ZXNTQ29uc3QgICk7XG5cbiAgICBmdW5jdGlvbiByZXYoeCkge1xuICAgICAgICBsZXQgcj0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ODsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoeCAmICgxIDw8IGkpKSB7XG4gICAgICAgICAgICAgICAgciA9IHIgfCAoMHg4MCA+PiBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBjb25zdCBydGFibGUgPSBBcnJheSgyNTYpO1xuICAgIGZvciAobGV0IGk9MDsgaTwyNTY7IGkrKykge1xuICAgICAgICBydGFibGVbaV0gPSByZXYoaSk7XG4gICAgfVxuXG4gICAgY29uc3QgUkVWVEFCTEUgPSBtb2R1bGUuYWxsb2MocnRhYmxlKTtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRMb2cyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9fbG9nMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJhdXhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYXV4XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJiaXRzXCIsIGMuaTMyX2NvbnN0KDApKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwiYXV4XCIpKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImF1eFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJiaXRzXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuaTMyX25lKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMudW5yZWFjaGFibGUoKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuaTMyX2d0X3UoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobWF4Qml0cylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnVucmVhY2hhYmxlKClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuZ2V0TG9jYWwoXCJiaXRzXCIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgT25lID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJiaXRzXCIsXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9fbG9nMlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZlByZWZpeCArIFwiX29uZVwiLCBPbmUpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCtcIl9yYXdmZnRcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgT25lXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElGRlQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lmZnRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicEludjJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYml0c1wiLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfX2xvZzJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInBJbnYyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChJTlYyKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4K1wiX3Jhd2ZmdFwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEludjJcIilcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSYXdGRlQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3Jhd2ZmdFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTsgLy8gMiBwb3dlclxuICAgICAgICBmLmFkZFBhcmFtKFwicmV2ZXJzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm11bEZhY3RvclwiLCBcImkzMlwiKTtcblxuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImtcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1kaXYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInB3bVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VQZXJtdXRhdGlvblwiLCBjLmdldExvY2FsKFwicHhcIiksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuXCIsIGMuaTMyX3NobChjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcImJpdHNcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2d0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtXCIsIGMuaTMyX3NobChjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcInNcIikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHdtXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFJPT1RzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJrXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJrXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9vbmVcIiwgVyksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIm1kaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJtXCIpLCBjLmkzMl9jb25zdCgxKSkgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm1kaXYyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJrXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibWRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHdtXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJrXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwia1wiKSwgYy5nZXRMb2NhbChcIm1cIikpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInNcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJzXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX19mZnRGaW5hbFwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicmV2ZXJzZVwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsSW52ZXJzZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX2ZmdEZpbmFsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJiaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicmV2ZXJzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm11bEZhY3RvclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZGl2MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBJbnYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1hc2tcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwicmV2ZXJzZVwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuXCIsIGMuaTMyX3NobCggYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtYXNrXCIsIGMuaTMyX3N1YiggYy5nZXRMb2NhbChcIm5cIikgLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIm5kaXYyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyZXZlcnNlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9pc09uZVwiLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDFcIiksIFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MlwiKSAsIGMuZ2V0TG9jYWwoXCJpZHgxXCIpICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGdQcmVmaXggKyBcIl9jb3B5XCIsIFQgLCBjLmdldExvY2FsKFwiaWR4MlwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MVwiKSwgVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiAsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpICwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSwgYy5nZXRMb2NhbChcImlkeDFcIikgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGICwgVCAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyAoSXQgc2hvdWxkIG5vdCBiZSBoZXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGICwgYy5nZXRMb2NhbChcImlkeDFcIikgLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpLCBjLmdldExvY2FsKFwiaWR4MVwiKSApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YgLCBjLmdldExvY2FsKFwiaWR4MlwiKSAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9pc09uZVwiLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgKEl0IHNob3VsZCBub3QgYmUgaGVyZSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiwgYy5nZXRMb2NhbChcInB4XCIpICwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSwgYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFJldmVyc2VQZXJtdXRhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX3JldmVyc2VQZXJtdXRhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicmlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5cIiwgYy5pMzJfc2hsKCBjLmkzMl9jb25zdCgxKSwgYy5nZXRMb2NhbChcImJpdHNcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInJpXCIsIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2XCIsIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiYml0c1wiKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbHRfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJpXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiaWR4MVwiKSwgVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDJcIikgLCBjLmdldExvY2FsKFwiaWR4MVwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgVCAsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcblxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSZXYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19yZXZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfcm90bChcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwieFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVlRBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoOClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweEZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZUQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWVEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDgpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVlRBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVEpvaW4oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImZpcnN0XCIpLCBXKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBUXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZlByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaW5jXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRkZUSm9pbkV4dCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0Sm9pbkV4dFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmaXJzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImluY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInRvdGFsQml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTaGlmdFRvTVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFNoaWZ0VG9NXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTSElGVF9UT19NKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRvdGFsQml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgYy5jYWxsKCBmUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiZmlyc3RcIiksIFcpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTaGlmdFRvTVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImluY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgV1xuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVEpvaW5FeHRJbnYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5FeHRJbnZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ0b3RhbEJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU2hpZnRUb01cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU0NvbnN0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU2hpZnRUb01cIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFNISUZUX1RPX00pLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU0NvbnN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTQ09OU1QpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoIGZQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJmaXJzdFwiKSwgVyksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU0NvbnN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2hpZnRUb01cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNDb25zdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpbmNcIiksXG4gICAgICAgICAgICAgICAgICAgIFdcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfcHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmaXJzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImluY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInRvdGFsQml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTaGlmdFRvTVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBTQ29uc3RcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBTaGlmdFRvTVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoU0hJRlRfVE9fTSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0b3RhbEJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBTQ29uc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFNDT05TVCksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0b3RhbEJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImZpcnN0XCIpLCBXKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2hpZnRUb01cIiksXG4gICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTQ29uc3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImluY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgV1xuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVE1peCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0TWl4XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZXhwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibkdyb3Vwc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5QZXJHcm91cFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5QZXJHcm91cERpdjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwYWlyT2Zmc2V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInB3bVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5QZXJHcm91cFwiLCBjLmkzMl9zaGwoYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJleHBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibkdyb3Vwc1wiLCBjLmkzMl9zaHJfdShjLmdldExvY2FsKFwiblwiKSwgYy5nZXRMb2NhbChcImV4cFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBhaXJPZmZzZXRcIiwgYy5pMzJfbXVsKGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIpLCBjLmkzMl9jb25zdChuOGcpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicHdtXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChST09UcyksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJleHBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuR3JvdXBzXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX29uZVwiLCBXKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5QZXJHcm91cERpdjJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGFpck9mZnNldFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHdtXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvLyBSZXZlcnNlIGFsbCBhbmQgbXVsdGlwbHkgYnkgZmFjdG9yXG4gICAgZnVuY3Rpb24gYnVpbGRGRlRGaW5hbCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0RmluYWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJmYWN0b3JcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZGl2MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5kaXYyXCIsIGMuaTMyX3Nocl91KGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmFjdG9yXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5kaXYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuZGl2MlwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmFjdG9yXCIpLFxuICAgICAgICAgICAgICAgICAgICBUXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImZhY3RvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgVCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkUmV2KCk7XG4gICAgYnVpbGRSZXZlcnNlUGVybXV0YXRpb24oKTtcbiAgICBidWlsZEZpbmFsSW52ZXJzZSgpO1xuICAgIGJ1aWxkUmF3RkZUKCk7XG4gICAgYnVpbGRMb2cyKCk7XG4gICAgYnVpbGRGRlQoKTtcbiAgICBidWlsZElGRlQoKTtcbiAgICBidWlsZEZGVEpvaW4oKTtcbiAgICBidWlsZEZGVEpvaW5FeHQoKTtcbiAgICBidWlsZEZGVEpvaW5FeHRJbnYoKTtcbiAgICBidWlsZEZGVE1peCgpO1xuICAgIGJ1aWxkRkZURmluYWwoKTtcbiAgICBidWlsZFByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24oKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfaWZmdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3Jhd2ZmdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRKb2luRXh0XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0Sm9pbkV4dEludlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdE1peFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdEZpbmFsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfcHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvblwiKTtcblxufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFBvbChtb2R1bGUsIHByZWZpeCwgcHJlZml4RmllbGQpIHtcblxuICAgIGNvbnN0IG42NCA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeEZpZWxkXS5uNjQ7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdHBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0cFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdHBcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29uc3RydWN0TEMoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2NvbnN0cnVjdExDXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHBvbHlub21pYWxzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHNpZ25hbHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuU2lnbmFsc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByZXNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwZFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5jb2Vmc1wiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwcFwiLCBjLmdldExvY2FsKFwicHBvbHlub21pYWxzXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwc1wiLCBjLmdldExvY2FsKFwicHNpZ25hbHNcIikpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuU2lnbmFsc1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuY29lZnNcIiwgYy5pMzJfbG9hZChjLmdldExvY2FsKFwicHBcIikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcFwiKSwgYy5pMzJfY29uc3QoNCkpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmNvZWZzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJlc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcInBwXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwcFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBwXCIpLCBjLmkzMl9jb25zdCg0KSkpLFxuXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwcFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1eFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIilcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBzXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHNcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgYnVpbGRaZXJvKCk7XG4gICAgYnVpbGRDb25zdHJ1Y3RMQygpO1xuXG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfY29uc3RydWN0TENcIik7XG5cbiAgICByZXR1cm4gcHJlZml4O1xuXG5cblxuXG59O1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkUUFQKG1vZHVsZSwgcHJlZml4LCBwcmVmaXhGaWVsZCkge1xuXG4gICAgY29uc3QgbjY0ID0gbW9kdWxlLm1vZHVsZXNbcHJlZml4RmllbGRdLm42NDtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJ1aWxkQUJDKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9idWlsZEFCQ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDb2Vmc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5Db2Vmc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBXaXRuZXNzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwib2Zmc2V0T3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwibk91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm9mZnNldFdpdG5lc3NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuV2l0bmVzc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBPdXRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIFNldCBvdXRwdXQgYSBhbmQgYiB0byAwXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuZ2V0TG9jYWwoXCJwQlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibk91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0YVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJsYXN0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcIml0YVwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCBjLmdldExvY2FsKFwiaXRiXCIpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRhXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRiXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRcIiwgYy5nZXRMb2NhbChcInBDb2Vmc1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBDb2Vmc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5Db2Vmc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KzEyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJzXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcIml0XCIpLCA4KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sdF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvZmZzZXRXaXRuZXNzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2dlX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2Zmc2V0V2l0bmVzc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5XaXRuZXNzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KzEyKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5icigxKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwibVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKGMuZ2V0TG9jYWwoXCJpdFwiKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJtXCIpLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwT3V0XCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwibVwiKSwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBPdXRcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5icigxKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZChjLmdldExvY2FsKFwiaXRcIiksIDQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9vcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2x0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5PdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmJyKDEpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwicE91dFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2Zmc2V0T3V0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFdpdG5lc3NcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJzXCIpLCBjLmdldExvY2FsKFwib2Zmc2V0V2l0bmVzc1wiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcIml0XCIpLCBjLmkzMl9jb25zdCgxMikpLFxuICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGF1eCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QobjgrMTIpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5nZXRMb2NhbChcInBBXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdFwiLCBjLmdldExvY2FsKFwicENcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5PdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdFwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRKb2luQUJDKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9qb2luQUJDXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5nZXRMb2NhbChcInBBXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5nZXRMb2NhbChcInBCXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGNcIiwgYy5nZXRMb2NhbChcInBDXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdHBcIiwgYy5nZXRMb2NhbChcInBQXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRiXCIpLFxuICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgYXV4LFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRjXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRwXCIpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0Y1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0Y1wiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0cFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0cFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEJhdGNoQWRkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9iYXRjaEFkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicGJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdGFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdGJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJsYXN0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmdldExvY2FsKFwicGFcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmdldExvY2FsKFwicGJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0clwiLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwYVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdHJcIiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRhXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRiXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRyXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkQnVpbGRBQkMoKTtcbiAgICBidWlsZEpvaW5BQkMoKTtcbiAgICBidWlsZEJhdGNoQWRkKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYnVpbGRBQkNcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2pvaW5BQkNcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoQWRkXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcblxufTtcblxuIiwiXG5cbi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEFwcGx5S2V5KG1vZHVsZSwgZm5OYW1lLCBnUHJlZml4LCBmclByZWZpeCwgc2l6ZUdJbiwgc2l6ZUdPdXQsIHNpemVGLCBvcEd0aW1lc0YpIHtcblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwRmlyc3RcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBJbmNcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcInBPbGRGcmVlXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJwRnJvbVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwicFRvXCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IHQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2Moc2l6ZUYpKTtcblxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5zZXRMb2NhbChcInBGcm9tXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICBjLnNldExvY2FsKFwicFRvXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICApO1xuXG4gICAgLy8gdCA9IGZpcnN0XG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICBmclByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwRmlyc3RcIiksXG4gICAgICAgICAgICB0XG4gICAgICAgIClcbiAgICApO1xuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBGcm9tXCIpLFxuICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUb1wiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwRnJvbVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBGcm9tXCIpLCBjLmkzMl9jb25zdChzaXplR0luKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBUb1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBUb1wiKSwgYy5pMzJfY29uc3Qoc2l6ZUdPdXQpKSksXG5cbiAgICAgICAgICAgIC8vIHQgPSB0KiBpbmNcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmclByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJbmNcIiksXG4gICAgICAgICAgICAgICAgdFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSlcbiAgICApO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZuTmFtZSk7XG5cbn07XG4iLCJjb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcblxuY29uc3QgYnVpbGRGMW0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMW0uanNcIik7XG5jb25zdCBidWlsZEYxID1yZXF1aXJlKFwiLi4vYnVpbGRfZjEuanNcIik7XG5jb25zdCBidWlsZEYybSA9cmVxdWlyZShcIi4uL2J1aWxkX2YybS5qc1wiKTtcbmNvbnN0IGJ1aWxkRjNtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjNtLmpzXCIpO1xuY29uc3QgYnVpbGRDdXJ2ZSA9cmVxdWlyZShcIi4uL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzXCIpO1xuY29uc3QgYnVpbGRGRlQgPSByZXF1aXJlKFwiLi4vYnVpbGRfZmZ0XCIpO1xuY29uc3QgYnVpbGRQb2wgPSByZXF1aXJlKFwiLi4vYnVpbGRfcG9sXCIpO1xuY29uc3QgYnVpbGRRQVAgPSByZXF1aXJlKFwiLi4vYnVpbGRfcWFwXCIpO1xuY29uc3QgYnVpbGRBcHBseUtleSA9IHJlcXVpcmUoXCIuLi9idWlsZF9hcHBseWtleVwiKTtcbmNvbnN0IHsgYml0TGVuZ3RoLCBtb2RJbnYsIGlzT2RkLCBpc05lZ2F0aXZlIH0gPSByZXF1aXJlKFwiLi4vYmlnaW50LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkQk4xMjgobW9kdWxlLCBfcHJlZml4KSB7XG5cbiAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4IHx8IFwiYm4xMjhcIjtcblxuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG5cbiAgICBjb25zdCBxID0gMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNuO1xuICAgIGNvbnN0IHIgPSAyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODU0ODM2NDQwMDQxNjAzNDM0MzY5ODIwNDE4NjU3NTgwODQ5NTYxN247XG5cblxuICAgIGNvbnN0IG42NCA9IE1hdGguZmxvb3IoKGJpdExlbmd0aChxIC0gMW4pIC0gMSkvNjQpICsxO1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG4gICAgY29uc3QgZnJzaXplID0gbjg7XG4gICAgY29uc3QgZjFzaXplID0gbjg7XG4gICAgY29uc3QgZjJzaXplID0gZjFzaXplICogMjtcbiAgICBjb25zdCBmdHNpemUgPSBmMXNpemUgKiAxMjtcblxuICAgIGNvbnN0IHByID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCByLCBmcnNpemUgKSk7XG5cbiAgICBjb25zdCBmMW1QcmVmaXggPSBidWlsZEYxbShtb2R1bGUsIHEsIFwiZjFtXCIpO1xuICAgIGJ1aWxkRjEobW9kdWxlLCByLCBcImZyXCIsIFwiZnJtXCIpO1xuXG4gICAgY29uc3QgcEcxYiA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDNuKSwgZjFzaXplICkpO1xuICAgIGNvbnN0IGcxbVByZWZpeCA9IGJ1aWxkQ3VydmUobW9kdWxlLCBcImcxbVwiLCBcImYxbVwiLCBwRzFiKTtcblxuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1fbXVsXCIpO1xuXG4gICAgYnVpbGRQb2wobW9kdWxlLCBcInBvbFwiLCBcImZybVwiKTtcbiAgICBidWlsZFFBUChtb2R1bGUsIFwicWFwXCIsIFwiZnJtXCIpO1xuXG4gICAgY29uc3QgZjJtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBcImYxbV9uZWdcIiwgXCJmMm1cIiwgXCJmMW1cIik7XG4gICAgY29uc3QgcEcyYiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMTk0ODU4NzQ3NTE3NTkzNTQ3NzEwMjQyMzkyNjEwMjE3MjA1MDU3OTA2MTg0NjkzMDE3MjEwNjU1NjQ2MzEyOTY0NTI0NTc0NzgzNzNuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMjY2OTI5NzkxMTE5OTkxMTYxMjQ2OTA3Mzg3MTM3MjgzODQyNTQ1MDc2OTY1MzMyOTAwMjg4NTY5Mzc4NTEwOTEwMzA3NjM2NjkwbiksIGYxc2l6ZSApXG4gICAgXSk7XG4gICAgY29uc3QgZzJtUHJlZml4ID0gYnVpbGRDdXJ2ZShtb2R1bGUsIFwiZzJtXCIsIFwiZjJtXCIsIHBHMmIpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEdUaW1lc0ZyKGZuTmFtZSwgb3BNdWwpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEdcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRnJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcImZybV9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwicEZyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIG9wTXVsLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwR1wiKSxcbiAgICAgICAgICAgICAgICBBVVgsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmbk5hbWUpO1xuICAgIH1cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzFtX3RpbWVzRnJcIiwgXCJnMW1fdGltZXNTY2FsYXJcIik7XG4gICAgYnVpbGRGRlQobW9kdWxlLCBcImcxbVwiLCBcImcxbVwiLCBcImZybVwiLCBcImcxbV90aW1lc0ZyXCIpO1xuXG4gICAgYnVpbGRHVGltZXNGcihcImcybV90aW1lc0ZyXCIsIFwiZzJtX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJnMm1cIiwgXCJnMm1cIiwgXCJmcm1cIiwgXCJnMm1fdGltZXNGclwiKTtcblxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMW1fdGltZXNGckFmZmluZVwiLCBcImcxbV90aW1lc1NjYWxhckFmZmluZVwiKTtcbiAgICBidWlsZEdUaW1lc0ZyKFwiZzJtX3RpbWVzRnJBZmZpbmVcIiwgXCJnMm1fdGltZXNTY2FsYXJBZmZpbmVcIik7XG5cbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJmcm1fYmF0Y2hBcHBseUtleVwiLCBcImZtclwiLCBcImZybVwiLCBuOCwgbjgsIG44LCBcImZybV9tdWxcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzFtX2JhdGNoQXBwbHlLZXlcIiwgXCJnMW1cIiwgXCJmcm1cIiwgbjgqMywgbjgqMywgbjgsIFwiZzFtX3RpbWVzRnJcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzFtX2JhdGNoQXBwbHlLZXlNaXhlZFwiLCBcImcxbVwiLCBcImZybVwiLCBuOCoyLCBuOCozLCBuOCwgXCJnMW1fdGltZXNGckFmZmluZVwiKTtcbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJnMm1fYmF0Y2hBcHBseUtleVwiLCBcImcybVwiLCBcImZybVwiLCBuOCoyKjMsIG44KjMqMiwgbjgsIFwiZzJtX3RpbWVzRnJcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzJtX2JhdGNoQXBwbHlLZXlNaXhlZFwiLCBcImcybVwiLCBcImZybVwiLCBuOCoyKjIsIG44KjMqMiwgbjgsIFwiZzJtX3RpbWVzRnJBZmZpbmVcIik7XG5cbiAgICBmdW5jdGlvbiB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGEpICogKCAxbiA8PCBCaWdJbnQoZjFzaXplKjgpKSAlIHE7XG4gICAgfVxuXG4gICAgY29uc3QgRzFnZW4gPSBbXG4gICAgICAgIDFuLFxuICAgICAgICAybixcbiAgICAgICAgMW5cbiAgICBdO1xuXG4gICAgY29uc3QgcEcxZ2VuID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzJdKSwgZjFzaXplICksXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzF6ZXJvID0gW1xuICAgICAgICAwbixcbiAgICAgICAgMW4sXG4gICAgICAgIDBuXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMXplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1sxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMl0pLCBmMXNpemUgKVxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcyZ2VuID0gW1xuICAgICAgICBbXG4gICAgICAgICAgICAxMDg1NzA0Njk5OTAyMzA1NzEzNTk0NDU3MDc2MjIzMjgyOTQ4MTM3MDc1NjM1OTU3ODUxODA4Njk5MDUxOTk5MzI4NTY1NTg1Mjc4MW4sXG4gICAgICAgICAgICAxMTU1OTczMjAzMjk4NjM4NzEwNzk5MTAwNDAyMTM5MjI4NTc4MzkyNTgxMjg2MTgyMTE5MjUzMDkxNzQwMzE1MTQ1MjM5MTgwNTYzNG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgODQ5NTY1MzkyMzEyMzQzMTQxNzYwNDk3MzI0NzQ4OTI3MjQzODQxODE5MDU4NzI2MzYwMDE0ODc3MDI4MDY0OTMwNjk1ODEwMTkzMG4sXG4gICAgICAgICAgICA0MDgyMzY3ODc1ODYzNDMzNjgxMzMyMjAzNDAzMTQ1NDM1NTY4MzE2ODUxMzI3NTkzNDAxMjA4MTA1NzQxMDc2MjE0MTIwMDkzNTMxbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMmdlbiA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblswXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblswXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsxXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsxXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsyXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMmdlblsyXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcyemVybyA9IFtcbiAgICAgICAgW1xuICAgICAgICAgICAgMG4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdLFtcbiAgICAgICAgICAgIDBuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF1cbiAgICBdO1xuXG4gICAgY29uc3QgcEcyemVybyA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMF1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzBdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1sxXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMV1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzJdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1syXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IHBPbmVUID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHBOb25SZXNpZHVlRjYgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDkpLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwVHdvSW52ID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSggIG1vZEludigybiwgcSkpLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIDBuLCBmMXNpemUgKVxuICAgIF0pO1xuXG4gICAgY29uc3QgcEFsdEJuMTI4VHdpc3QgPSBwTm9uUmVzaWR1ZUY2O1xuXG4gICAgY29uc3QgcFR3aXN0Q29lZkIgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDE5NDg1ODc0NzUxNzU5MzU0NzcxMDI0MjM5MjYxMDIxNzIwNTA1NzkwNjE4NDY5MzAxNzIxMDY1NTY0NjMxMjk2NDUyNDU3NDc4MzczbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDI2NjkyOTc5MTExOTk5MTE2MTI0NjkwNzM4NzEzNzI4Mzg0MjU0NTA3Njk2NTMzMjkwMDI4ODU2OTM3ODUxMDkxMDMwNzYzNjY5MG4pLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SNigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxOUjZcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkX211bE5SNigpO1xuXG4gICAgY29uc3QgZjZtUHJlZml4ID0gYnVpbGRGM20obW9kdWxlLCBwcmVmaXgrXCJfbXVsTlI2XCIsIFwiZjZtXCIsIFwiZjJtXCIpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRfbXVsTlIxMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxOUjEyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QobjgqNCkpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOCoyKSksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqNCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZF9tdWxOUjEyKCk7XG5cbiAgICBjb25zdCBmdG1QcmVmaXggPSBidWlsZEYybShtb2R1bGUsIHByZWZpeCtcIl9tdWxOUjEyXCIsIFwiZnRtXCIsIGY2bVByZWZpeCk7XG5cblxuICAgIGNvbnN0IGF0ZUxvb3BDb3VudCA9IDI5NzkzOTY4MjAzMTU3MDkzMjg4bjtcbiAgICBjb25zdCBhdGVMb29wQml0Qnl0ZXMgPSBiaXRzKGF0ZUxvb3BDb3VudCk7XG4gICAgY29uc3QgcEF0ZUxvb3BCaXRCeXRlcyA9IG1vZHVsZS5hbGxvYyhhdGVMb29wQml0Qnl0ZXMpO1xuICAgIGNvbnN0IGlzTG9vcE5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICBjb25zdCBhdGVDb2VmU2l6ZSA9IDMgKiBmMnNpemU7XG4gICAgY29uc3QgYXRlTkRibENvZWZzID0gYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0xO1xuICAgIGNvbnN0IGF0ZU5BZGRDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5yZWR1Y2UoKGFjYywgYikgPT4gIGFjYyArICggYiE9MCA/IDEgOiAwKSAgICwwKTtcbiAgICBjb25zdCBhdGVOQ29lZnMgPSBhdGVOQWRkQ29lZnMgKyBhdGVORGJsQ29lZnMgKyAxO1xuICAgIGNvbnN0IHByZVBTaXplID0gMyoyKm44O1xuICAgIGNvbnN0IHByZVFTaXplID0gMypuOCoyICsgYXRlTkNvZWZzKmF0ZUNvZWZTaXplO1xuICAgIGNvbnN0IGZpbmFsRXhwSXNOZWdhdGl2ZSA9IGZhbHNlO1xuXG5cbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG42NCxcbiAgICAgICAgcEcxZ2VuOiBwRzFnZW4sXG4gICAgICAgIHBHMXplcm86IHBHMXplcm8sXG4gICAgICAgIHBHMWI6IHBHMWIsXG4gICAgICAgIHBHMmdlbjogcEcyZ2VuLFxuICAgICAgICBwRzJ6ZXJvOiBwRzJ6ZXJvLFxuICAgICAgICBwRzJiOiBwRzJiLFxuICAgICAgICBwcTogbW9kdWxlLm1vZHVsZXNbXCJmMW1cIl0ucHEsXG4gICAgICAgIHByOiBwcixcbiAgICAgICAgcE9uZVQ6IHBPbmVULFxuICAgICAgICBwcmVQU2l6ZTogcHJlUFNpemUsXG4gICAgICAgIHByZVFTaXplOiBwcmVRU2l6ZSxcbiAgICAgICAgcjogci50b1N0cmluZygpLFxuICAgICAgICBxOiBxLnRvU3RyaW5nKClcbiAgICB9O1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJQcmVQU2l6ZTogXCIgK3ByZVBTaXplKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIlByZVFTaXplOiBcIiArcHJlUVNpemUpO1xuXG4gICAgY29uc3QgZmluYWxFeHBaID0gNDk2NTY2MTM2NzE5Mjg0ODg4MW47XG5cbiAgICBmdW5jdGlvbiBuYWYobikge1xuICAgICAgICBsZXQgRSA9IG47XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB3aGlsZSAoRSA+IDBuKSB7XG4gICAgICAgICAgICBpZiAoaXNPZGQoRSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB6ID0gMiAtIE51bWJlcihFICUgNG4pO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCB6ICk7XG4gICAgICAgICAgICAgICAgRSA9IEUgLSBCaWdJbnQoeik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFID0gRSA+PiAxbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpdHMobikge1xuICAgICAgICBsZXQgRSA9IG47XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB3aGlsZSAoRSA+IDBuKSB7XG4gICAgICAgICAgICBpZiAoaXNPZGQoRSkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMSApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRSA9IEUgPj4gMW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBhcmVHMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBhcmVHMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVBcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfbm9ybWFsaXplXCIsIGMuZ2V0TG9jYWwoXCJwUFwiKSwgYy5nZXRMb2NhbChcInBwcmVQXCIpKSwgIC8vIFRPRE8gUmVtb3ZlIGlmIGFscmVhZHkgaW4gYWZmaW5lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwQWRkU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBBZGRTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBDb2VmXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgWDIgID0gYy5nZXRMb2NhbChcInBRXCIpO1xuICAgICAgICBjb25zdCBZMiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBRXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcblxuICAgICAgICBjb25zdCBYMSAgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IFkxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBaMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEVMTF8wICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcbiAgICAgICAgY29uc3QgRUxMX1ZXID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEVMTF9WViAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEQgPSBFTExfVlc7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBEID0gWDEgLSBYMipaMVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMiwgWjEsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBYMSwgRCwgRCksXG5cbiAgICAgICAgICAgIC8vIEUgPSBZMSAtIFkyKloxXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFkyLCBaMSwgRSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFkxLCBFLCBFKSxcblxuICAgICAgICAgICAgLy8gRiA9IEReMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBELCBGKSxcblxuICAgICAgICAgICAgLy8gRyA9IEVeMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBFLCBHKSxcblxuICAgICAgICAgICAgLy8gSCA9IEQqRlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBELCBGLCBIKSxcblxuICAgICAgICAgICAgLy8gSSA9IFgxICogRlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMSwgRiwgSSksXG5cbiAgICAgICAgICAgIC8vIEogPSBIICsgWjEqRyAtIChJK0kpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEksIEksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFoxLCBHLCBKKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgSCwgSiwgSiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEosIEFVWCwgSiksXG5cblxuICAgICAgICAgICAgLy8gWDMgKFgxKSA9IEQqSlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBELCBKLCBYMSksXG5cbiAgICAgICAgICAgIC8vIFkzIChZMSkgPSBFKihJLUopLShIKlkxKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBILCBZMSwgWTEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBJLCBKLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBFLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEFVWCwgWTEsIFkxKSxcblxuICAgICAgICAgICAgLy8gWjMgKFoxKSA9IFoxKkhcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWjEsIEgsIFoxKSxcblxuICAgICAgICAgICAgLy8gZWxsXzAgPSB4aSAqIChFICogWDIgLSBEICogWTIpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEQsIFkyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBFLCBYMiwgRUxMXzApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBFTExfMCwgQVVYLCBFTExfMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEVMTF8wLCBjLmkzMl9jb25zdChwQWx0Qm4xMjhUd2lzdCksIEVMTF8wKSxcblxuXG4gICAgICAgICAgICAvLyBlbGxfVlYgPSAtIEUgKGxhdGVyOiAqIHhQKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBFLCBFTExfVlYpLFxuXG4gICAgICAgICAgICAvLyBlbGxfVlcgPSBEIChsYXRlcjogKiB5UCAgICApXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkXG5cbiAgICAgICAgKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwRG91YmxlU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBEYmxTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFgxICA9IGMuZ2V0TG9jYWwoXCJwUlwiKTtcbiAgICAgICAgY29uc3QgWTEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IFoxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgRUxMXzAgID0gYy5nZXRMb2NhbChcInBDb2VmXCIpO1xuICAgICAgICBjb25zdCBFTExfVlcgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRUxMX1ZWICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgSiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIEEgPSBYMSAqIFkxIC8gMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBZMSwgYy5pMzJfY29uc3QocFR3b0ludiksIEEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBYMSwgQSwgQSksXG5cbiAgICAgICAgICAgIC8vIEIgPSBZMV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFkxLCBCKSxcblxuICAgICAgICAgICAgLy8gQyA9IFoxXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgWjEsIEMpLFxuXG4gICAgICAgICAgICAvLyBEID0gMyAqIENcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQywgQywgRCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEQsIEMsIEQpLFxuXG4gICAgICAgICAgICAvLyBFID0gdHdpc3RfYiAqIERcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocFR3aXN0Q29lZkIpLCBELCBFKSxcblxuICAgICAgICAgICAgLy8gRiA9IDMgKiBFXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEUsIEUsIEYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBFLCBGLCBGKSxcblxuICAgICAgICAgICAgLy8gRyA9IChCK0YpLzJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQiwgRiwgRyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEcsIGMuaTMyX2NvbnN0KHBUd29JbnYpLCBHKSxcblxuICAgICAgICAgICAgLy8gSCA9IChZMStaMSleMi0oQitDKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBCLCBDLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBZMSwgWjEsIEgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBILCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgSCwgQVVYLCBIKSxcblxuICAgICAgICAgICAgLy8gSSA9IEUtQlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBFLCBCLCBJKSxcblxuICAgICAgICAgICAgLy8gSiA9IFgxXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgWDEsIEopLFxuXG4gICAgICAgICAgICAvLyBFX3NxdWFyZWQgPSBFXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRSwgRTIpLFxuXG4gICAgICAgICAgICAvLyBYMyAoWDEpID0gQSAqIChCLUYpXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEIsIEYsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEEsIEFVWCwgWDEpLFxuXG4gICAgICAgICAgICAvLyBZMyAoWTEpID0gR14yIC0gMypFXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRTIsIEUyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBFMiwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBHLCBZMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFkxLCBBVVgsIFkxKSxcblxuICAgICAgICAgICAgLy8gWjMgKFoxKSA9IEIgKiBIXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEIsIEgsIFoxKSxcblxuICAgICAgICAgICAgLy8gZWxsXzAgPSB4aSAqIElcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocEFsdEJuMTI4VHdpc3QpLCBJLCBFTExfMCksXG5cbiAgICAgICAgICAgIC8vIGVsbF9WVyA9IC0gSCAobGF0ZXI6ICogeVApXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIEgsIEVMTF9WVyksXG5cbiAgICAgICAgICAgIC8vIGVsbF9WViA9IDMqSiAobGF0ZXI6ICogeFApXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEosIEosIEVMTF9WViksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEosIEVMTF9WViwgRUxMX1ZWKSxcblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsQnlRKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX211bEJ5UVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMikpO1xuXG4gICAgICAgIGNvbnN0IE11bEJ5UVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShcIjIxNTc1NDYzNjM4MjgwODQzMDEwMzk4MzI0MjY5NDMwODI2MDk5MjY5MDQ0Mjc0MzQ3MjE2ODI3MjEyNjEzODY3ODM2NDM1MDI3MjYxXCIpLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIxMDMwNzYwMTU5NTg3MzcwOTcwMDE1MjI4NDI3MzgxNjExMjI2NDA2OTIzMDEzMDYxNjQzNjc1NTYyNTE5NDg1NDgxNTg3NTcxMzk1NFwiKSwgZjFzaXplICksXG4gICAgICAgIF0pKTtcblxuICAgICAgICBjb25zdCBNdWxCeVFZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIyODIxNTY1MTgyMTk0NTM2ODQ0NTQ4MTU5NTYxNjkzNTAyNjU5MzU5NjE3MTg1MjQ0MTIwMzY3MDc4MDc5NTU0MTg2NDg0MTI2NTU0XCIpLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIzNTA1ODQzNzY3OTExNTU2Mzc4Njg3MDMwMzA5OTg0MjQ4ODQ1NTQwMjQzNTA5ODk5MjU5NjQxMDEzNjc4MDkzMDMzMTMwOTMwNDAzXCIpLCBmMXNpemUgKSxcbiAgICAgICAgXSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vIFRoZSBmcm9iZW5pdXNNYXAoMSkgaW4gdGhpcyBmaWVsZCwgaXMgdGhlIGNvbmp1Z2F0ZVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCB4MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIE11bEJ5UVgsIHgzLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHksIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgTXVsQnlRWSwgeTMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgeiwgejMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzIoKSB7XG4gICAgICAgIGJ1aWxkTXVsQnlRKCk7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgUVggPSBjLmdldExvY2FsKFwicFFcIik7XG5cbiAgICAgICAgY29uc3QgcFIgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QocFIpO1xuICAgICAgICBjb25zdCBSWCA9IGMuaTMyX2NvbnN0KHBSKTtcbiAgICAgICAgY29uc3QgUlkgPSBjLmkzMl9jb25zdChwUitmMnNpemUpO1xuICAgICAgICBjb25zdCBSWiA9IGMuaTMyX2NvbnN0KHBSKzIqZjJzaXplKTtcblxuICAgICAgICBjb25zdCBjUVggPSBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoMCkpO1xuICAgICAgICBjb25zdCBjUVkgPSBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcFExID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSozKTtcbiAgICAgICAgY29uc3QgUTEgPSBjLmkzMl9jb25zdChwUTEpO1xuXG4gICAgICAgIGNvbnN0IHBRMiA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMyk7XG4gICAgICAgIGNvbnN0IFEyID0gYy5pMzJfY29uc3QocFEyKTtcbiAgICAgICAgY29uc3QgUTJZID0gYy5pMzJfY29uc3QocFEyICsgZjJzaXplKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfbm9ybWFsaXplXCIsIFFYLCBjUVgpLCAgLy8gVE9ETyBSZW1vdmUgaWYgYWxyZWFkeSBpbiBhZmZpbmVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIGNRWCwgUlgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2NvcHlcIiwgY1FZLCBSWSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfb25lXCIsIFJaKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSozKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwRGJsU3RlcFwiLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfcHJlcEFkZFN0ZXBcIiwgY1FYLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxCeVFcIiwgY1FYLCBRMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsQnlRXCIsIFExLCBRMilcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNMb29wTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIFJZLCBSWSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBRMlksIFEyWSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwQWRkU3RlcFwiLCBRMSwgUiwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3ByZXBBZGRTdGVwXCIsIFEyLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsQnkwMjRPbGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fbXVsQnkwMjRPbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRWxsMFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWV1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWVlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAgICAgICAgIC8vIFJlc3VsdCBpbiBGMTJcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwICA9IGMuZ2V0TG9jYWwoXCJwRWxsMFwiKTtcbiAgICAgICAgY29uc3QgeDIgID0gYy5nZXRMb2NhbChcInBFbGxWVlwiKTtcbiAgICAgICAgY29uc3QgeDQgID0gYy5nZXRMb2NhbChcInBFbGxWV1wiKTtcblxuICAgICAgICBjb25zdCB6MCAgPSBjLmdldExvY2FsKFwicFJcIik7XG5cbiAgICAgICAgY29uc3QgcEFVWDEyID0gbW9kdWxlLmFsbG9jKGZ0c2l6ZSk7XG4gICAgICAgIGNvbnN0IEFVWDEyID0gYy5pMzJfY29uc3QocEFVWDEyKTtcbiAgICAgICAgY29uc3QgQVVYMTJfMCA9IGMuaTMyX2NvbnN0KHBBVVgxMik7XG4gICAgICAgIGNvbnN0IEFVWDEyXzIgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKTtcbiAgICAgICAgY29uc3QgQVVYMTJfNCA9IGMuaTMyX2NvbnN0KHBBVVgxMitmMnNpemUqMik7XG4gICAgICAgIGNvbnN0IEFVWDEyXzYgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBBVVgxMl84ID0gYy5pMzJfY29uc3QocEFVWDEyK2Yyc2l6ZSo0KTtcbiAgICAgICAgY29uc3QgQVVYMTJfMTAgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKjUpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2NvcHlcIiwgeDAsIEFVWDEyXzApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3plcm9cIiwgQVVYMTJfMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29weVwiLCB4MiwgQVVYMTJfNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfemVyb1wiLCBBVVgxMl82KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIHg0LCBBVVgxMl84KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl96ZXJvXCIsIEFVWDEyXzEwKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgQVVYMTIsIHowLCB6MCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWxCeTAyNCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19tdWxCeTAyNFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGwwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEVsbFZXXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEVsbFZWXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7ICAgICAgICAgICAgLy8gUmVzdWx0IGluIEYxMlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgID0gYy5nZXRMb2NhbChcInBFbGwwXCIpO1xuICAgICAgICBjb25zdCB4MiAgPSBjLmdldExvY2FsKFwicEVsbFZWXCIpO1xuICAgICAgICBjb25zdCB4NCAgPSBjLmdldExvY2FsKFwicEVsbFZXXCIpO1xuXG4gICAgICAgIGNvbnN0IHowICA9IGMuZ2V0TG9jYWwoXCJwUlwiKTtcbiAgICAgICAgY29uc3QgejEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoMipuOCkpO1xuICAgICAgICBjb25zdCB6MiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCg0Km44KSk7XG4gICAgICAgIGNvbnN0IHozICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDYqbjgpKTtcbiAgICAgICAgY29uc3QgejQgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoOCpuOCkpO1xuICAgICAgICBjb25zdCB6NSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCgxMCpuOCkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHMwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBUMyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgVDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBEMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IFMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBEMCA9IHowICogeDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHowLCB4MCwgRDApLFxuICAgICAgICAgICAgLy8gRDIgPSB6MiAqIHgyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MiwgeDIsIEQyKSxcbiAgICAgICAgICAgIC8vIEQ0ID0gejQgKiB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejQsIHg0LCBENCksXG4gICAgICAgICAgICAvLyB0MiA9IHowICsgejQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHowLCB6NCwgdDIpLFxuICAgICAgICAgICAgLy8gdDEgPSB6MCArIHoyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB6MCwgejIsIHQxKSxcbiAgICAgICAgICAgIC8vIHMwID0gejEgKyB6MyArIHo1O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB6MSwgejMsIHMwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgczAsIHo1LCBzMCksXG5cblxuICAgICAgICAgICAgLy8gRm9yIHouYV8uYV8gPSB6MC5cbiAgICAgICAgICAgIC8vIFMxID0gejEgKiB4MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejEsIHgyLCBTMSksXG4gICAgICAgICAgICAvLyBUMyA9IFMxICsgRDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFMxLCBENCwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBteV9GcDY6Om5vbl9yZXNpZHVlICogVDMgKyBEMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIFQzLCBUNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBEMCwgejApLFxuICAgICAgICAgICAgLy8gejAgPSBUNDtcblxuICAgICAgICAgICAgLy8gRm9yIHouYV8uYl8gPSB6MVxuICAgICAgICAgICAgLy8gVDMgPSB6NSAqIHg0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6NSwgeDQsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUMyA9IFQzICsgRDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQzLCBEMiwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBteV9GcDY6Om5vbl9yZXNpZHVlICogVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCBUMywgVDQpLFxuICAgICAgICAgICAgLy8gVDMgPSB6MSAqIHgwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MSwgeDAsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUNCA9IFQ0ICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBUMywgejEpLFxuICAgICAgICAgICAgLy8gejEgPSBUNDtcblxuXG5cbiAgICAgICAgICAgIC8vIEZvciB6LmFfLmNfID0gejJcbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgyLCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHQxICogdDAgLSBEMCAtIEQyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MSwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDAsIEQyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IHozICogeDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHozLCB4NCwgVDQpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDQsIFMxKSxcblxuXG4gICAgICAgICAgICAvLyBGb3Igei5iXy5hXyA9IHozICh6MyBuZWVkcyB6MilcbiAgICAgICAgICAgIC8vIHQwID0gejIgKyB6NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgejIsIHo0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IFQzICsgVDQ7XG4gICAgICAgICAgICAvLyB6MiA9IFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUMywgVDQsIHoyKSxcbiAgICAgICAgICAgIC8vIHQxID0geDIgKyB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDIsIHg0LCB0MSksXG4gICAgICAgICAgICAvLyBUMyA9IHQwICogdDEgLSBEMiAtIEQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MSwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDIsIEQ0LCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIFQzLCBUNCksXG4gICAgICAgICAgICAvLyBUMyA9IHozICogeDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHozLCB4MCwgVDMpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDMsIFMxKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gVDQgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgVDQsIFQzLCB6MyksXG4gICAgICAgICAgICAvLyB6MyA9IFQ0O1xuXG4gICAgICAgICAgICAvLyBGb3Igei5iXy5iXyA9IHo0XG4gICAgICAgICAgICAvLyBUMyA9IHo1ICogeDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHo1LCB4MiwgVDMpLFxuICAgICAgICAgICAgLy8gUzEgPSBTMSArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgVDMsIFMxKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgVDMsIFQ0KSxcbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHg0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHQyICogdDAgLSBEMCAtIEQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MiwgdDAsIFQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRDAsIEQ0LCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgQVVYLCBUMyksXG4gICAgICAgICAgICAvLyBUNCA9IFQ0ICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBUMywgejQpLFxuICAgICAgICAgICAgLy8gejQgPSBUNDtcblxuICAgICAgICAgICAgLy8gRm9yIHouYl8uY18gPSB6NS5cbiAgICAgICAgICAgIC8vIHQwID0geDAgKyB4MiArIHg0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MCwgeDIsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHg0LCB0MCksXG4gICAgICAgICAgICAvLyBUMyA9IHMwICogdDAgLSBTMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgczAsIHQwLCBUMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFQzLCBTMSwgejUpLFxuICAgICAgICAgICAgLy8gejUgPSBUMztcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNaWxsZXJMb29wKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfbWlsbGVyTG9vcFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcHJlUF9QWCA9IGMuZ2V0TG9jYWwoXCJwcHJlUFwiKTtcbiAgICAgICAgY29uc3QgcHJlUF9QWSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHByZVBcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEVMTF8wICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcbiAgICAgICAgY29uc3QgRUxMX1ZXID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEVMTF9WViAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG5cbiAgICAgICAgY29uc3QgcFZXID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSk7XG4gICAgICAgIGNvbnN0IFZXID0gYy5pMzJfY29uc3QocFZXKTtcbiAgICAgICAgY29uc3QgcFZWID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSk7XG4gICAgICAgIGNvbnN0IFZWID0gYy5pMzJfY29uc3QocFZWKTtcblxuICAgICAgICBjb25zdCBGID0gYy5nZXRMb2NhbChcInJcIik7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIEYpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSozKSkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChhdGVMb29wQml0Qnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEYsIEYpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX211bEJ5MDI0XCIsIEVMTF8wLCBWVywgVlYsIEYpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlcsIHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WViwgcHJlUF9QWCwgVlYpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfX211bEJ5MDI0XCIsIEVMTF8wLCBWVywgVlYsIEYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG5cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNMb29wTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBGLCBGKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlcsIHByZVBfUFksIFZXKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WViwgcHJlUF9QWCwgVlYpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19tdWxCeTAyNFwiLCBFTExfMCwgVlcsIFZWLCBGKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLCBwcmVQX1BZLCBWVyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fbXVsQnkwMjRcIiwgRUxMXzAsIFZXLCBWViwgRiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9iZW5pdXNNYXAobikge1xuICAgICAgICBjb25zdCBGMTIgPSBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFs4Mzc2MTE4ODY1NzYzODIxNDk2NTgzOTczODY3NjI2MzY0MDkyNTg5OTA2MDY1ODY4Mjk4Nzc2OTA5NjE3OTE2MDE4NzY4MzQwMDgwbiwgMTY0Njk4MjMzMjMwNzc4MDgyMjM4ODkxMzcyNDExNzY1MzY3OTkwMDkyODY2NDYxMDgxNjk5MzU2NTkzMDE2MTM5NjE3MTIxOTgzMTZuXSxcbiAgICAgICAgICAgICAgICBbMjE4ODgyNDI4NzE4MzkyNzUyMjAwNDI0NDUyNjAxMDkxNTMxNjcyNzc3MDc0MTQ0NzIwNjE2NDE3MTQ3NTg2MzU3NjUwMjA1NTY2MTduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzExNjk3NDIzNDk2MzU4MTU0MzA0ODI1NzgyOTIyNTg0NzI1MzEyOTEyMzgzNDQxMTU5NTA1MDM4Nzk0MDI3MTA1Nzc4OTU0MTg0MzE5biwgMzAzODQ3Mzg5MTM1MDY1ODg3NDIyNzgzNDU0ODc3NjA5OTQxNDU2MzQ5MTg4OTE5NzE5MjcyMzQ1MDgzOTU0NDM3ODYwNDA5NjAxbl0sXG4gICAgICAgICAgICAgICAgWzIxODg4MjQyODcxODM5Mjc1MjIwMDQyNDQ1MjYwMTA5MTUzMTY3Mjc3NzA3NDE0NDcyMDYxNjQxNzE0NzU4NjM1NzY1MDIwNTU2NjE2biwgMG5dLFxuICAgICAgICAgICAgICAgIFszMzIxMzA0NjMwNTk0MzMyODA4MjQxODA5MDU0OTU4MzYxMjIwMzIyNDc3Mzc1MjkxMjA2MjYxODg0NDA5MTg5NzYwMTg1ODQ0MjM5biwgNTcyMjI2NjkzNzg5NjUzMjg4NTc4MDA1MTk1ODk1ODM0ODIzMTE0MzM3MzcwMDEwOTM3Mjk5OTM3NDgyMDIzNTEyMTM3NDQxOTg2OG5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODY5NjMxMTE1NzI5NzgyMzY2MjY4OTAzNzg5NDY0NTIyNjIwODU4Mm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTM1MTIxMjQwMDYwNzU0NTM3MjU2NjI0MzE4Nzc2MzA5MTA5OTYxMDY0MDUwOTE0Mjk1MjQ4ODU3Nzk0MTk5Nzg2MjY0NTc4Njg1MDNuLCA1NDE4NDE5NTQ4NzYxNDY2OTk4MzU3MjY4NTA0MDgwNzM4Mjg5Njg3MDI0NTExMTg5NjUzNzI3MDI5NzM2MjgwNjgzNTE0MDEwMjY3bl0sXG4gICAgICAgICAgICAgICAgWzIyMDM5NjA0ODUxNDgxMjE5MjE0MTg2MDM3NDI4MjU3NjIwMjA5NzQyNzkyNTg4ODAyMDU2NTE5NjZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzEwMTkwODE5Mzc1NDgxMTIwOTE3NDIwNjIyODIyNjcyNTQ5Nzc1NzgzOTI3NzE2MTM4MzE4NjIzODk1MDEwNzg4ODY2MjcyMDI0MjY0biwgMjE1ODQzOTU0ODI3MDQyMDkzMzQ4MjM2MjIyOTAzNzk2NjUxNDcyMzk5NjE5NjgzNzgxMDQzOTAzNDM5NTM5NDAyMDczNjU3OTg5ODJuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2N24sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTg1NjY5MzgyNDEyNDQ5NDI0MTQwMDQ1OTY2OTAyOTg5MTM4NjgzNzM4MzM3ODIwMDY2MTc0MDA4MDQ2Mjg3MDQ4ODUwNDAzNjQzNDRuLCAxNjE2NTk3NTkzMzk0Mjc0MjMzNjQ2NjM1Mzc4NjI5ODkyNjg1NzU1MjkzNzQ1NzE4ODQ1MDY2MzMxNDIxNzY1OTUyMzg1MTc4ODcxNW5dLFxuICAgICAgICAgICAgXVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IEY2ID0gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMjE1NzU0NjM2MzgyODA4NDMwMTAzOTgzMjQyNjk0MzA4MjYwOTkyNjkwNDQyNzQzNDcyMTY4MjcyMTI2MTM4Njc4MzY0MzUwMjcyNjFuLCAxMDMwNzYwMTU5NTg3MzcwOTcwMDE1MjI4NDI3MzgxNjExMjI2NDA2OTIzMDEzMDYxNjQzNjc1NTYyNTE5NDg1NDgxNTg3NTcxMzk1NG5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMDA0MjQ0NTI2MDEwOTE1MzE2NzI3NzcwNzQxNDQ3MjA2MTY0MTcxNDc1ODYzNTc2NTAyMDU1NjYxNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzc3MjAwMDg4MTkxOTg1Mzc3NjQzMzY5NTE4NjcxMzg1ODIzOTAwOTA3MzU5MzgxNzE5NTc3MTc3MzM4MTkxOTMxNjQxOTM0NTI2MW4sIDIyMzY1OTU0OTU5NjcyNDUxODgyODE3MDEyNDgyMDMxODE3OTUxMjEwNjg5MDI2MDU4NjEyMjc4NTUyNjExMzc4MjA5NDQwMDg5MjZuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTg0MjkwMjEyMjM0Nzc4NTM2NTc2NjA3OTIwMzQzNjk4NjU4MzkxMTQ1MDQ0NDY0MzEyMzQ3MjYzOTIwODAwMDIxMzc1OTgwNDQ2NDRuLCA5MzQ0MDQ1Nzc5OTk4MzIwMzMzODEyNDIwMjIzMjM3OTgxMDI5NTA2MDEyMTI0MDc1NTI1Njc5MjA4NTgxOTAyMDA4NDA2NDg1NzAzbl0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsyNTgxOTExMzQ0NDY3MDA5MzM1MjY3MzExMTE1NDY4ODAzMDk5NTUxNjY1NjA1MDc2MTk2NzQwODY3ODA1MjU4NTY4MjM0MzQ2MzM4biwgMTk5Mzc3NTY5NzE3NzU2NDc5ODc5OTU5MzIxNjk5MjkzNDE5OTQzMTQ2NDA2NTI5NjQ5NDk0NDgzMTMzNzQ0NzI0MDA3MTY2NjEwMzBuXSxcbiAgICAgICAgICAgICAgICBbMjIwMzk2MDQ4NTE0ODEyMTkyMTQxODYwMzc0MjgyNTc2MjAyMDk3NDI3OTI1ODg4MDIwNTY1MTk2Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNTMyNDQ3OTIwMjQ0OTkwMzU0MjcyNjc4MzM5NTUwNjIxNDQ4MTkyODI1Nzc2MjQwMDY0MzI3OTc4MDM0MzM2ODU1NzI5NzEzNTcxOG4sIDE2MjA4OTAwMzgwNzM3NjkzMDg0OTE5NDk1MTI3MzM0Mzg3OTgxMzkzNzI2NDE5ODU2ODg4Nzk5OTE3OTE0MTgwOTg4ODQ0MTIzMDM5bl0sXG4gICAgICAgICAgICAgICAgWzIxODg4MjQyODcxODM5Mjc1MjIwMDQyNDQ1MjYwMTA5MTUzMTY3Mjc3NzA3NDE0NDcyMDYxNjQxNzE0NzU4NjM1NzY1MDIwNTU2NjE2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxMzk4MTg1MjMyNDkyMjM2MjM0NDI1MjMxMTIzNDI4MjI1NzUwNzIxNjM4Nzc4OTgyMDk4MzY0MjA0MDg4OTI2NzUxOTY5NDcyNjUyN24sIDc2Mjk4MjgzOTExNjUyMDkzNzE1NzczODQxOTMyNTA4MjAyMDE2ODQyNTUyNDE3NzM4MDkwNzcxNDY3ODcxMzU5MDA4OTE2MzMwOTduXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2Zyb2Jlbml1c01hcFwiK24pO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8NjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBYID0gKGk9PTApID8gYy5nZXRMb2NhbChcInhcIikgOiBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBYYzAgPSBYO1xuICAgICAgICAgICAgY29uc3QgWGMxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSArIGYxc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgUiA9IChpPT0wKSA/IGMuZ2V0TG9jYWwoXCJyXCIpIDogYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgUmMwID0gUjtcbiAgICAgICAgICAgIGNvbnN0IFJjMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUgKyBmMXNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZWYgPSBtdWwyKEYxMltNYXRoLmZsb29yKGkvMyldW24lMTJdICwgRjZbaSUzXVtuJTZdKTtcbiAgICAgICAgICAgIGNvbnN0IHBDb2VmID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoY29lZlswXSksIDMyKSxcbiAgICAgICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoY29lZlsxXSksIDMyKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgaWYgKG4lMiA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBYYzAsIFJjMCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9uZWdcIiwgWGMxLCBSYzEpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUiksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWCwgYy5pMzJfY29uc3QocENvZWYpLCBSKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWwyKGEsIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjMCA9IEJpZ0ludChhWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGFjMSA9IEJpZ0ludChhWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IGJjMCA9IEJpZ0ludChiWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJjMSA9IEJpZ0ludChiWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFtcbiAgICAgICAgICAgICAgICAoYWMwICogYmMwIC0gKCAgYWMxICogYmMxKSAgKSAlIHEsXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMSArICggIGFjMSAqIGJjMCkgICkgJSBxLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKHJlc1swXSkpIHJlc1swXSA9IHJlc1swXSArIHE7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uRmlyc3RDaHVuaygpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25GaXJzdENodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgZWx0QzAgPSBlbHQ7XG4gICAgICAgIGNvbnN0IGVsdEMxID0gYy5pMzJfYWRkKGVsdCwgYy5pMzJfY29uc3QobjgqNikpO1xuICAgICAgICBjb25zdCByID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHBBID0gbW9kdWxlLmFsbG9jKGZ0c2l6ZSk7XG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChwQSk7XG4gICAgICAgIGNvbnN0IEFjMCA9IEE7XG4gICAgICAgIGNvbnN0IEFjMSA9IGMuaTMyX2NvbnN0KHBBICsgbjgqNik7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgQSA9IGFsdF9ibjEyOF9GcTEyKGVsdC5jMCwtZWx0LmMxKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9jb3B5XCIsIGVsdEMwLCBBYzApLFxuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX25lZ1wiLCBlbHRDMSwgQWMxKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgQiA9IGVsdC5pbnZlcnNlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBlbHQsIEIpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhbHRfYm4xMjhfRnExMiBDID0gQSAqIEI7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEEsIEIsIEMpLFxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgRCA9IEMuRnJvYmVuaXVzX21hcCgyKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwMlwiLCBDLCBEKSxcbiAgICAgICAgICAgIC8vIGNvbnN0IGFsdF9ibjEyOF9GcTEyIHJlc3VsdCA9IEQgKiBDO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBDLCBELCByKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEN5Y2xvdG9taWNTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fY3ljbG90b21pY1NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDQgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDMqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCg0KmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4NSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoNSpmMnNpemUpKTtcblxuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByNCA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMypmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDQqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHI1ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg1KmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IHQwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHRtcCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gICAgLy8gdDAgKyB0MSp5ID0gKHowICsgejEqeSleMiA9IGFeMlxuICAgICAgICAgICAgLy8gICAgdG1wID0gejAgKiB6MTtcbiAgICAgICAgICAgIC8vICAgIHQwID0gKHowICsgejEpICogKHowICsgbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHoxKSAtIHRtcCAtIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB0bXA7XG4gICAgICAgICAgICAvLyAgICB0MSA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDAsIHgxLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4MSwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHQwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIEFVWCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDEpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDIgKyB0Myp5ID0gKHoyICsgejMqeSleMiA9IGJeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHoyICogejM7XG4gICAgICAgICAgICAvLyAgdDIgPSAoejIgKyB6MykgKiAoejIgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejMpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0MyA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDIsIHgzLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4MywgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDIsIHQyLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB4MywgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIEFVWCwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDMpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDQgKyB0NSp5ID0gKHo0ICsgejUqeSleMiA9IGNeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHo0ICogejU7XG4gICAgICAgICAgICAvLyAgdDQgPSAoejQgKyB6NSkgKiAoejQgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejUpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0NSA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDQsIHg1LCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4NSwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDQsIHQ0LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB4NSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDQsIEFVWCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDUpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQVxuICAgICAgICAgICAgLy8gejAgPSAzICogdDAgLSAyICogejBcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIwLCByMCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MCwgcjAsIHIwKSxcbiAgICAgICAgICAgIC8vIHoxID0gMyAqIHQxICsgMiAqIHoxXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCB4MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMSwgcjEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHIxLCByMSksXG5cbiAgICAgICAgICAgIC8vIEZvciBCXG4gICAgICAgICAgICAvLyB6MiA9IDMgKiAoeGkgKiB0NSkgKyAyICogejJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDUsIGMuaTMyX2NvbnN0KHBBbHRCbjEyOFR3aXN0KSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQVVYLCB4MiwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMiwgcjIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQVVYLCByMiwgcjIpLFxuICAgICAgICAgICAgLy8gejMgPSAzICogdDQgLSAyICogejNcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDQsIHgzLCByMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIzLCByMywgcjMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0NCwgcjMsIHIzKSxcblxuICAgICAgICAgICAgLy8gRm9yIENcbiAgICAgICAgICAgIC8vIHo0ID0gMyAqIHQyIC0gMiAqIHo0XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQyLCB4NCwgcjQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByNCwgcjQsIHI0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDIsIHI0LCByNCksXG4gICAgICAgICAgICAvLyB6NSA9IDMgKiB0MyArIDIgKiB6NVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgeDUsIHI1KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjUsIHI1LCByNSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCByNSwgcjUpLFxuXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEN5Y2xvdG9taWNFeHAoZXhwb25lbnQsIGZuTmFtZSkge1xuICAgICAgICBjb25zdCBleHBvbmVudE5hZkJ5dGVzID0gbmFmKGV4cG9uZW50KS5tYXAoIChiKSA9PiAoYj09LTEgPyAweEZGOiBiKSApO1xuICAgICAgICBjb25zdCBwRXhwb25lbnROYWZCeXRlcyA9IG1vZHVsZS5hbGxvYyhleHBvbmVudE5hZkJ5dGVzKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNFeHBfXCIrZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwieFwiKTtcblxuICAgICAgICBjb25zdCByZXMgPSBjLmdldExvY2FsKFwiclwiKTtcblxuICAgICAgICBjb25zdCBpbnZlcnNlID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCBpbnZlcnNlKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9vbmVcIiwgcmVzKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLnRlZUxvY2FsKFwiYml0XCIsIGMuaTMyX2xvYWQ4X3MoYy5pMzJfY29uc3QoZXhwb25lbnROYWZCeXRlcy5sZW5ndGgtMSksIHBFeHBvbmVudE5hZkJ5dGVzKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIHgsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCByZXMsIHJlcyksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIGludmVyc2UsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkxhc3RDaHVuaygpIHtcbiAgICAgICAgYnVpbGRDeWNsb3RvbWljU3F1YXJlKCk7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY0V4cChmaW5hbEV4cFosIFwidzBcIik7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19maW5hbEV4cG9uZW50aWF0aW9uTGFzdENodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEsgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IEwgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE0gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE4gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IE8gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG5cbiAgICAgICAgICAgIC8vIEEgPSBleHBfYnlfbmVnX3ooZWx0KSAgLy8gPSBlbHReKC16KVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIGVsdCwgQSksXG4gICAgICAgICAgICBmaW5hbEV4cElzTmVnYXRpdmUgPyBbXSA6IGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgQSwgQSksXG4gICAgICAgICAgICAvLyBCID0gQV4yICAgICAgICAgICAgICAgIC8vID0gZWx0XigtMip6KVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIsIEEsIEIpLFxuICAgICAgICAgICAgLy8gQyA9IEJeMiAgICAgICAgICAgICAgICAvLyA9IGVsdF4oLTQqeilcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCBCLCBDKSxcbiAgICAgICAgICAgIC8vIEQgPSBDICogQiAgICAgICAgICAgICAgLy8gPSBlbHReKC02KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEMsIEIsIEQpLFxuICAgICAgICAgICAgLy8gRSA9IGV4cF9ieV9uZWdfeihEKSAgICAvLyA9IGVsdF4oNip6XjIpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgRCwgRSksXG4gICAgICAgICAgICBmaW5hbEV4cElzTmVnYXRpdmUgPyBbXSA6IGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRSwgRSksXG4gICAgICAgICAgICAvLyBGID0gRV4yICAgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjIpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgRSwgRiksXG4gICAgICAgICAgICAvLyBHID0gZXB4X2J5X25lZ196KEYpICAgIC8vID0gZWx0XigtMTIqel4zKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIEYsIEcpLFxuICAgICAgICAgICAgZmluYWxFeHBJc05lZ2F0aXZlID8gW10gOiBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIEcsIEcpLFxuICAgICAgICAgICAgLy8gSCA9IGNvbmooRCkgICAgICAgICAgICAvLyA9IGVsdF4oNip6KVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBELCBIKSxcbiAgICAgICAgICAgIC8vIEkgPSBjb25qKEcpICAgICAgICAgICAgLy8gPSBlbHReKDEyKnpeMylcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRywgSSksXG4gICAgICAgICAgICAvLyBKID0gSSAqIEUgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSSwgRSwgSiksXG4gICAgICAgICAgICAvLyBLID0gSiAqIEggICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDYqeilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSiwgSCwgSyksXG4gICAgICAgICAgICAvLyBMID0gSyAqIEIgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDQqeilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgSywgQiwgTCksXG4gICAgICAgICAgICAvLyBNID0gSyAqIEUgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyAxMip6XjIgKyA2KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEssIEUsIE0pLFxuXG4gICAgICAgICAgICAvLyBOID0gTSAqIGVsdCAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyAxMip6XjIgKyA2KnogKyAxKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBNLCBlbHQsIE4pLFxuXG4gICAgICAgICAgICAvLyBPID0gTC5Gcm9iZW5pdXNfbWFwKDEpIC8vID0gZWx0XihxKigxMip6XjMgKyA2KnpeMiArIDQqeikpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDFcIiwgTCwgTyksXG4gICAgICAgICAgICAvLyBQID0gTyAqIE4gICAgICAgICAgICAgIC8vID0gZWx0XihxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIE8sIE4sIFApLFxuICAgICAgICAgICAgLy8gUSA9IEsuRnJvYmVuaXVzX21hcCgyKSAvLyA9IGVsdF4ocV4yICogKDEyKnpeMyArIDYqel4yICsgNip6KSlcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwMlwiLCBLLCBRKSxcbiAgICAgICAgICAgIC8vIFIgPSBRICogUCAgICAgICAgICAgICAgLy8gPSBlbHReKHFeMiAqICgxMip6XjMgKyA2KnpeMiArIDYqeikgKyBxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFEsIFAsIFIpLFxuICAgICAgICAgICAgLy8gUyA9IGNvbmooZWx0KSAgICAgICAgICAvLyA9IGVsdF4oLTEpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIGVsdCwgUyksXG4gICAgICAgICAgICAvLyBUID0gUyAqIEwgICAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMgKyA2KnpeMiArIDQqeiAtIDEpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFMsIEwsIFQpLFxuICAgICAgICAgICAgLy8gVSA9IFQuRnJvYmVuaXVzX21hcCgzKSAvLyA9IGVsdF4ocV4zKDEyKnpeMyArIDYqel4yICsgNCp6IC0gMSkpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDNcIiwgVCwgVSksXG4gICAgICAgICAgICAvLyBWID0gVSAqIFIgICAgICAgICAgICAgIC8vID0gZWx0XihxXjMoMTIqel4zICsgNip6XjIgKyA0KnogLSAxKSArIHFeMiAqICgxMip6XjMgKyA2KnpeMiArIDYqeikgKyBxKigxMip6XjMgKyA2KnpeMiArIDQqeikgKiAoMTIqel4zICsgMTIqel4yICsgNip6ICsgMSkpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIFUsIFIsIHJlc3VsdCksXG4gICAgICAgICAgICAvLyByZXN1bHQgPSBWXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsRXhwb25lbnRpYXRpb24oKSB7XG4gICAgICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkZpcnN0Q2h1bmsoKTtcbiAgICAgICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uTGFzdENodW5rKCk7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBlbHQgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IGVsdFRvRmlyc3RDaHVuayA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25GaXJzdENodW5rXCIsIGVsdCwgZWx0VG9GaXJzdENodW5rICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2ZpbmFsRXhwb25lbnRpYXRpb25MYXN0Q2h1bmtcIiwgZWx0VG9GaXJzdENodW5rLCByZXN1bHQgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvbk9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGV4cG9uZW50ID0gNTUyNDg0MjMzNjEzMjI0MDk2MzEyNjE3MTI2NzgzMTczMTQ3MDk3MzgyMTAzNzYyOTU3NjU0MTg4ODgyNzM0MzE0MTk2OTEwODM5OTA3NTQxMjEzOTc0NTAyNzYxNTQwNjI5ODE3MDA5NjA4NTQ4NjU0NjgwMzQzNjI3NzAxMTUzODI5NDQ2NzQ3ODEwOTA3MzczMjU2ODQxNTUxMDA2MjAxNjM5Njc3NzI2MTM5OTQ2MDI5MTk5OTY4NDEyNTk4ODA0ODgyMzkxNzAyMjczMDE5MDgzNjUzMjcyMDQ3NTY2MzE2NTg0MzY1NTU5Nzc2NDkzMDI3NDk1NDU4MjM4MzczOTAyODc1OTM3NjU5OTQzNTA0ODczMjIwNTU0MTYxNTUwNTI1OTI2MzAyMzAzMzMxNzQ3NDYzNTE1NjQ0NzExODc2NjUzMTc3MTI5NTc4MzAzMTkxMDk1OTAwOTA5MTkxNjI0ODE3ODI2NTY2Njg4MjQxODA0NDA4MDgxODkyNzg1NzI1OTY3OTMxNzE0MDk3NzE2NzA5NTI2MDkyMjYxMjc4MDcxOTUyNTYwMTcxMTExNDQ0MDcyMDQ5MjI5MTIzNTY1MDU3NDgzNzUwMTYxNDYwMDI0MzUzMzQ2Mjg0MTY3MjgyNDUyNzU2MjE3NjYyMzM1NTI4ODEzNTE5MTM5ODA4MjkxMTcwNTM5MDcyMTI1MzgxMjMwODE1NzI5MDcxNTQ0ODYxNjAyNzUwOTM2OTY0ODI5MzEzNjA4MTM3MzI1NDI2MzgzNzM1MTIyMTc1MjI5NTQxMTU1Mzc2MzQ2NDM2MDkzOTMwMjg3NDAyMDg5NTE3NDI2OTczMTc4OTE3NTY5NzEzMzg0NzQ4MDgxODI3MjU1NDcyNTc2OTM3NDcxNDk2MTk1NzUyNzI3MTg4MjYxNDM1NjMzMjcxMjM4NzEwMTMxNzM2MDk2Mjk5Nzk4MTY4ODUyOTI1NTQwNTQ5MzQyMzMwNzc1Mjc5ODc3MDA2Nzg0MzU0ODAxNDIyMjQ5NzIyNTczNzgzNTYxNjg1MTc5NjE4ODE2NDgwMDM3Njk1MDA1NTE1NDI2MTYyMzYyNDMxMDcyMjQ1NjM4MzI0NzQ0NDgwbjtcblxuICAgICAgICBjb25zdCBwRXhwb25lbnQgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIGV4cG9uZW50LCAzNTIgKSk7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwRXhwb25lbnQpLCBjLmkzMl9jb25zdCgzNTIpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuXG4gICAgY29uc3QgcFByZVAgPSBtb2R1bGUuYWxsb2MocHJlUFNpemUpO1xuICAgIGNvbnN0IHBQcmVRID0gbW9kdWxlLmFsbG9jKHByZVFTaXplKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkUGFpcmluZ0VxdWF0aW9uKG5QYWlyaW5ncykge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wYWlyaW5nRXFcIituUGFpcmluZ3MpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBhaXJpbmdzOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkUGFyYW0oXCJwX1wiK2ksIFwiaTMyXCIpO1xuICAgICAgICAgICAgZi5hZGRQYXJhbShcInFfXCIraSwgXCJpMzJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRQYXJhbShcImNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcmVzVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgYXV4VCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX29uZVwiLCByZXNUICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUGFpcmluZ3M7IGkrKykge1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiLCBjLmdldExvY2FsKFwicF9cIitpKSwgYy5pMzJfY29uc3QocFByZVApICkpO1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzJcIiwgYy5nZXRMb2NhbChcInFfXCIraSksIGMuaTMyX2NvbnN0KHBQcmVRKSApKTtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbWlsbGVyTG9vcFwiLCBjLmkzMl9jb25zdChwUHJlUCksIGMuaTMyX2NvbnN0KHBQcmVRKSwgYXV4VCApKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzVCwgYXV4VCwgcmVzVCApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiLCByZXNULCByZXNUICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXFcIiwgcmVzVCwgYy5nZXRMb2NhbChcImNcIikpKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUGFpcmluZygpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcGFpcmluZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHJlc1QgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzFcIiwgYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KHBQcmVQKSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzJcIiwgYy5nZXRMb2NhbChcInFcIiksIGMuaTMyX2NvbnN0KHBQcmVRKSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9taWxsZXJMb29wXCIsIGMuaTMyX2NvbnN0KHBQcmVQKSwgYy5pMzJfY29uc3QocFByZVEpLCByZXNUICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIiwgcmVzVCwgYy5nZXRMb2NhbChcInJcIikgKSk7XG4gICAgfVxuXG5cbiAgICBidWlsZFByZXBBZGRTdGVwKCk7XG4gICAgYnVpbGRQcmVwRG91YmxlU3RlcCgpO1xuXG4gICAgYnVpbGRQcmVwYXJlRzEoKTtcbiAgICBidWlsZFByZXBhcmVHMigpO1xuXG4gICAgYnVpbGRNdWxCeTAyNCgpO1xuICAgIGJ1aWxkTXVsQnkwMjRPbGQoKTtcbiAgICBidWlsZE1pbGxlckxvb3AoKTtcblxuXG4gICAgZm9yIChsZXQgaT0wOyBpPDEwOyBpKyspIHtcbiAgICAgICAgYnVpbGRGcm9iZW5pdXNNYXAoaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fZnJvYmVuaXVzTWFwXCIraSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCk7XG4gICAgYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uKCk7XG5cbiAgICBmb3IgKGxldCBpPTE7IGk8PTU7IGkrKykge1xuICAgICAgICBidWlsZFBhaXJpbmdFcXVhdGlvbihpKTtcbiAgICAgICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3BhaXJpbmdFcVwiK2kpO1xuICAgIH1cblxuICAgIGJ1aWxkUGFpcmluZygpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3BhaXJpbmdcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wcmVwYXJlRzJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX21pbGxlckxvb3BcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19tdWxCeTAyNFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX211bEJ5MDI0T2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIik7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhtb2R1bGUuZnVuY3Rpb25JZHhCeU5hbWUpO1xuXG59O1xuXG4iLCJjb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcblxuY29uc3QgYnVpbGRGMW0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMW0uanNcIik7XG5jb25zdCBidWlsZEYxID1yZXF1aXJlKFwiLi4vYnVpbGRfZjEuanNcIik7XG5jb25zdCBidWlsZEYybSA9cmVxdWlyZShcIi4uL2J1aWxkX2YybS5qc1wiKTtcbmNvbnN0IGJ1aWxkRjNtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjNtLmpzXCIpO1xuY29uc3QgYnVpbGRDdXJ2ZSA9cmVxdWlyZShcIi4uL2J1aWxkX2N1cnZlX2phY29iaWFuX2EwLmpzXCIpO1xuY29uc3QgYnVpbGRGRlQgPSByZXF1aXJlKFwiLi4vYnVpbGRfZmZ0XCIpO1xuY29uc3QgYnVpbGRQb2wgPSByZXF1aXJlKFwiLi4vYnVpbGRfcG9sXCIpO1xuY29uc3QgYnVpbGRRQVAgPSByZXF1aXJlKFwiLi4vYnVpbGRfcWFwXCIpO1xuY29uc3QgYnVpbGRBcHBseUtleSA9IHJlcXVpcmUoXCIuLi9idWlsZF9hcHBseWtleVwiKTtcbmNvbnN0IHsgYml0TGVuZ3RoLCBpc09kZCwgaXNOZWdhdGl2ZSB9ID0gcmVxdWlyZShcIi4uL2JpZ2ludC5qc1wiKTtcblxuLy8gRGVmaW5pdGlvbiBoZXJlOiBodHRwczovL2VsZWN0cmljY29pbi5jby9ibG9nL25ldy1zbmFyay1jdXJ2ZS9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEJMUzEyMzgxKG1vZHVsZSwgX3ByZWZpeCkge1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImJsczEyMzgxXCI7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgcSA9IDB4MWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFibjtcbiAgICBjb25zdCByID0gMHg3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxbjtcblxuICAgIGNvbnN0IG42NHEgPSBNYXRoLmZsb29yKChiaXRMZW5ndGgocSAtIDFuKSAtIDEpLzY0KSArMTtcbiAgICBjb25zdCBuOHEgPSBuNjRxKjg7XG4gICAgY29uc3QgZjFzaXplID0gbjhxO1xuICAgIGNvbnN0IGYyc2l6ZSA9IGYxc2l6ZSAqIDI7XG4gICAgY29uc3QgZnRzaXplID0gZjFzaXplICogMTI7XG5cbiAgICBjb25zdCBuNjRyID0gTWF0aC5mbG9vcigoYml0TGVuZ3RoKHIgLSAxbikgLSAxKS82NCkgKzE7XG4gICAgY29uc3QgbjhyID0gbjY0cio4O1xuICAgIGNvbnN0IGZyc2l6ZSA9IG44cjtcblxuXG4gICAgY29uc3QgcHIgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIHIsIGZyc2l6ZSApKTtcblxuICAgIGNvbnN0IGYxbVByZWZpeCA9IGJ1aWxkRjFtKG1vZHVsZSwgcSwgXCJmMW1cIiwgXCJpbnRxXCIpO1xuICAgIGJ1aWxkRjEobW9kdWxlLCByLCBcImZyXCIsIFwiZnJtXCIsIFwiaW50clwiKTtcbiAgICBjb25zdCBwRzFiID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoNG4pLCBmMXNpemUgKSk7XG4gICAgY29uc3QgZzFtUHJlZml4ID0gYnVpbGRDdXJ2ZShtb2R1bGUsIFwiZzFtXCIsIFwiZjFtXCIsIHBHMWIpO1xuXG4gICAgYnVpbGRGRlQobW9kdWxlLCBcImZybVwiLCBcImZybVwiLCBcImZybVwiLCBcImZybV9tdWxcIik7XG5cbiAgICBidWlsZFBvbChtb2R1bGUsIFwicG9sXCIsIFwiZnJtXCIpO1xuICAgIGJ1aWxkUUFQKG1vZHVsZSwgXCJxYXBcIiwgXCJmcm1cIik7XG5cbiAgICBjb25zdCBmMm1QcmVmaXggPSBidWlsZEYybShtb2R1bGUsIFwiZjFtX25lZ1wiLCBcImYybVwiLCBcImYxbVwiKTtcbiAgICBjb25zdCBwRzJiID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSg0biksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDRuKSwgZjFzaXplIClcbiAgICBdKTtcbiAgICBjb25zdCBnMm1QcmVmaXggPSBidWlsZEN1cnZlKG1vZHVsZSwgXCJnMm1cIiwgXCJmMm1cIiwgcEcyYik7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkR1RpbWVzRnIoZm5OYW1lLCBvcE11bCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwR1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBGclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44cikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcImZybV9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwicEZyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIG9wTXVsLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwR1wiKSxcbiAgICAgICAgICAgICAgICBBVVgsXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhyKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZm5OYW1lKTtcbiAgICB9XG4gICAgYnVpbGRHVGltZXNGcihcImcxbV90aW1lc0ZyXCIsIFwiZzFtX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJnMW1cIiwgXCJnMW1cIiwgXCJmcm1cIiwgXCJnMW1fdGltZXNGclwiKTtcblxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMm1fdGltZXNGclwiLCBcImcybV90aW1lc1NjYWxhclwiKTtcbiAgICBidWlsZEZGVChtb2R1bGUsIFwiZzJtXCIsIFwiZzJtXCIsIFwiZnJtXCIsIFwiZzJtX3RpbWVzRnJcIik7XG5cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzFtX3RpbWVzRnJBZmZpbmVcIiwgXCJnMW1fdGltZXNTY2FsYXJBZmZpbmVcIik7XG4gICAgYnVpbGRHVGltZXNGcihcImcybV90aW1lc0ZyQWZmaW5lXCIsIFwiZzJtX3RpbWVzU2NhbGFyQWZmaW5lXCIpO1xuXG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZnJtX2JhdGNoQXBwbHlLZXlcIiwgXCJmbXJcIiwgXCJmcm1cIiwgbjhyLCBuOHIsIG44ciwgXCJmcm1fbXVsXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5XCIsIFwiZzFtXCIsIFwiZnJtXCIsIG44cSozLCBuOHEqMywgbjhyLCBcImcxbV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMW1cIiwgXCJmcm1cIiwgbjhxKjIsIG44cSozLCBuOHIsIFwiZzFtX3RpbWVzRnJBZmZpbmVcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzJtX2JhdGNoQXBwbHlLZXlcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjhxKjIqMywgbjhxKjMqMiwgbjhyLCBcImcybV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcybV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjhxKjIqMiwgbjhxKjMqMiwgbjhyLCBcImcybV90aW1lc0ZyQWZmaW5lXCIpO1xuXG5cbiAgICBmdW5jdGlvbiB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGEpICogKDFuIDw8IEJpZ0ludChmMXNpemUqOCkpICUgcTtcbiAgICB9XG5cbiAgICBjb25zdCBHMWdlbiA9IFtcbiAgICAgICAgMzY4NTQxNjc1MzcxMzM4NzAxNjc4MTA4ODMxNTE4MzA3Nzc1Nzk2MTYyMDc5NTc4MjU0NjQwOTg5NDU3ODM3ODY4ODYwNzU5MjM3ODM3NjMxODgzNjA1NDk0NzY3NjM0NTgyMTU0ODEwNDE4NTQ2NDUwN24sXG4gICAgICAgIDEzMzk1MDY1NDQ5NDQ0NzY0NzMwMjA0NzEzNzk5NDE5MjEyMjE1ODQ5MzM4NzU5MzgzNDk2MjA0MjY1NDM3MzY0MTY1MTE0MjM5NTYzMzM1MDY0NzI3MjQ2NTUzNTMzNjY1MzQ5OTIzOTE3NTY0NDE1NjluLFxuICAgICAgICAxblxuICAgIF07XG5cbiAgICBjb25zdCBwRzFnZW4gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzFnZW5bMl0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMXplcm8gPSBbXG4gICAgICAgIDBuLFxuICAgICAgICAxbixcbiAgICAgICAgMG5cbiAgICBdO1xuXG4gICAgY29uc3QgcEcxemVybyA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1syXSksIGYxc2l6ZSApXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzJnZW4gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDM1MjcwMTA2OTU4NzQ2NjYxODE4NzEzOTExNjAxMTA2MDE0NDg5MDAyOTk1Mjc5Mjc3NTI0MDIxOTkwODY0NDIzOTc5Mzc4NTczNTcxNTAyNjg3MzM0NzYwMDM0Mzg2NTE3NTk1Mjc2MTkyNjMwMzE2MG4sXG4gICAgICAgICAgICAzMDU5MTQ0MzQ0MjQ0MjEzNzA5OTcxMjU5ODE0NzUzNzgxNjM2OTg2NDcwMzI1NDc2NjQ3NTU4NjU5MzczMjA2MjkxNjM1MzI0NzY4OTU4NDMyNDMzNTA5NTYzMTA0MzQ3MDE3ODM3ODg1NzYzMzY1NzU4bixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAxOTg1MTUwNjAyMjg3MjkxOTM1NTY4MDU0NTIxMTc3MTcxNjM4MzAwODY4OTc4MjE1NjU1NzMwODU5Mzc4NjY1MDY2MzQ0NzI2MzczODIzNzE4NDIzODY5MTA0MjYzMzMzOTg0NjQxNDk0MzQwMzQ3OTA1bixcbiAgICAgICAgICAgIDkyNzU1MzY2NTQ5MjMzMjQ1NTc0NzIwMTk2NTc3NjAzNzg4MDc1Nzc0MDE5MzQ1MzU5Mjk3MDAyNTAyNzk3ODc5Mzk3Njg3NzAwMjY3NTU2NDk4MDk0OTI4OTcyNzk1NzU2NTU3NTQzMzM0NDIxOTU4Mm4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXVxuICAgIF07XG5cbiAgICBjb25zdCBwRzJnZW4gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMnplcm8gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDBuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAwbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMnplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzBdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1swXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzFdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1syXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBwT25lVCA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMW4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwQmxzMTIzODFUd2lzdCA9ICBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDFuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMW4pLCBmMXNpemUgKSxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmMm1QcmVmaXggKyBcIl9tdWxOUlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwYyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUpKTtcbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDAsIHgwYyksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MCwgeDEsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgwYywgeDEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgYnVpbGRfbXVsTlIyKCk7XG5cbiAgICBjb25zdCBmNm1QcmVmaXggPSBidWlsZEYzbShtb2R1bGUsIGYybVByZWZpeCtcIl9tdWxOUlwiLCBcImY2bVwiLCBcImYybVwiKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SNigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWxOUlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGMwY29weSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgYzBjb3B5XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX211bE5SXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOHEqNCkpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChuOHEqMikpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44cSo0KSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICBjMGNvcHksXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjhxKjIpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkX211bE5SNigpO1xuXG4gICAgY29uc3QgZnRtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBmNm1QcmVmaXgrXCJfbXVsTlJcIiwgXCJmdG1cIiwgZjZtUHJlZml4KTtcblxuICAgIGNvbnN0IGF0ZUxvb3BDb3VudCA9IDB4ZDIwMTAwMDAwMDAxMDAwMG47XG4gICAgY29uc3QgYXRlTG9vcEJpdEJ5dGVzID0gYml0cyhhdGVMb29wQ291bnQpO1xuICAgIGNvbnN0IHBBdGVMb29wQml0Qnl0ZXMgPSBtb2R1bGUuYWxsb2MoYXRlTG9vcEJpdEJ5dGVzKTtcbiAgICBjb25zdCBpc0xvb3BOZWdhdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBhdGVDb2VmU2l6ZSA9IDMgKiBmMnNpemU7XG4gICAgY29uc3QgYXRlTkRibENvZWZzID0gYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0xO1xuICAgIGNvbnN0IGF0ZU5BZGRDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5yZWR1Y2UoKGFjYywgYikgPT4gIGFjYyArICggYiE9MCA/IDEgOiAwKSAgICwwKTtcbiAgICBjb25zdCBhdGVOQ29lZnMgPSBhdGVOQWRkQ29lZnMgKyBhdGVORGJsQ29lZnMgKyAxO1xuICAgIGNvbnN0IHByZVBTaXplID0gMyoyKm44cTtcbiAgICBjb25zdCBwcmVRU2l6ZSA9IDMqbjhxKjIgKyBhdGVOQ29lZnMqYXRlQ29lZlNpemU7XG4gICAgY29uc3QgZmluYWxFeHBJc05lZ2F0aXZlID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZpbmFsRXhwWiA9IDE1MTMyMzc2MjIyOTQxNjQyNzUybjtcblxuXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0cTogbjY0cSxcbiAgICAgICAgbjY0cjogbjY0cixcbiAgICAgICAgbjhxOiBuOHEsXG4gICAgICAgIG44cjogbjhyLFxuICAgICAgICBwRzFnZW46IHBHMWdlbixcbiAgICAgICAgcEcxemVybzogcEcxemVybyxcbiAgICAgICAgcEcxYjogcEcxYixcbiAgICAgICAgcEcyZ2VuOiBwRzJnZW4sXG4gICAgICAgIHBHMnplcm86IHBHMnplcm8sXG4gICAgICAgIHBHMmI6IHBHMmIsXG4gICAgICAgIHBxOiBtb2R1bGUubW9kdWxlc1tcImYxbVwiXS5wcSxcbiAgICAgICAgcHI6IHByLFxuICAgICAgICBwT25lVDogcE9uZVQsXG4gICAgICAgIHI6IHIsXG4gICAgICAgIHE6IHEsXG4gICAgICAgIHByZVBTaXplOiBwcmVQU2l6ZSxcbiAgICAgICAgcHJlUVNpemU6IHByZVFTaXplXG4gICAgfTtcblxuXG4gICAgZnVuY3Rpb24gbmFmKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDIgLSBOdW1iZXIoRSAlIDRuKTtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggeiApO1xuICAgICAgICAgICAgICAgIEUgPSBFIC0gQmlnSW50KHopO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRSA9IEUgPj4gMW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiaXRzKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDEgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEUgPSBFID4+IDFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBjLmdldExvY2FsKFwicFBcIiksIGMuZ2V0TG9jYWwoXCJwcHJlUFwiKSksICAvLyBUT0RPIFJlbW92ZSBpZiBhbHJlYWR5IGluIGFmZmluZVxuICAgICAgICApO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBEb3VibGVTdGVwKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcERibFN0ZXBcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJSXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFJ4ICA9IGMuZ2V0TG9jYWwoXCJSXCIpO1xuICAgICAgICBjb25zdCBSeSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlJcIiksIGMuaTMyX2NvbnN0KDIqbjhxKSk7XG4gICAgICAgIGNvbnN0IFJ6ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiUlwiKSwgYy5pMzJfY29uc3QoNCpuOHEpKTtcblxuICAgICAgICBjb25zdCB0MCAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgdDMgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKm44cSkpO1xuICAgICAgICBjb25zdCB0NiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDQqbjhxKSk7XG5cblxuICAgICAgICBjb25zdCB6c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyB0bXAwID0gci54LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeCwgdDApLFxuXG4gICAgICAgICAgICAvLyB0bXAxID0gci55LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0bXAyID0gdG1wMS5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDEsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9ICh0bXAxICsgci54KS5zcXVhcmUoKSAtIHRtcDAgLSB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgUngsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDMsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDMsIHQwLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQzLCB0MiwgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXAzID0gdG1wMyArIHRtcDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXA0ID0gdG1wMCArIHRtcDAgKyB0bXAwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MCwgdDAsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHQwLCB0NCksXG5cbiAgICAgICAgICAgIC8vIHRtcDYgPSByLnggKyB0bXA0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBSeCwgdDQsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdG1wNSA9IHRtcDQuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQ0LCB0NSksXG5cbiAgICAgICAgICAgIC8vIHpzcXVhcmVkID0gci56LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgenNxdWFyZWQpLFxuXG4gICAgICAgICAgICAvLyByLnggPSB0bXA1IC0gdG1wMyAtIHRtcDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ1LCB0MywgUngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeCwgdDMsIFJ4KSxcblxuICAgICAgICAgICAgLy8gci56ID0gKHIueiArIHIueSkuc3F1YXJlKCkgLSB0bXAxIC0genNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFJ6LCBSeSwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeiwgdDEsIFJ6KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUnosIHpzcXVhcmVkLCBSeiksXG5cbiAgICAgICAgICAgIC8vIHIueSA9ICh0bXAzIC0gci54KSAqIHRtcDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQzLCBSeCwgUnkpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBSeSwgdDQsIFJ5KSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDIgKyB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gci55IC09IHRtcDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ5LCB0MiwgUnkpLFxuXG4gICAgICAgICAgICAvLyB0bXAzID0gdG1wNCAqIHpzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NCwgenNxdWFyZWQsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IHRtcDMgKyB0bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgdDMsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IC10bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0bXA2ID0gdG1wNi5zcXVhcmUoKSAtIHRtcDAgLSB0bXA1O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0NiwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NiwgdDAsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDYsIHQ1LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHRtcDEgPSB0bXAxICsgdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHRtcDEgPSB0bXAxICsgdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHRtcDYgPSB0bXA2IC0gdG1wMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDYsIHQxLCB0NiksXG5cbiAgICAgICAgICAgIC8vIHRtcDAgPSByLnogKiB6c3F1YXJlZDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgUnosIHpzcXVhcmVkLCB0MCksXG5cbiAgICAgICAgICAgIC8vIHRtcDAgPSB0bXAwICsgdG1wMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHQwLCB0MCksXG5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBBZGRTdGVwKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcEFkZFN0ZXBcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJSXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBSeCAgPSBjLmdldExvY2FsKFwiUlwiKTtcbiAgICAgICAgY29uc3QgUnkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJSXCIpLCBjLmkzMl9jb25zdCgyKm44cSkpO1xuICAgICAgICBjb25zdCBSeiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlJcIiksIGMuaTMyX2NvbnN0KDQqbjhxKSk7XG5cbiAgICAgICAgY29uc3QgUXggID0gYy5nZXRMb2NhbChcIlFcIik7XG4gICAgICAgIGNvbnN0IFF5ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiUVwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcblxuICAgICAgICBjb25zdCB0MTAgID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHQxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcbiAgICAgICAgY29uc3QgdDkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0Km44cSkpO1xuXG4gICAgICAgIGNvbnN0IHpzcXVhcmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB5c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgenRzcXVhcmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ2ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyB6c3F1YXJlZCA9IHIuei5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnosIHpzcXVhcmVkKSxcblxuICAgICAgICAgICAgLy8geXNxdWFyZWQgPSBxLnkuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFF5LCB5c3F1YXJlZCksXG5cbiAgICAgICAgICAgIC8vIHQwID0genNxdWFyZWQgKiBxLng7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHpzcXVhcmVkLCBReCwgdDApLFxuXG4gICAgICAgICAgICAvLyB0MSA9ICgocS55ICsgci56KS5zcXVhcmUoKSAtIHlzcXVhcmVkIC0genNxdWFyZWQpICogenNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFF5LCBSeiwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0MSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MSwgeXNxdWFyZWQsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIHpzcXVhcmVkLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQxLCB6c3F1YXJlZCwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MiA9IHQwIC0gci54O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MCwgUngsIHQyKSxcblxuICAgICAgICAgICAgLy8gdDMgPSB0Mi5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDIsIHQzKSxcblxuICAgICAgICAgICAgLy8gdDQgPSB0MyArIHQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgdDMsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDQgPSB0NCArIHQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0NCwgdDQsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDUgPSB0NCAqIHQyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NCwgdDIsIHQ1KSxcblxuICAgICAgICAgICAgLy8gdDYgPSB0MSAtIHIueSAtIHIueTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIFJ5LCB0NiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ2LCBSeSwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0OSA9IHQ2ICogcS54O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NiwgUXgsIHQ5KSxcblxuICAgICAgICAgICAgLy8gdDcgPSB0NCAqIHIueDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIFJ4LCB0NyksXG5cbiAgICAgICAgICAgIC8vIHIueCA9IHQ2LnNxdWFyZSgpIC0gdDUgLSB0NyAtIHQ3O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0NiwgUngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeCwgdDUsIFJ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUngsIHQ3LCBSeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ4LCB0NywgUngpLFxuXG4gICAgICAgICAgICAvLyByLnogPSAoci56ICsgdDIpLnNxdWFyZSgpIC0genNxdWFyZWQgLSB0MztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUnosIHQyLCBSeiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFJ6LCBSeiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ6LCB6c3F1YXJlZCwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeiwgdDMsIFJ6KSxcblxuICAgICAgICAgICAgLy8gdDEwID0gcS55ICsgci56O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBReSwgUnosIHQxMCksXG5cbiAgICAgICAgICAgIC8vIHQ4ID0gKHQ3IC0gci54KSAqIHQ2O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NywgUngsIHQ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDgsIHQ2LCB0OCksXG5cbiAgICAgICAgICAgIC8vIHQwID0gci55ICogdDU7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFJ5LCB0NSwgdDApLFxuXG4gICAgICAgICAgICAvLyB0MCA9IHQwICsgdDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQwLCB0MCwgdDApLFxuXG4gICAgICAgICAgICAvLyByLnkgPSB0OCAtIHQwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0OCwgdDAsIFJ5KSxcblxuICAgICAgICAgICAgLy8gdDEwID0gdDEwLnNxdWFyZSgpIC0geXNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQxMCwgdDEwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEwLCB5c3F1YXJlZCwgdDEwKSxcblxuICAgICAgICAgICAgLy8genRzcXVhcmVkID0gci56LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgenRzcXVhcmVkKSxcblxuICAgICAgICAgICAgLy8gdDEwID0gdDEwIC0genRzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MTAsIHp0c3F1YXJlZCwgdDEwKSxcblxuICAgICAgICAgICAgLy8gdDkgPSB0OSArIHQ5IC0gdDEwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0OSwgdDksIHQ5KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDksIHQxMCwgdDkpLFxuXG4gICAgICAgICAgICAvLyB0MTAgPSByLnogKyByLno7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFJ6LCBSeiwgdDEwKSxcblxuICAgICAgICAgICAgLy8gdDYgPSAtdDY7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIHQ2LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQxID0gdDYgKyB0NjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDYsIHQ2LCB0MSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBhcmVHMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBhcmVHMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQ29lZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuXG4gICAgICAgIGNvbnN0IFEgPSBjLmdldExvY2FsKFwicFFcIik7XG5cbiAgICAgICAgY29uc3QgcFIgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QocFIpO1xuXG4gICAgICAgIGNvbnN0IGJhc2UgPSBjLmdldExvY2FsKFwicHByZVFcIik7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBRLCBiYXNlKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX2lzWmVyb1wiLCBiYXNlKSxcbiAgICAgICAgICAgICAgICBjLnJldChbXSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfY29weVwiLCBiYXNlLCBSKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChhdGVMb29wQml0Qnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3ByZXBEYmxTdGVwXCIsIFIsIGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfcyhjLmdldExvY2FsKFwiaVwiKSwgcEF0ZUxvb3BCaXRCeXRlcyksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9wcmVwQWRkU3RlcFwiLCBSLCBiYXNlLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGNk11bDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjZtUHJlZml4KyBcIl9tdWwxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7ICAgIC8vIEY2XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQV9jMCA9IGMuZ2V0TG9jYWwoXCJwQVwiKTtcbiAgICAgICAgY29uc3QgQV9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEFcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFfYzIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGMxICA9IGMuZ2V0TG9jYWwoXCJwQzFcIik7XG5cbiAgICAgICAgY29uc3QgdDEgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgYl9iID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjQpKTtcblxuICAgICAgICBjb25zdCBBYzBfQWMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFjMV9BYzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQV9jMCwgQV9jMSwgQWMwX0FjMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzIsIEFjMV9BYzIpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYl9iID0gc2VsZi5jMSAqIGMxO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBX2MxLCBjMSwgYl9iKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gKHNlbGYuYzEgKyBzZWxmLmMyKSAqIGMxIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzFfQWMyLCBjMSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MSwgYl9iLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MSA9IHQxLm11bF9ieV9ub25yZXNpZHVlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdDEsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQyID0gKHNlbGYuYzAgKyBzZWxmLmMxKSAqIGMxIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzBfQWMxLCBjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgYl9iLCB0MiksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjZNdWwxKCk7XG5cbiAgICBmdW5jdGlvbiBidWlsZEY2TXVsMDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjZtUHJlZml4KyBcIl9tdWwwMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMwXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQV9jMCA9IGMuZ2V0TG9jYWwoXCJwQVwiKTtcbiAgICAgICAgY29uc3QgQV9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEFcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFfYzIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGMwICA9IGMuZ2V0TG9jYWwoXCJwQzBcIik7XG4gICAgICAgIGNvbnN0IGMxICA9IGMuZ2V0TG9jYWwoXCJwQzFcIik7XG5cbiAgICAgICAgY29uc3QgdDEgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IGFfYSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBiX2IgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgQWMwX0FjMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBBYzBfQWMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gbGV0IGFfYSA9IHNlbGYuYzAgKiBjMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQV9jMCwgYzAsIGFfYSksXG5cbiAgICAgICAgICAgIC8vIGxldCBiX2IgPSBzZWxmLmMxICogYzE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFfYzEsIGMxLCBiX2IpLFxuXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQV9jMCwgQV9jMSwgQWMwX0FjMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzAsIEFfYzIsIEFjMF9BYzIpLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDEgPSAoc2VsZi5jMSArIHNlbGYuYzIpICogYzEgLSBiX2I7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzIsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIGMxLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQxLCBiX2IsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gdDEubXVsX2J5X25vbnJlc2lkdWUoKSArIGFfYTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB0MSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgYV9hLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MiA9IChjMCArIGMxKSAqIChzZWxmLmMwICsgc2VsZi5jMSkgLSBhX2EgLSBiX2I7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIGMwLCBjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MiwgQWMwX0FjMSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgYV9hLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQyLCBiX2IsIHQyKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQzID0gKHNlbGYuYzAgKyBzZWxmLmMyKSAqIGMwIC0gYV9hICsgYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBYzBfQWMyLCBjMCwgdDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MywgYV9hLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCBiX2IsIHQzKSxcblxuXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjZNdWwwMSgpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEYxMk11bDAxNCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZ0bVByZWZpeCsgXCJfbXVsMDE0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEFcIiwgXCJpMzJcIik7ICAgIC8vIEYxMlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMwXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzFcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBDNFwiLCBcImkzMlwiKTsgICAvLyBGMlxuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7ICAgIC8vIEYxMlxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cblxuICAgICAgICBjb25zdCBBX2MwID0gYy5nZXRMb2NhbChcInBBXCIpO1xuICAgICAgICBjb25zdCBBX2MxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQVwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjYpKTtcblxuICAgICAgICBjb25zdCBjMCAgPSBjLmdldExvY2FsKFwicEMwXCIpO1xuICAgICAgICBjb25zdCBjMSAgPSBjLmdldExvY2FsKFwicEMxXCIpO1xuICAgICAgICBjb25zdCBjNCAgPSBjLmdldExvY2FsKFwicEM0XCIpO1xuXG4gICAgICAgIGNvbnN0IGFhID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSo2KSk7XG4gICAgICAgIGNvbnN0IGJiID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSo2KSk7XG4gICAgICAgIGNvbnN0IG8gPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBjb25zdCBSX2MwID0gYy5nZXRMb2NhbChcInBSXCIpO1xuICAgICAgICBjb25zdCBSX2MxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjYpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBsZXQgYWEgPSBzZWxmLmMwLm11bF9ieV8wMShjMCwgYzEpO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX211bDAxXCIsIEFfYzAsIGMwLCBjMSwgYWEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYmIgPSBzZWxmLmMxLm11bF9ieV8xKGM0KTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWwxXCIsIEFfYzEsIGM0LCBiYiksXG5cbiAgICAgICAgICAgIC8vIGxldCBvID0gYzEgKyBjNDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgYzEsIGM0LCBvKSxcblxuICAgICAgICAgICAgLy8gbGV0IGMxID0gc2VsZi5jMSArIHNlbGYuYzA7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzEsIEFfYzAsIFJfYzEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzEgPSBjMS5tdWxfYnlfMDEoYzAsICZvKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWwwMVwiLCBSX2MxLCBjMCwgbywgUl9jMSksXG5cbiAgICAgICAgICAgIC8vIGxldCBjMSA9IGMxIC0gYWEgLSBiYjtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9zdWJcIiwgUl9jMSwgYWEsIFJfYzEpLFxuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX3N1YlwiLCBSX2MxLCBiYiwgUl9jMSksXG5cbiAgICAgICAgICAgIC8vIGxldCBjMCA9IGJiO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX2NvcHlcIiwgYmIsIFJfYzApLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzAgPSBjMC5tdWxfYnlfbm9ucmVzaWR1ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX211bE5SXCIsIFJfYzAsIFJfYzApLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzAgPSBjMCArIGFhO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX2FkZFwiLCBSX2MwLCBhYSwgUl9jMCksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkRjEyTXVsMDE0KCk7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRUxMKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZWxsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFB4ICA9IGMuZ2V0TG9jYWwoXCJwUFwiKTtcbiAgICAgICAgY29uc3QgUHkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUFwiKSwgYy5pMzJfY29uc3QobjhxKSk7XG5cbiAgICAgICAgY29uc3QgRiAgPSBjLmdldExvY2FsKFwicEZcIik7XG5cbiAgICAgICAgY29uc3QgY29lZjBfMCAgPSBjLmdldExvY2FsKFwicENvZWZzXCIpO1xuICAgICAgICBjb25zdCBjb2VmMF8xICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZzXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcbiAgICAgICAgY29uc3QgY29lZjFfMCAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2Vmc1wiKSwgYy5pMzJfY29uc3QoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgY29lZjFfMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2Vmc1wiKSwgYy5pMzJfY29uc3QoZjFzaXplKjMpKTtcbiAgICAgICAgY29uc3QgY29lZjIgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZnNcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSo0KSk7XG5cbiAgICAgICAgY29uc3QgcGMwID0gbW9kdWxlLmFsbG9jKGYxc2l6ZSoyKTtcbiAgICAgICAgY29uc3QgYzAgID0gYy5pMzJfY29uc3QocGMwKTtcbiAgICAgICAgY29uc3QgYzBfYzAgPSBjLmkzMl9jb25zdChwYzApO1xuICAgICAgICBjb25zdCBjMF9jMSA9IGMuaTMyX2NvbnN0KHBjMCtmMXNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBjMSA9IG1vZHVsZS5hbGxvYyhmMXNpemUqMik7XG4gICAgICAgIGNvbnN0IGMxICA9IGMuaTMyX2NvbnN0KHBjMSk7XG4gICAgICAgIGNvbnN0IGMxX2MwID0gYy5pMzJfY29uc3QocGMxKTtcbiAgICAgICAgY29uc3QgYzFfYzEgPSBjLmkzMl9jb25zdChwYzErZjFzaXplKTtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gICAgIGxldCBtdXQgYzAgPSBjb2VmZnMuMDtcbiAgICAgICAgICAgIC8vICAgICBsZXQgbXV0IGMxID0gY29lZmZzLjE7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gICAgYzAuYzAgKj0gcC55O1xuICAgICAgICAgICAgLy8gICAgYzAuYzEgKj0gcC55O1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgIGMxLmMwICo9IHAueDtcbiAgICAgICAgICAgIC8vICAgIGMxLmMxICo9IHAueDtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAgICAgZi5tdWxfYnlfMDE0KCZjb2VmZnMuMiwgJmMxLCAmYzApXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjBfMCwgUHksIGMwX2MwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjBfMSwgUHksIGMwX2MxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjFfMCwgUHgsIGMxX2MwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgY29lZjFfMSwgUHgsIGMxX2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bDAxNFwiLCBGLCBjb2VmMiwgYzEsIGMwLCBGKSxcblxuICAgICAgICApO1xuXG4gICAgfVxuICAgIGJ1aWxkRUxMKCk7XG5cbiAgICBmdW5jdGlvbiBidWlsZE1pbGxlckxvb3AoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9taWxsZXJMb29wXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcHJlUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwQ29lZlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwcmVQID0gYy5nZXRMb2NhbChcInBwcmVQXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvZWZzICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcblxuICAgICAgICBjb25zdCBGID0gYy5nZXRMb2NhbChcInJcIik7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIEYpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgcHJlUCksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2VsbFwiLCBwcmVQLCBjb2VmcywgIEYpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZWxsXCIsIHByZVAsIGNvZWZzLCAgRiksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRiwgRiksXG5cbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9lbGxcIiwgcHJlUCwgY29lZnMsICBGKSxcblxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWYgKGlzTG9vcE5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBGLCBGKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvYmVuaXVzTWFwKG4pIHtcbiAgICAgICAgY29uc3QgRjEyID0gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzg1MDc1NDM3MDAzNzE2OTAxMTk1MjE0NzA3NjA1MTM2NDA1NzE1ODgwNzQyMDk3MDY4MjQzODY3NjA1MDUyMjYxMzYyODQyMzIxOTYzNzcyNTA3MjE4MjY5NzExMzA2Mjc3Nzg5MTU4OTUwNjQyNDc2MG4sIDE1MTY1NTE4NTE4NDQ5ODM4MTQ2NTY0Mjc0OTY4NDU0MDA5OTM5ODA3NTM5ODk2ODMyNTQ0NjY1NjAwNzYxMzUxMDQwMzIyNzI3MTIwMDEzOTM3MDUwNDkzMjAxNTk1Mjg4NjE0NjMwNDc2NjEzNTAyN25dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzI5NzM2Nzc0MDg5ODY1NjEwNDM0NDI0NjUzNDY1MjAxMDg4NzkxNzIwNDI4ODMwMDkyNDk5ODkxNzY0MTUwMTgwOTE0MjA4MDcxOTIxODI2Mzg1NjcxMTYzMTg1NzY0NzI2NDkzNDcwMTU5MTc2OTA1MzBuLCAxMDI4NzMyMTQ2MjM1MTA2MzQ5OTc1MzI0NDc5MjE1Nzk1Mjc3Mzg0ODM5OTM2OTI5NzU3ODk2MTU1NjQzMTE4MDMyNjEwODQzMjk4NjU1MjI1ODc1NTcxMzEwNTUyNTQzMDE0NjkwODc4MzU0ODY5MjU3bl0sXG4gICAgICAgICAgICAgICAgWzc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzEyNTMzMjU5NDE3MTA1OTQyNDkwODEwODA5NjIwNDY0ODk3ODU3MDExODI4MTk3NzU3NTQzNTgzMjQyMjYzMTYwMTgyNDAzNDQ2MzM4Mjc3NzkzNzYyMTI1MDU5MjQyNTUzNTQ5MzMyMDY4MzgyNTU1N24sIDg3NzA3Njk2MTA1MDYwNzk2ODUwOTY4MTcyOTUzMTI1NTE3Nzk4Njc2NDUzNzk2MTQzMjQ0OTQ5OTYzNTUwNDUyMjIwNzYxNjAyNzQ1NTA4NjUwNTA2NjM3ODUzNjU5MDEyODU0NDU3MzU4ODczNDIzMG5dLFxuICAgICAgICAgICAgICAgIFs0MDAyNDA5NTU1MjIxNjY3MzkzNDE3Nzg5ODI1NzM1OTA0MTU2NTU2ODgyODE5OTM5MDA3ODg1MzMyMDU4MTM2MTI0MDMxNjUwNDkwODM3ODY0NDQyNjg3NjI5MTI5MDE1NjY0MDM3ODk0MjcyNTU5Nzg2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxNTE2NTUxODUxODQ0OTgzODE0NjU2NDI3NDk2ODQ1NDAwOTkzOTgwNzUzOTg5NjgzMjU0NDY2NTYwMDc2MTM1MTA0MDMyMjcyNzEyMDAxMzkzNzA1MDQ5MzIwMTU5NTI4ODYxNDYzMDQ3NjYxMzUwMjduLCAzODUwNzU0MzcwMDM3MTY5MDExOTUyMTQ3MDc2MDUxMzY0MDU3MTU4ODA3NDIwOTcwNjgyNDM4Njc2MDUwNTIyNjEzNjI4NDIzMjE5NjM3NzI1MDcyMTgyNjk3MTEzMDYyNzc3ODkxNTg5NTA2NDI0NzYwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzEwMjg3MzIxNDYyMzUxMDYzNDk5NzUzMjQ0NzkyMTU3OTUyNzczODQ4Mzk5MzY5Mjk3NTc4OTYxNTU2NDMxMTgwMzI2MTA4NDMyOTg2NTUyMjU4NzU1NzEzMTA1NTI1NDMwMTQ2OTA4NzgzNTQ4NjkyNTduLCAyOTczNjc3NDA4OTg2NTYxMDQzNDQyNDY1MzQ2NTIwMTA4ODc5MTcyMDQyODgzMDA5MjQ5OTg5MTc2NDE1MDE4MDkxNDIwODA3MTkyMTgyNjM4NTY3MTE2MzE4NTc2NDcyNjQ5MzQ3MDE1OTE3NjkwNTMwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzg3NzA3Njk2MTA1MDYwNzk2ODUwOTY4MTcyOTUzMTI1NTE3Nzk4Njc2NDUzNzk2MTQzMjQ0OTQ5OTYzNTUwNDUyMjIwNzYxNjAyNzQ1NTA4NjUwNTA2NjM3ODUzNjU5MDEyODU0NDU3MzU4ODczNDIzMG4sIDMxMjUzMzI1OTQxNzEwNTk0MjQ5MDgxMDgwOTYyMDQ2NDg5Nzg1NzAxMTgyODE5Nzc1NzU0MzU4MzI0MjI2MzE2MDE4MjQwMzQ0NjMzODI3Nzc5Mzc2MjEyNTA1OTI0MjU1MzU0OTMzMjA2ODM4MjU1NTduXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBGNiA9IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzBuLCA0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM2bl0sXG4gICAgICAgICAgICAgICAgWzc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMG4sIDFuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMG4sIDc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzN24sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MzQxNzc4OTgyNTczNTkwNDE1NjU1Njg4MjgxOTkzOTAwNzg4NTMzMjA1ODEzNjEyNDAzMTY1MDQ5MDgzNzg2NDQ0MjY4NzYyOTEyOTAxNTY2NDAzNzg5NDI3MjU1OTc4Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUwbiwgMG5dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTFuLCAwbl0sXG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXBcIituKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgWCA9IChpPT0wKSA/IGMuZ2V0TG9jYWwoXCJ4XCIpIDogYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgWGMwID0gWDtcbiAgICAgICAgICAgIGNvbnN0IFhjMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUgKyBmMXNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFIgPSAoaT09MCkgPyBjLmdldExvY2FsKFwiclwiKSA6IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFJjMCA9IFI7XG4gICAgICAgICAgICBjb25zdCBSYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplICsgZjFzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gbXVsMihGMTJbTWF0aC5mbG9vcihpLzMpXVtuJTEyXSAsIEY2W2klM11bbiU2XSk7XG4gICAgICAgICAgICBjb25zdCBwQ29lZiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KGNvZWZbMF0pLCBuOHEpLFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShjb2VmWzFdKSwgbjhxKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgaWYgKG4lMiA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBYYzAsIFJjMCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9uZWdcIiwgWGMxLCBSYzEpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFIsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUiksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWCwgYy5pMzJfY29uc3QocENvZWYpLCBSKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWwyKGEsIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjMCA9IGFbMF07XG4gICAgICAgICAgICBjb25zdCBhYzEgPSBhWzFdO1xuICAgICAgICAgICAgY29uc3QgYmMwID0gYlswXTtcbiAgICAgICAgICAgIGNvbnN0IGJjMSA9IGJbMV07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMCAtIChhYzEgKiBiYzEpKSAlIHEsXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMSArIChhYzEgKiBiYzApKSAlIHEsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUocmVzWzBdKSkgcmVzWzBdID0gcmVzWzBdICsgcTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHg0ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgzKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoNCpmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDUgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDUqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjQgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDMqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0KmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByNSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoNSpmMnNpemUpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vICAgIC8vIHQwICsgdDEqeSA9ICh6MCArIHoxKnkpXjIgPSBhXjJcbiAgICAgICAgICAgIC8vICAgIHRtcCA9IHowICogejE7XG4gICAgICAgICAgICAvLyAgICB0MCA9ICh6MCArIHoxKSAqICh6MCArIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB6MSkgLSB0bXAgLSBteV9GcDY6Om5vbl9yZXNpZHVlICogdG1wO1xuICAgICAgICAgICAgLy8gICAgdDEgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB4MSwgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB4MSwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MCwgdDAsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgxLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBVVgsIHQwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIEFVWCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDEpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDIgKyB0Myp5ID0gKHoyICsgejMqeSleMiA9IGJeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHoyICogejM7XG4gICAgICAgICAgICAvLyAgdDIgPSAoejIgKyB6MykgKiAoejIgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejMpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0MyA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDIsIHgzLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHgzLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MiwgeDMsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB0bXAsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgQVVYLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgdG1wLCB0MyksXG5cbiAgICAgICAgICAgIC8vICAvLyB0NCArIHQ1KnkgPSAoejQgKyB6NSp5KV4yID0gY14yXG4gICAgICAgICAgICAvLyAgdG1wID0gejQgKiB6NTtcbiAgICAgICAgICAgIC8vICB0NCA9ICh6NCArIHo1KSAqICh6NCArIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB6NSkgLSB0bXAgLSBteV9GcDY6Om5vbl9yZXNpZHVlICogdG1wO1xuICAgICAgICAgICAgLy8gIHQ1ID0gdG1wICsgdG1wO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4NCwgeDUsIHRtcCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgeDUsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDQsIHQ0LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB4NSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCBBVVgsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQ1KSxcblxuICAgICAgICAgICAgLy8gRm9yIEFcbiAgICAgICAgICAgIC8vIHowID0gMyAqIHQwIC0gMiAqIHowXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQwLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMCwgcjAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHIwLCByMCksXG4gICAgICAgICAgICAvLyB6MSA9IDMgKiB0MSArIDIgKiB6MVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjEsIHIxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCByMSwgcjEpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQlxuICAgICAgICAgICAgLy8gejIgPSAzICogKHhpICogdDUpICsgMiAqIHoyXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQ1LCBjLmkzMl9jb25zdChwQmxzMTIzODFUd2lzdCksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgeDIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjIsIHIyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgcjIsIHIyKSxcbiAgICAgICAgICAgIC8vIHozID0gMyAqIHQ0IC0gMiAqIHozXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCB4MywgcjMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMywgcjMsIHIzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHIzLCByMyksXG5cbiAgICAgICAgICAgIC8vIEZvciBDXG4gICAgICAgICAgICAvLyB6NCA9IDMgKiB0MiAtIDIgKiB6NFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgeDQsIHI0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjQsIHI0LCByNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQyLCByNCwgcjQpLFxuICAgICAgICAgICAgLy8gejUgPSAzICogdDMgKyAyICogejVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHg1LCByNSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHI1LCByNSwgcjUpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgcjUsIHI1KSxcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljRXhwKGV4cG9uZW50LCBpc0V4cE5lZ2F0aXZlLCBmbk5hbWUpIHtcbiAgICAgICAgY29uc3QgZXhwb25lbnROYWZCeXRlcyA9IG5hZihleHBvbmVudCkubWFwKCAoYikgPT4gKGI9PS0xID8gMHhGRjogYikgKTtcbiAgICAgICAgY29uc3QgcEV4cG9uZW50TmFmQnl0ZXMgPSBtb2R1bGUuYWxsb2MoZXhwb25lbnROYWZCeXRlcyk7XG4gICAgICAgIC8vIGNvbnN0IHBFeHBvbmVudCA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRShleHBvbmVudCwgbjgpKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNFeHBfXCIrZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwieFwiKTtcblxuICAgICAgICBjb25zdCByZXMgPSBjLmdldExvY2FsKFwiclwiKTtcblxuICAgICAgICBjb25zdCBpbnZlcnNlID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB4LCBpbnZlcnNlKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9vbmVcIiwgcmVzKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLnRlZUxvY2FsKFwiYml0XCIsIGMuaTMyX2xvYWQ4X3MoYy5pMzJfY29uc3QoZXhwb25lbnROYWZCeXRlcy5sZW5ndGgtMSksIHBFeHBvbmVudE5hZkJ5dGVzKSksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIHgsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCByZXMsIHJlcyksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXMsIGludmVyc2UsIHJlcyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXF6ICggYy5nZXRMb2NhbChcImlcIikgKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzRXhwTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHJlcywgcmVzKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbigpIHtcbiAgICAgICAgYnVpbGRDeWNsb3RvbWljU3F1YXJlKCk7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY0V4cChmaW5hbEV4cFosIGZpbmFsRXhwSXNOZWdhdGl2ZSwgXCJ3MFwiKTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgZWx0ID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0NiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDAgPSBmLmZyb2Jlbml1c19tYXAoNilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXA2XCIsIGVsdCwgdDApLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDEgPSBmLmludmVydCgpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfaW52ZXJzZVwiLCBlbHQsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0MiA9IHQwICogdDE7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQwLCB0MSwgdDIpLFxuXG4gICAgICAgICAgICAvLyB0MSA9IHQyLmNsb25lKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29weVwiLCB0MiwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MiA9IHQyLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwMlwiLCB0MiwgdDIpLFxuXG4gICAgICAgICAgICAvLyB0MiAqPSB0MTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDIsIHQxLCB0MiksXG5cblxuICAgICAgICAgICAgLy8gdDEgPSBjeWNsb3RvbWljX3NxdWFyZSh0MikuY29uanVnYXRlKCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgdDIsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgdDEsIHQxKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0MyA9IGN5Y29sb3RvbWljX2V4cCh0Mik7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDIsIHQzKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0NCA9IGN5Y2xvdG9taWNfc3F1YXJlKHQzKTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCB0MywgdDQpLFxuXG4gICAgICAgICAgICAvLyBsZXQgbXV0IHQ1ID0gdDEgKiB0MztcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQzLCB0NSksXG5cbiAgICAgICAgICAgIC8vIHQxID0gY3ljb2xvdG9taWNfZXhwKHQ1KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiLCB0NSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MCA9IGN5Y29sb3RvbWljX2V4cCh0MSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDEsIHQwKSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0NiA9IGN5Y29sb3RvbWljX2V4cCh0MCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDAsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDYgKj0gdDQ7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ2LCB0NCwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0NCA9IGN5Y29sb3RvbWljX2V4cCh0Nik7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDYsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDUgPSB0NS5jb25qdWdhdGUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgdDUsIHQ1KSxcblxuICAgICAgICAgICAgLy8gdDQgKj0gdDUgKiB0MjtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIHQ1LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ0LCB0MiwgdDQpLFxuXG4gICAgICAgICAgICAvLyB0NSA9IHQyLmNvbmp1Z2F0ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB0MiwgdDUpLFxuXG4gICAgICAgICAgICAvLyB0MSAqPSB0MjtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQyLCB0MSksXG5cbiAgICAgICAgICAgIC8vIHQxID0gdDEuZnJvYmVuaXVzX21hcCgpLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwM1wiLCB0MSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0NiAqPSB0NTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDYsIHQ1LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQ2ID0gdDYuZnJvYmVuaXVzX21hcCgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Zyb2Jlbml1c01hcDFcIiwgdDYsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDMgKj0gdDA7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQzLCB0MCwgdDMpLFxuXG4gICAgICAgICAgICAvLyB0MyA9IHQzLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwMlwiLCB0MywgdDMpLFxuXG4gICAgICAgICAgICAvLyB0MyAqPSB0MTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDMsIHQxLCB0MyksXG5cbiAgICAgICAgICAgIC8vIHQzICo9IHQ2O1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0MywgdDYsIHQzKSxcblxuICAgICAgICAgICAgLy8gZiA9IHQzICogdDQ7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQzLCB0NCwgcmVzKSxcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvbk9sZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGV4cG9uZW50ID0gMzIyMjc3MzYxNTE2OTM0MTQwNDYyODkxNTY0NTg2NTEwMTM5OTA4Mzc5OTY5NTE0ODI4NDk0MjE4MzY2Njg4MDI1Mjg4NjYxMDQxMTA0NjgyNzk0OTk4NjgwNDk3NTgwMDA4ODk5OTczMjQ5ODE0MTA0NDQ3NjkyNzc4OTg4MjA4Mzc2Nzc5NTczODE5NDg1MjYzMDI2MTU5NTg4NTEwNTEzODM0ODc2MzAzMDE0MDE2Nzk4ODA5OTE5MzQzNTMyODk5MTY0ODQ4NzMwMjgwOTQyNjA5OTU2NjcwOTE3NTY1NjE4MTE1ODY3Mjg3Mzk5NjIzMjg2ODEzMjcwMzU3OTAxNzMxNTEwMTg4MTQ5OTM0MzYzMzYwMzgxNjE0NTAxMzM0MDg2ODI1NDQyMjcxOTIwMDc5MzYzMjg5OTU0NTEwNTY1Mzc1Mzc4NDQzNzA0MzcyOTk0ODgxNDA2Nzk3ODgyNjc2OTcxMDgyMjAwNjI2NTQxOTE2NDEzMTg0NjQyNTIwMjY5Njc4ODk3NTU5NTMyMjYwOTQ5MzM0NzYwNjA0OTYyMDg2MzQ4ODk4MTE4OTgyMjQ4ODQyNjM0Mzc5NjM3NTk4NjY1NDY4ODE3NzY5MDc1ODc4NTU1NDkzNzUyMjE0NDkyNzkwMTIyNzg1ODUwMjAyOTU3NTc1MjAwMTc2MDg0MjA0NDIyNzUxNDg1OTU3MzM2NDY1NDcyMzI0ODEwOTgyODMzNjM4NDkwOTA0Mjc5MjgyNjk2MTM0MzIzMDcyNTE1MjIwMDQ0NDUxNTkyNjQ2ODg1NDEwNTcyMjM0NDUxNzMyNzkwNTkwMDEzNDc5MzU4MzQzODQxMjIwMDc0MTc0ODQ4MjIxNzIyMDE3MDgzNTk3ODcyMDE3NjM4NTE0MTAzMTc0MTIyNzg0ODQzOTI1NTc4MzcwNDMwODQzNTIyOTU5NjAwMDk1Njc2Mjg1NzIzNzM3MDQ5NDM4MzQ2NTQ0NzUzMTY4OTEyOTc0OTc2NzkxNTI4NTM1Mjc2MzE3MjU2OTA0MzM2NTIwMTc5MjgxMTQ1Mzk0Njg2NTY1MDUwNDE5MjUwNjE0MTA3ODAzMjMzMzE0NjU4ODI1NDYzMTE3OTAwMjUwNzAxMTk5MTgxNTI5MjA1OTQyMzYzMTU5MzI1NzY1OTkxODE5NDMzOTE0MzAzOTA4ODYwNDYwNzIwNTgxNDA4MjAxMzczMTY0MDQ3NzczNzk0ODI1NDExMDExOTIyMzA1ODIwMDY1NjExMTIxNTQ0NTYxODA4NDE0MDU1MzAyMjEyMDU3NDcxMzk1NzE5NDMyMDcyMjA5MjQ1NjAwMjU4MTM0MzY0NTg0NjM2ODEwMDkzNTIwMjg1NzExMDcyNTc4NzIxNDM1NTE3ODg0MTAzNTI2NDgzODMyNzMzMjg5ODAyNDI2MTU3MzAxNTQyNzQ0NDc2NzQwMDA4NDk0NzgwMzYzMzU0MzA1MTE2OTc4ODA1NjIwNjcxNDY3MDcxNDAwNzExMzU4ODM5NTUzMzc1MzQwNzI0ODk5NzM1NDYwNDgwMTQ0NTk5NzgyMDE0OTA2NTg2NTQzODEzMjkyMTU3OTIyMjIwNjQ1MDg5MTkyMTMwMjA5MzM0OTI2NjYxNTg4NzM3MDA3NzY4NTY1ODM4NTE5NDU2NjAxNTYwODA0OTU3OTg1NjY3ODgwMzk1MjIxMDQ5MjQ5ODAzNzUzNTgyNjM3NzA4NTYwbjtcblxuICAgICAgICBjb25zdCBwRXhwb25lbnQgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIGV4cG9uZW50LCA1NDQgKSk7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwRXhwb25lbnQpLCBjLmkzMl9jb25zdCg1NDQpLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBwUHJlUCA9IG1vZHVsZS5hbGxvYyhwcmVQU2l6ZSk7XG4gICAgY29uc3QgcFByZVEgPSBtb2R1bGUuYWxsb2MocHJlUVNpemUpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRQYWlyaW5nRXF1YXRpb24oblBhaXJpbmdzKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3BhaXJpbmdFcVwiK25QYWlyaW5ncyk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUGFpcmluZ3M7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRQYXJhbShcInBfXCIraSwgXCJpMzJcIik7XG4gICAgICAgICAgICBmLmFkZFBhcmFtKFwicV9cIitpLCBcImkzMlwiKTtcbiAgICAgICAgfVxuICAgICAgICBmLmFkZFBhcmFtKFwiY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCByZXNUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBhdXhUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIHJlc1QgKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5QYWlyaW5nczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIsIGMuZ2V0TG9jYWwoXCJwX1wiK2kpLCBjLmkzMl9jb25zdChwUHJlUCkgKSk7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMlwiLCBjLmdldExvY2FsKFwicV9cIitpKSwgYy5pMzJfY29uc3QocFByZVEpICkpO1xuXG4gICAgICAgICAgICAvLyBDaGVja3NcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5jYWxsKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYy5pMzJfY29uc3QocFByZVApKSksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChnMm1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIsIGMuaTMyX2NvbnN0KHBQcmVRKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX21pbGxlckxvb3BcIiwgYy5pMzJfY29uc3QocFByZVApLCBjLmkzMl9jb25zdChwUHJlUSksIGF1eFQgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlc1QsIGF1eFQsIHJlc1QgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIiwgcmVzVCwgcmVzVCApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX2VxXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJjXCIpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFBhaXJpbmcoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3BhaXJpbmdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCByZXNUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIsIGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChwUHJlUCkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIsIGMuZ2V0TG9jYWwoXCJxXCIpLCBjLmkzMl9jb25zdChwUHJlUSkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbWlsbGVyTG9vcFwiLCBjLmkzMl9jb25zdChwUHJlUCksIGMuaTMyX2NvbnN0KHBQcmVRKSwgcmVzVCApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJyXCIpICkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkdyb3VwRzIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZzJtUHJlZml4KyBcIl9pbkdyb3VwQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgV0lOViA9IFtcbiAgICAgICAgICAgIDIwMDEyMDQ3Nzc2MTA4MzM2OTY3MDg4OTQ5MTI4Njc5NTIwNzgyNzg0NDE0MDk5Njk1MDM5NDI2NjYwMjkwNjgwNjIwMTU4MjUyNDU0MTg5MzIyMjEzNDM4MTQ1NjQ1MDc4MzIwMTg5NDcxMzYyNzk4OTRuLFxuICAgICAgICAgICAgMjAwMTIwNDc3NzYxMDgzMzY5NjcwODg5NDkxMjg2Nzk1MjA3ODI3ODQ0MTQwOTk2OTUwMzk0MjY2NjAyOTA2ODA2MjAxNTgyNTI0NTQxODkzMjIyMTM0MzgxNDU2NDUwNzgzMjAxODk0NzEzNjI3OTg5M25cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBGUk9CMlggPSA0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM2bjtcbiAgICAgICAgY29uc3QgRlJPQjNZID0gW1xuICAgICAgICAgICAgMjk3MzY3NzQwODk4NjU2MTA0MzQ0MjQ2NTM0NjUyMDEwODg3OTE3MjA0Mjg4MzAwOTI0OTk4OTE3NjQxNTAxODA5MTQyMDgwNzE5MjE4MjYzODU2NzExNjMxODU3NjQ3MjY0OTM0NzAxNTkxNzY5MDUzMG4sXG4gICAgICAgICAgICAyOTczNjc3NDA4OTg2NTYxMDQzNDQyNDY1MzQ2NTIwMTA4ODc5MTcyMDQyODgzMDA5MjQ5OTg5MTc2NDE1MDE4MDkxNDIwODA3MTkyMTgyNjM4NTY3MTE2MzE4NTc2NDcyNjQ5MzQ3MDE1OTE3NjkwNTMwblxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHdJbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KFdJTlZbMF0pLCBuOHEpLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KFdJTlZbMV0pLCBuOHEpLFxuICAgICAgICBdKSk7XG5cbiAgICAgICAgY29uc3QgZnJvYjJYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShGUk9CMlgpLCBuOHEpKSk7XG4gICAgICAgIGNvbnN0IGZyb2IzWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoRlJPQjNZWzBdKSwgbjhxKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShGUk9CM1lbMV0pLCBuOHEpLFxuICAgICAgICBdKSk7XG5cbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRShmaW5hbEV4cFosIDgpKSk7XG5cbiAgICAgICAgY29uc3QgcHggPSBjLmdldExvY2FsKFwicFwiKTtcbiAgICAgICAgY29uc3QgcHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUpKTtcblxuICAgICAgICBjb25zdCB4X3dpbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHlfd2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcGYyID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSoyKTtcbiAgICAgICAgY29uc3QgZjIgPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnggPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnhfYzEgPSBjLmkzMl9jb25zdChwZjIpO1xuICAgICAgICBjb25zdCBmMnhfYzIgPSBjLmkzMl9jb25zdChwZjIrZjFzaXplKTtcbiAgICAgICAgY29uc3QgZjJ5ID0gYy5pMzJfY29uc3QocGYyK2Yyc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYyeV9jMSA9IGMuaTMyX2NvbnN0KHBmMitmMnNpemUpO1xuICAgICAgICBjb25zdCBmMnlfYzIgPSBjLmkzMl9jb25zdChwZjIrZjJzaXplK2Yxc2l6ZSk7XG4gICAgICAgIGNvbnN0IHBmMyA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMyk7XG4gICAgICAgIGNvbnN0IGYzID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4ID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4X2MxID0gYy5pMzJfY29uc3QocGYzKTtcbiAgICAgICAgY29uc3QgZjN4X2MyID0gYy5pMzJfY29uc3QocGYzK2Yxc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYzeSA9IGMuaTMyX2NvbnN0KHBmMytmMnNpemUpO1xuICAgICAgICBjb25zdCBmM3lfYzEgPSBjLmkzMl9jb25zdChwZjMrZjJzaXplKTtcbiAgICAgICAgY29uc3QgZjN5X2MyID0gYy5pMzJfY29uc3QocGYzK2Yyc2l6ZStmMXNpemUpO1xuICAgICAgICBjb25zdCBmM3ogPSBjLmkzMl9jb25zdChwZjMrZjJzaXplKjIpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldCggYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChnMm1QcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwXCIpKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHB4LCB3SW52LCB4X3dpbnYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBweSwgd0ludiwgeV93aW52KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgeF93aW52LCBmcm9iMlgsIGYyeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbmVnXCIsIHlfd2ludiwgZjJ5KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB4X3dpbnYsIGYzeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHlfd2ludiwgZnJvYjNZLCBmM3kpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYyeF9jMSwgZjJ4X2MyLCBhdXgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBmMnhfYzEsIGYyeF9jMiwgZjJ4X2MyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIGF1eCwgZjJ4X2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBmMnlfYzEsIGYyeV9jMiwgYXV4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjJ5X2MxLCBmMnlfYzIsIGYyeV9jMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBhdXgsIGYyeV9jMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjN4X2MxLCBmM3hfYzIsIGF1eCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYzeF9jMSwgZjN4X2MyLCBmM3hfYzIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgYXV4LCBmM3hfYzEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIGYzeV9jMiwgZjN5X2MxLCBhdXgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBmM3lfYzEsIGYzeV9jMiwgZjN5X2MyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIGF1eCwgZjN5X2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX29uZVwiLCBmM3opLFxuXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIiwgZjMsIHosIGMuaTMyX2NvbnN0KDgpLCBmMyksXG4gICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgZjMsIGYyLCBmMyksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMm1QcmVmaXggKyBcIl9lcU1peGVkXCIsIGYzLCBjLmdldExvY2FsKFwicFwiKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmSW5Hcm91cCA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMm1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuICAgICAgICBmSW5Hcm91cC5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZkluR3JvdXAuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjMiA9IGZJbkdyb3VwLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4MiA9IGMyLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKjIpKTtcblxuICAgICAgICBmSW5Hcm91cC5hZGRDb2RlKFxuICAgICAgICAgICAgYzIuY2FsbChnMm1QcmVmaXggKyBcIl90b0FmZmluZVwiLCBjMi5nZXRMb2NhbChcInBJblwiKSwgYXV4MiksXG5cbiAgICAgICAgICAgIGMyLnJldChcbiAgICAgICAgICAgICAgICBjMi5jYWxsKGcybVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYXV4MiksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEluR3JvdXBHMSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMW1QcmVmaXgrIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBCRVRBID0gNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm47XG4gICAgICAgIGNvbnN0IEJFVEEyID0gNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUwbjtcbiAgICAgICAgY29uc3QgWjJNMUQzID0gKGZpbmFsRXhwWiAqIGZpbmFsRXhwWiAtIDFuKSAvIDNuO1xuXG4gICAgICAgIGNvbnN0IGJldGEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KEJFVEEpLCBuOHEpKSk7XG4gICAgICAgIGNvbnN0IGJldGEyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShCRVRBMiksIG44cSkpKTtcblxuICAgICAgICBjb25zdCB6Mm0xZDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoWjJNMUQzLCAxNikpKTtcblxuXG4gICAgICAgIGNvbnN0IHB4ID0gYy5nZXRMb2NhbChcInBcIik7XG4gICAgICAgIGNvbnN0IHB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcblxuICAgICAgICBjb25zdCBwc3AgPSBtb2R1bGUuYWxsb2MoZjFzaXplKjMpO1xuICAgICAgICBjb25zdCBzcCA9IGMuaTMyX2NvbnN0KHBzcCk7XG4gICAgICAgIGNvbnN0IHNweCA9IGMuaTMyX2NvbnN0KHBzcCk7XG4gICAgICAgIGNvbnN0IHNweSA9IGMuaTMyX2NvbnN0KHBzcCtmMXNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBzMnAgPSBtb2R1bGUuYWxsb2MoZjFzaXplKjIpO1xuICAgICAgICBjb25zdCBzMnAgPSBjLmkzMl9jb25zdChwczJwKTtcbiAgICAgICAgY29uc3QgczJweCA9IGMuaTMyX2NvbnN0KHBzMnApO1xuICAgICAgICBjb25zdCBzMnB5ID0gYy5pMzJfY29uc3QocHMycCtmMXNpemUpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwoZzFtUHJlZml4ICsgXCJfaW5DdXJ2ZUFmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSkpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHB4LCBiZXRhLCBzcHgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgcHksIHNweSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgcHgsIGJldGEyLCBzMnB4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIHB5LCBzMnB5KSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIsIHNwLCBzcCksXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfc3ViTWl4ZWRcIiwgc3AsIGMuZ2V0TG9jYWwoXCJwXCIpLCBzcCksXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfc3ViTWl4ZWRcIiwgc3AsIHMycCwgc3ApLFxuXG4gICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIiwgc3AsIHoybTFkMywgYy5pMzJfY29uc3QoMTYpLCBzcCksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9lcU1peGVkXCIsIHNwLCBzMnApXG4gICAgICAgICAgICApXG5cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmSW5Hcm91cCA9IG1vZHVsZS5hZGRGdW5jdGlvbihnMW1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuICAgICAgICBmSW5Hcm91cC5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICAgICAgZkluR3JvdXAuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjMiA9IGZJbkdyb3VwLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4MiA9IGMyLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBmSW5Hcm91cC5hZGRDb2RlKFxuICAgICAgICAgICAgYzIuY2FsbChnMW1QcmVmaXggKyBcIl90b0FmZmluZVwiLCBjMi5nZXRMb2NhbChcInBJblwiKSwgYXV4MiksXG5cbiAgICAgICAgICAgIGMyLnJldChcbiAgICAgICAgICAgICAgICBjMi5jYWxsKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIiwgYXV4MiksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaT0wOyBpPDEwOyBpKyspIHtcbiAgICAgICAgYnVpbGRGcm9iZW5pdXNNYXAoaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXBcIitpKTtcbiAgICB9XG5cblxuICAgIGJ1aWxkSW5Hcm91cEcxKCk7XG4gICAgYnVpbGRJbkdyb3VwRzIoKTtcblxuICAgIGJ1aWxkUHJlcEFkZFN0ZXAoKTtcbiAgICBidWlsZFByZXBEb3VibGVTdGVwKCk7XG5cbiAgICBidWlsZFByZXBhcmVHMSgpO1xuICAgIGJ1aWxkUHJlcGFyZUcyKCk7XG5cbiAgICBidWlsZE1pbGxlckxvb3AoKTtcblxuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbk9sZCgpO1xuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbigpO1xuXG4gICAgZm9yIChsZXQgaT0xOyBpPD01OyBpKyspIHtcbiAgICAgICAgYnVpbGRQYWlyaW5nRXF1YXRpb24oaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nRXFcIitpKTtcbiAgICB9XG5cbiAgICBidWlsZFBhaXJpbmcoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nXCIpO1xuXG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wcmVwYXJlRzJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX21pbGxlckxvb3BcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWwxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmNm1QcmVmaXggKyBcIl9tdWwwMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZnRtUHJlZml4ICsgXCJfbXVsMDE0XCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcxbVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcxbVByZWZpeCArIFwiX2luR3JvdXBcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcybVByZWZpeCArIFwiX2luR3JvdXBBZmZpbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGcybVByZWZpeCArIFwiX2luR3JvdXBcIik7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhtb2R1bGUuZnVuY3Rpb25JZHhCeU5hbWUpO1xufTtcblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbi8vIG1vZHVsZS5leHBvcnRzLmJuMTI4X3dhc20gPSByZXF1aXJlKFwiLi9idWlsZC9ibjEyOF93YXNtLmpzXCIpO1xuLy8gbW9kdWxlLmV4cG9ydHMuYmxzMTIzODFfd2FzbSA9IHJlcXVpcmUoXCIuL2J1aWxkL2JsczEyMzgxX3dhc20uanNcIik7XG4vLyBtb2R1bGUuZXhwb3J0cy5tbnQ2NzUzX3dhc20gPSByZXF1aXJlKFwiLi9idWlsZC9tbnQ2NzUzX3dhc20uanNcIik7XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQm4xMjggPSByZXF1aXJlKFwiLi9zcmMvYm4xMjgvYnVpbGRfYm4xMjguanNcIik7XG5tb2R1bGUuZXhwb3J0cy5idWlsZEJsczEyMzgxID0gcmVxdWlyZShcIi4vc3JjL2JsczEyMzgxL2J1aWxkX2JsczEyMzgxLmpzXCIpO1xuLy8gbW9kdWxlLmV4cG9ydHMuYnVpbGRNbnQ2NzUzID0gcmVxdWlyZShcIi4vc3JjL21udDY3NTMvYnVpbGRfbW50Ny5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRGMW0gPSByZXF1aXJlKFwiLi9zcmMvYnVpbGRfZjFtXCIpO1xuIiwiLyogZ2xvYmFsIEJpZ0ludCAqL1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5QmlnSW50cyhvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwiYmlnaW50XCIgfHwgby5lcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvLnRvU3RyaW5nKDEwKTtcbiAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKG8sIDApO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICAgICAgICByZXR1cm4gby5tYXAoc3RyaW5naWZ5QmlnSW50cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobyk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVzW2tdID0gc3RyaW5naWZ5QmlnSW50cyhvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zdHJpbmdpZnlCaWdJbnRzKG8pIHtcbiAgICBpZiAodHlwZW9mIG8gPT0gXCJzdHJpbmdcIiAmJiAvXlswLTldKyQvLnRlc3QobykpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChvKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvID09IFwic3RyaW5nXCIgJiYgL14weFswLTlhLWZBLUZdKyQvLnRlc3QobykpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChvKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgICAgcmV0dXJuIG8ubWFwKHVuc3RyaW5naWZ5QmlnSW50cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChvID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICByZXNba10gPSB1bnN0cmluZ2lmeUJpZ0ludHMob1trXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlQnVmZjJpbnQoYnVmZikge1xuICAgIGxldCByZXMgPSBCaWdJbnQoMCk7XG4gICAgbGV0IGkgPSBidWZmLmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0LCBidWZmLmJ5dGVMZW5ndGgpO1xuICAgIHdoaWxlIChpID4gMCkge1xuICAgICAgICBpZiAoaSA+PSA0KSB7XG4gICAgICAgICAgICBpIC09IDQ7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQzMihpKSkgPDwgQmlnSW50KG9mZnNldCAqIDgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+PSAyKSB7XG4gICAgICAgICAgICBpIC09IDI7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQxNihpKSkgPDwgQmlnSW50KG9mZnNldCAqIDgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQ4KGkpKSA8PCBCaWdJbnQob2Zmc2V0ICogOCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmVJbnQyQnVmZihuLCBsZW4pIHtcbiAgICBsZXQgciA9IG47XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIpO1xuICAgIGxldCBvID0gbGVuO1xuICAgIHdoaWxlIChvID4gMCkge1xuICAgICAgICBpZiAobyAtIDQgPj0gMCkge1xuICAgICAgICAgICAgbyAtPSA0O1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIE51bWJlcihyICYgQmlnSW50KDB4ZmZmZmZmZmYpKSk7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMzIpO1xuICAgICAgICB9IGVsc2UgaWYgKG8gLSAyID49IDApIHtcbiAgICAgICAgICAgIG8gLT0gMjtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQxNihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmYpKSk7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbyAtPSAxO1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDgobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZikpKTtcbiAgICAgICAgICAgIHIgPSByID4+IEJpZ0ludCg4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgZG9lcyBub3QgZml0IGluIHRoaXMgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlQnVmZjJpbnQoYnVmZikge1xuICAgIGxldCByZXMgPSBCaWdJbnQoMCk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgd2hpbGUgKGkgPCBidWZmLmxlbmd0aCkge1xuICAgICAgICBpZiAoaSArIDQgPD0gYnVmZi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcyArPSBCaWdJbnQoYnVmZlYuZ2V0VWludDMyKGksIHRydWUpKSA8PCBCaWdJbnQoaSAqIDgpO1xuICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICB9IGVsc2UgaWYgKGkgKyAyIDw9IGJ1ZmYubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQxNihpLCB0cnVlKSkgPDwgQmlnSW50KGkgKiA4KTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyArPSBCaWdJbnQoYnVmZlYuZ2V0VWludDgoaSwgdHJ1ZSkpIDw8IEJpZ0ludChpICogOCk7XG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlSW50MkJ1ZmYobiwgbGVuKSB7XG4gICAgbGV0IHIgPSBuO1xuICAgIGlmICh0eXBlb2YgbGVuID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxlbiA9IE1hdGguZmxvb3IoKFNjYWxhci5iaXRMZW5ndGgobikgLSAxKSAvIDgpICsgMTtcbiAgICAgICAgaWYgKGxlbiA9PSAwKSBsZW4gPSAxO1xuICAgIH1cbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlcik7XG4gICAgbGV0IG8gPSAwO1xuICAgIHdoaWxlIChvIDwgbGVuKSB7XG4gICAgICAgIGlmIChvICsgNCA8PSBsZW4pIHtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmZmZmZmKSksIHRydWUpO1xuICAgICAgICAgICAgbyArPSA0O1xuICAgICAgICAgICAgciA9IHIgPj4gQmlnSW50KDMyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvICsgMiA8PSBsZW4pIHtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQxNihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmYpKSwgdHJ1ZSk7XG4gICAgICAgICAgICBvICs9IDI7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoMTYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDgobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZikpLCB0cnVlKTtcbiAgICAgICAgICAgIG8gKz0gMTtcbiAgICAgICAgICAgIHIgPSByID4+IEJpZ0ludCg4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgZG9lcyBub3QgZml0IGluIHRoaXMgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUZFbGVtZW50cyhGLCBvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwiYmlnaW50XCIgfHwgby5lcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvLnRvU3RyaW5nKDEwKTtcbiAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBGLnRvU3RyaW5nKEYuZShvKSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG4gICAgICAgIHJldHVybiBvLm1hcChzdHJpbmdpZnlGRWxlbWVudHMuYmluZCh0aGlzLCBGKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobyk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVzW2tdID0gc3RyaW5naWZ5RkVsZW1lbnRzKEYsIG9ba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbztcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnN0cmluZ2lmeUZFbGVtZW50cyhGLCBvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwic3RyaW5nXCIgJiYgL15bMC05XSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBGLmUobyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcInN0cmluZ1wiICYmIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBGLmUobyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG4gICAgICAgIHJldHVybiBvLm1hcCh1bnN0cmluZ2lmeUZFbGVtZW50cy5iaW5kKHRoaXMsIEYpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG8gPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHJlc1trXSA9IHVuc3RyaW5naWZ5RkVsZW1lbnRzKEYsIG9ba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbztcbiAgICB9XG59XG5cbmNvbnN0IF9yZXZUYWJsZSA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgIF9yZXZUYWJsZVtpXSA9IF9yZXZTbG93KGksIDgpO1xufVxuXG5mdW5jdGlvbiBfcmV2U2xvdyhpZHgsIGJpdHMpIHtcbiAgICBsZXQgcmVzID0gMDtcbiAgICBsZXQgYSA9IGlkeDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdHM7IGkrKykge1xuICAgICAgICByZXMgPDw9IDE7XG4gICAgICAgIHJlcyA9IHJlcyB8IChhICYgMSk7XG4gICAgICAgIGEgPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRSZXZlcnNlKGlkeCwgYml0cykge1xuICAgIHJldHVybiAoXG4gICAgICAgIChfcmV2VGFibGVbaWR4ID4+PiAyNF0gfFxuICAgICAgICAoX3JldlRhYmxlWyhpZHggPj4+IDE2KSAmIDB4ZmZdIDw8IDgpIHxcbiAgICAgICAgKF9yZXZUYWJsZVsoaWR4ID4+PiA4KSAmIDB4ZmZdIDw8IDE2KSB8XG4gICAgICAgIChfcmV2VGFibGVbaWR4ICYgMHhmZl0gPDwgMjQpKSA+Pj5cbiAgICAgICAgKDMyIC0gYml0cylcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nMihWKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKChWICYgMHhmZmZmMDAwMCkgIT09IDAgPyAoKFYgJj0gMHhmZmZmMDAwMCksIDE2KSA6IDApIHxcbiAgICAgICAgKChWICYgMHhmZjAwZmYwMCkgIT09IDAgPyAoKFYgJj0gMHhmZjAwZmYwMCksIDgpIDogMCkgfFxuICAgICAgICAoKFYgJiAweGYwZjBmMGYwKSAhPT0gMCA/ICgoViAmPSAweGYwZjBmMGYwKSwgNCkgOiAwKSB8XG4gICAgICAgICgoViAmIDB4Y2NjY2NjY2MpICE9PSAwID8gKChWICY9IDB4Y2NjY2NjY2MpLCAyKSA6IDApIHxcbiAgICAgICAgKChWICYgMHhhYWFhYWFhYSkgIT09IDApXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZSZXZlcnNlQml0cyhidWZmLCBlU2l6ZSkge1xuICAgIGNvbnN0IG4gPSBidWZmLmJ5dGVMZW5ndGggLyBlU2l6ZTtcbiAgICBjb25zdCBiaXRzID0gbG9nMihuKTtcbiAgICBpZiAobiAhPSAxIDw8IGJpdHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRlcnNcIik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBiaXRSZXZlcnNlKGksIGJpdHMpO1xuICAgICAgICBpZiAoaSA+IHIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IGJ1ZmYuc2xpY2UoaSAqIGVTaXplLCAoaSArIDEpICogZVNpemUpO1xuICAgICAgICAgICAgYnVmZi5zZXQoYnVmZi5zbGljZShyICogZVNpemUsIChyICsgMSkgKiBlU2l6ZSksIGkgKiBlU2l6ZSk7XG4gICAgICAgICAgICBidWZmLnNldCh0bXAsIHIgKiBlU2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheTJidWZmZXIoYXJyLCBzRykge1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRyAqIGFyci5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnVmZi5zZXQoYXJyW2ldLCBpICogc0cpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyMmFycmF5KGJ1ZmYsIHNHKSB7XG4gICAgY29uc3QgbiA9IGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHO1xuICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBidWZmLnNsaWNlKGkgKiBzRywgaSAqIHNHICsgc0cpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufVxuIiwiXG5jb25zdCBQQUdFX1NJWkUgPSAxPDwzMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnQnVmZmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgdGhpcy5idWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IHNpemU7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxzaXplOyBpKz0gUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oc2l6ZS1pLCBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXJzLnB1c2gobmV3IFVpbnQ4QXJyYXkobikpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBzbGljZShmciwgdG8pIHtcbiAgICAgICAgaWYgKCB0byA9PT0gdW5kZWZpbmVkICkgdG8gPSB0aGlzLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmICggZnIgPT09IHVuZGVmaW5lZCApIGZyID0gMDtcbiAgICAgICAgY29uc3QgbGVuID0gdG8tZnI7XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihmciAvIFBBR0VfU0laRSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigoZnIrbGVuLTEpIC8gUEFHRV9TSVpFKTtcblxuICAgICAgICBpZiAoKGZpcnN0UGFnZSA9PSBsYXN0UGFnZSl8fChsZW49PTApKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyc1tmaXJzdFBhZ2VdLnNsaWNlKGZyJVBBR0VfU0laRSwgZnIlUEFHRV9TSVpFICsgbGVuKTtcblxuICAgICAgICBsZXQgYnVmZjtcblxuICAgICAgICBsZXQgcCA9IGZpcnN0UGFnZTtcbiAgICAgICAgbGV0IG8gPSBmciAlIFBBR0VfU0laRTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBsZW47XG4gICAgICAgIHdoaWxlIChyPjApIHtcbiAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGwgPSAobytyID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLW8pIDogcjtcbiAgICAgICAgICAgIGNvbnN0IHNyY1ZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcnNbcF0uYnVmZmVyLCB0aGlzLmJ1ZmZlcnNbcF0uYnl0ZU9mZnNldCtvLCBsKTtcbiAgICAgICAgICAgIGlmIChsID09IGxlbikgcmV0dXJuIHNyY1ZpZXcuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmICghYnVmZikge1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKGxlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZi5zZXQoc3JjVmlldywgbGVuLXIpO1xuICAgICAgICAgICAgciA9IHItbDtcbiAgICAgICAgICAgIHAgKys7XG4gICAgICAgICAgICBvID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIHNldChidWZmLCBvZmZzZXQpIHtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSBvZmZzZXQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1ZmYuYnl0ZUxlbmd0aDtcblxuICAgICAgICBpZiAobGVuPT0wKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihvZmZzZXQgLyBQQUdFX1NJWkUpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguZmxvb3IoKG9mZnNldCtsZW4tMSkgLyBQQUdFX1NJWkUpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2UgPT0gbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIGlmICgoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikmJihidWZmLmJ1ZmZlcnMubGVuZ3RoPT0xKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbZmlyc3RQYWdlXS5zZXQoYnVmZi5idWZmZXJzWzBdLCBvZmZzZXQgJSBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJzW2ZpcnN0UGFnZV0uc2V0KGJ1ZmYsIG9mZnNldCAlIFBBR0VfU0laRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHAgPSBmaXJzdFBhZ2U7XG4gICAgICAgIGxldCBvID0gb2Zmc2V0ICUgUEFHRV9TSVpFO1xuICAgICAgICBsZXQgciA9IGxlbjtcbiAgICAgICAgd2hpbGUgKHI+MCkge1xuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBQQUdFX1NJWkUpID8gKFBBR0VfU0laRSAtbykgOiByO1xuICAgICAgICAgICAgY29uc3Qgc3JjVmlldyA9IGJ1ZmYuc2xpY2UoIGxlbiAtciwgbGVuIC1yK2wpO1xuICAgICAgICAgICAgY29uc3QgZHN0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyc1twXS5idWZmZXIsIHRoaXMuYnVmZmVyc1twXS5ieXRlT2Zmc2V0ICsgbywgbCk7XG4gICAgICAgICAgICBkc3RWaWV3LnNldChzcmNWaWV3KTtcbiAgICAgICAgICAgIHIgPSByLWw7XG4gICAgICAgICAgICBwICsrO1xuICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbiIsImltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBmbk5hbWUsIHNJbiwgc091dCkge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBiYXRjaENvbnZlcnQoYnVmZkluKSB7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmZJbi5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKCBuUG9pbnRzICogc0luICE9PSBidWZmSW4uYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IE1hdGguZmxvb3IoblBvaW50cy90bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkNodW5rID0gYnVmZkluLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0luLCBpKnBvaW50c1BlckNodW5rKnNJbiArIG4qc0luKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6YnVmZkNodW5rfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOnNPdXQgKiBufSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9XG4gICAgICAgICAgICAgICAgXX0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZkluIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgZ2V0VGhyZWFkUm5nIH0gZnJvbSBcIi4vcmFuZG9tLmpzXCI7XG5pbXBvcnQgYnVpbGRCYXRjaENvbnZlcnQgZnJvbSBcIi4vZW5naW5lX2JhdGNoY29udmVydC5qc1wiO1xuaW1wb3J0IEJpZ0J1ZmZlciBmcm9tIFwiLi9iaWdidWZmZXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQxIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIG44LCBwKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG5cbiAgICAgICAgdGhpcy5wID0gcDtcbiAgICAgICAgdGhpcy5uOCA9IG44O1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYxXCI7XG4gICAgICAgIHRoaXMubSA9IDE7XG5cbiAgICAgICAgdGhpcy5oYWxmID0gU2NhbGFyLnNoaWZ0UmlnaHQocCwgU2NhbGFyLm9uZSk7XG4gICAgICAgIHRoaXMuYml0TGVuZ3RoID0gU2NhbGFyLmJpdExlbmd0aChwKTtcbiAgICAgICAgdGhpcy5tYXNrID0gU2NhbGFyLnN1YihTY2FsYXIuc2hpZnRMZWZ0KFNjYWxhci5vbmUsIHRoaXMuYml0TGVuZ3RoKSwgU2NhbGFyLm9uZSk7XG5cbiAgICAgICAgdGhpcy5wT3AxID0gdG0uYWxsb2MobjgpO1xuICAgICAgICB0aGlzLnBPcDIgPSB0bS5hbGxvYyhuOCk7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKG44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9cIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl9vbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgICAgIHRoaXMubjY0ID0gTWF0aC5mbG9vcihuOC84KTtcbiAgICAgICAgdGhpcy5uMzIgPSBNYXRoLmZsb29yKG44LzQpO1xuXG4gICAgICAgIGlmKHRoaXMubjY0KjggIT0gdGhpcy5uOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibjggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDhcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbGYgPSBTY2FsYXIuc2hpZnRSaWdodCh0aGlzLnAsIFNjYWxhci5vbmUpO1xuICAgICAgICB0aGlzLm5xciA9IHRoaXMudHdvO1xuICAgICAgICBsZXQgciA9IHRoaXMuZXhwKHRoaXMubnFyLCB0aGlzLmhhbGYpO1xuICAgICAgICB3aGlsZSAoIXRoaXMuZXEociwgdGhpcy5uZWdvbmUpKSB7XG4gICAgICAgICAgICB0aGlzLm5xciA9IHRoaXMuYWRkKHRoaXMubnFyLCB0aGlzLm9uZSk7XG4gICAgICAgICAgICByID0gdGhpcy5leHAodGhpcy5ucXIsIHRoaXMuaGFsZik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tdWwodGhpcy5ucXIsIHRoaXMubnFyKTtcbiAgICAgICAgdGhpcy5zaGlmdEludiA9IHRoaXMuaW52KHRoaXMuc2hpZnQpO1xuXG4gICAgICAgIHRoaXMucyA9IDA7XG4gICAgICAgIGxldCB0ID0gU2NhbGFyLnN1Yih0aGlzLnAsIFNjYWxhci5vbmUpO1xuXG4gICAgICAgIHdoaWxlICggIVNjYWxhci5pc09kZCh0KSApIHtcbiAgICAgICAgICAgIHRoaXMucyA9IHRoaXMucyArIDE7XG4gICAgICAgICAgICB0ID0gU2NhbGFyLnNoaWZ0UmlnaHQodCwgU2NhbGFyLm9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLncgPSBbXTtcbiAgICAgICAgdGhpcy53W3RoaXMuc10gPSB0aGlzLmV4cCh0aGlzLm5xciwgdCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0gdGhpcy5zLTE7IGk+PTA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy53W2ldID0gdGhpcy5zcXVhcmUodGhpcy53W2krMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVxKHRoaXMud1swXSwgdGhpcy5vbmUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjYWxjdWxhdGluZyByb290cyBvZiB1bml0eVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmF0Y2hUb01vbnRnb21lcnkgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hUb01vbnRnb21lcnlcIiwgdGhpcy5uOCwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMuYmF0Y2hGcm9tTW9udGdvbWVyeSA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaEZyb21Nb250Z29tZXJ5XCIsIHRoaXMubjgsIHRoaXMubjgpO1xuICAgIH1cblxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIGFkZChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICB9XG5cblxuICAgIGVxKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDJCb29sKFwiX2VxXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvXCIsIGEpO1xuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YlwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfbmVnXCIsIGEpO1xuICAgIH1cblxuICAgIGludihhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9pbnZlcnNlXCIsIGEpO1xuICAgIH1cblxuICAgIHRvTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b01vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgZnJvbU1vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZnJvbU1vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgbXVsKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfaW52ZXJzZVwiXSh0aGlzLnBPcDIsIHRoaXMucE9wMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX211bFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNTcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzU3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIHNxcnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3FydFwiLCBhKTtcbiAgICB9XG5cbiAgICBleHAoYSwgYikge1xuICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIGIgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUoYikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfZXhwXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBiLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBpc05lZ2F0aXZlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc05lZ2F0aXZlXCIsIGEpO1xuICAgIH1cblxuICAgIGUoYSwgYikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBhO1xuICAgICAgICBsZXQgcmEgPSBTY2FsYXIuZShhLCBiKTtcbiAgICAgICAgaWYgKFNjYWxhci5pc05lZ2F0aXZlKHJhKSkge1xuICAgICAgICAgICAgcmEgPSBTY2FsYXIubmVnKHJhKTtcbiAgICAgICAgICAgIGlmIChTY2FsYXIuZ3QocmEsIHRoaXMucCkpIHtcbiAgICAgICAgICAgICAgICByYSA9IFNjYWxhci5tb2QocmEsIHRoaXMucCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYSA9IFNjYWxhci5zdWIodGhpcy5wLCByYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU2NhbGFyLmd0KHJhLCB0aGlzLnApKSB7XG4gICAgICAgICAgICAgICAgcmEgPSBTY2FsYXIubW9kKHJhLCB0aGlzLnApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSB1dGlscy5sZUludDJCdWZmKHJhLCB0aGlzLm44KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Nb250Z29tZXJ5KGJ1ZmYpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgICAgIGNvbnN0IGFuID0gdGhpcy5mcm9tTW9udGdvbWVyeShhKTtcbiAgICAgICAgY29uc3QgcyA9IFNjYWxhci5mcm9tUnByTEUoYW4sIDApO1xuICAgICAgICByZXR1cm4gU2NhbGFyLnRvU3RyaW5nKHMsIHJhZGl4KTtcbiAgICB9XG5cbiAgICBmcm9tUm5nKHJuZykge1xuICAgICAgICBsZXQgdjtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMubjgpO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB2ID0gU2NhbGFyLnplcm87XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uNjQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHYgPSBTY2FsYXIuYWRkKHYsICBTY2FsYXIuc2hpZnRMZWZ0KHJuZy5uZXh0VTY0KCksIDY0KmkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHYgPSBTY2FsYXIuYmFuZCh2LCB0aGlzLm1hc2spO1xuICAgICAgICB9IHdoaWxlIChTY2FsYXIuZ2VxKHYsIHRoaXMucCkpO1xuICAgICAgICBTY2FsYXIudG9ScHJMRShidWZmLCAwLCB2LCB0aGlzLm44KTtcbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgcmFuZG9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tUm5nKGdldFRocmVhZFJuZygpKTtcbiAgICB9XG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGFuID0gdGhpcy5mcm9tTW9udGdvbWVyeShhKTtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByTEUoYW4sIDApO1xuICAgIH1cblxuICAgIGZyb21PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5uOCk7XG4gICAgICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIDAsIGEsIHRoaXMubjgpO1xuICAgICAgICByZXR1cm4gdGhpcy50b01vbnRnb21lcnkoYnVmZik7XG4gICAgfVxuXG4gICAgdG9ScHJMRShidWZmLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgYnVmZi5zZXQodGhpcy5mcm9tTW9udGdvbWVyeShhKSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICB0b1JwckJFKGJ1ZmYsIG9mZnNldCwgYSkge1xuICAgICAgICBjb25zdCBidWZmMiA9IHRoaXMuZnJvbU1vbnRnb21lcnkoYSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLm44LzI7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXV4ID0gYnVmZjJbaV07XG4gICAgICAgICAgICBidWZmMltpXSA9IGJ1ZmYyW3RoaXMubjgtMS1pXTtcbiAgICAgICAgICAgIGJ1ZmYyW3RoaXMubjgtMS1pXSA9IGF1eDtcbiAgICAgICAgfVxuICAgICAgICBidWZmLnNldChidWZmMiwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmcm9tUnByTEUoYnVmZiwgb2Zmc2V0KSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCByZXMgPSBidWZmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5uOCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvTW9udGdvbWVyeShyZXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGJhdGNoSW52ZXJzZShidWZmSW4pIHtcbiAgICAgICAgbGV0IHJldHVybkFycmF5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNJbiA9IHRoaXMubjg7XG4gICAgICAgIGNvbnN0IHNPdXQgPSB0aGlzLm44O1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZJbikpIHtcbiAgICAgICAgICAgIGJ1ZmZJbiA9IHV0aWxzLmFycmF5MmJ1ZmZlcihidWZmSW4sIHNJbiApO1xuICAgICAgICAgICAgcmV0dXJuQXJyYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZkluID0gYnVmZkluLnNsaWNlKDAsIGJ1ZmZJbi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmZJbi5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKCBuUG9pbnRzICogc0luICE9PSBidWZmSW4uYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IE1hdGguZmxvb3IoblBvaW50cy90aGlzLnRtLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy50bS5jb25jdXJyZW5jeTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChpPCB0aGlzLnRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkNodW5rID0gYnVmZkluLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0luLCBpKnBvaW50c1BlckNodW5rKnNJbiArIG4qc0luKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6YnVmZkNodW5rfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOnNPdXQgKiBufSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiB0aGlzLnByZWZpeCArIFwiX2JhdGNoSW52ZXJzZVwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IHNJbn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogc091dH0sXG4gICAgICAgICAgICAgICAgXX0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMudG0ucXVldWVBY3Rpb24odGFzaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQ7XG4gICAgICAgIGlmIChidWZmSW4gaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0ID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0LnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICAgICAgcCs9cmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5idWZmZXIyYXJyYXkoZnVsbEJ1ZmZPdXQsIHNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBnZXRUaHJlYWRSbmcgfSBmcm9tIFwiLi9yYW5kb20uanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQyIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIEYpIHtcbiAgICAgICAgdGhpcy50bSA9IHRtO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcblxuICAgICAgICB0aGlzLkYgPSBGO1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYyXCI7XG4gICAgICAgIHRoaXMubSA9IEYubSAqIDI7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLkYubjgqMjtcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLkYubjMyKjI7XG4gICAgICAgIHRoaXMubjY0ID0gdGhpcy5GLm42NCoyO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMucE9wMiA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKEYubjgqMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX29uZVwiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLm9uZSA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIGFkZChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBlcShhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyQm9vbChcIl9lcVwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzWmVyb1wiLCBhKTtcbiAgICB9XG5cbiAgICBzdWIoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICB9XG5cbiAgICBpbnYoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfaW52ZXJzZVwiLCBhKTtcbiAgICB9XG5cbiAgICBpc05lZ2F0aXZlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc05lZ2F0aXZlXCIsIGEpO1xuICAgIH1cblxuICAgIHRvTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b01vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgZnJvbU1vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZnJvbU1vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgbXVsKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIG11bDEoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9tdWwxXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfaW52ZXJzZVwiXSh0aGlzLnBPcDIsIHRoaXMucE9wMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX211bFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNTcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzU3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIHNxcnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3FydFwiLCBhKTtcbiAgICB9XG5cbiAgICBleHAoYSwgYikge1xuICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIGIgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUoYikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfZXhwXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBiLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBlKGEsIGIpIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gYTtcbiAgICAgICAgaWYgKChBcnJheS5pc0FycmF5KGEpKSAmJiAoYS5sZW5ndGggPT0gMikpIHtcbiAgICAgICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLmUoYVswXSwgYik7XG4gICAgICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5lKGFbMV0sIGIpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgICAgICByZXMuc2V0KGMyLCB0aGlzLkYubjgqMik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBGMlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgICAgIGNvbnN0IHMxID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UoMCwgdGhpcy5GLm44KSwgcmFkaXgpO1xuICAgICAgICBjb25zdCBzMiA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgcmV0dXJuIGBbJHtzMX0sICR7czJ9XWA7XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5mcm9tUm5nKHJuZyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgIHJlcy5zZXQoYzIsIHRoaXMuRi5uOCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcmFuZG9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tUm5nKGdldFRocmVhZFJuZygpKTtcbiAgICB9XG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UoMCwgdGhpcy5GLm44KSk7XG4gICAgICAgIGNvbnN0IGMyID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMikpO1xuICAgICAgICByZXR1cm4gW2MxLCBjMl07XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgIGNvbnN0IGIxID0gdGhpcy5GLmZyb21PYmplY3QoYVswXSk7XG4gICAgICAgIGNvbnN0IGIyID0gdGhpcy5GLmZyb21PYmplY3QoYVsxXSk7XG4gICAgICAgIGJ1ZmYuc2V0KGIxKTtcbiAgICAgICAgYnVmZi5zZXQoYjIsIHRoaXMuRi5uOCk7XG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIGMxKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UoMCwgdGhpcy5GLm44KTtcbiAgICB9XG5cbiAgICBjMihhKSB7XG4gICAgICAgIHJldHVybiBhLnNsaWNlKHRoaXMuRi5uOCk7XG4gICAgfVxuXG59XG5cbiIsIlxuXG5pbXBvcnQgeyBnZXRUaHJlYWRSbmcgfSBmcm9tIFwiLi9yYW5kb20uanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtRmllbGQzIHtcblxuICAgIGNvbnN0cnVjdG9yKHRtLCBwcmVmaXgsIEYpIHtcbiAgICAgICAgdGhpcy50bSA9IHRtO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcblxuICAgICAgICB0aGlzLkYgPSBGO1xuICAgICAgICB0aGlzLnR5cGUgPSBcIkYzXCI7XG4gICAgICAgIHRoaXMubSA9IEYubSAqIDM7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLkYubjgqMztcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLkYubjMyKjM7XG4gICAgICAgIHRoaXMubjY0ID0gdGhpcy5GLm42NCozO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMiA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX29uZVwiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLm9uZSA9IHRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLm44KTtcblxuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMubmVnKHRoaXMub25lKTtcbiAgICAgICAgdGhpcy50d28gPSB0aGlzLmFkZCh0aGlzLm9uZSwgdGhpcy5vbmUpO1xuXG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBvcDJCb29sKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AxQm9vbChvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuXG4gICAgZXEoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMkJvb2woXCJfZXFcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgaXNaZXJvKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1plcm9cIiwgYSk7XG4gICAgfVxuXG4gICAgYWRkKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YlwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfbmVnXCIsIGEpO1xuICAgIH1cblxuICAgIGludihhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9pbnZlcnNlXCIsIGEpO1xuICAgIH1cblxuICAgIGlzTmVnYXRpdmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzTmVnYXRpdmVcIiwgYSk7XG4gICAgfVxuXG4gICAgdG9Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3RvTW9udGdvbWVyeVwiLCBhKTtcbiAgICB9XG5cbiAgICBmcm9tTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9mcm9tTW9udGdvbWVyeVwiLCBhKTtcbiAgICB9XG5cbiAgICBtdWwoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9tdWxcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgZGl2KGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9pbnZlcnNlXCJdKHRoaXMucE9wMiwgdGhpcy5wT3AyKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfbXVsXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgc3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3NxdWFyZVwiLCBhKTtcbiAgICB9XG5cbiAgICBpc1NxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNTcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgc3FydChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXJ0XCIsIGEpO1xuICAgIH1cblxuICAgIGV4cChhLCBiKSB7XG4gICAgICAgIGlmICghKGIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgYiA9IFNjYWxhci50b0xFQnVmZihTY2FsYXIuZShiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9leHBcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIGIuYnl0ZUxlbmd0aCwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIGUoYSwgYikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBhO1xuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoYSkpICYmIChhLmxlbmd0aCA9PSAzKSkge1xuICAgICAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZShhWzBdLCBiKTtcbiAgICAgICAgICAgIGNvbnN0IGMyID0gdGhpcy5GLmUoYVsxXSwgYik7XG4gICAgICAgICAgICBjb25zdCBjMyA9IHRoaXMuRi5lKGFbMl0sIGIpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjMpO1xuICAgICAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgICAgICByZXMuc2V0KGMyLCB0aGlzLkYubjgpO1xuICAgICAgICAgICAgcmVzLnNldChjMywgdGhpcy5GLm44KjIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgRjNcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCByYWRpeCkge1xuICAgICAgICBjb25zdCBzMSA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgY29uc3QgczIgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICBjb25zdCBzMyA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICByZXR1cm4gYFske3MxfSwgJHtzMn0sICR7czN9XWA7XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5mcm9tUm5nKHJuZyk7XG4gICAgICAgIGNvbnN0IGMzID0gdGhpcy5GLmZyb21Sbmcocm5nKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjMpO1xuICAgICAgICByZXMuc2V0KGMxKTtcbiAgICAgICAgcmVzLnNldChjMiwgdGhpcy5GLm44KTtcbiAgICAgICAgcmVzLnNldChjMywgdGhpcy5GLm44KjIpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVJuZyhnZXRUaHJlYWRSbmcoKSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBjMSA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKDAsIHRoaXMuRi5uOCkpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpKTtcbiAgICAgICAgY29uc3QgYzMgPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgqMiwgdGhpcy5GLm44KjMpKTtcbiAgICAgICAgcmV0dXJuIFtjMSwgYzIsIGMzXTtcbiAgICB9XG5cbiAgICBmcm9tT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgY29uc3QgYjEgPSB0aGlzLkYuZnJvbU9iamVjdChhWzBdKTtcbiAgICAgICAgY29uc3QgYjIgPSB0aGlzLkYuZnJvbU9iamVjdChhWzFdKTtcbiAgICAgICAgY29uc3QgYjMgPSB0aGlzLkYuZnJvbU9iamVjdChhWzJdKTtcbiAgICAgICAgYnVmZi5zZXQoYjEpO1xuICAgICAgICBidWZmLnNldChiMiwgdGhpcy5GLm44KTtcbiAgICAgICAgYnVmZi5zZXQoYjMsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgYzEoYSkge1xuICAgICAgICByZXR1cm4gYS5zbGljZSgwLCB0aGlzLkYubjgpO1xuICAgIH1cblxuICAgIGMyKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgYzMoYSkge1xuICAgICAgICByZXR1cm4gYS5zbGljZSh0aGlzLkYubjgqMik7XG4gICAgfVxuXG59XG5cblxuIiwiXG5cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCBidWlsZEJhdGNoQ29udmVydCBmcm9tIFwiLi9lbmdpbmVfYmF0Y2hjb252ZXJ0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhc21DdXJ2ZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0bSwgcHJlZml4LCBGLCBwR2VuLCBwR2IsIGNvZmFjdG9yKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgICAgIHRoaXMuRiA9IEY7XG5cbiAgICAgICAgdGhpcy5wT3AxID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy5wT3AyID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy5wT3AzID0gdG0uYWxsb2MoRi5uOCozKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9cIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgRi5uOCozKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3ByZWZpeCArIFwiX3plcm9BZmZpbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy56ZXJvQWZmaW5lID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgRi5uOCoyKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0aGlzLnRtLmdldEJ1ZmYocEdlbiwgRi5uOCozKTtcbiAgICAgICAgdGhpcy5nID0gdGhpcy5vbmU7XG4gICAgICAgIHRoaXMub25lQWZmaW5lID0gdGhpcy50bS5nZXRCdWZmKHBHZW4sIEYubjgqMik7XG4gICAgICAgIHRoaXMuZ0FmZmluZSA9IHRoaXMub25lQWZmaW5lO1xuICAgICAgICB0aGlzLmIgPSB0aGlzLnRtLmdldEJ1ZmYocEdiLCBGLm44KTtcblxuICAgICAgICBpZiAoY29mYWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29mYWN0b3IgPSBTY2FsYXIudG9MRUJ1ZmYoY29mYWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLm5lZyh0aGlzLm9uZSk7XG4gICAgICAgIHRoaXMudHdvID0gdGhpcy5hZGQodGhpcy5vbmUsIHRoaXMub25lKTtcblxuICAgICAgICB0aGlzLmJhdGNoTEVNdG9DID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoTEVNdG9DXCIsIEYubjgqMiwgRi5uOCk7XG4gICAgICAgIHRoaXMuYmF0Y2hMRU10b1UgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hMRU10b1VcIiwgRi5uOCoyLCBGLm44KjIpO1xuICAgICAgICB0aGlzLmJhdGNoQ3RvTEVNID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoQ3RvTEVNXCIsIEYubjgsIEYubjgqMik7XG4gICAgICAgIHRoaXMuYmF0Y2hVdG9MRU0gPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hVdG9MRU1cIiwgRi5uOCoyLCBGLm44KjIpO1xuICAgICAgICB0aGlzLmJhdGNoVG9KYWNvYmlhbiA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaFRvSmFjb2JpYW5cIiwgRi5uOCoyLCBGLm44KjMpO1xuICAgICAgICB0aGlzLmJhdGNoVG9BZmZpbmUgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hUb0FmZmluZVwiLCBGLm44KjMsIEYubjgqMik7XG4gICAgfVxuXG4gICAgb3AyKG9wTmFtZSwgYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLkYubjgqMyk7XG4gICAgfVxuXG4gICAgb3AyYm9vbChvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgIH1cblxuICAgIG9wMShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjMpO1xuICAgIH1cblxuICAgIG9wMUFmZmluZShvcE5hbWUsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIG9wTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjIpO1xuICAgIH1cblxuICAgIG9wMUJvb2wob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICB9XG5cbiAgICBhZGQoYSxiKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkTWl4ZWRcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkTWl4ZWRcIiwgYiwgYSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9hZGRBZmZpbmVcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN1YihhLGIpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJNaXhlZFwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJNaXhlZFwiLCBiLCBhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX3N1YkFmZmluZVwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUFmZmluZShcIl9uZWdBZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkb3VibGUoYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZG91YmxlXCIsIGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2RvdWJsZUFmZmluZVwiLCBhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvXCIsIGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1plcm9BZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aW1lc1NjYWxhcihhLCBzKSB7XG4gICAgICAgIGlmICghKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgcyA9IFNjYWxhci50b0xFQnVmZihTY2FsYXIuZShzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc1NjYWxhclwiO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc1NjYWxhckFmZmluZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBzKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW2ZuTmFtZV0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHMuYnl0ZUxlbmd0aCwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMuRi5uOCozKTtcbiAgICB9XG5cbiAgICB0aW1lc0ZyKGEsIHMpIHtcbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc0ZyXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSB0aGlzLnByZWZpeCArIFwiX3RpbWVzRnJBZmZpbmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgcyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1tmbk5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjMpO1xuICAgIH1cblxuICAgIGVxKGEsYikge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcVwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcU1peGVkXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcU1peGVkXCIsIGIsIGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDJib29sKFwiX2VxQWZmaW5lXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0FmZmluZShhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUFmZmluZShcIl90b0FmZmluZVwiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9KYWNvYmlhbihhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3RvSmFjb2JpYW5cIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1JwclVuY29tcHJlc3NlZChhcnIsIG9mZnNldCwgYSkge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfdG9BZmZpbmVcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCAhPSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX0xFTXRvVVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgYXJyLnNldChyZXMsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgZnJvbVJwclVuY29tcHJlc3NlZChhcnIsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXJyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5GLm44KjIpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBidWZmKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfVXRvTEVNXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICB9XG5cbiAgICB0b1JwckNvbXByZXNzZWQoYXJyLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX3RvQWZmaW5lXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggIT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9MRU10b0NcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDEpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLkYubjgpO1xuICAgICAgICBhcnIuc2V0KHJlcywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmcm9tUnByQ29tcHJlc3NlZChhcnIsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXJyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5GLm44KTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYnVmZik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX0N0b0xFTVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMik7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AyLCB0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgdG9VbmNvbXByZXNzZWQoYSkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICB0aGlzLnRvUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDAsIGEpO1xuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICB0b1JwckxFTShhcnIsIG9mZnNldCwgYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBhcnIuc2V0KGEsIG9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX3RvQWZmaW5lXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIGFyci5zZXQocmVzLCBvZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJvbVJwckxFTShhcnIsIG9mZnNldCkge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICAgICAgcmV0dXJuIGFyci5zbGljZShvZmZzZXQsIG9mZnNldCt0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoYSwgcmFkaXgpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICAgICAgY29uc3QgeiA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCoyKSwgcmFkaXgpO1xuICAgICAgICAgICAgcmV0dXJuIGBbICR7eH0sICR7eX0sICR7en0gXWA7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UoMCwgdGhpcy5GLm44KSwgcmFkaXgpO1xuICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgICAgIHJldHVybiBgWyAke3h9LCAke3l9IF1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWxpZChhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzWmVybyhhKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IEYgPSB0aGlzLkY7XG4gICAgICAgIGNvbnN0IGFhID0gdGhpcy50b0FmZmluZShhKTtcbiAgICAgICAgY29uc3QgeCA9IGFhLnNsaWNlKDAsIHRoaXMuRi5uOCk7XG4gICAgICAgIGNvbnN0IHkgPSBhYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgY29uc3QgeDNiID0gRi5hZGQoRi5tdWwoRi5zcXVhcmUoeCkseCksIHRoaXMuYik7XG4gICAgICAgIGNvbnN0IHkyID0gRi5zcXVhcmUoeSk7XG4gICAgICAgIHJldHVybiBGLmVxKHgzYiwgeTIpO1xuICAgIH1cblxuICAgIGZyb21Sbmcocm5nKSB7XG4gICAgICAgIGNvbnN0IEYgPSB0aGlzLkY7XG4gICAgICAgIGxldCBQID0gW107XG4gICAgICAgIGxldCBncmVhdGVzdDtcbiAgICAgICAgbGV0IHgzYjtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgUFswXSA9IEYuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgZ3JlYXRlc3QgPSBybmcubmV4dEJvb2woKTtcbiAgICAgICAgICAgIHgzYiA9IEYuYWRkKEYubXVsKEYuc3F1YXJlKFBbMF0pLCBQWzBdKSwgdGhpcy5iKTtcbiAgICAgICAgfSB3aGlsZSAoIUYuaXNTcXVhcmUoeDNiKSk7XG5cbiAgICAgICAgUFsxXSA9IEYuc3FydCh4M2IpO1xuXG4gICAgICAgIGNvbnN0IHMgPSBGLmlzTmVnYXRpdmUoUFsxXSk7XG4gICAgICAgIGlmIChncmVhdGVzdCBeIHMpIFBbMV0gPSBGLm5lZyhQWzFdKTtcblxuICAgICAgICBsZXQgUGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgIFBidWZmLnNldChQWzBdKTtcbiAgICAgICAgUGJ1ZmYuc2V0KFBbMV0sIHRoaXMuRi5uOCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29mYWN0b3IpIHtcbiAgICAgICAgICAgIFBidWZmID0gdGhpcy50aW1lc1NjYWxhcihQYnVmZiwgdGhpcy5jb2ZhY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUGJ1ZmY7XG4gICAgfVxuXG5cblxuICAgIHRvT2JqZWN0KGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHRoaXMuRi50b09iamVjdCh0aGlzLkYuemVybyksXG4gICAgICAgICAgICAgICAgdGhpcy5GLnRvT2JqZWN0KHRoaXMuRi5vbmUpLFxuICAgICAgICAgICAgICAgIHRoaXMuRi50b09iamVjdCh0aGlzLkYuemVybyksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSgwLCB0aGlzLkYubjgpKTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpKTtcbiAgICAgICAgbGV0IHo7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgqMiwgdGhpcy5GLm44KjMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYudG9PYmplY3QodGhpcy5GLm9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgICB9XG5cbiAgICBmcm9tT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuRi5mcm9tT2JqZWN0KGFbMF0pO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5GLmZyb21PYmplY3QoYVsxXSk7XG4gICAgICAgIGxldCB6O1xuICAgICAgICBpZiAoYS5sZW5ndGg9PTMpIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYuZnJvbU9iamVjdChhWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHogPSB0aGlzLkYub25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLkYuaXNaZXJvKHosIHRoaXMuRi5vbmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy56ZXJvQWZmaW5lO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuRi5lcSh6LCB0aGlzLkYub25lKSkge1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHgpO1xuICAgICAgICAgICAgYnVmZi5zZXQoeSwgdGhpcy5GLm44KTtcbiAgICAgICAgICAgIHJldHVybiBidWZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHgpO1xuICAgICAgICAgICAgYnVmZi5zZXQoeSwgdGhpcy5GLm44KTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHosIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZShhKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIGE7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21PYmplY3QoYSk7XG4gICAgfVxuXG4gICAgeChhKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IHRoaXMudG9BZmZpbmUoYSk7XG4gICAgICAgIHJldHVybiB0bXAuc2xpY2UoMCwgdGhpcy5GLm44KTtcbiAgICB9XG5cbiAgICB5KGEpIHtcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy50b0FmZmluZShhKTtcbiAgICAgICAgcmV0dXJuIHRtcC5zbGljZSh0aGlzLkYubjgpO1xuICAgIH1cblxufVxuXG5cbiIsIi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJlYWQoc2VsZikge1xuICAgIGNvbnN0IE1BWE1FTSA9IDMyNzY3O1xuICAgIGxldCBpbnN0YW5jZTtcbiAgICBsZXQgbWVtb3J5O1xuXG4gICAgaWYgKHNlbGYpIHtcbiAgICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZS5kYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGFbMF0uY21kID09IFwiSU5JVFwiKSB7XG4gICAgICAgICAgICAgICAgaW5pdChkYXRhWzBdKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVswXS5jbWQgPT0gXCJURVJNSU5BVEVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gcnVuVGFzayhkYXRhKTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBuZXcgVWludDhBcnJheShkYXRhLmNvZGUpO1xuICAgICAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShjb2RlKTtcbiAgICAgICAgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDpkYXRhLmluaXQsIG1heGltdW06IE1BWE1FTX0pO1xuXG4gICAgICAgIGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUod2FzbU1vZHVsZSwge1xuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgICAgXCJtZW1vcnlcIjogbWVtb3J5XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBhbGxvYyhsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdTMyID0gbmV3IFVpbnQzMkFycmF5KG1lbW9yeS5idWZmZXIsIDAsIDEpO1xuICAgICAgICB3aGlsZSAodTMyWzBdICYgMykgdTMyWzBdKys7ICAvLyBSZXR1cm4gYWx3YXlzIGFsaWduZWQgcG9pbnRlcnNcbiAgICAgICAgY29uc3QgcmVzID0gdTMyWzBdO1xuICAgICAgICB1MzJbMF0gKz0gbGVuZ3RoO1xuICAgICAgICBpZiAodTMyWzBdICsgbGVuZ3RoID4gbWVtb3J5LmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZXMgPSBtZW1vcnkuYnVmZmVyLmJ5dGVMZW5ndGggLyAweDEwMDAwO1xuICAgICAgICAgICAgbGV0IHJlcXVpcmVkUGFnZXMgPSBNYXRoLmZsb29yKCh1MzJbMF0gKyBsZW5ndGgpIC8gMHgxMDAwMCkrMTtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZFBhZ2VzPk1BWE1FTSkgcmVxdWlyZWRQYWdlcz1NQVhNRU07XG4gICAgICAgICAgICBtZW1vcnkuZ3JvdyhyZXF1aXJlZFBhZ2VzLWN1cnJlbnRQYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhbGxvY0J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGFsbG9jKGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgc2V0QnVmZmVyKHAsIGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEJ1ZmZlcihwb2ludGVyLCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdTggPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHU4LmJ1ZmZlciwgdTguYnl0ZU9mZnNldCArIHBvaW50ZXIsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0QnVmZmVyKHBvaW50ZXIsIGJ1ZmZlcikge1xuICAgICAgICBjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpO1xuICAgICAgICB1OC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcG9pbnRlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuVGFzayh0YXNrKSB7XG4gICAgICAgIGlmICh0YXNrWzBdLmNtZCA9PSBcIklOSVRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGluaXQodGFza1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgdmFyczogW10sXG4gICAgICAgICAgICBvdXQ6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHUzMmEgPSBuZXcgVWludDMyQXJyYXkobWVtb3J5LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgIGNvbnN0IG9sZEFsbG9jID0gdTMyYVswXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRhc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGFza1tpXS5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBTExPQ1NFVFwiOlxuICAgICAgICAgICAgICAgIGN0eC52YXJzW3Rhc2tbaV0udmFyXSA9IGFsbG9jQnVmZmVyKHRhc2tbaV0uYnVmZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiQUxMT0NcIjpcbiAgICAgICAgICAgICAgICBjdHgudmFyc1t0YXNrW2ldLnZhcl0gPSBhbGxvYyh0YXNrW2ldLmxlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU0VUXCI6XG4gICAgICAgICAgICAgICAgc2V0QnVmZmVyKGN0eC52YXJzW3Rhc2tbaV0udmFyXSwgdGFza1tpXS5idWZmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJDQUxMXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8dGFza1tpXS5wYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHRhc2tbaV0ucGFyYW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHAudmFyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChjdHgudmFyc1twLnZhcl0gKyAocC5vZmZzZXQgfHwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwLnZhbCAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZXhwb3J0c1t0YXNrW2ldLmZuTmFtZV0oLi4ucGFyYW1zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJHRVRcIjpcbiAgICAgICAgICAgICAgICBjdHgub3V0W3Rhc2tbaV0ub3V0XSA9IGdldEJ1ZmZlcihjdHgudmFyc1t0YXNrW2ldLnZhcl0sIHRhc2tbaV0ubGVuKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNtZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1MzJiID0gbmV3IFVpbnQzMkFycmF5KG1lbW9yeS5idWZmZXIsIDAsIDEpO1xuICAgICAgICB1MzJiWzBdID0gb2xkQWxsb2M7XG4gICAgICAgIHJldHVybiBjdHgub3V0O1xuICAgIH1cblxuXG4gICAgcmV0dXJuIHJ1blRhc2s7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gV29ya2VyOyIsIi8qIGdsb2JhbCBuYXZpZ2F0b3IsIFdlYkFzc2VtYmx5ICovXG4vKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIGNvbnN0IE1FTV9TSVpFID0gMTAwMDsgIC8vIE1lbW9yeSBzaXplIGluIDY0SyBQYWtlcyAoNTEyTWIpXG5jb25zdCBNRU1fU0laRSA9IDI1OyAgLy8gTWVtb3J5IHNpemUgaW4gNjRLIFBha2VzICgxNjAwS2IpXG5cblxuaW1wb3J0IHRocmVhZCBmcm9tIFwiLi90aHJlYWRtYW5fdGhyZWFkLmpzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgV29ya2VyIGZyb20gXCJ3ZWItd29ya2VyXCI7XG5cbmNsYXNzIERlZmVycmVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PiB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2xlZXAobXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cikge1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuYnRvYShzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuY29uc3QgdGhyZWFkU291cmNlID0gc3RyaW5nVG9CYXNlNjQoXCIoXCIgKyB0aHJlYWQudG9TdHJpbmcoKSArIFwiKShzZWxmKVwiKTtcbmNvbnN0IHdvcmtlclNvdXJjZSA9IFwiZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCxcIiArIHRocmVhZFNvdXJjZTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGhyZWFkTWFuYWdlcih3YXNtLCBzaW5nbGVUaHJlYWQpIHtcbiAgICBjb25zdCB0bSA9IG5ldyBUaHJlYWRNYW5hZ2VyKCk7XG5cbiAgICB0bS5tZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOk1FTV9TSVpFfSk7XG4gICAgdG0udTggPSBuZXcgVWludDhBcnJheSh0bS5tZW1vcnkuYnVmZmVyKTtcbiAgICB0bS51MzIgPSBuZXcgVWludDMyQXJyYXkodG0ubWVtb3J5LmJ1ZmZlcik7XG5cbiAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSh3YXNtLmNvZGUpO1xuXG4gICAgdG0uaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtTW9kdWxlLCB7XG4gICAgICAgIGVudjoge1xuICAgICAgICAgICAgXCJtZW1vcnlcIjogdG0ubWVtb3J5XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRtLnNpbmdsZVRocmVhZCA9IHNpbmdsZVRocmVhZDtcbiAgICB0bS5pbml0YWxQRnJlZSA9IHRtLnUzMlswXTsgICAvLyBTYXZlIHRoZSBQb2ludGVyIHRvIGZyZWUgc3BhY2UuXG4gICAgdG0ucHEgPSB3YXNtLnBxO1xuICAgIHRtLnByID0gd2FzbS5wcjtcbiAgICB0bS5wRzFnZW4gPSB3YXNtLnBHMWdlbjtcbiAgICB0bS5wRzF6ZXJvID0gd2FzbS5wRzF6ZXJvO1xuICAgIHRtLnBHMmdlbiA9IHdhc20ucEcyZ2VuO1xuICAgIHRtLnBHMnplcm8gPSB3YXNtLnBHMnplcm87XG4gICAgdG0ucE9uZVQgPSB3YXNtLnBPbmVUO1xuXG4gICAgLy8gICAgdG0ucFRtcDAgPSB0bS5hbGxvYyhjdXJ2ZS5HMi5GLm44KjMpO1xuICAgIC8vICAgIHRtLnBUbXAxID0gdG0uYWxsb2MoY3VydmUuRzIuRi5uOCozKTtcblxuXG4gICAgaWYgKHNpbmdsZVRocmVhZCkge1xuICAgICAgICB0bS5jb2RlID0gd2FzbS5jb2RlO1xuICAgICAgICB0bS50YXNrTWFuYWdlciA9IHRocmVhZCgpO1xuICAgICAgICBhd2FpdCB0bS50YXNrTWFuYWdlcihbe1xuICAgICAgICAgICAgY21kOiBcIklOSVRcIixcbiAgICAgICAgICAgIGluaXQ6IE1FTV9TSVpFLFxuICAgICAgICAgICAgY29kZTogdG0uY29kZS5zbGljZSgpXG4gICAgICAgIH1dKTtcbiAgICAgICAgdG0uY29uY3VycmVuY3kgID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0bS53b3JrZXJzID0gW107XG4gICAgICAgIHRtLnBlbmRpbmdEZWZlcnJlZHMgPSBbXTtcbiAgICAgICAgdG0ud29ya2luZyA9IFtdO1xuXG4gICAgICAgIGxldCBjb25jdXJyZW5jeTtcblxuICAgICAgICBpZiAoKHR5cGVvZihuYXZpZ2F0b3IpID09PSBcIm9iamVjdFwiKSAmJiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gb3MuY3B1cygpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbmN1cnJlbmN5ID09IDApe1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGltaXQgdG8gNjQgdGhyZWFkcyBmb3IgbWVtb3J5IHJlYXNvbnMuXG4gICAgICAgIGlmIChjb25jdXJyZW5jeT42NCkgY29uY3VycmVuY3k9NjQ7XG4gICAgICAgIHRtLmNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3k7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8Y29uY3VycmVuY3k7IGkrKykge1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldID0gbmV3IFdvcmtlcih3b3JrZXJTb3VyY2UpO1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGdldE9uTXNnKGkpKTtcblxuICAgICAgICAgICAgdG0ud29ya2luZ1tpXT1mYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dG0ud29ya2Vycy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5Q29kZSA9IHdhc20uY29kZS5zbGljZSgpO1xuICAgICAgICAgICAgaW5pdFByb21pc2VzLnB1c2godG0ucG9zdEFjdGlvbihpLCBbe1xuICAgICAgICAgICAgICAgIGNtZDogXCJJTklUXCIsXG4gICAgICAgICAgICAgICAgaW5pdDogTUVNX1NJWkUsXG4gICAgICAgICAgICAgICAgY29kZTogY29weUNvZGVcbiAgICAgICAgICAgIH1dLCBbY29weUNvZGUuYnVmZmVyXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoaW5pdFByb21pc2VzKTtcblxuICAgIH1cbiAgICByZXR1cm4gdG07XG5cbiAgICBmdW5jdGlvbiBnZXRPbk1zZyhpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICgoZSkmJihlLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGUuZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRtLndvcmtpbmdbaV09ZmFsc2U7XG4gICAgICAgICAgICB0bS5wZW5kaW5nRGVmZXJyZWRzW2ldLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB0bS5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbn1cblxuY2xhc3MgVGhyZWFkTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5vbGRQRnJlZSA9IDA7XG4gICAgfVxuXG4gICAgc3RhcnRTeW5jT3AoKSB7XG4gICAgICAgIGlmICh0aGlzLm9sZFBGcmVlICE9IDApIHRocm93IG5ldyBFcnJvcihcIlN5bmMgb3BlcmF0aW9uIGluIHByb2dyZXNzXCIpO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gdGhpcy51MzJbMF07XG4gICAgfVxuXG4gICAgZW5kU3luY09wKCkge1xuICAgICAgICBpZiAodGhpcy5vbGRQRnJlZSA9PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBzeW5jIG9wZXJhdGlvbiBpbiBwcm9ncmVzc1wiKTtcbiAgICAgICAgdGhpcy51MzJbMF0gPSB0aGlzLm9sZFBGcmVlO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gMDtcbiAgICB9XG5cbiAgICBwb3N0QWN0aW9uKHdvcmtlcklkLCBlLCB0cmFuc2ZlcnMsIF9kZWZlcnJlZCkge1xuICAgICAgICBpZiAodGhpcy53b3JraW5nW3dvcmtlcklkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdGluZyBhIGpvYiB0IGEgd29ya2luZyB3b3JrZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53b3JraW5nW3dvcmtlcklkXSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nRGVmZXJyZWRzW3dvcmtlcklkXSA9IF9kZWZlcnJlZCA/IF9kZWZlcnJlZCA6IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgICB0aGlzLndvcmtlcnNbd29ya2VySWRdLnBvc3RNZXNzYWdlKGUsIHRyYW5zZmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0RlZmVycmVkc1t3b3JrZXJJZF0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcm9jZXNzV29ya3MoKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgKGk8dGhpcy53b3JrZXJzLmxlbmd0aCkmJih0aGlzLmFjdGlvblF1ZXVlLmxlbmd0aCA+IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndvcmtpbmdbaV0gPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrID0gdGhpcy5hY3Rpb25RdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdEFjdGlvbihpLCB3b3JrLmRhdGEsIHdvcmsudHJhbnNmZXJzLCB3b3JrLmRlZmVycmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlQWN0aW9uKGFjdGlvbkRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICBjb25zdCBkID0gbmV3IERlZmVycmVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRhc2tNYW5hZ2VyKGFjdGlvbkRhdGEpO1xuICAgICAgICAgICAgZC5yZXNvbHZlKHJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJzOiB0cmFuc2ZlcnMsXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQ6IGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZC5wcm9taXNlO1xuICAgIH1cblxuICAgIHJlc2V0TWVtb3J5KCkge1xuICAgICAgICB0aGlzLnUzMlswXSA9IHRoaXMuaW5pdGFsUEZyZWU7XG4gICAgfVxuXG4gICAgYWxsb2NCdWZmKGJ1ZmYpIHtcbiAgICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYWxsb2MoYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRCdWZmKHBvaW50ZXIsIGJ1ZmYpO1xuICAgICAgICByZXR1cm4gcG9pbnRlcjtcbiAgICB9XG5cbiAgICBnZXRCdWZmKHBvaW50ZXIsIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy51OC5zbGljZShwb2ludGVyLCBwb2ludGVyKyBsZW5ndGgpO1xuICAgIH1cblxuICAgIHNldEJ1ZmYocG9pbnRlciwgYnVmZmVyKSB7XG4gICAgICAgIHRoaXMudTguc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGFsbG9jKGxlbmd0aCkge1xuICAgICAgICB3aGlsZSAodGhpcy51MzJbMF0gJiAzKSB0aGlzLnUzMlswXSsrOyAgLy8gUmV0dXJuIGFsd2F5cyBhbGlnbmVkIHBvaW50ZXJzXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudTMyWzBdO1xuICAgICAgICB0aGlzLnUzMlswXSArPSBsZW5ndGg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgdGVybWluYXRlKCkge1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy53b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnNbaV0ucG9zdE1lc3NhZ2UoW3tjbWQ6IFwiVEVSTUlOQVRFXCJ9XSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQmF0Y2hBcHBseUtleShjdXJ2ZSwgZ3JvdXBOYW1lKSB7XG4gICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCB0bSA9IGN1cnZlLnRtO1xuXG4gICAgY3VydmVbZ3JvdXBOYW1lXS5iYXRjaEFwcGx5S2V5ID0gYXN5bmMgZnVuY3Rpb24oYnVmZiwgZmlyc3QsIGluYywgaW5UeXBlLCBvdXRUeXBlKSB7XG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBvdXRUeXBlID0gb3V0VHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBsZXQgZm5OYW1lLCBmbkFmZmluZTtcbiAgICAgICAgbGV0IHNHaW4sIHNHbWlkLCBzR291dDtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJqYWNvYmlhblwiKSB7XG4gICAgICAgICAgICAgICAgc0dpbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2JhdGNoQXBwbHlLZXlcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc0dpbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2JhdGNoQXBwbHlLZXlNaXhlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc0dtaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGlmIChvdXRUeXBlID09IFwiamFjb2JpYW5cIikge1xuICAgICAgICAgICAgICAgIHNHb3V0ID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZuQWZmaW5lID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgICAgIHNHb3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImphY29iaWFuXCIpIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjM7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fYmF0Y2hBcHBseUtleVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fYmF0Y2hBcHBseUtleU1peGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzR21pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJqYWNvYmlhblwiKSB7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm5BZmZpbmUgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImZybV9iYXRjaEFwcGx5S2V5XCI7XG4gICAgICAgICAgICBzR2luID0gRy5uODtcbiAgICAgICAgICAgIHNHbWlkID0gRy5uODtcbiAgICAgICAgICAgIHNHb3V0ID0gRy5uODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXA6IFwiICsgZ3JvdXBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmLmJ5dGVMZW5ndGggLyBzR2luKTtcbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKG5Qb2ludHMvdG0uY29uY3VycmVuY3kpO1xuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgIGluYyA9IEZyLmUoaW5jKTtcbiAgICAgICAgbGV0IHQgPSBGci5lKGZpcnN0KTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJBTExPQ1NFVFwiLFxuICAgICAgICAgICAgICAgIHZhcjogMCxcbiAgICAgICAgICAgICAgICBidWZmOiBidWZmLnNsaWNlKGkqcG9pbnRzUGVyQ2h1bmsqc0dpbiwgaSpwb2ludHNQZXJDaHVuaypzR2luICsgbipzR2luKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IHR9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogaW5jfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDMsIGxlbjogbipNYXRoLm1heChzR21pZCwgc0dvdXQpfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJDQUxMXCIsXG4gICAgICAgICAgICAgICAgZm5OYW1lOiBmbk5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOjN9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZm5BZmZpbmUpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjbWQ6IFwiQ0FMTFwiLFxuICAgICAgICAgICAgICAgICAgICBmbk5hbWU6IGZuQWZmaW5lLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAzLCBsZW46IG4qc0dvdXR9KTtcblxuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spKTtcbiAgICAgICAgICAgIHQgPSBGci5tdWwodCwgRnIuZXhwKGluYywgbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IG91dEJ1ZmY7XG4gICAgICAgIGlmIChidWZmIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBvdXRCdWZmID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dEJ1ZmYgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG91dEJ1ZmYuc2V0KHJlc3VsdFtpXVswXSwgcCk7XG4gICAgICAgICAgICBwICs9IHJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dEJ1ZmY7XG4gICAgfTtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRQYWlyaW5nKGN1cnZlKSB7XG4gICAgY29uc3QgdG0gPSBjdXJ2ZS50bTtcbiAgICBjdXJ2ZS5wYWlyaW5nID0gZnVuY3Rpb24gcGFpcmluZyhhLCBiKSB7XG5cbiAgICAgICAgdG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcEEgPSB0bS5hbGxvY0J1ZmYoY3VydmUuRzEudG9KYWNvYmlhbihhKSk7XG4gICAgICAgIGNvbnN0IHBCID0gdG0uYWxsb2NCdWZmKGN1cnZlLkcyLnRvSmFjb2JpYW4oYikpO1xuICAgICAgICBjb25zdCBwUmVzID0gdG0uYWxsb2MoY3VydmUuR3QubjgpO1xuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzW2N1cnZlLm5hbWUgKyBcIl9wYWlyaW5nXCJdKHBBLCBwQiwgcFJlcyk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gdG0uZ2V0QnVmZihwUmVzLCBjdXJ2ZS5HdC5uOCk7XG5cbiAgICAgICAgdG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIGN1cnZlLnBhaXJpbmdFcSA9IGFzeW5jIGZ1bmN0aW9uIHBhaXJpbmdFcSgpIHtcbiAgICAgICAgbGV0ICBidWZmQ3Q7XG4gICAgICAgIGxldCBuRXFzO1xuICAgICAgICBpZiAoKGFyZ3VtZW50cy5sZW5ndGggJSAyKSA9PSAxKSB7XG4gICAgICAgICAgICBidWZmQ3QgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcbiAgICAgICAgICAgIG5FcXMgPSAoYXJndW1lbnRzLmxlbmd0aCAtMSkgLzI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmQ3QgPSBjdXJ2ZS5HdC5vbmU7XG4gICAgICAgICAgICBuRXFzID0gYXJndW1lbnRzLmxlbmd0aCAvMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5FcXM7IGkrKykge1xuXG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGcxQnVmZiA9IGN1cnZlLkcxLnRvSmFjb2JpYW4oYXJndW1lbnRzW2kqMl0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBnMUJ1ZmZ9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOiBjdXJ2ZS5wcmVQU2l6ZX0pO1xuXG4gICAgICAgICAgICBjb25zdCBnMkJ1ZmYgPSBjdXJ2ZS5HMi50b0phY29iaWFuKGFyZ3VtZW50c1tpKjIgKzFdKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZzJCdWZmfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDMsIGxlbjogY3VydmUucHJlUVNpemV9KTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiA0LCBsZW46IGN1cnZlLkd0Lm44fSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfcHJlcGFyZUcxXCIsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9XG4gICAgICAgICAgICBdfSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfcHJlcGFyZUcyXCIsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICBdfSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBjdXJ2ZS5uYW1lICsgXCJfbWlsbGVyTG9vcFwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAzfSxcbiAgICAgICAgICAgICAgICB7dmFyOiA0fVxuICAgICAgICAgICAgXX0pO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDQsIGxlbjogY3VydmUuR3Qubjh9KTtcblxuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICB0bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwUmVzID0gdG0uYWxsb2MoY3VydmUuR3QubjgpO1xuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzLmZ0bV9vbmUocFJlcyk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcE1SID0gdG0uYWxsb2NCdWZmKHJlc3VsdFtpXVswXSk7XG4gICAgICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzLmZ0bV9tdWwocFJlcywgcE1SLCBwUmVzKTtcbiAgICAgICAgfVxuICAgICAgICB0bS5pbnN0YW5jZS5leHBvcnRzW2N1cnZlLm5hbWUgKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCJdKHBSZXMsIHBSZXMpO1xuXG4gICAgICAgIGNvbnN0IHBDdCA9IHRtLmFsbG9jQnVmZihidWZmQ3QpO1xuXG4gICAgICAgIGNvbnN0IHIgPSAhIXRtLmluc3RhbmNlLmV4cG9ydHMuZnRtX2VxKHBSZXMsIHBDdCk7XG5cbiAgICAgICAgdG0uZW5kU3luY09wKCk7XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIGN1cnZlLnByZXBhcmVHMSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy50bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwUCA9IHRoaXMudG0uYWxsb2NCdWZmKHApO1xuICAgICAgICBjb25zdCBwUHJlcFAgPSB0aGlzLnRtLmFsbG9jKHRoaXMucHJlUFNpemUpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5uYW1lICsgXCJfcHJlcGFyZUcxXCJdKHBQLCBwUHJlcFApO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYocFByZXBQLCB0aGlzLnByZVBTaXplKTtcbiAgICAgICAgdGhpcy50bS5lbmRTeW5jT3AoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgY3VydmUucHJlcGFyZUcyID0gZnVuY3Rpb24ocSkge1xuICAgICAgICB0aGlzLnRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBRID0gdGhpcy50bS5hbGxvY0J1ZmYocSk7XG4gICAgICAgIGNvbnN0IHBQcmVwUSA9IHRoaXMudG0uYWxsb2ModGhpcy5wcmVRU2l6ZSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9wcmVwYXJlRzJcIl0ocFEsIHBQcmVwUSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZihwUHJlcFEsIHRoaXMucHJlUVNpemUpO1xuICAgICAgICB0aGlzLnRtLmVuZFN5bmNPcCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbiAgICBjdXJ2ZS5taWxsZXJMb29wID0gZnVuY3Rpb24ocHJlUCwgcHJlUSkge1xuICAgICAgICB0aGlzLnRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBQcmVQID0gdGhpcy50bS5hbGxvY0J1ZmYocHJlUCk7XG4gICAgICAgIGNvbnN0IHBQcmVRID0gdGhpcy50bS5hbGxvY0J1ZmYocHJlUSk7XG4gICAgICAgIGNvbnN0IHBSZXMgPSB0aGlzLnRtLmFsbG9jKHRoaXMuR3QubjgpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5uYW1lICsgXCJfbWlsbGVyTG9vcFwiXShwUHJlUCwgcFByZVEsIHBSZXMpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYocFJlcywgdGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIGN1cnZlLmZpbmFsRXhwb25lbnRpYXRpb24gPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHRoaXMudG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcEEgPSB0aGlzLnRtLmFsbG9jQnVmZihhKTtcbiAgICAgICAgY29uc3QgcFJlcyA9IHRoaXMudG0uYWxsb2ModGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCJdKHBBLCBwUmVzKTtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50bS5nZXRCdWZmKHBSZXMsIHRoaXMuR3QubjgpO1xuICAgICAgICB0aGlzLnRtLmVuZFN5bmNPcCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbn1cbiIsImltcG9ydCB7IGxvZzIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5jb25zdCBwVFNpemVzID0gW1xuICAgIDEgLCAgMSwgIDEsICAxLCAgICAyLCAgMywgIDQsICA1LFxuICAgIDYgLCAgNywgIDcsICA4LCAgICA5LCAxMCwgMTEsIDEyLFxuICAgIDEzLCAxMywgMTQsIDE1LCAgIDE2LCAxNiwgMTcsIDE3LFxuICAgIDE3LCAxNywgMTcsIDE3LCAgIDE3LCAxNywgMTcsIDE3XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE11bHRpZXhwKGN1cnZlLCBncm91cE5hbWUpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCB0bSA9IEcudG07XG4gICAgYXN5bmMgZnVuY3Rpb24gX211bHRpRXhwQ2h1bmsoYnVmZkJhc2VzLCBidWZmU2NhbGFycywgaW5UeXBlLCBsb2dnZXIsIGxvZ1RleHQpIHtcbiAgICAgICAgaWYgKCAhIChidWZmQmFzZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSApIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmQmFzZXMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmQmFzZXMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoICEgKGJ1ZmZTY2FsYXJzIGluc3RhbmNlb2YgVWludDhBcnJheSkgKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoYCR7bG9nVGV4dH0gX211bHRpRXhwQ2h1bmsgYnVmZlNjYWxhcnMgaXMgbm90IFVpbnQ4QXJyYXlgKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmU2NhbGFycyBpcyBub3QgVWludDhBcnJheWApO1xuICAgICAgICB9XG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuXG4gICAgICAgIGxldCBzR0luO1xuICAgICAgICBsZXQgZm5OYW1lO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fbXVsdGlleHBBZmZpbmVfY2h1bmtcIjtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX211bHRpZXhwX2NodW5rXCI7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX211bHRpZXhwQWZmaW5lX2NodW5rXCI7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbk5hbWUgPSBcImcybV9tdWx0aWV4cF9jaHVua1wiO1xuICAgICAgICAgICAgICAgIHNHSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZkJhc2VzLmJ5dGVMZW5ndGggLyBzR0luKTtcblxuICAgICAgICBpZiAoblBvaW50cyA9PSAwKSByZXR1cm4gRy56ZXJvO1xuICAgICAgICBjb25zdCBzU2NhbGFyID0gTWF0aC5mbG9vcihidWZmU2NhbGFycy5ieXRlTGVuZ3RoIC8gblBvaW50cyk7XG4gICAgICAgIGlmKCBzU2NhbGFyICogblBvaW50cyAhPSBidWZmU2NhbGFycy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY2FsYXIgc2l6ZSBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpdENodW5rU2l6ZSA9IHBUU2l6ZXNbbG9nMihuUG9pbnRzKV07XG4gICAgICAgIGNvbnN0IG5DaHVua3MgPSBNYXRoLmZsb29yKChzU2NhbGFyKjggLSAxKSAvIGJpdENodW5rU2l6ZSkgKzE7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW1xuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBidWZmQmFzZXN9LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBidWZmU2NhbGFyc30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1wiLCB2YXI6IDIsIGxlbjogRy5GLm44KjN9LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogc1NjYWxhcn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG5Qb2ludHN9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBpKmJpdENodW5rU2l6ZX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IE1hdGgubWluKHNTY2FsYXIqOCAtIGkqYml0Q2h1bmtTaXplLCBiaXRDaHVua1NpemUpfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMn1cbiAgICAgICAgICAgICAgICBdfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMiwgbGVuOiBHLkYubjgqM31cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgRy50bS5xdWV1ZUFjdGlvbih0YXNrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCByZXMgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9cmVzdWx0Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICghRy5pc1plcm8ocmVzKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxiaXRDaHVua1NpemU7IGorKykgcmVzID0gRy5kb3VibGUocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IEcuYWRkKHJlcywgcmVzdWx0W2ldWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gX211bHRpRXhwKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIGluVHlwZSwgbG9nZ2VyLCBsb2dUZXh0KSB7XG4gICAgICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMSA8PCAyMjtcbiAgICAgICAgY29uc3QgTUlOX0NIVU5LX1NJWkUgPSAxIDw8IDEwO1xuICAgICAgICBsZXQgc0dJbjtcblxuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZkJhc2VzLmJ5dGVMZW5ndGggLyBzR0luKTtcbiAgICAgICAgY29uc3Qgc1NjYWxhciA9IE1hdGguZmxvb3IoYnVmZlNjYWxhcnMuYnl0ZUxlbmd0aCAvIG5Qb2ludHMpO1xuICAgICAgICBpZiggc1NjYWxhciAqIG5Qb2ludHMgIT0gYnVmZlNjYWxhcnMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NhbGFyIHNpemUgZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiaXRDaHVua1NpemUgPSBwVFNpemVzW2xvZzIoblBvaW50cyldO1xuICAgICAgICBjb25zdCBuQ2h1bmtzID0gTWF0aC5mbG9vcigoc1NjYWxhcio4IC0gMSkgLyBiaXRDaHVua1NpemUpICsxO1xuXG4gICAgICAgIGxldCBjaHVua1NpemU7XG4gICAgICAgIGNodW5rU2l6ZSA9IE1hdGguZmxvb3IoblBvaW50cyAvICh0bS5jb25jdXJyZW5jeSAvbkNodW5rcykpO1xuICAgICAgICBpZiAoY2h1bmtTaXplPk1BWF9DSFVOS19TSVpFKSBjaHVua1NpemUgPSBNQVhfQ0hVTktfU0laRTtcbiAgICAgICAgaWYgKGNodW5rU2l6ZTxNSU5fQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUlOX0NIVU5LX1NJWkU7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSArPSBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgTXVsdGlleHAgc3RhcnQ6ICR7bG9nVGV4dH06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oblBvaW50cyAtIGksIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICBjb25zdCBidWZmQmFzZXNDaHVuayA9IGJ1ZmZCYXNlcy5zbGljZShpKnNHSW4sIChpK24pKnNHSW4pO1xuICAgICAgICAgICAgY29uc3QgYnVmZlNjYWxhcnNDaHVuayA9IGJ1ZmZTY2FsYXJzLnNsaWNlKGkqc1NjYWxhciwgKGkrbikqc1NjYWxhcik7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goX211bHRpRXhwQ2h1bmsoYnVmZkJhc2VzQ2h1bmssIGJ1ZmZTY2FsYXJzQ2h1bmssIGluVHlwZSwgbG9nZ2VyLCBsb2dUZXh0KS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgTXVsdGlleHAgZW5kOiAke2xvZ1RleHR9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCByZXMgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9cmVzdWx0Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIHJlcyA9IEcuYWRkKHJlcywgcmVzdWx0W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgRy5tdWx0aUV4cCA9IGFzeW5jIGZ1bmN0aW9uIG11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIGxvZ2dlciwgbG9nVGV4dCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgX211bHRpRXhwKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIFwiamFjb2JpYW5cIiwgbG9nZ2VyLCBsb2dUZXh0KTtcbiAgICB9O1xuICAgIEcubXVsdGlFeHBBZmZpbmUgPSBhc3luYyBmdW5jdGlvbiBtdWx0aUV4cEFmZmluZShidWZmQmFzZXMsIGJ1ZmZTY2FsYXJzLCBsb2dnZXIsIGxvZ1RleHQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IF9tdWx0aUV4cChidWZmQmFzZXMsIGJ1ZmZTY2FsYXJzLCBcImFmZmluZVwiLCBsb2dnZXIsIGxvZ1RleHQpO1xuICAgIH07XG59XG4iLCJpbXBvcnQge2xvZzIsIGJ1ZmZSZXZlcnNlQml0cywgYXJyYXkyYnVmZmVyLCBidWZmZXIyYXJyYXl9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgQmlnQnVmZmVyIGZyb20gXCIuL2JpZ2J1ZmZlci5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRkZUKGN1cnZlLCBncm91cE5hbWUpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IHRtID0gRy50bTtcbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0KGJ1ZmYsIGludmVyc2UsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcblxuICAgICAgICBpblR5cGUgPSBpblR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgb3V0VHlwZSA9IG91dFR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgY29uc3QgTUFYX0JJVFNfVEhSRUFEID0gMTQ7XG5cbiAgICAgICAgbGV0IHNJbiwgc01pZCwgc091dCwgZm5JbjJNaWQsIGZuTWlkMk91dCwgZm5GRlRNaXgsIGZuRkZUSm9pbiwgZm5GRlRGaW5hbDtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuSW4yTWlkID0gXCJnMW1fYmF0Y2hUb0phY29iaWFuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgICAgICBmbkZGVEZpbmFsID0gXCJnMW1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuRkZUSm9pbiA9IFwiZzFtX2ZmdEpvaW5cIjtcbiAgICAgICAgICAgIGZuRkZUTWl4ID0gXCJnMW1fZmZ0TWl4XCI7XG5cbiAgICAgICAgICAgIGlmIChvdXRUeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5NaWQyT3V0ID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzJtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNNaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgZm5GRlRGaW5hbCA9IFwiZzJtX2ZmdEZpbmFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImcybV9mZnRKb2luXCI7XG4gICAgICAgICAgICBmbkZGVE1peCA9IFwiZzJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbk1pZDJPdXQgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBHLm44O1xuICAgICAgICAgICAgc01pZCA9IEcubjg7XG4gICAgICAgICAgICBzT3V0ID0gRy5uODtcbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgZm5GRlRGaW5hbCA9IFwiZnJtX2ZmdEZpbmFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbkZGVE1peCA9IFwiZnJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmV0dXJuQXJyYXkgPSBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZikpIHtcbiAgICAgICAgICAgIGJ1ZmYgPSBhcnJheTJidWZmZXIoYnVmZiwgc0luKTtcbiAgICAgICAgICAgIHJldHVybkFycmF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmYgPSBidWZmLnNsaWNlKDAsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZi5ieXRlTGVuZ3RoIC8gc0luO1xuICAgICAgICBjb25zdCBiaXRzID0gbG9nMihuUG9pbnRzKTtcblxuICAgICAgICBpZiAgKCgxIDw8IGJpdHMpICE9IG5Qb2ludHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZmdCBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIiApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpdHMgPT0gRnIucyArMSkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZPdXQ7XG5cbiAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgYnVmZk91dCA9ICBhd2FpdCBfZmZ0RXh0SW52KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0ID0gIGF3YWl0IF9mZnRFeHQoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXR1cm5BcnJheSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIyYXJyYXkoYnVmZk91dCwgc091dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGludjtcbiAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgIGludiA9IEZyLmludihGci5lKG5Qb2ludHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWZmT3V0O1xuXG4gICAgICAgIGJ1ZmZSZXZlcnNlQml0cyhidWZmLCBzSW4pO1xuXG4gICAgICAgIGxldCBjaHVua3M7XG4gICAgICAgIGxldCBwb2ludHNJbkNodW5rID0gTWF0aC5taW4oMSA8PCBNQVhfQklUU19USFJFQUQsIG5Qb2ludHMpO1xuICAgICAgICBsZXQgbkNodW5rcyA9IG5Qb2ludHMgLyBwb2ludHNJbkNodW5rO1xuXG4gICAgICAgIHdoaWxlICgobkNodW5rcyA8IHRtLmNvbmN1cnJlbmN5KSYmKHBvaW50c0luQ2h1bms+PTE2KSkge1xuICAgICAgICAgICAgbkNodW5rcyAqPSAyO1xuICAgICAgICAgICAgcG9pbnRzSW5DaHVuayAvPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbDJDaHVuayA9IGxvZzIocG9pbnRzSW5DaHVuayk7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8IG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdCAke2JpdHN9IG1peCBzdGFydDogJHtpfS8ke25DaHVua3N9YCk7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDAsIGxlbjogc01pZCpwb2ludHNJbkNodW5rfSk7XG4gICAgICAgICAgICBjb25zdCBidWZmQ2h1bmsgPSBidWZmLnNsaWNlKCAocG9pbnRzSW5DaHVuayAqIGkpKnNJbiwgKHBvaW50c0luQ2h1bmsgKiAoaSsxKSkqc0luKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIlNFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ1ZmZDaHVua30pO1xuICAgICAgICAgICAgaWYgKGZuSW4yTWlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5JbjJNaWQsIHBhcmFtczogW3t2YXI6MH0sIHt2YWw6IHBvaW50c0luQ2h1bmt9LCB7dmFyOiAwfV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGo9MTsgajw9bDJDaHVuaztqKyspIHtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTpmbkZGVE1peCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YWw6IGp9XX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobDJDaHVuaz09Yml0cykge1xuICAgICAgICAgICAgICAgIGlmIChmbkZGVEZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogaW52fSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbkZGVEZpbmFsLCAgcGFyYW1zOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzSW5DaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZm5NaWQyT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzSW5DaHVuaypzT3V0fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6MCwgdmFyOiAwLCBsZW46IHNNaWQqcG9pbnRzSW5DaHVua30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bS5xdWV1ZUFjdGlvbih0YXNrKS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgJHtsb2dnZXJUeHR9OiBmZnQgJHtiaXRzfSBtaXggZW5kOiAke2l9LyR7bkNodW5rc31gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8IG5DaHVua3M7IGkrKykgY2h1bmtzW2ldID0gY2h1bmtzW2ldWzBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBsMkNodW5rKzE7ICAgaTw9Yml0czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYCR7bG9nZ2VyVHh0fTogZmZ0ICAke2JpdHN9ICBqb2luOiAke2l9LyR7Yml0c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG5Hcm91cHMgPSAxIDw8IChiaXRzIC0gaSk7XG4gICAgICAgICAgICBjb25zdCBuQ2h1bmtzUGVyR3JvdXAgPSBuQ2h1bmtzIC8gbkdyb3VwcztcbiAgICAgICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxuR3JvdXBzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrPTA7IGsgPG5DaHVua3NQZXJHcm91cC8yOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBGci5leHAoIEZyLndbaV0sIGsqcG9pbnRzSW5DaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluYyA9IEZyLndbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8xID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMiA9IGoqbkNodW5rc1Blckdyb3VwICsgayArIG5DaHVua3NQZXJHcm91cC8yO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBjaHVua3NbbzFdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogY2h1bmtzW28yXX0pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDIsIGJ1ZmY6IGZpcnN0fSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMywgYnVmZjogaW5jfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbkZGVEpvaW4sICBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IHBvaW50c0luQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpPT1iaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5GRlRGaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogNCwgYnVmZjogaW52fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZURmluYWwsICBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzSW5DaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5GRlRGaW5hbCwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNJbkNodW5rfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogNH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuTWlkMk91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjoxfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDF9XX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c0luQ2h1bmsqc091dH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IHBvaW50c0luQ2h1bmsqc091dH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c0luQ2h1bmsqc01pZH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IHBvaW50c0luQ2h1bmsqc01pZH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaCh0bS5xdWV1ZUFjdGlvbih0YXNrKS50aGVuKCAocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdCAke2JpdHN9IGpvaW4gICR7aX0vJHtiaXRzfSAgJHtqKzF9LyR7bkdyb3Vwc30gJHtrfS8ke25DaHVua3NQZXJHcm91cC8yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5Hcm91cHM7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGs9MDsgayA8bkNodW5rc1Blckdyb3VwLzI7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMSA9IGoqbkNodW5rc1Blckdyb3VwICsgaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzIgPSBqKm5DaHVua3NQZXJHcm91cCArIGsgKyBuQ2h1bmtzUGVyR3JvdXAvMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQ2h1bmsgPSByZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW28xXSA9IHJlc0NodW5rWzBdO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzJdID0gcmVzQ2h1bmtbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmYgaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc091dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW52ZXJzZSkge1xuICAgICAgICAgICAgYnVmZk91dC5zZXQoY2h1bmtzWzBdLnNsaWNlKChwb2ludHNJbkNodW5rLTEpKnNPdXQpKTtcbiAgICAgICAgICAgIGxldCBwPSBzT3V0O1xuICAgICAgICAgICAgZm9yIChsZXQgaT1uQ2h1bmtzLTE7IGk+MDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgYnVmZk91dC5zZXQoY2h1bmtzW2ldLCBwKTtcbiAgICAgICAgICAgICAgICBwICs9IHBvaW50c0luQ2h1bmsqc091dDtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2h1bmtzW2ldOyAgLy8gTGliZXJhdGUgbWVtXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbMF0uc2xpY2UoMCwgKHBvaW50c0luQ2h1bmstMSkqc091dCksIHApO1xuICAgICAgICAgICAgZGVsZXRlIGNodW5rc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbaV0sIHBvaW50c0luQ2h1bmsqc091dCppKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2h1bmtzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHVybkFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyMmFycmF5KGJ1ZmZPdXQsIHNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZPdXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0RXh0KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgbGV0IGIxLCBiMjtcbiAgICAgICAgYjEgPSBidWZmLnNsaWNlKCAwICwgYnVmZi5ieXRlTGVuZ3RoLzIpO1xuICAgICAgICBiMiA9IGJ1ZmYuc2xpY2UoIGJ1ZmYuYnl0ZUxlbmd0aC8yLCBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgW2IxLCBiMl0gPSBhd2FpdCBfZmZ0Sm9pbkV4dChiMSwgYjIsIFwiZmZ0Sm9pbkV4dFwiLCBGci5vbmUsIEZyLnNoaWZ0LCBpblR5cGUsIFwiamFjb2JpYW5cIiwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuXG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjEsIGZhbHNlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjIsIGZhbHNlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG5cbiAgICAgICAgY29uc3QgcmVzMSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBsZXQgYnVmZk91dDtcbiAgICAgICAgaWYgKHJlczFbMF0uYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShyZXMxWzBdLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT3V0LnNldChyZXMxWzBdKTtcbiAgICAgICAgYnVmZk91dC5zZXQocmVzMVsxXSwgcmVzMVswXS5ieXRlTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gYnVmZk91dDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfZmZ0RXh0SW52KGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgbGV0IGIxLCBiMjtcbiAgICAgICAgYjEgPSBidWZmLnNsaWNlKCAwICwgYnVmZi5ieXRlTGVuZ3RoLzIpO1xuICAgICAgICBiMiA9IGJ1ZmYuc2xpY2UoIGJ1ZmYuYnl0ZUxlbmd0aC8yLCBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaCggX2ZmdChiMSwgdHJ1ZSwgaW5UeXBlLCBcImphY29iaWFuXCIsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQoYjIsIHRydWUsIGluVHlwZSwgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ2dlclR4dCkpO1xuXG4gICAgICAgIFtiMSwgYjJdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IHJlczEgPSBhd2FpdCBfZmZ0Sm9pbkV4dChiMSwgYjIsIFwiZmZ0Sm9pbkV4dEludlwiLCBGci5vbmUsIEZyLnNoaWZ0SW52LCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KTtcblxuICAgICAgICBsZXQgYnVmZk91dDtcbiAgICAgICAgaWYgKHJlczFbMF0uYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShyZXMxWzBdLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT3V0LnNldChyZXMxWzBdKTtcbiAgICAgICAgYnVmZk91dC5zZXQocmVzMVsxXSwgcmVzMVswXS5ieXRlTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gYnVmZk91dDtcbiAgICB9XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIF9mZnRKb2luRXh0KGJ1ZmYxLCBidWZmMiwgZm4sIGZpcnN0LCBpbmMsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgY29uc3QgTUFYX0NIVU5LX1NJWkUgPSAxPDwxNjtcbiAgICAgICAgY29uc3QgTUlOX0NIVU5LX1NJWkUgPSAxPDw0O1xuXG4gICAgICAgIGxldCBmbk5hbWU7XG4gICAgICAgIGxldCBmbkluMk1pZCwgZm5NaWQyT3V0O1xuICAgICAgICBsZXQgc091dCwgc0luLCBzTWlkO1xuXG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzFtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNNaWQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX1wiK2ZuO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTWlkMk91dCA9IFwiZzFtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbkluMk1pZCA9IFwiZzJtX2JhdGNoVG9KYWNvYmlhblwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX1wiK2ZuO1xuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIGZuTWlkMk91dCA9IFwiZzJtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgICAgICBzT3V0ID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBGci5uODtcbiAgICAgICAgICAgIHNPdXQgPSBGci5uODtcbiAgICAgICAgICAgIHNNaWQgPSBGci5uODtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZnJtX1wiICsgZm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmYxLmJ5dGVMZW5ndGggIT0gYnVmZjIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmMS5ieXRlTGVuZ3RoIC8gc0luKTtcbiAgICAgICAgaWYgKG5Qb2ludHMgIT0gMSA8PCBsb2cyKG5Qb2ludHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2h1bmtTaXplID0gTWF0aC5mbG9vcihuUG9pbnRzIC90bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGlmIChjaHVua1NpemUgPCBNSU5fQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUlOX0NIVU5LX1NJWkU7XG4gICAgICAgIGlmIChjaHVua1NpemUgPiBNQVhfQ0hVTktfU0laRSkgY2h1bmtTaXplID0gTUFYX0NIVU5LX1NJWkU7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdEpvaW5FeHQgU3RhcnQ6ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oblBvaW50cyAtIGksIGNodW5rU2l6ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2h1bmsgPSBGci5tdWwoZmlyc3QsIEZyLmV4cCggaW5jLCBpKSk7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGIxID0gYnVmZjEuc2xpY2UoaSpzSW4sIChpK24pKnNJbik7XG4gICAgICAgICAgICBjb25zdCBiMiA9IGJ1ZmYyLnNsaWNlKGkqc0luLCAoaStuKSpzSW4pO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDAsIGxlbjogc01pZCpufSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJTRVRcIiwgdmFyOiAwLCBidWZmOiBiMX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAxLCBsZW46IHNNaWQqbn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiU0VUXCIsIHZhcjogMSwgYnVmZjogYjJ9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZmlyc3RDaHVua30pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAzLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgIGlmIChmbkluMk1pZCkge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuSW4yTWlkLCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBufSwge3ZhcjogMH1dfSk7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5JbjJNaWQsIHBhcmFtczogW3t2YXI6MX0sIHt2YWw6IG59LCB7dmFyOiAxfV19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgIHt2YWw6IEZyLnN9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgaWYgKGZuTWlkMk91dCkge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogbn0sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuTWlkMk91dCwgcGFyYW1zOiBbe3ZhcjoxfSwge3ZhbDogbn0sIHt2YXI6IDF9XX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IG4qc091dH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IG4qc091dH0pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spLnRoZW4oIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgJHtsb2dnZXJUeHR9OiBmZnRKb2luRXh0IEVuZDogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MTtcbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MjtcbiAgICAgICAgaWYgKG5Qb2ludHMgKiBzT3V0ID4gMTw8MjgpIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MSA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MSA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc091dCk7XG4gICAgICAgICAgICBmdWxsQnVmZk91dDIgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MS5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0Mi5zZXQocmVzdWx0W2ldWzFdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtmdWxsQnVmZk91dDEsIGZ1bGxCdWZmT3V0Ml07XG4gICAgfVxuXG5cbiAgICBHLmZmdCA9IGFzeW5jIGZ1bmN0aW9uKGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IF9mZnQoYnVmZiwgZmFsc2UsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgIH07XG5cbiAgICBHLmlmZnQgPSBhc3luYyBmdW5jdGlvbihidWZmLCBpblR5cGUsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBfZmZ0KGJ1ZmYsIHRydWUsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuICAgIH07XG5cbiAgICBHLmxhZ3JhbmdlRXZhbHVhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICBpblR5cGUgPSBpblR5cGUgfHwgXCJhZmZpbmVcIjtcbiAgICAgICAgb3V0VHlwZSA9IG91dFR5cGUgfHwgXCJhZmZpbmVcIjtcblxuICAgICAgICBsZXQgc0luO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBzSW4gPSBGci5uODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZi5ieXRlTGVuZ3RoIC9zSW47XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKG5Qb2ludHMpO1xuXG4gICAgICAgIGlmICgoMiAqKiBiaXRzKSpzSW4gIT0gYnVmZi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGlpbnZhbGlkIGlucHV0IHNpemVcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGludmFsaWQgSW5wdXQgc2l6ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXRzIDw9IEZyLnMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBHLmlmZnQoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0cyA+IEZyLnMrMSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwibGFncmFuZ2VFdmFsdWF0aW9ucyBpbnB1dCB0b28gYmlnXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGFncmFuZ2VFdmFsdWF0aW9ucyBpbnB1dCB0b28gYmlnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHQwID0gYnVmZi5zbGljZSgwLCBidWZmLmJ5dGVMZW5ndGgvMik7XG4gICAgICAgIGxldCB0MSA9IGJ1ZmYuc2xpY2UoYnVmZi5ieXRlTGVuZ3RoLzIsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cblxuICAgICAgICBjb25zdCBzaGlmdFRvU21hbGxNID0gRnIuZXhwKEZyLnNoaWZ0LCBuUG9pbnRzLzIpO1xuICAgICAgICBjb25zdCBzQ29uc3QgPSBGci5pbnYoIEZyLnN1YihGci5vbmUsIHNoaWZ0VG9TbWFsbE0pKTtcblxuICAgICAgICBbdDAsIHQxXSA9IGF3YWl0IF9mZnRKb2luRXh0KHQwLCB0MSwgXCJwcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uXCIsIHNDb25zdCwgRnIuc2hpZnRJbnYsIGluVHlwZSwgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ2dlclR4dCArIFwiIHByZXBcIik7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBwcm9taXNlcy5wdXNoKCBfZmZ0KHQwLCB0cnVlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0ICsgXCIgdDBcIikpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKCBfZmZ0KHQxLCB0cnVlLCBcImphY29iaWFuXCIsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0ICsgXCIgdDFcIikpO1xuXG4gICAgICAgIFt0MCwgdDFdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBidWZmT3V0O1xuICAgICAgICBpZiAodDAuYnl0ZUxlbmd0aCA+ICgxPDwyOCkpIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKHQwLmJ5dGVMZW5ndGgqMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkodDAuYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPdXQuc2V0KHQwKTtcbiAgICAgICAgYnVmZk91dC5zZXQodDEsIHQwLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgIH07XG5cbiAgICBHLmZmdE1peCA9IGFzeW5jIGZ1bmN0aW9uIGZmdE1peChidWZmKSB7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjM7XG4gICAgICAgIGxldCBmbk5hbWUsIGZuRkZUSm9pbjtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJnMW1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJnMm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZnJtX2ZmdE1peFwiO1xuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHKTtcbiAgICAgICAgY29uc3QgcG93ZXIgPSBsb2cyKG5Qb2ludHMpO1xuXG4gICAgICAgIGxldCBuQ2h1bmtzID0gMSA8PCBsb2cyKHRtLmNvbmN1cnJlbmN5KTtcblxuICAgICAgICBpZiAoblBvaW50cyA8PSBuQ2h1bmtzKjIpIG5DaHVua3MgPSAxO1xuXG4gICAgICAgIGNvbnN0IHBvaW50c1BlckNodW5rID0gblBvaW50cyAvIG5DaHVua3M7XG5cbiAgICAgICAgY29uc3QgcG93ZXJDaHVuayA9IGxvZzIocG9pbnRzUGVyQ2h1bmspO1xuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYiA9IGJ1ZmYuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKChpKzEpKiBwb2ludHNQZXJDaHVuaykqc0cpO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBifSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTE7IGo8PXBvd2VyQ2h1bms7IGorKykge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBqfVxuICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIGNodW5rc1tpXSA9IHJlc3VsdFtpXVswXTtcblxuXG4gICAgICAgIGZvciAobGV0IGkgPSBwb3dlckNodW5rKzE7IGk8PXBvd2VyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5Hcm91cHMgPSAxIDw8IChwb3dlciAtIGkpO1xuICAgICAgICAgICAgY29uc3QgbkNodW5rc1Blckdyb3VwID0gbkNodW5rcyAvIG5Hcm91cHM7XG4gICAgICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkdyb3VwczsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrIDxuQ2h1bmtzUGVyR3JvdXAvMjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gRnIuZXhwKCBGci53W2ldLCBrKnBvaW50c1BlckNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5jID0gRnIud1tpXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzEgPSBqKm5DaHVua3NQZXJHcm91cCArIGs7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8yID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrICsgbkNodW5rc1Blckdyb3VwLzI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGNodW5rc1tvMV19KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBjaHVua3NbbzJdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZmlyc3R9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAzLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZUSm9pbiwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAzfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDEsIGxlbjogcG9pbnRzUGVyQ2h1bmsqc0d9KTtcbiAgICAgICAgICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5Hcm91cHM7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGs9MDsgayA8bkNodW5rc1Blckdyb3VwLzI7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMSA9IGoqbkNodW5rc1Blckdyb3VwICsgaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzIgPSBqKm5DaHVua3NQZXJHcm91cCArIGsgKyBuQ2h1bmtzUGVyR3JvdXAvMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQ2h1bmsgPSByZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW28xXSA9IHJlc0NodW5rWzBdO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzJdID0gcmVzQ2h1bmtbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQuc2V0KGNodW5rc1tpXSwgcCk7XG4gICAgICAgICAgICBwKz1jaHVua3NbaV0uYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdWxsQnVmZk91dDtcbiAgICB9O1xuXG4gICAgRy5mZnRKb2luID0gYXN5bmMgZnVuY3Rpb24gZmZ0Sm9pbihidWZmMSwgYnVmZjIsIGZpcnN0LCBpbmMpIHtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMztcbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzFtX2ZmdEpvaW5cIjtcbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImcybV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRnJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJmcm1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWZmMS5ieXRlTGVuZ3RoICE9IGJ1ZmYyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnVmZmVyIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZjEuYnl0ZUxlbmd0aCAvIHNHKTtcbiAgICAgICAgaWYgKG5Qb2ludHMgIT0gMSA8PCBsb2cyKG5Qb2ludHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbkNodW5rcyA9IDEgPDwgbG9nMih0bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGlmIChuUG9pbnRzIDw9IG5DaHVua3MqMikgbkNodW5rcyA9IDE7XG5cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBuUG9pbnRzIC8gbkNodW5rcztcblxuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdENodW5rID0gRnIubXVsKGZpcnN0LCBGci5leHAoaW5jLCBpKnBvaW50c1BlckNodW5rKSk7XG4gICAgICAgICAgICBjb25zdCBiMSA9IGJ1ZmYxLnNsaWNlKChpKiBwb2ludHNQZXJDaHVuaykqc0csICgoaSsxKSogcG9pbnRzUGVyQ2h1bmspKnNHKTtcbiAgICAgICAgICAgIGNvbnN0IGIyID0gYnVmZjIuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKChpKzEpKiBwb2ludHNQZXJDaHVuaykqc0cpO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBiMX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBiMn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBmaXJzdENodW5rfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDMsIGJ1ZmY6IGluY30pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzUGVyQ2h1bmt9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzUGVyQ2h1bmsqc0d9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDEsIHZhcjogMSwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBmdWxsQnVmZk91dDE7XG4gICAgICAgIGxldCBmdWxsQnVmZk91dDI7XG4gICAgICAgIGlmIChidWZmMSBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzRyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dDEgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0cpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MS5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0Mi5zZXQocmVzdWx0W2ldWzFdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtmdWxsQnVmZk91dDEsIGZ1bGxCdWZmT3V0Ml07XG4gICAgfTtcblxuXG5cbiAgICBHLmZmdEZpbmFsID0gIGFzeW5jIGZ1bmN0aW9uIGZmdEZpbmFsKGJ1ZmYsIGZhY3Rvcikge1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCozO1xuICAgICAgICBjb25zdCBzR291dCA9IEcuRi5uOCoyO1xuICAgICAgICBsZXQgZm5OYW1lLCBmblRvQWZmaW5lO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIGZuVG9BZmZpbmUgPSBcImcxbV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIGZuVG9BZmZpbmUgPSBcImcybV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZi5ieXRlTGVuZ3RoIC8gc0cpO1xuICAgICAgICBpZiAoblBvaW50cyAhPSAxIDw8IGxvZzIoblBvaW50cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvaW50c1BlckNodW5rID0gTWF0aC5mbG9vcihuUG9pbnRzIC8gdG0uY29uY3VycmVuY3kpO1xuXG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRtLmNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IHRtLmNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBuUG9pbnRzIC0gaSpwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuPT0wKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBidWZmLnNsaWNlKChpKiBwb2ludHNQZXJDaHVuaykqc0csIChpKnBvaW50c1BlckNodW5rK24pKnNHKTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMCwgYnVmZjogYn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBmYWN0b3J9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbk5hbWUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuVG9BZmZpbmUsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IG4qc0dvdXR9KTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0bS5xdWV1ZUFjdGlvbih0YXNrKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0dvdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNHb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPXJlc3VsdC5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgV2FzbUZpZWxkMSBmcm9tIFwiLi93YXNtX2ZpZWxkMS5qc1wiO1xuaW1wb3J0IFdhc21GaWVsZDIgZnJvbSBcIi4vd2FzbV9maWVsZDIuanNcIjtcbmltcG9ydCBXYXNtRmllbGQzIGZyb20gXCIuL3dhc21fZmllbGQzLmpzXCI7XG5pbXBvcnQgV2FzbUN1cnZlIGZyb20gXCIuL3dhc21fY3VydmUuanNcIjtcbmltcG9ydCBidWlsZFRocmVhZE1hbmFnZXIgZnJvbSBcIi4vdGhyZWFkbWFuLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgYnVpbGRCYXRjaEFwcGx5S2V5IGZyb20gXCIuL2VuZ2luZV9hcHBseWtleS5qc1wiO1xuaW1wb3J0IGJ1aWxkUGFpcmluZyBmcm9tIFwiLi9lbmdpbmVfcGFpcmluZy5qc1wiO1xuaW1wb3J0IGJ1aWxkTXVsdGlFeHAgZnJvbSBcIi4vZW5naW5lX211bHRpZXhwLmpzXCI7XG5pbXBvcnQgYnVpbGRGRlQgZnJvbSBcIi4vZW5naW5lX2ZmdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZEVuZ2luZShwYXJhbXMpIHtcblxuICAgIGNvbnN0IHRtID0gYXdhaXQgYnVpbGRUaHJlYWRNYW5hZ2VyKHBhcmFtcy53YXNtLCBwYXJhbXMuc2luZ2xlVGhyZWFkKTtcblxuXG4gICAgY29uc3QgY3VydmUgPSB7fTtcblxuICAgIGN1cnZlLnEgPSBTY2FsYXIuZShwYXJhbXMud2FzbS5xLnRvU3RyaW5nKCkpO1xuICAgIGN1cnZlLnIgPSBTY2FsYXIuZShwYXJhbXMud2FzbS5yLnRvU3RyaW5nKCkpO1xuICAgIGN1cnZlLm5hbWUgPSBwYXJhbXMubmFtZTtcbiAgICBjdXJ2ZS50bSA9IHRtO1xuICAgIGN1cnZlLnByZVBTaXplID0gcGFyYW1zLndhc20ucHJlUFNpemU7XG4gICAgY3VydmUucHJlUVNpemUgPSBwYXJhbXMud2FzbS5wcmVRU2l6ZTtcbiAgICBjdXJ2ZS5GciA9IG5ldyBXYXNtRmllbGQxKHRtLCBcImZybVwiLCBwYXJhbXMubjhyLCBwYXJhbXMucik7XG4gICAgY3VydmUuRjEgPSBuZXcgV2FzbUZpZWxkMSh0bSwgXCJmMW1cIiwgcGFyYW1zLm44cSwgcGFyYW1zLnEpO1xuICAgIGN1cnZlLkYyID0gbmV3IFdhc21GaWVsZDIodG0sIFwiZjJtXCIsIGN1cnZlLkYxKTtcbiAgICBjdXJ2ZS5HMSA9IG5ldyBXYXNtQ3VydmUodG0sIFwiZzFtXCIsIGN1cnZlLkYxLCBwYXJhbXMud2FzbS5wRzFnZW4sIHBhcmFtcy53YXNtLnBHMWIsIHBhcmFtcy5jb2ZhY3RvckcxKTtcbiAgICBjdXJ2ZS5HMiA9IG5ldyBXYXNtQ3VydmUodG0sIFwiZzJtXCIsIGN1cnZlLkYyLCBwYXJhbXMud2FzbS5wRzJnZW4sIHBhcmFtcy53YXNtLnBHMmIsIHBhcmFtcy5jb2ZhY3RvckcyKTtcbiAgICBjdXJ2ZS5GNiA9IG5ldyBXYXNtRmllbGQzKHRtLCBcImY2bVwiLCBjdXJ2ZS5GMik7XG4gICAgY3VydmUuRjEyID0gbmV3IFdhc21GaWVsZDIodG0sIFwiZnRtXCIsIGN1cnZlLkY2KTtcblxuICAgIGN1cnZlLkd0ID0gY3VydmUuRjEyO1xuXG4gICAgYnVpbGRCYXRjaEFwcGx5S2V5KGN1cnZlLCBcIkcxXCIpO1xuICAgIGJ1aWxkQmF0Y2hBcHBseUtleShjdXJ2ZSwgXCJHMlwiKTtcbiAgICBidWlsZEJhdGNoQXBwbHlLZXkoY3VydmUsIFwiRnJcIik7XG5cbiAgICBidWlsZE11bHRpRXhwKGN1cnZlLCBcIkcxXCIpO1xuICAgIGJ1aWxkTXVsdGlFeHAoY3VydmUsIFwiRzJcIik7XG5cbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJHMVwiKTtcbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJHMlwiKTtcbiAgICBidWlsZEZGVChjdXJ2ZSwgXCJGclwiKTtcblxuICAgIGJ1aWxkUGFpcmluZyhjdXJ2ZSk7XG5cbiAgICBjdXJ2ZS5hcnJheTJidWZmZXIgPSBmdW5jdGlvbihhcnIsIHNHKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRyphcnIubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBidWZmLnNldChhcnJbaV0sIGkqc0cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfTtcblxuICAgIGN1cnZlLmJ1ZmZlcjJhcnJheSA9IGZ1bmN0aW9uKGJ1ZmYgLCBzRykge1xuICAgICAgICBjb25zdCBuPSBidWZmLmJ5dGVMZW5ndGggLyBzRztcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjsgaSsrKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBidWZmLnNsaWNlKGkqc0csIGkqc0crc0cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcblxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbWJ1aWxkZXJcblxuICAgIHdhc21idWlsZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbWJ1aWxkZXIuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIobikge1xuICAgIHJldHVybiBCaWdJbnQobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lZ2F0aXZlKG4pIHtcbiAgICByZXR1cm4gbiA8IDBuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNaZXJvKG4pIHtcbiAgICByZXR1cm4gbiA9PT0gMG47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRMZW5ndGgobikge1xuICAgIGlmIChpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aCAtIDE7IC8vIGRpc2NhcmQgdGhlIC0gc2lnblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1MzIobikge1xuICAgIGNvbnN0IGIgPSBbXTtcbiAgICBjb25zdCB2ID0gdG9OdW1iZXIobik7XG4gICAgYi5wdXNoKE51bWJlcih2ICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gOG4gJiAweEZGbikpO1xuICAgIGIucHVzaChOdW1iZXIodiA+PiAxNm4gJiAweEZGbikpO1xuICAgIGIucHVzaChOdW1iZXIodiA+PiAyNG4gJiAweEZGbikpO1xuICAgIHJldHVybiBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdTY0KG4pIHtcbiAgICBjb25zdCBiID0gW107XG4gICAgY29uc3QgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGIucHVzaChOdW1iZXIodiAmIDB4RkZuKSk7XG4gICAgYi5wdXNoKE51bWJlcih2ID4+IDhuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMTZuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMjRuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gMzJuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNDBuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNDhuICYgMHhGRm4pKTtcbiAgICBiLnB1c2goTnVtYmVyKHYgPj4gNTZuICYgMHhGRm4pKTtcbiAgICByZXR1cm4gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVVRGOEFycmF5KHN0cikge1xuICAgIHZhciB1dGY4ID0gW107XG4gICAgZm9yICh2YXIgaT0wOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDgwKSB1dGY4LnB1c2goY2hhcmNvZGUpO1xuICAgICAgICBlbHNlIGlmIChjaGFyY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgICB1dGY4LnB1c2goMHhjMCB8IChjaGFyY29kZSA+PiA2KSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoYXJjb2RlIDwgMHhkODAwIHx8IGNoYXJjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgICAgdXRmOC5wdXNoKDB4ZTAgfCAoY2hhcmNvZGUgPj4gMTIpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlPj42KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAvLyBVVEYtMTYgZW5jb2RlcyAweDEwMDAwLTB4MTBGRkZGIGJ5XG4gICAgICAgICAgICAvLyBzdWJ0cmFjdGluZyAweDEwMDAwIGFuZCBzcGxpdHRpbmcgdGhlXG4gICAgICAgICAgICAvLyAyMCBiaXRzIG9mIDB4MC0weEZGRkZGIGludG8gdHdvIGhhbHZlc1xuICAgICAgICAgICAgY2hhcmNvZGUgPSAweDEwMDAwICsgKCgoY2hhcmNvZGUgJiAweDNmZik8PDEwKVxuICAgICAgICAgICAgICAgICAgICAgIHwgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGYwIHwgKGNoYXJjb2RlID4+MTgpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlPj4xMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZT4+NikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1dGY4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKHN0cikge1xuICAgIGNvbnN0IGJ5dGVzID0gdG9VVEY4QXJyYXkoc3RyKTtcbiAgICByZXR1cm4gWyAuLi52YXJ1aW50MzIoYnl0ZXMubGVuZ3RoKSwgLi4uYnl0ZXMgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcnVpbnQobikge1xuICAgIGNvbnN0IGNvZGUgPSBbXTtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmIChpc05lZ2F0aXZlKHYpKSB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgY2Fubm90IGJlIG5lZ2F0aXZlXCIpO1xuICAgIHdoaWxlICghaXNaZXJvKHYpKSB7XG4gICAgICAgIGNvZGUucHVzaChOdW1iZXIodiAmIDB4N0ZuKSk7XG4gICAgICAgIHYgPSB2ID4+IDduO1xuICAgIH1cbiAgICBpZiAoY29kZS5sZW5ndGg9PTApIGNvZGUucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8Y29kZS5sZW5ndGgtMTsgaSsrKSB7XG4gICAgICAgIGNvZGVbaV0gPSBjb2RlW2ldIHwgMHg4MDtcbiAgICB9XG4gICAgcmV0dXJuIGNvZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpbnQoX24pIHtcbiAgICBsZXQgbiwgc2lnbjtcbiAgICBjb25zdCBiaXRzID0gYml0TGVuZ3RoKF9uKTtcbiAgICBpZiAoX248MCkge1xuICAgICAgICBzaWduID0gdHJ1ZTtcbiAgICAgICAgbiA9ICgxbiA8PCBCaWdJbnQoYml0cykpICsgX247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbiA9IGZhbHNlO1xuICAgICAgICBuID0gdG9OdW1iZXIoX24pO1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nQml0cyA9IDcgLSAoYml0cyAlIDcpO1xuXG4gICAgY29uc3QgcGFkZGluZyA9ICgoMW4gPDwgQmlnSW50KHBhZGRpbmdCaXRzKSkgLSAxbikgPDwgQmlnSW50KGJpdHMpO1xuICAgIGNvbnN0IHBhZGRpbmdNYXNrID0gKCgxIDw8ICg3IC0gcGFkZGluZ0JpdHMpKS0xKSB8IDB4ODA7XG5cbiAgICBjb25zdCBjb2RlID0gdmFydWludChuICsgcGFkZGluZyk7XG5cbiAgICBpZiAoIXNpZ24pIHtcbiAgICAgICAgY29kZVtjb2RlLmxlbmd0aC0xXSA9IGNvZGVbY29kZS5sZW5ndGgtMV0gJiBwYWRkaW5nTWFzaztcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmludDMyKG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRm4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gYmlnXCIpO1xuICAgIGlmICh2ID4gMHg3RkZGRkZGRm4pIHYgPSB2IC0gMHgxMDAwMDAwMDBuO1xuICAgIC8vIGJpZ0ludChcIi04MDAwMDAwMFwiLCAxNikgYXMgYmFzZTEwXG4gICAgaWYgKHYgPCAtMjE0NzQ4MzY0OG4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gc21hbGxcIik7XG4gICAgcmV0dXJuIHZhcmludCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmludDY0KG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRkZGRkZGRkZGbikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBiaWdcIik7XG4gICAgaWYgKHYgPiAweDdGRkZGRkZGRkZGRkZGRkZuKSB2ID0gdiAtIDB4MTAwMDAwMDAwMDAwMDAwMDBuO1xuICAgIC8vIGJpZ0ludChcIi04MDAwMDAwMDAwMDAwMDAwXCIsIDE2KSBhcyBiYXNlMTBcbiAgICBpZiAodiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4bikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBzbWFsbFwiKTtcbiAgICByZXR1cm4gdmFyaW50KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFydWludDMyKG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRm4pIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gYmlnXCIpO1xuICAgIHJldHVybiB2YXJ1aW50KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFydWludDY0KG4pIHtcbiAgICBsZXQgdiA9IHRvTnVtYmVyKG4pO1xuICAgIGlmICh2ID4gMHhGRkZGRkZGRkZGRkZGRkZGbikgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHRvbyBiaWdcIik7XG4gICAgcmV0dXJuIHZhcnVpbnQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0hleFN0cmluZyhieXRlQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlQXJyYXksIGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgICAgcmV0dXJuIChcIjBcIiArIChieXRlICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGluZXNbaV0pIGxpbmVzW2ldID0gXCIgICAgXCIrbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0ZXh0Lmxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgdGV4dFtpXSA9IGlkZW50KHRleHRbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtYnVpbGRlclxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtYnVpbGRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtYnVpbGRlci4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoZnVuYykge1xuICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IGZ1bmMuZnVuY3Rpb25OYW1lO1xuICAgICAgICB0aGlzLm1vZHVsZSA9IGZ1bmMubW9kdWxlO1xuICAgIH1cblxuICAgIHNldExvY2FsKGxvY2FsTmFtZSwgdmFsQ29kZSkge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmMubG9jYWxJZHhCeU5hbWVbbG9jYWxOYW1lXTtcbiAgICAgICAgaWYgKGlkeCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBWYXJpYWJsZSBub3QgZGVmaW5lZDogRnVuY3Rpb246ICR7dGhpcy5mdW5jdGlvbk5hbWV9IGxvY2FsOiAke2xvY2FsTmFtZX0gYCk7XG4gICAgICAgIHJldHVybiBbLi4udmFsQ29kZSwgMHgyMSwgLi4udXRpbHMudmFydWludDMyKCBpZHggKV07XG4gICAgfVxuXG4gICAgdGVlTG9jYWwobG9jYWxOYW1lLCB2YWxDb2RlKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZnVuYy5sb2NhbElkeEJ5TmFtZVtsb2NhbE5hbWVdO1xuICAgICAgICBpZiAoaWR4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIFZhcmlhYmxlIG5vdCBkZWZpbmVkOiBGdW5jdGlvbjogJHt0aGlzLmZ1bmN0aW9uTmFtZX0gbG9jYWw6ICR7bG9jYWxOYW1lfSBgKTtcbiAgICAgICAgcmV0dXJuIFsuLi52YWxDb2RlLCAweDIyLCAuLi51dGlscy52YXJ1aW50MzIoIGlkeCApXTtcbiAgICB9XG5cbiAgICBnZXRMb2NhbChsb2NhbE5hbWUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5mdW5jLmxvY2FsSWR4QnlOYW1lW2xvY2FsTmFtZV07XG4gICAgICAgIGlmIChpZHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgVmFyaWFibGUgbm90IGRlZmluZWQ6IEZ1bmN0aW9uOiAke3RoaXMuZnVuY3Rpb25OYW1lfSBsb2NhbDogJHtsb2NhbE5hbWV9IGApO1xuICAgICAgICByZXR1cm4gWzB4MjAsIC4uLnV0aWxzLnZhcnVpbnQzMiggaWR4ICldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkOF9zKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDAgOiBfYWxpZ247ICAvLyA4IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDMwLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkOF91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDAgOiBfYWxpZ247ICAvLyA4IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDMxLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkMTZfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAxIDogX2FsaWduOyAgLy8gMTYgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MzIsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTY0X2xvYWQxNl91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiBfYWxpZ247ICAvLyAxNiBiaXRzIGFsaWdubWVudCBieSBkZWZhdWx0XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgMHgzMywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpNjRfbG9hZDMyX3MoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMiA6IF9hbGlnbjsgIC8vIDMyIGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDM0LCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGk2NF9sb2FkMzJfdShpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAyIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MzUsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTY0X2xvYWQoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMyA6IF9hbGlnbjsgIC8vIDY0IGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDI5LCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuXG4gICAgaTY0X3N0b3JlKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAzO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAzO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzNywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpNjRfc3RvcmUzMihpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24sIF9jb2RlVmFsKSB7XG4gICAgICAgIGxldCBvZmZzZXQsIGFsaWduLCBjb2RlVmFsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfb2Zmc2V0KSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGFsaWduID0gMjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX2FsaWduKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gMjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfYWxpZ247XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfY29kZVZhbCkpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IF9vZmZzZXQ7XG4gICAgICAgICAgICBhbGlnbiA9IF9hbGlnbjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfY29kZVZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIC4uLmNvZGVWYWwsIDB4M2UsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG5cbiAgICBpNjRfc3RvcmUxNihpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24sIF9jb2RlVmFsKSB7XG4gICAgICAgIGxldCBvZmZzZXQsIGFsaWduLCBjb2RlVmFsO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfb2Zmc2V0KSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGFsaWduID0gMTtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX2FsaWduKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gMTtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfYWxpZ247XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfY29kZVZhbCkpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IF9vZmZzZXQ7XG4gICAgICAgICAgICBhbGlnbiA9IF9hbGlnbjtcbiAgICAgICAgICAgIGNvZGVWYWwgPSBfY29kZVZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIC4uLmNvZGVWYWwsIDB4M2QsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG5cbiAgICBpNjRfc3RvcmU4KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYywgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfbG9hZDhfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAwIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MmMsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX2xvYWQ4X3UoaWR4Q29kZSwgX29mZnNldCwgX2FsaWduKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IF9vZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgYWxpZ24gPSAoX2FsaWduID09PSB1bmRlZmluZWQpID8gMCA6IF9hbGlnbjsgIC8vIDMyIGJpdHMgYWxpZ25tZW50IGJ5IGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIFsuLi5pZHhDb2RlLCAweDJkLCBhbGlnbiwgLi4udXRpbHMudmFydWludDMyKG9mZnNldCldO1xuICAgIH1cblxuICAgIGkzMl9sb2FkMTZfcyhpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAxIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MmUsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX2xvYWQxNl91KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbikge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBfb2Zmc2V0IHx8IDA7XG4gICAgICAgIGNvbnN0IGFsaWduID0gKF9hbGlnbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiBfYWxpZ247ICAvLyAzMiBiaXRzIGFsaWdubWVudCBieSBkZWZhdWx0XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgMHgyZiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfbG9hZChpZHhDb2RlLCBfb2Zmc2V0LCBfYWxpZ24pIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX29mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBhbGlnbiA9IChfYWxpZ24gPT09IHVuZGVmaW5lZCkgPyAyIDogX2FsaWduOyAgLy8gMzIgYml0cyBhbGlnbm1lbnQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gWy4uLmlkeENvZGUsIDB4MjgsIGFsaWduLCAuLi51dGlscy52YXJ1aW50MzIob2Zmc2V0KV07XG4gICAgfVxuXG4gICAgaTMyX3N0b3JlKGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAyO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAyO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzNiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cblxuICAgIGkzMl9zdG9yZTE2KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAxO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAxO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYiwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBpMzJfc3RvcmU4KGlkeENvZGUsIF9vZmZzZXQsIF9hbGlnbiwgX2NvZGVWYWwpIHtcbiAgICAgICAgbGV0IG9mZnNldCwgYWxpZ24sIGNvZGVWYWw7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9vZmZzZXQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9vZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfYWxpZ24pKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBfb2Zmc2V0O1xuICAgICAgICAgICAgYWxpZ24gPSAwO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9hbGlnbjtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9jb2RlVmFsKSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gX29mZnNldDtcbiAgICAgICAgICAgIGFsaWduID0gX2FsaWduO1xuICAgICAgICAgICAgY29kZVZhbCA9IF9jb2RlVmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uaWR4Q29kZSwgLi4uY29kZVZhbCwgMHgzYSwgYWxpZ24sIC4uLnV0aWxzLnZhcnVpbnQzMihvZmZzZXQpXTtcbiAgICB9XG5cbiAgICBjYWxsKGZuTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLm1vZHVsZS5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdO1xuICAgICAgICBpZiAoaWR4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIG5vdCBkZWZpbmVkOiBGdW5jdGlvbjogJHtmbk5hbWV9YCk7XG4gICAgICAgIHJldHVybiBbLi4uW10uY29uY2F0KC4uLmFyZ3MpLCAweDEwLCAuLi51dGlscy52YXJ1aW50MzIoaWR4KV07XG4gICAgfVxuXG4gICAgY2FsbF9pbmRpcmVjdChmbklkeCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gWy4uLltdLmNvbmNhdCguLi5hcmdzKSwgLi4uZm5JZHgsIDB4MTEsIDAsIDBdO1xuICAgIH1cblxuICAgIGlmKGNvbmRDb2RlLCB0aGVuQ29kZSwgZWxzZUNvZGUpIHtcbiAgICAgICAgaWYgKGVsc2VDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmNvbmRDb2RlLCAweDA0LCAweDQwLCAuLi50aGVuQ29kZSwgMHgwNSwgLi4uZWxzZUNvZGUsIDB4MGJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5jb25kQ29kZSwgMHgwNCwgMHg0MCwgLi4udGhlbkNvZGUsIDB4MGJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmxvY2soYkNvZGUpIHsgcmV0dXJuIFsweDAyLCAweDQwLCAuLi5iQ29kZSwgMHgwYl07IH1cbiAgICBsb29wKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIFsweDAzLCAweDQwLCAuLi5bXS5jb25jYXQoLi4uWy4uLmFyZ3NdKSwgMHgwYl07XG4gICAgfVxuICAgIGJyX2lmKHJlbFBhdGgsIGNvbmRDb2RlKSB7IHJldHVybiBbLi4uY29uZENvZGUsIDB4MGQsIC4uLnV0aWxzLnZhcnVpbnQzMihyZWxQYXRoKV07IH1cbiAgICBicihyZWxQYXRoKSB7IHJldHVybiBbMHgwYywgLi4udXRpbHMudmFydWludDMyKHJlbFBhdGgpXTsgfVxuICAgIHJldChyQ29kZSkgeyByZXR1cm4gWy4uLnJDb2RlLCAweDBmXTsgfVxuICAgIGRyb3AoZENvZGUpIHsgcmV0dXJuIFsuLi5kQ29kZSwgIDB4MWFdOyB9XG5cbiAgICBpNjRfY29uc3QobnVtKSB7IHJldHVybiBbMHg0MiwgLi4udXRpbHMudmFyaW50NjQobnVtKV07IH1cbiAgICBpMzJfY29uc3QobnVtKSB7IHJldHVybiBbMHg0MSwgLi4udXRpbHMudmFyaW50MzIobnVtKV07IH1cblxuXG4gICAgaTY0X2VxeihvcGNvZGUpIHsgcmV0dXJuIFsuLi5vcGNvZGUsIDB4NTBdOyB9XG4gICAgaTY0X2VxKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDUxXTsgfVxuICAgIGk2NF9uZShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1Ml07IH1cbiAgICBpNjRfbHRfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1M107IH1cbiAgICBpNjRfbHRfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1NF07IH1cbiAgICBpNjRfZ3RfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1NV07IH1cbiAgICBpNjRfZ3RfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1Nl07IH1cbiAgICBpNjRfbGVfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1N107IH1cbiAgICBpNjRfbGVfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1OF07IH1cbiAgICBpNjRfZ2VfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1OV07IH1cbiAgICBpNjRfZ2VfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg1YV07IH1cbiAgICBpNjRfYWRkKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDdjXTsgfVxuICAgIGk2NF9zdWIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4N2RdOyB9XG4gICAgaTY0X211bChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3ZV07IH1cbiAgICBpNjRfZGl2X3Mob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4N2ZdOyB9XG4gICAgaTY0X2Rpdl91KG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDgwXTsgfVxuICAgIGk2NF9yZW1fcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4MV07IH1cbiAgICBpNjRfcmVtX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODJdOyB9XG4gICAgaTY0X2FuZChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4M107IH1cbiAgICBpNjRfb3Iob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODRdOyB9XG4gICAgaTY0X3hvcihvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4NV07IH1cbiAgICBpNjRfc2hsKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDg2XTsgfVxuICAgIGk2NF9zaHJfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg4N107IH1cbiAgICBpNjRfc2hyX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4ODhdOyB9XG4gICAgaTY0X2V4dGVuZF9pMzJfcyhvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHhhY107IH1cbiAgICBpNjRfZXh0ZW5kX2kzMl91KG9wMWNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAweGFkXTsgfVxuICAgIGk2NF9jbHoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NzldOyB9XG4gICAgaTY0X2N0eihvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHg3YV07IH1cblxuICAgIGkzMl9lcXoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NDVdOyB9XG4gICAgaTMyX2VxKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDQ2XTsgfVxuICAgIGkzMl9uZShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0N107IH1cbiAgICBpMzJfbHRfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0OF07IH1cbiAgICBpMzJfbHRfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0OV07IH1cbiAgICBpMzJfZ3RfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0YV07IH1cbiAgICBpMzJfZ3RfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Yl07IH1cbiAgICBpMzJfbGVfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Y107IH1cbiAgICBpMzJfbGVfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0ZF07IH1cbiAgICBpMzJfZ2VfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0ZV07IH1cbiAgICBpMzJfZ2VfdShvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg0Zl07IH1cbiAgICBpMzJfYWRkKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDZhXTsgfVxuICAgIGkzMl9zdWIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NmJdOyB9XG4gICAgaTMyX211bChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg2Y107IH1cbiAgICBpMzJfZGl2X3Mob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NmRdOyB9XG4gICAgaTMyX2Rpdl91KG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDZlXTsgfVxuICAgIGkzMl9yZW1fcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg2Zl07IH1cbiAgICBpMzJfcmVtX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzBdOyB9XG4gICAgaTMyX2FuZChvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3MV07IH1cbiAgICBpMzJfb3Iob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzJdOyB9XG4gICAgaTMyX3hvcihvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3M107IH1cbiAgICBpMzJfc2hsKG9wMWNvZGUsIG9wMmNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAuLi5vcDJjb2RlLCAweDc0XTsgfVxuICAgIGkzMl9zaHJfcyhvcDFjb2RlLCBvcDJjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgLi4ub3AyY29kZSwgMHg3NV07IH1cbiAgICBpMzJfc2hyX3Uob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzZdOyB9XG4gICAgaTMyX3JvdGwob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzddOyB9XG4gICAgaTMyX3JvdHIob3AxY29kZSwgb3AyY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIC4uLm9wMmNvZGUsIDB4NzhdOyB9XG4gICAgaTMyX3dyYXBfaTY0KG9wMWNvZGUpIHsgcmV0dXJuIFsuLi5vcDFjb2RlLCAweGE3XTsgfVxuICAgIGkzMl9jbHoob3AxY29kZSkgeyByZXR1cm4gWy4uLm9wMWNvZGUsIDB4NjddOyB9XG4gICAgaTMyX2N0eihvcDFjb2RlKSB7IHJldHVybiBbLi4ub3AxY29kZSwgMHg2OF07IH1cblxuICAgIHVucmVhY2hhYmxlKCkgeyByZXR1cm4gWyAweDAgXTsgfVxuXG4gICAgY3VycmVudF9tZW1vcnkoKSB7IHJldHVybiBbIDB4M2YsIDBdOyB9XG5cbiAgICBjb21tZW50KCkgeyByZXR1cm4gW107IH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtYnVpbGRlclxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtYnVpbGRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtYnVpbGRlci4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7IENvZGVCdWlsZGVyIH0gZnJvbSBcIi4vY29kZWJ1aWxkZXIuanNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmNvbnN0IHR5cGVDb2RlcyA9IHtcbiAgICBcImkzMlwiOiAweDdmLFxuICAgIFwiaTY0XCI6IDB4N2UsXG4gICAgXCJmMzJcIjogMHg3ZCxcbiAgICBcImY2NFwiOiAweDdjLFxuICAgIFwiYW55ZnVuY1wiOiAweDcwLFxuICAgIFwiZnVuY1wiOiAweDYwLFxuICAgIFwiZW1wdHlibG9ja1wiOiAweDQwXG59O1xuXG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIge1xuXG4gICAgY29uc3RydWN0b3IgKG1vZHVsZSwgZm5OYW1lLCBmblR5cGUsIG1vZHVsZU5hbWUsIGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAoZm5UeXBlID09IFwiaW1wb3J0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm5UeXBlID0gXCJpbXBvcnRcIjtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTmFtZSA9IGZpZWxkTmFtZTtcbiAgICAgICAgfSBlbHNlIGlmIChmblR5cGUgPT0gXCJpbnRlcm5hbFwiKSB7XG4gICAgICAgICAgICB0aGlzLmZuVHlwZSA9IFwiaW50ZXJuYWxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZnVuY3Rpb24gZm5UeXBlOiBcIiArIGZuVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XG4gICAgICAgIHRoaXMuZm5OYW1lID0gZm5OYW1lO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLmxvY2FscyA9IFtdO1xuICAgICAgICB0aGlzLmxvY2FsSWR4QnlOYW1lID0ge307XG4gICAgICAgIHRoaXMuY29kZSA9IFtdO1xuICAgICAgICB0aGlzLnJldHVyblR5cGUgPSBudWxsO1xuICAgICAgICB0aGlzLm5leHRMb2NhbCA9MDtcbiAgICB9XG5cbiAgICBhZGRQYXJhbShwYXJhbU5hbWUsIHBhcmFtVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5sb2NhbElkeEJ5TmFtZVtwYXJhbU5hbWVdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJhbSBhbHJlYWR5IGV4aXN0cy4gRnVuY3Rpb246ICR7dGhpcy5mbk5hbWV9LCBQYXJhbTogJHtwYXJhbU5hbWV9IGApO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLm5leHRMb2NhbCsrO1xuICAgICAgICB0aGlzLmxvY2FsSWR4QnlOYW1lW3BhcmFtTmFtZV0gPSBpZHg7XG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogcGFyYW1UeXBlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZExvY2FsKGxvY2FsTmFtZSwgbG9jYWxUeXBlLCBfbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgMTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxJZHhCeU5hbWVbbG9jYWxOYW1lXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbG9jYWwgYWxyZWFkeSBleGlzdHMuIEZ1bmN0aW9uOiAke3RoaXMuZm5OYW1lfSwgUGFyYW06ICR7bG9jYWxOYW1lfSBgKTtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5uZXh0TG9jYWwrKztcbiAgICAgICAgdGhpcy5sb2NhbElkeEJ5TmFtZVtsb2NhbE5hbWVdID0gaWR4O1xuICAgICAgICB0aGlzLmxvY2Fscy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsVHlwZSxcbiAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFJldHVyblR5cGUocmV0dXJuVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXR1cm5UeXBlIGFscmVhZHkgZGVmaW5lZC4gRnVuY3Rpb246ICR7dGhpcy5mbk5hbWV9YCk7XG4gICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IHJldHVyblR5cGU7XG4gICAgfVxuXG4gICAgZ2V0U2lnbmF0dXJlKCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBbLi4udXRpbHMudmFydWludDMyKHRoaXMucGFyYW1zLmxlbmd0aCksIC4uLnRoaXMucGFyYW1zLm1hcCgocCkgPT4gdHlwZUNvZGVzW3AudHlwZV0pXTtcbiAgICAgICAgY29uc3QgcmV0dXJucyA9IHRoaXMucmV0dXJuVHlwZSA/IFsweDAxLCB0eXBlQ29kZXNbdGhpcy5yZXR1cm5UeXBlXV0gOiBbMF07XG4gICAgICAgIHJldHVybiBbMHg2MCwgLi4ucGFyYW1zLCAuLi5yZXR1cm5zXTtcbiAgICB9XG5cbiAgICBnZXRCb2R5KCkge1xuICAgICAgICBjb25zdCBsb2NhbHMgPSB0aGlzLmxvY2Fscy5tYXAoKGwpID0+IFtcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMihsLmxlbmd0aCksXG4gICAgICAgICAgICB0eXBlQ29kZXNbbC50eXBlXVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCBib2R5ID0gW1xuICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMubG9jYWxzLmxlbmd0aCksXG4gICAgICAgICAgICAuLi5bXS5jb25jYXQoLi4ubG9jYWxzKSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29kZSxcbiAgICAgICAgICAgIDB4MGJcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMihib2R5Lmxlbmd0aCksXG4gICAgICAgICAgICAuLi5ib2R5XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYWRkQ29kZSguLi5jb2RlKSB7XG4gICAgICAgIHRoaXMuY29kZS5wdXNoKC4uLltdLmNvbmNhdCguLi5bLi4uY29kZV0pKTtcbiAgICB9XG5cbiAgICBnZXRDb2RlQnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRlcih0aGlzKTtcbiAgICB9XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbWJ1aWxkZXJcblxuICAgIHdhc21idWlsZGVyIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbWJ1aWxkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbWJ1aWxkZXIuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbmltcG9ydCB7IEZ1bmN0aW9uQnVpbGRlciB9IGZyb20gXCIuL2Z1bmN0aW9uYnVpbGRlci5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUJ1aWxkZXIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuZnVuY3Rpb25JZHhCeU5hbWUgPSB7fTtcbiAgICAgICAgdGhpcy5uSW1wb3J0RnVuY3Rpb25zID0gMDtcbiAgICAgICAgdGhpcy5uSW50ZXJuYWxGdW5jdGlvbnMgPTA7XG4gICAgICAgIHRoaXMubWVtb3J5ID0ge1xuICAgICAgICAgICAgcGFnZXNTaXplOiAxLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJlbnZcIixcbiAgICAgICAgICAgIGZpZWxkTmFtZTogXCJtZW1vcnlcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZyZWUgPSA4O1xuICAgICAgICB0aGlzLmRhdGFzID0gW107XG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xuICAgICAgICB0aGlzLmV4cG9ydHMgPSBbXTtcbiAgICAgICAgdGhpcy5mdW5jdGlvbnNUYWJsZSA9IFtdO1xuICAgIH1cblxuICAgIGJ1aWxkKCkge1xuICAgICAgICB0aGlzLl9zZXRTaWduYXR1cmVzKCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShbXG4gICAgICAgICAgICAuLi51dGlscy51MzIoMHg2ZDczNjEwMCksXG4gICAgICAgICAgICAuLi51dGlscy51MzIoMSksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZFR5cGUoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkSW1wb3J0KCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEZ1bmN0aW9uRGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEZ1bmN0aW9uc1RhYmxlKCksXG4gICAgICAgICAgICAuLi50aGlzLl9idWlsZEV4cG9ydHMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkRWxlbWVudHMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2J1aWxkQ29kZSgpLFxuICAgICAgICAgICAgLi4udGhpcy5fYnVpbGREYXRhKClcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgYWRkRnVuY3Rpb24oZm5OYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gYWxyZWFkeSBkZWZpbmVkOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25JZHhCeU5hbWVbZm5OYW1lXSA9IGlkeDtcblxuICAgICAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKG5ldyBGdW5jdGlvbkJ1aWxkZXIodGhpcywgZm5OYW1lLCBcImludGVybmFsXCIpKTtcblxuICAgICAgICB0aGlzLm5JbnRlcm5hbEZ1bmN0aW9ucysrO1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNbaWR4XTtcbiAgICB9XG5cbiAgICBhZGRJaW1wb3J0RnVuY3Rpb24oZm5OYW1lLCBtb2R1bGVOYW1lLCBfZmllbGROYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gYWxyZWFkeSBkZWZpbmVkOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBpZiAoICAodGhpcy5mdW5jdGlvbnMubGVuZ3RoPjApXG4gICAgICAgICAgICAmJih0aGlzLmZ1bmN0aW9uc1t0aGlzLmZ1bmN0aW9ucy5sZW5ndGgtMV0udHlwZSA9PSBcImludGVybmFsXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVuY3Rpb25zIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGludGVybmFsOiAke2ZuTmFtZX1gKTtcblxuICAgICAgICBsZXQgZmllbGROYW1lID0gX2ZpZWxkTmFtZSB8fCBmbk5hbWU7XG5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5mdW5jdGlvbnMubGVuZ3RoO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV0gPSBpZHg7XG5cbiAgICAgICAgdGhpcy5mdW5jdGlvbnMucHVzaChuZXcgRnVuY3Rpb25CdWlsZGVyKHRoaXMsIGZuTmFtZSwgXCJpbXBvcnRcIiwgbW9kdWxlTmFtZSwgZmllbGROYW1lKSk7XG5cbiAgICAgICAgdGhpcy5uSW1wb3J0RnVuY3Rpb25zICsrO1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNbaWR4XTtcbiAgICB9XG5cbiAgICBzZXRNZW1vcnkocGFnZXNTaXplLCBtb2R1bGVOYW1lLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgdGhpcy5tZW1vcnkgPSB7XG4gICAgICAgICAgICBwYWdlc1NpemU6IHBhZ2VzU2l6ZSxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6IG1vZHVsZU5hbWUgfHwgXCJlbnZcIixcbiAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIHx8IFwibWVtb3J5XCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBvcnRGdW5jdGlvbihmbk5hbWUsIF9leHBvcnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE5hbWUgPSBfZXhwb3J0TmFtZSB8fCBmbk5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YodGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtmbk5hbWVdKSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gbm90IGRlZmluZWQ6ICR7Zm5OYW1lfWApO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV07XG4gICAgICAgIGlmIChleHBvcnROYW1lICE9IGZuTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbklkeEJ5TmFtZVtleHBvcnROYW1lXSA9IGlkeDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydHMucHVzaCh7XG4gICAgICAgICAgICBleHBvcnROYW1lOiBleHBvcnROYW1lLFxuICAgICAgICAgICAgaWR4OiBpZHhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRnVuY3Rpb25Ub1RhYmxlKGZuTmFtZSkge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZ1bmN0aW9uSWR4QnlOYW1lW2ZuTmFtZV07XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zVGFibGUucHVzaChpZHgpO1xuICAgIH1cblxuICAgIGFkZERhdGEob2Zmc2V0LCBieXRlcykge1xuICAgICAgICB0aGlzLmRhdGFzLnB1c2goe1xuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICBieXRlczogYnl0ZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWxsb2MoYSwgYikge1xuICAgICAgICBsZXQgc2l6ZTtcbiAgICAgICAgbGV0IGJ5dGVzO1xuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkoYSkgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGEpKSAmJiAodHlwZW9mKGIpID09PSBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgICAgICAgc2l6ZSA9IGEubGVuZ3RoO1xuICAgICAgICAgICAgYnl0ZXMgPSBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l6ZSA9IGE7XG4gICAgICAgICAgICBieXRlcyA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgc2l6ZSA9ICgoKHNpemUtMSk+PjMpICsxKTw8MzsgICAgICAgLy8gQWxpZ24gdG8gNjQgYml0cy5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMuZnJlZTtcbiAgICAgICAgdGhpcy5mcmVlICs9IHNpemU7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgdGhpcy5hZGREYXRhKHAsIGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBhbGxvY1N0cmluZyhzKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgZ2xvYmFsVGhpcy5UZXh0RW5jb2RlcigpO1xuICAgICAgICBjb25zdCB1aW50OGFycmF5ID0gZW5jb2Rlci5lbmNvZGUocyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG9jKFsuLi51aW50OGFycmF5LCAwXSk7XG4gICAgfVxuXG4gICAgX3NldFNpZ25hdHVyZXMoKSB7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlcyA9IFtdO1xuICAgICAgICBjb25zdCBzaWduYXR1cmVJZHhCeU5hbWUgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuZnVuY3Rpb25zW3RoaXMuZnVuY3Rpb25zVGFibGVbMF1dLmdldFNpZ25hdHVyZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlTmFtZSA9IFwic19cIit1dGlscy50b0hleFN0cmluZyhzaWduYXR1cmUpO1xuICAgICAgICAgICAgc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZ1bmN0aW9uc1tpXS5nZXRTaWduYXR1cmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZU5hbWUgPSBcInNfXCIrdXRpbHMudG9IZXhTdHJpbmcoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHNpZ25hdHVyZUlkeEJ5TmFtZVtzaWduYXR1cmVOYW1lXSA9IHRoaXMuc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNbaV0uc2lnbmF0dXJlSWR4ID0gc2lnbmF0dXJlSWR4QnlOYW1lW3NpZ25hdHVyZU5hbWVdO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBfYnVpbGRTZWN0aW9uKHNlY3Rpb25UeXBlLCBzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBbc2VjdGlvblR5cGUsIC4uLnV0aWxzLnZhcnVpbnQzMihzZWN0aW9uLmxlbmd0aCksIC4uLnNlY3Rpb25dO1xuICAgIH1cblxuICAgIF9idWlsZFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZFNlY3Rpb24oXG4gICAgICAgICAgICAweDAxLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLnNpZ25hdHVyZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi5bXS5jb25jYXQoLi4udGhpcy5zaWduYXR1cmVzKVxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9idWlsZEltcG9ydCgpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBlbnRyaWVzLnB1c2goW1xuICAgICAgICAgICAgLi4udXRpbHMuc3RyaW5nKHRoaXMubWVtb3J5Lm1vZHVsZU5hbWUpLFxuICAgICAgICAgICAgLi4udXRpbHMuc3RyaW5nKHRoaXMubWVtb3J5LmZpZWxkTmFtZSksXG4gICAgICAgICAgICAweDAyLFxuICAgICAgICAgICAgMHgwMCwgICAvL0ZsYWdzIG5vIGluaXQgdmFsdWFcbiAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLm1lbW9yeS5wYWdlc1NpemUpXG4gICAgICAgIF0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IHRoaXMubkltcG9ydEZ1bmN0aW9uczsgaSsrKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW1xuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnN0cmluZyh0aGlzLmZ1bmN0aW9uc1tpXS5tb2R1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAuLi51dGlscy5zdHJpbmcodGhpcy5mdW5jdGlvbnNbaV0uZmllbGROYW1lKSxcbiAgICAgICAgICAgICAgICAweDAwLFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1tpXS5zaWduYXR1cmVJZHgpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRTZWN0aW9uKFxuICAgICAgICAgICAgMHgwMixcbiAgICAgICAgICAgIHV0aWxzLnZhcnVpbnQzMihlbnRyaWVzLmxlbmd0aCkuY29uY2F0KC4uLmVudHJpZXMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT10aGlzLm5JbXBvcnRGdW5jdGlvbnM7IGk8IHRoaXMubkltcG9ydEZ1bmN0aW9ucyArIHRoaXMubkludGVybmFsRnVuY3Rpb25zOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCguLi51dGlscy52YXJ1aW50MzIodGhpcy5mdW5jdGlvbnNbaV0uc2lnbmF0dXJlSWR4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDMsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKGVudHJpZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi5bLi4uZW50cmllc11cbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYnVpbGRGdW5jdGlvbnNUYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDQsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKDEpLFxuICAgICAgICAgICAgICAgIDB4NzAsIDAsIC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1RhYmxlLmxlbmd0aClcbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYnVpbGRFbGVtZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5mdW5jdGlvbnNUYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKC4uLnV0aWxzLnZhcnVpbnQzMih0aGlzLmZ1bmN0aW9uc1RhYmxlW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MDksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKDEpLCAgICAgIC8vIDEgZW50cnlcbiAgICAgICAgICAgICAgICAuLi51dGlscy52YXJ1aW50MzIoMCksICAgICAgLy8gVGFibGUgKDAgaW4gTVZQKVxuICAgICAgICAgICAgICAgIDB4NDEsICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgMFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLnZhcmludDMyKDApLFxuICAgICAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZnVuY3Rpb25zVGFibGUubGVuZ3RoKSwgLy8gTnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLi4uWy4uLmVudHJpZXNdXG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkRXhwb3J0cygpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IHRoaXMuZXhwb3J0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgICAgICAuLi51dGlscy5zdHJpbmcodGhpcy5leHBvcnRzW2ldLmV4cG9ydE5hbWUpLFxuICAgICAgICAgICAgICAgIDB4MDAsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZXhwb3J0c1tpXS5pZHgpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRTZWN0aW9uKFxuICAgICAgICAgICAgMHgwNyxcbiAgICAgICAgICAgIHV0aWxzLnZhcnVpbnQzMihlbnRyaWVzLmxlbmd0aCkuY29uY2F0KC4uLmVudHJpZXMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2J1aWxkQ29kZSgpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPXRoaXMubkltcG9ydEZ1bmN0aW9uczsgaTwgdGhpcy5uSW1wb3J0RnVuY3Rpb25zICsgdGhpcy5uSW50ZXJuYWxGdW5jdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHRoaXMuZnVuY3Rpb25zW2ldLmdldEJvZHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MGEsXG4gICAgICAgICAgICB1dGlscy52YXJ1aW50MzIoZW50cmllcy5sZW5ndGgpLmNvbmNhdCguLi5lbnRyaWVzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9idWlsZERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgIDB4MDAsXG4gICAgICAgICAgICAweDQxLFxuICAgICAgICAgICAgMHgwMCxcbiAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAweDA0LFxuICAgICAgICAgICAgLi4udXRpbHMudTMyKHRoaXMuZnJlZSlcbiAgICAgICAgXSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgdGhpcy5kYXRhcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtcbiAgICAgICAgICAgICAgICAweDAwLFxuICAgICAgICAgICAgICAgIDB4NDEsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFyaW50MzIodGhpcy5kYXRhc1tpXS5vZmZzZXQpLFxuICAgICAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICAgICAgLi4udXRpbHMudmFydWludDMyKHRoaXMuZGF0YXNbaV0uYnl0ZXMubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmRhdGFzW2ldLmJ5dGVzLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2VjdGlvbihcbiAgICAgICAgICAgIDB4MGIsXG4gICAgICAgICAgICB1dGlscy52YXJ1aW50MzIoZW50cmllcy5sZW5ndGgpLmNvbmNhdCguLi5lbnRyaWVzKVxuICAgICAgICApO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgYnVpbGRCbjEyOCBhcyBidWlsZEJuMTI4d2FzbSB9IGZyb20gXCJ3YXNtY3VydmVzXCI7XG5pbXBvcnQgYnVpbGRFbmdpbmUgZnJvbSBcIi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgeyBNb2R1bGVCdWlsZGVyIH0gZnJvbSBcIndhc21idWlsZGVyXCI7XG5cbmdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuXG4gICAgY29uc3QgbW9kdWxlQnVpbGRlciA9IG5ldyBNb2R1bGVCdWlsZGVyKCk7XG4gICAgbW9kdWxlQnVpbGRlci5zZXRNZW1vcnkoMjUpO1xuICAgIGJ1aWxkQm4xMjh3YXNtKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgaWYgKHBsdWdpbnMpIHBsdWdpbnMobW9kdWxlQnVpbGRlcik7XG5cbiAgICBjb25zdCBibjEyOHdhc20gPSB7fTtcblxuICAgIGJuMTI4d2FzbS5jb2RlID0gbW9kdWxlQnVpbGRlci5idWlsZCgpO1xuICAgIGJuMTI4d2FzbS5wcSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mMW0ucHE7XG4gICAgYm4xMjh3YXNtLnByID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmZybS5wcTtcbiAgICBibjEyOHdhc20ucEcxZ2VuID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMWdlbjtcbiAgICBibjEyOHdhc20ucEcxemVybyA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzF6ZXJvO1xuICAgIGJuMTI4d2FzbS5wRzFiID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMWI7XG4gICAgYm4xMjh3YXNtLnBHMmdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzJnZW47XG4gICAgYm4xMjh3YXNtLnBHMnplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyemVybztcbiAgICBibjEyOHdhc20ucEcyYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzJiO1xuICAgIGJuMTI4d2FzbS5wT25lVCA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wT25lVDtcbiAgICBibjEyOHdhc20ucHJlUFNpemUgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucHJlUFNpemU7XG4gICAgYm4xMjh3YXNtLnByZVFTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnByZVFTaXplO1xuICAgIGJuMTI4d2FzbS5uOHEgPSAzMjtcbiAgICBibjEyOHdhc20ubjhyID0gMzI7XG4gICAgYm4xMjh3YXNtLnEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucTtcbiAgICBibjEyOHdhc20uciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5yO1xuXG4gICAgaWYgKCghc2luZ2xlVGhyZWFkKSAmJiAoZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyOCkpIHJldHVybiBnbG9iYWxUaGlzLmN1cnZlX2JuMTI4O1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbmFtZTogXCJibjEyOFwiLFxuICAgICAgICB3YXNtOiBibjEyOHdhc20sXG4gICAgICAgIHE6IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIiksXG4gICAgICAgIHI6IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIiksXG4gICAgICAgIG44cTogMzIsXG4gICAgICAgIG44cjogMzIsXG4gICAgICAgIGNvZmFjdG9yRzI6IFNjYWxhci5lKFwiMzA2NDRlNzJlMTMxYTAyOWI4NTA0NWI2ODE4MTU4NWUwNmNlZWNkYTU3MmEyNDg5MzQ1ZjIyOTljMGY5ZmE4ZFwiLCAxNiksXG4gICAgICAgIHNpbmdsZVRocmVhZDogc2luZ2xlVGhyZWFkID8gdHJ1ZSA6IGZhbHNlXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgYnVpbGRFbmdpbmUocGFyYW1zKTtcbiAgICBjdXJ2ZS50ZXJtaW5hdGUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghcGFyYW1zLnNpbmdsZVRocmVhZCkge1xuICAgICAgICAgICAgZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyOCA9IG51bGw7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRtLnRlcm1pbmF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmICghc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBjdXJ2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbiIsImltcG9ydCB7IGJ1aWxkQmxzMTIzODEgYXMgYnVpbGRCbHMxMjM4MXdhc20gfSBmcm9tIFwid2FzbWN1cnZlc1wiO1xuaW1wb3J0IGJ1aWxkRW5naW5lIGZyb20gXCIuL2VuZ2luZS5qc1wiO1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHsgTW9kdWxlQnVpbGRlciB9IGZyb20gXCJ3YXNtYnVpbGRlclwiO1xuXG5nbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcblxuICAgIGNvbnN0IG1vZHVsZUJ1aWxkZXIgPSBuZXcgTW9kdWxlQnVpbGRlcigpO1xuICAgIG1vZHVsZUJ1aWxkZXIuc2V0TWVtb3J5KDI1KTtcbiAgICBidWlsZEJsczEyMzgxd2FzbShtb2R1bGVCdWlsZGVyKTtcblxuICAgIGlmIChwbHVnaW5zKSBwbHVnaW5zKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgY29uc3QgYmxzMTIzODF3YXNtID0ge307XG5cbiAgICBibHMxMjM4MXdhc20uY29kZSA9IG1vZHVsZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICBibHMxMjM4MXdhc20ucHEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZjFtLnBxO1xuICAgIGJsczEyMzgxd2FzbS5wciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mcm0ucHE7XG4gICAgYmxzMTIzODF3YXNtLnBHMWdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzFnZW47XG4gICAgYmxzMTIzODF3YXNtLnBHMXplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxemVybztcbiAgICBibHMxMjM4MXdhc20ucEcxYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzFiO1xuICAgIGJsczEyMzgxd2FzbS5wRzJnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcyZ2VuO1xuICAgIGJsczEyMzgxd2FzbS5wRzJ6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMnplcm87XG4gICAgYmxzMTIzODF3YXNtLnBHMmIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcyYjtcbiAgICBibHMxMjM4MXdhc20ucE9uZVQgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucE9uZVQ7XG4gICAgYmxzMTIzODF3YXNtLnByZVBTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnByZVBTaXplO1xuICAgIGJsczEyMzgxd2FzbS5wcmVRU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wcmVRU2l6ZTtcbiAgICBibHMxMjM4MXdhc20ubjhxID0gNDg7XG4gICAgYmxzMTIzODF3YXNtLm44ciA9IDMyO1xuICAgIGJsczEyMzgxd2FzbS5xID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnE7XG4gICAgYmxzMTIzODF3YXNtLnIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucjtcblxuXG4gICAgaWYgKCghc2luZ2xlVGhyZWFkKSAmJiAoZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSkpIHJldHVybiBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbmFtZTogXCJibHMxMjM4MVwiLFxuICAgICAgICB3YXNtOiBibHMxMjM4MXdhc20sXG4gICAgICAgIHE6IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KSxcbiAgICAgICAgcjogU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KSxcbiAgICAgICAgbjhxOiA0OCxcbiAgICAgICAgbjhyOiAzMixcbiAgICAgICAgY29mYWN0b3JHMTogU2NhbGFyLmUoXCIweDM5NmM4YzAwNTU1NWUxNTY4YzAwYWFhYjAwMDBhYWFiXCIsIDE2KSxcbiAgICAgICAgY29mYWN0b3JHMjogU2NhbGFyLmUoXCIweDVkNTQzYTk1NDE0ZTdmMTA5MWQ1MDc5Mjg3NmEyMDJjZDkxZGU0NTQ3MDg1YWJhYTY4YTIwNWIyZTVhN2RkZmE2MjhmMWNiNGQ5ZTgyZWYyMTUzN2UyOTNhNjY5MWFlMTYxNmVjNmU3ODZmMGM3MGNmMWMzOGUzMWM3MjM4ZTVcIiwgMTYpLFxuICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCA/IHRydWUgOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGJ1aWxkRW5naW5lKHBhcmFtcyk7XG4gICAgY3VydmUudGVybWluYXRlID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5zaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYmxzMTIzODEgPSBudWxsO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50bS50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXNpbmdsZVRocmVhZCkge1xuICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gY3VydmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbjEyOH0gZnJvbSBcIi4vYm4xMjguanNcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBidWlsZEJsczEyMzgxfSBmcm9tIFwiLi9ibHMxMjM4MS5qc1wiO1xuXG5jb25zdCBibHMxMjM4MXIgPSBTY2FsYXIuZShcIjczZWRhNzUzMjk5ZDdkNDgzMzM5ZDgwODA5YTFkODA1NTNiZGE0MDJmZmZlNWJmZWZmZmZmZmZmMDAwMDAwMDFcIiwgMTYpO1xuY29uc3QgYm4xMjhyID0gU2NhbGFyLmUoXCIyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODU0ODM2NDQwMDQxNjAzNDM0MzY5ODIwNDE4NjU3NTgwODQ5NTYxN1wiKTtcblxuY29uc3QgYmxzMTIzODFxID0gU2NhbGFyLmUoXCIxYTAxMTFlYTM5N2ZlNjlhNGIxYmE3YjY0MzRiYWNkNzY0Nzc0Yjg0ZjM4NTEyYmY2NzMwZDJhMGY2YjBmNjI0MWVhYmZmZmViMTUzZmZmZmI5ZmVmZmZmZmZmZmFhYWJcIiwgMTYpO1xuY29uc3QgYm4xMjhxID0gU2NhbGFyLmUoXCIyMTg4ODI0Mjg3MTgzOTI3NTIyMjI0NjQwNTc0NTI1NzI3NTA4ODY5NjMxMTE1NzI5NzgyMzY2MjY4OTAzNzg5NDY0NTIyNjIwODU4M1wiKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbVIociwgc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEociwgYm4xMjhyKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShyLCBibHMxMjM4MXIpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocil9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbVEocSwgc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEocSwgYm4xMjhxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShxLCBibHMxMjM4MXEpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MShzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocSwgMTYpfWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21OYW1lKG5hbWUsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBjb25zdCBub3JtTmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgaWYgKFtcIkJOMTI4XCIsIFwiQk4yNTRcIiwgXCJBTFRCTjEyOFwiXS5pbmRleE9mKG5vcm1OYW1lKSA+PSAwKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOChzaW5nbGVUaHJlYWQsIHBsdWdpbnMpO1xuICAgIH0gZWxzZSBpZiAoW1wiQkxTMTIzODFcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuKSB7XG4gICAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCkubWF0Y2goL1tBLVphLXowLTldKy9nKS5qb2luKFwiXCIpO1xuICAgIH1cblxufVxuIiwiXG5pbXBvcnQgKiBhcyBfU2NhbGFyICBmcm9tIFwiLi9zcmMvc2NhbGFyLmpzXCI7XG5leHBvcnQgY29uc3QgU2NhbGFyPV9TY2FsYXI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBQb2xGaWVsZH0gZnJvbSBcIi4vc3JjL3BvbGZpZWxkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgRjFGaWVsZH0gZnJvbSBcIi4vc3JjL2YxZmllbGQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBGMkZpZWxkfSBmcm9tIFwiLi9zcmMvZjJmaWVsZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEYzRmllbGR9IGZyb20gXCIuL3NyYy9mM2ZpZWxkLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBacUZpZWxkfSBmcm9tIFwiLi9zcmMvZjFmaWVsZC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgRUN9IGZyb20gXCIuL3NyYy9lYy5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbjEyOH0gZnJvbSBcIi4vc3JjL2JuMTI4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbHMxMjM4MX0gZnJvbSBcIi4vc3JjL2JsczEyMzgxLmpzXCI7XG5cbmltcG9ydCAqIGFzIF91dGlscyBmcm9tIFwiLi9zcmMvdXRpbHMuanNcIjtcbmV4cG9ydCBjb25zdCB1dGlscyA9IF91dGlscztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDaGFDaGF9IGZyb20gXCIuL3NyYy9jaGFjaGEuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIEJpZ0J1ZmZlcn0gZnJvbSBcIi4vc3JjL2JpZ2J1ZmZlci5qc1wiO1xuXG5leHBvcnQge2dldEN1cnZlRnJvbVIsIGdldEN1cnZlRnJvbVEsIGdldEN1cnZlRnJvbU5hbWV9IGZyb20gXCIuL3NyYy9jdXJ2ZXMuanNcIjtcblxuIiwiXG5pbXBvcnQgZnMgZnJvbVwiZnNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW4oZmlsZU5hbWUsIG9wZW5GbGFncywgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuICAgIGNhY2hlU2l6ZSA9IGNhY2hlU2l6ZSB8fCA0MDk2KjY0O1xuICAgIGlmICh0eXBlb2Ygb3BlbkZsYWdzICE9PSBcIm51bWJlclwiICYmIFtcIncrXCIsIFwid3grXCIsIFwiclwiLCBcImF4K1wiLCBcImErXCJdLmluZGV4T2Yob3BlbkZsYWdzKSA8MClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvcGVuIG9wdGlvblwiKTtcbiAgICBjb25zdCBmZCA9YXdhaXQgZnMucHJvbWlzZXMub3BlbihmaWxlTmFtZSwgb3BlbkZsYWdzKTtcblxuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZmQuc3RhdCgpO1xuXG4gICAgcmV0dXJuICBuZXcgRmFzdEZpbGUoZmQsIHN0YXRzLCBjYWNoZVNpemUsIHBhZ2VTaXplLCBmaWxlTmFtZSk7XG59XG5cblxuY2xhc3MgRmFzdEZpbGUge1xuXG4gICAgY29uc3RydWN0b3IoZmQsIHN0YXRzLCBjYWNoZVNpemUsIHBhZ2VTaXplLCBmaWxlTmFtZSkge1xuICAgICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7XG4gICAgICAgIHRoaXMuZmQgPSBmZDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemUgfHwgKDEgPDwgOCk7XG4gICAgICAgIHdoaWxlICh0aGlzLnBhZ2VTaXplIDwgc3RhdHMuYmxrc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxTaXplID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5mbG9vcigoc3RhdHMuc2l6ZSAtMSkgLyB0aGlzLnBhZ2VTaXplKSsxO1xuICAgICAgICB0aGlzLm1heFBhZ2VzTG9hZGVkID0gTWF0aC5mbG9vciggY2FjaGVTaXplIC8gdGhpcy5wYWdlU2l6ZSkrMTtcbiAgICAgICAgdGhpcy5wYWdlcyA9IHt9O1xuICAgICAgICB0aGlzLnBlbmRpbmdMb2FkcyA9IFtdO1xuICAgICAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXZCdWZmcyA9IFtdO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB9XG5cbiAgICBfbG9hZFBhZ2UocCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgUCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xuICAgICAgICAgICAgc2VsZi5wZW5kaW5nTG9hZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGFnZTogcCxcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgTG9hZCByZXF1ZXN0OiBcIiwgcCk7XG4gICAgICAgIHJldHVybiBQO1xuICAgIH1cblxuICAgIF9fc3RhdHVzUGFnZShzLCBwKSB7XG4gICAgICAgIGNvbnN0IGxvZ0VudHJ5ID0gW107XG4gICAgICAgIGNvbnN0IHNlbGY9dGhpcztcbiAgICAgICAgaWYgKCFzZWxmLmxvZ0hpc3RvcnkpIHJldHVybjtcbiAgICAgICAgbG9nRW50cnkucHVzaChcIj09XCIgKyBzKyBcIiBcIiArcCk7XG4gICAgICAgIGxldCBTID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHNbaV0ucGFnZSA9PSBwKSBTID0gUyArIFwiIFwiICsgaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUykgbG9nRW50cnkucHVzaChcIlBlbmRpbmcgbG9hZHM6XCIrUyk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5wYWdlc1twXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gc2VsZi5wYWdlc1twXTtcbiAgICAgICAgICAgIGxvZ0VudHJ5LnB1c2goXCJMb2FkZWRcIik7XG4gICAgICAgICAgICBsb2dFbnRyeS5wdXNoKFwicGVuZGluZ09wczogXCIrcGFnZS5wZW5kaW5nT3BzKTtcbiAgICAgICAgICAgIGlmIChwYWdlLmxvYWRpbmcpIGxvZ0VudHJ5LnB1c2goXCJsb2FkaW5nOiBcIitwYWdlLmxvYWRpbmcpO1xuICAgICAgICAgICAgaWYgKHBhZ2Uud3JpdGluZykgbG9nRW50cnkucHVzaChcIndyaXRpbmdcIik7XG4gICAgICAgICAgICBpZiAocGFnZS5kaXJ0eSkgbG9nRW50cnkucHVzaChcImRpcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ0VudHJ5LnB1c2goXCI9PVwiKTtcblxuICAgICAgICBpZiAoIXNlbGYuaGlzdG9yeVtwXSkgc2VsZi5oaXN0b3J5W3BdID0gW107XG4gICAgICAgIHNlbGYuaGlzdG9yeVtwXS5wdXNoKGxvZ0VudHJ5KTtcbiAgICB9XG5cbiAgICBfX3ByaW50SGlzdG9yeShwKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXNlbGYuaGlzdG9yeVtwXSkgY29uc29sZS5sb2coXCJFbXB0eSBIaXN0b3J5IFwiLCBwKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJIaXN0b3J5IFwiK3ApO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8c2VsZi5oaXN0b3J5W3BdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2VsZi5oaXN0b3J5W3BdW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCItPiBcIiArIHNlbGYuaGlzdG9yeVtwXVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgX3RyaWdnZXJMb2FkKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoc2VsZi5yZWFkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdMb2Fkcy5sZW5ndGg9PTApIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYWdlSWR4cyA9IE9iamVjdC5rZXlzKHNlbGYucGFnZXMpO1xuXG4gICAgICAgIGNvbnN0IGRlbGV0YWJsZVBhZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwYWdlSWR4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHNlbGYucGFnZXNbcGFyc2VJbnQocGFnZUlkeHNbaV0pXTtcbiAgICAgICAgICAgIGlmICgocGFnZS5kaXJ0eSA9PSBmYWxzZSkmJihwYWdlLnBlbmRpbmdPcHM9PTApJiYoIXBhZ2Uud3JpdGluZykmJighcGFnZS5sb2FkaW5nKSkgZGVsZXRhYmxlUGFnZXMucHVzaChwYXJzZUludChwYWdlSWR4c1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZyZWVQYWdlcyA9IHNlbGYubWF4UGFnZXNMb2FkZWQgLSBwYWdlSWR4cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3Qgb3BzID0gW107XG5cbiAgICAgICAgLy8gd2hpbGUgcGVuZGluZyBsb2FkcyBhbmRcbiAgICAgICAgLy8gICAgIHRoZSBwYWdlIGlzIGxvYWRlZCBvciBJIGNhbiByZWNvdmVyIG9uZS5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgKHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aD4wKSAmJlxuICAgICAgICAgICAgKCAgICh0eXBlb2Ygc2VsZi5wYWdlc1tzZWxmLnBlbmRpbmdMb2Fkc1swXS5wYWdlXSAhPSBcInVuZGVmaW5lZFwiIClcbiAgICAgICAgICAgICAgfHwoICAoZnJlZVBhZ2VzPjApXG4gICAgICAgICAgICAgICAgIHx8KGRlbGV0YWJsZVBhZ2VzLmxlbmd0aD4wKSkpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkID0gc2VsZi5wZW5kaW5nTG9hZHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5wYWdlc1tsb2FkLnBhZ2VdICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0ucGVuZGluZ09wcyArKztcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBkZWxldGFibGVQYWdlcy5pbmRleE9mKGxvYWQucGFnZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkeD49MCkgZGVsZXRhYmxlUGFnZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYucGFnZXNbbG9hZC5wYWdlXS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFnZXNbbG9hZC5wYWdlXS5sb2FkaW5nLnB1c2gobG9hZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgTG9hZCAoY2FjaGVkKTogXCIsIGxvYWQucGFnZSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGZyZWVQYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBmcmVlUGFnZXMtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcCA9IGRlbGV0YWJsZVBhZ2VzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQmVmb3JlIFVubG9hZDogXCIsIGZwKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hdkJ1ZmZzLnVuc2hpZnQoc2VsZi5wYWdlc1tmcF0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5wYWdlc1tmcF07XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgVW5sb2FkOiBcIiwgZnApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsb2FkLnBhZ2U+PXNlbGYudG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0gPSBnZXROZXdQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvYWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdHVzUGFnZShcIkFmdGVyIExvYWQgKG5ldyk6IFwiLCBsb2FkLnBhZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFnZXNbbG9hZC5wYWdlXSA9IGdldE5ld1BhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmcgPSBbbG9hZF07XG4gICAgICAgICAgICAgICAgICAgIG9wcy5wdXNoKHNlbGYuZmQucmVhZChzZWxmLnBhZ2VzW2xvYWQucGFnZV0uYnVmZiwgMCwgc2VsZi5wYWdlU2l6ZSwgbG9hZC5wYWdlKnNlbGYucGFnZVNpemUpLnRoZW4oKHJlcyk9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2xvYWQucGFnZV0uc2l6ZSA9IHJlcy5ieXRlc1JlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nID0gc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5wYWdlc1tsb2FkLnBhZ2VdLmxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8bG9hZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdbaV0ucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBMb2FkIChsb2FkZWQpOiBcIiwgbG9hZC5wYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBMb2FkIChsb2FkaW5nKTogXCIsIGxvYWQucGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIChvcHMubGVuZ3RoPjEpIGNvbnNvbGUubG9nKG9wcy5sZW5ndGgpO1xuXG4gICAgICAgIFByb21pc2UuYWxsKG9wcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoPjApIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyTG9hZC5iaW5kKHNlbGYpKTtcbiAgICAgICAgICAgIHNlbGYuX3RyeUNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldE5ld1BhZ2UoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5hdkJ1ZmZzLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHNlbGYuYXZCdWZmcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHAuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwLnBlbmRpbmdPcHMgPSAxO1xuICAgICAgICAgICAgICAgIHAuc2l6ZSA9MDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGlydHk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBidWZmOiBuZXcgVWludDhBcnJheShzZWxmLnBhZ2VTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ09wczogMSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgX3RyaWdnZXJXcml0ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLndyaXRpbmcpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYWdlSWR4cyA9IE9iamVjdC5rZXlzKHNlbGYucGFnZXMpO1xuXG4gICAgICAgIGNvbnN0IG9wcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwYWdlSWR4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHNlbGYucGFnZXNbcGFyc2VJbnQocGFnZUlkeHNbaV0pXTtcbiAgICAgICAgICAgIGlmIChwYWdlLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgcGFnZS5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBhZ2Uud3JpdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VsZi53cml0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHMucHVzaCggc2VsZi5mZC53cml0ZShwYWdlLmJ1ZmYsIDAsIHBhZ2Uuc2l6ZSwgcGFyc2VJbnQocGFnZUlkeHNbaV0pKnNlbGYucGFnZVNpemUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYWdlLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFUlJPUiBXcml0aW5nOiBcIitlcnIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl90cnlDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxmLndyaXRpbmcpIHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKG9wcykudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYud3JpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyV3JpdGUuYmluZChzZWxmKSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fdHJ5Q2xvc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoPjApIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyTG9hZC5iaW5kKHNlbGYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldERpcnR5UGFnZSgpIHtcbiAgICAgICAgZm9yIChsZXQgcCBpbiB0aGlzLnBhZ2VzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlc1twXS5kaXJ0eSkgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKGJ1ZmYsIHBvcykge1xuICAgICAgICBpZiAoYnVmZi5ieXRlTGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4vKlxuICAgICAgICBpZiAoYnVmZi5ieXRlTGVuZ3RoID4gc2VsZi5wYWdlU2l6ZSpzZWxmLm1heFBhZ2VzTG9hZGVkKjAuOCkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVTaXplID0gTWF0aC5mbG9vcihidWZmLmJ5dGVMZW5ndGggKiAxLjEpO1xuICAgICAgICAgICAgdGhpcy5tYXhQYWdlc0xvYWRlZCA9IE1hdGguZmxvb3IoIGNhY2hlU2l6ZSAvIHNlbGYucGFnZVNpemUpKzE7XG4gICAgICAgIH1cbiovXG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBzZWxmLnBvcyA9IHBvcytidWZmLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChzZWxmLnRvdGFsU2l6ZSA8IHBvcyArIGJ1ZmYuYnl0ZUxlbmd0aCkgc2VsZi50b3RhbFNpemUgPSBwb3MgKyBidWZmLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyaXRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gc2VsZi5wYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigocG9zICsgYnVmZi5ieXRlTGVuZ3RoIC0xKSAvIHNlbGYucGFnZVNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPWZpcnN0UGFnZTsgaTw9bGFzdFBhZ2U7IGkrKykgcGFnZVByb21pc2VzLnB1c2goc2VsZi5fbG9hZFBhZ2UoaSkpO1xuICAgICAgICBzZWxmLl90cmlnZ2VyTG9hZCgpO1xuXG4gICAgICAgIGxldCBwID0gZmlyc3RQYWdlO1xuICAgICAgICBsZXQgbyA9IHBvcyAlIHNlbGYucGFnZVNpemU7XG4gICAgICAgIGxldCByID0gYnVmZi5ieXRlTGVuZ3RoO1xuICAgICAgICB3aGlsZSAocj4wKSB7XG4gICAgICAgICAgICBhd2FpdCBwYWdlUHJvbWlzZXNbcC1maXJzdFBhZ2VdO1xuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBzZWxmLnBhZ2VTaXplKSA/IChzZWxmLnBhZ2VTaXplIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gYnVmZi5zbGljZSggYnVmZi5ieXRlTGVuZ3RoIC0gciwgYnVmZi5ieXRlTGVuZ3RoIC0gciArIGwpO1xuICAgICAgICAgICAgY29uc3QgZHN0VmlldyA9IG5ldyBVaW50OEFycmF5KHNlbGYucGFnZXNbcF0uYnVmZi5idWZmZXIsIG8sIGwpO1xuICAgICAgICAgICAgZHN0Vmlldy5zZXQoc3JjVmlldyk7XG4gICAgICAgICAgICBzZWxmLnBhZ2VzW3BdLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYucGFnZXNbcF0ucGVuZGluZ09wcyAtLTtcbiAgICAgICAgICAgIHNlbGYucGFnZXNbcF0uc2l6ZSA9IE1hdGgubWF4KG8rbCwgc2VsZi5wYWdlc1twXS5zaXplKTtcbiAgICAgICAgICAgIGlmIChwPj1zZWxmLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRvdGFsUGFnZXMgPSBwKzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gci1sO1xuICAgICAgICAgICAgcCArKztcbiAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgaWYgKCFzZWxmLndyaXRpbmcpIHNldEltbWVkaWF0ZShzZWxmLl90cmlnZ2VyV3JpdGUuYmluZChzZWxmKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZWFkKGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgYnVmZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGF3YWl0IHNlbGYucmVhZFRvQnVmZmVyKGJ1ZmYsIDAsIGxlbiwgcG9zKTtcblxuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVG9CdWZmZXIoYnVmZkRzdCwgb2Zmc2V0LCBsZW4sIHBvcykge1xuICAgICAgICBpZiAobGVuID09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKGxlbiA+IHNlbGYucGFnZVNpemUqc2VsZi5tYXhQYWdlc0xvYWRlZCowLjgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlU2l6ZSA9IE1hdGguZmxvb3IobGVuICogMS4xKTtcbiAgICAgICAgICAgIHRoaXMubWF4UGFnZXNMb2FkZWQgPSBNYXRoLmZsb29yKCBjYWNoZVNpemUgLyBzZWxmLnBhZ2VTaXplKSsxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBzZWxmLnBvcyA9IHBvcytsZW47XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gc2VsZi5wYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5mbG9vcigocG9zICsgbGVuIC0xKSAvIHNlbGYucGFnZVNpemUpO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPWZpcnN0UGFnZTsgaTw9bGFzdFBhZ2U7IGkrKykgcGFnZVByb21pc2VzLnB1c2goc2VsZi5fbG9hZFBhZ2UoaSkpO1xuXG4gICAgICAgIHNlbGYuX3RyaWdnZXJMb2FkKCk7XG5cbiAgICAgICAgbGV0IHAgPSBmaXJzdFBhZ2U7XG4gICAgICAgIGxldCBvID0gcG9zICUgc2VsZi5wYWdlU2l6ZTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBwb3MgKyBsZW4gPiBzZWxmLnRvdGFsU2l6ZSA/IGxlbiAtIChwb3MgKyBsZW4gLSBzZWxmLnRvdGFsU2l6ZSk6IGxlbjtcbiAgICAgICAgd2hpbGUgKHI+MCkge1xuICAgICAgICAgICAgYXdhaXQgcGFnZVByb21pc2VzW3AgLSBmaXJzdFBhZ2VdO1xuICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBBd2FpdCAocmVhZCk6IFwiLCBwKTtcblxuICAgICAgICAgICAgLy8gYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZVxuICAgICAgICAgICAgY29uc3QgbCA9IChvK3IgPiBzZWxmLnBhZ2VTaXplKSA/IChzZWxmLnBhZ2VTaXplIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2VsZi5wYWdlc1twXS5idWZmLmJ1ZmZlciwgc2VsZi5wYWdlc1twXS5idWZmLmJ5dGVPZmZzZXQgKyBvLCBsKTtcbiAgICAgICAgICAgIGJ1ZmZEc3Quc2V0KHNyY1ZpZXcsIG9mZnNldCtsZW4tcik7XG4gICAgICAgICAgICBzZWxmLnBhZ2VzW3BdLnBlbmRpbmdPcHMgLS07XG5cbiAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgT3AgZG9uZTogXCIsIHApO1xuXG4gICAgICAgICAgICByID0gci1sO1xuICAgICAgICAgICAgcCArKztcbiAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgaWYgKHNlbGYucGVuZGluZ0xvYWRzLmxlbmd0aD4wKSBzZXRJbW1lZGlhdGUoc2VsZi5fdHJpZ2dlckxvYWQuYmluZChzZWxmKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcyA9IHBvcyArIGxlbjtcblxuICAgIH1cblxuXG4gICAgX3RyeUNsb3NlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFzZWxmLnBlbmRpbmdDbG9zZSkgcmV0dXJuO1xuICAgICAgICBpZiAoc2VsZi5lcnJvcikge1xuICAgICAgICAgICAgc2VsZi5wZW5kaW5nQ2xvc2VSZWplY3Qoc2VsZi5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IHNlbGYuX2dldERpcnR5UGFnZSgpO1xuICAgICAgICBpZiAoKHA+PTApIHx8IChzZWxmLndyaXRpbmcpIHx8IChzZWxmLnJlYWRpbmcpIHx8IChzZWxmLnBlbmRpbmdMb2Fkcy5sZW5ndGg+MCkpIHJldHVybjtcbiAgICAgICAgc2VsZi5wZW5kaW5nQ2xvc2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnBlbmRpbmdDbG9zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNsb3NpbmcgdGhlIGZpbGUgdHdpY2VcIik7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZWxmLnBlbmRpbmdDbG9zZSA9IHJlc29sdmU7XG4gICAgICAgICAgICBzZWxmLnBlbmRpbmdDbG9zZVJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHNlbGYuX3RyeUNsb3NlKCk7XG4gICAgICAgIH0pLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICBzZWxmLmZkLmNsb3NlKCk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZmQuY2xvc2UoKTtcbiAgICAgICAgICAgIHRocm93IChlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBkaXNjYXJkKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgYXdhaXQgc2VsZi5jbG9zZSgpO1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsodGhpcy5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVVTEUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCB0bXBCdWZmMzJ2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmYzMi5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIHRydWUpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVUJFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCB0bXBCdWZmMzJ2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmYzMi5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmYzMiwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFNjQodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgICAgICBjb25zdCB0bXBCdWZmNjR2ID0gbmV3IERhdGFWaWV3KHRtcEJ1ZmY2NC5idWZmZXIpO1xuXG4gICAgICAgIHRtcEJ1ZmY2NHYuc2V0VWludDMyKDAsIHYgJiAweEZGRkZGRkZGLCB0cnVlKTtcbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoNCwgTWF0aC5mbG9vcih2IC8gMHgxMDAwMDAwMDApICwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmNjQsIHBvcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVMRTMyKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg0LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDMyQXJyYXkoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3WzBdO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRVQkUzMihwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoNCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIoMCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRVTEU2NChwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoOCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlld1sxXSAqIDB4MTAwMDAwMDAwICsgdmlld1swXTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkU3RyaW5nKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAoc2VsZi5wZW5kaW5nQ2xvc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgYSBjbG9zaW5nIGZpbGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFBvc2l0aW9uID0gdHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiID8gc2VsZi5wb3MgOiBwb3M7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZSA9IE1hdGguZmxvb3IoY3VycmVudFBvc2l0aW9uIC8gc2VsZi5wYWdlU2l6ZSk7XG5cbiAgICAgICAgbGV0IGVuZE9mU3RyaW5nRm91bmQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICAgICAgd2hpbGUgKCFlbmRPZlN0cmluZ0ZvdW5kKSB7XG4gICAgICAgICAgICAvL1JlYWQgcGFnZVxuICAgICAgICAgICAgbGV0IHBhZ2VQcm9taXNlID0gc2VsZi5fbG9hZFBhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgc2VsZi5fdHJpZ2dlckxvYWQoKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2VQcm9taXNlO1xuICAgICAgICAgICAgc2VsZi5fX3N0YXR1c1BhZ2UoXCJBZnRlciBBd2FpdCAocmVhZCk6IFwiLCBjdXJyZW50UGFnZSk7XG5cbiAgICAgICAgICAgIGxldCBvZmZzZXRPblBhZ2UgPSBjdXJyZW50UG9zaXRpb24gJSBzZWxmLnBhZ2VTaXplO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhQXJyYXkgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2N1cnJlbnRQYWdlXS5idWZmLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWxmLnBhZ2VzW2N1cnJlbnRQYWdlXS5idWZmLmJ5dGVPZmZzZXQgKyBvZmZzZXRPblBhZ2UsXG4gICAgICAgICAgICAgICAgc2VsZi5wYWdlU2l6ZSAtIG9mZnNldE9uUGFnZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGluZGV4RW5kT2ZTdHJpbmcgPSBkYXRhQXJyYXkuZmluZEluZGV4KGVsZW1lbnQgPT4gZWxlbWVudCA9PT0gMCk7XG4gICAgICAgICAgICBlbmRPZlN0cmluZ0ZvdW5kID0gaW5kZXhFbmRPZlN0cmluZyAhPT0gLTE7XG5cbiAgICAgICAgICAgIGlmIChlbmRPZlN0cmluZ0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkYXRhQXJyYXkuc2xpY2UoMCwgaW5kZXhFbmRPZlN0cmluZykpO1xuICAgICAgICAgICAgICAgIHNlbGYucG9zID0gY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplICsgb2Zmc2V0T25QYWdlICsgaW5kZXhFbmRPZlN0cmluZyArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5KTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSArIG9mZnNldE9uUGFnZSArIGRhdGFBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYucGFnZXNbY3VycmVudFBhZ2VdLnBlbmRpbmdPcHMtLTtcbiAgICAgICAgICAgIHNlbGYuX19zdGF0dXNQYWdlKFwiQWZ0ZXIgT3AgZG9uZTogXCIsIGN1cnJlbnRQYWdlKTtcblxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gc2VsZi5wb3M7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSsrO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nTG9hZHMubGVuZ3RoID4gMCkgc2V0SW1tZWRpYXRlKHNlbGYuX3RyaWdnZXJMb2FkLmJpbmQoc2VsZikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3KG8pIHtcbiAgICBjb25zdCBpbml0aWFsU2l6ZSA9IG8uaW5pdGlhbFNpemUgfHwgMTw8MjA7XG4gICAgY29uc3QgZmQgPSBuZXcgTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLm8uZGF0YSA9IG5ldyBVaW50OEFycmF5KGluaXRpYWxTaXplKTtcbiAgICBmZC5hbGxvY1NpemUgPSBpbml0aWFsU2l6ZTtcbiAgICBmZC50b3RhbFNpemUgPSAwO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRXhpc3Rpbmcobykge1xuICAgIGNvbnN0IGZkID0gbmV3IE1lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBmZC5hbGxvY1NpemUgPSBvLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICBmZC50b3RhbFNpemUgPSBvLmRhdGEuYnl0ZUxlbmd0aDtcbiAgICBmZC5yZWFkT25seSA9IHRydWU7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkV3JpdGVFeGlzdGluZyhvKSB7XG4gICAgY29uc3QgZmQgPSBuZXcgTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLmFsbG9jU2l6ZSA9IG8uZGF0YS5ieXRlTGVuZ3RoO1xuICAgIGZkLnRvdGFsU2l6ZSA9IG8uZGF0YS5ieXRlTGVuZ3RoO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuY29uc3QgdG1wQnVmZjMydiA9IG5ldyBEYXRhVmlldyh0bXBCdWZmMzIuYnVmZmVyKTtcbmNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuY29uc3QgdG1wQnVmZjY0diA9IG5ldyBEYXRhVmlldyh0bXBCdWZmNjQuYnVmZmVyKTtcblxuY2xhc3MgTWVtRmlsZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEgPDwgMTQ7ICAvLyBmb3IgY29tcGF0aWJpbGl0eVxuICAgIH1cblxuICAgIF9yZXNpemVJZk5lZWRlZChuZXdMZW4pIHtcbiAgICAgICAgaWYgKG5ld0xlbiA+IHRoaXMuYWxsb2NTaXplKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdBbGxvY1NpemUgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG9jU2l6ZSArICgxIDw8IDIwKSxcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKHRoaXMuYWxsb2NTaXplICogMS4xKSxcbiAgICAgICAgICAgICAgICBuZXdMZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3QWxsb2NTaXplKTtcbiAgICAgICAgICAgIG5ld0RhdGEuc2V0KHRoaXMuby5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuby5kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWxsb2NTaXplID0gbmV3QWxsb2NTaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGUoYnVmZiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPXRoaXM7XG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIpIHBvcyA9IHNlbGYucG9zO1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkgdGhyb3cgbmV3IEVycm9yKFwiV3JpdGluZyBhIHJlYWQgb25seSBmaWxlXCIpO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUlmTmVlZGVkKHBvcyArIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgdGhpcy5vLmRhdGEuc2V0KGJ1ZmYuc2xpY2UoKSwgcG9zKTtcblxuICAgICAgICBpZiAocG9zICsgYnVmZi5ieXRlTGVuZ3RoID4gdGhpcy50b3RhbFNpemUpIHRoaXMudG90YWxTaXplID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuXG4gICAgICAgIHRoaXMucG9zID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRUb0J1ZmZlcihidWZmRGVzdCwgb2Zmc2V0LCBsZW4sIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgPT0gXCJ1bmRlZmluZWRcIikgcG9zID0gc2VsZi5wb3M7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBpZiAocG9zICsgbGVuID4gdGhpcy50b3RhbFNpemUpIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIGJvdW5kc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MgKyBsZW4pO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmZTcmMgPSBuZXcgVWludDhBcnJheSh0aGlzLm8uZGF0YS5idWZmZXIsIHRoaXMuby5kYXRhLmJ5dGVPZmZzZXQgKyBwb3MsIGxlbik7XG5cbiAgICAgICAgYnVmZkRlc3Quc2V0KGJ1ZmZTcmMsIG9mZnNldCk7XG5cbiAgICAgICAgdGhpcy5wb3MgPSBwb3MgKyBsZW47XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZChsZW4sIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgYXdhaXQgc2VsZi5yZWFkVG9CdWZmZXIoYnVmZiwgMCwgbGVuLCBwb3MpO1xuXG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5vLmRhdGEuYnl0ZUxlbmd0aCAhPSB0aGlzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5vLmRhdGEgPSB0aGlzLm8uZGF0YS5zbGljZSgwLCB0aGlzLnRvdGFsU2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkaXNjYXJkKCkge1xuICAgIH1cblxuXG4gICAgYXN5bmMgd3JpdGVVTEUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjMydi5zZXRVaW50MzIoMCwgdiwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmMzIsIHBvcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVVQkUzMih2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjMydi5zZXRVaW50MzIoMCwgdiwgZmFsc2UpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgd3JpdGVVTEU2NCh2LCBwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoMCwgdiAmIDB4RkZGRkZGRkYsIHRydWUpO1xuICAgICAgICB0bXBCdWZmNjR2LnNldFVpbnQzMig0LCBNYXRoLmZsb29yKHYgLyAweDEwMDAwMDAwMCkgLCB0cnVlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmY2NCwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHJlYWRVTEUzMihwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBzZWxmLnJlYWQoNCwgcG9zKTtcblxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGIuYnVmZmVyKTtcblxuICAgICAgICByZXR1cm4gdmlld1swXTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVUJFMzIocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDQsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKDAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkVUxFNjQocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDgsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50MzJBcnJheShiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXdbMV0gKiAweDEwMDAwMDAwMCArIHZpZXdbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFN0cmluZyhwb3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRQb3NpdGlvbiA9IHR5cGVvZiBwb3MgPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYucG9zIDogcG9zO1xuXG4gICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPiB0aGlzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFkaW5nIG91dCBvZiBib3VuZHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgc2VsZi5vLmRhdGEuYnVmZmVyLFxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICAgICAgdGhpcy50b3RhbFNpemUgLSBjdXJyZW50UG9zaXRpb25cbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgaW5kZXhFbmRPZlN0cmluZyA9IGRhdGFBcnJheS5maW5kSW5kZXgoZWxlbWVudCA9PiBlbGVtZW50ID09PSAwKTtcbiAgICAgICAgbGV0IGVuZE9mU3RyaW5nRm91bmQgPSBpbmRleEVuZE9mU3RyaW5nICE9PSAtMTtcblxuICAgICAgICBsZXQgc3RyID0gXCJcIjtcbiAgICAgICAgaWYgKGVuZE9mU3RyaW5nRm91bmQpIHtcbiAgICAgICAgICAgIHN0ciA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkYXRhQXJyYXkuc2xpY2UoMCwgaW5kZXhFbmRPZlN0cmluZykpO1xuICAgICAgICAgICAgc2VsZi5wb3MgPSBjdXJyZW50UG9zaXRpb24gKyBpbmRleEVuZE9mU3RyaW5nICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYucG9zID0gY3VycmVudFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufVxuIiwiY29uc3QgUEFHRV9TSVpFID0gMTw8MjI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXcobykge1xuICAgIGNvbnN0IGluaXRpYWxTaXplID0gby5pbml0aWFsU2l6ZSB8fCAwO1xuICAgIGNvbnN0IGZkID0gbmV3IEJpZ01lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBjb25zdCBuUGFnZXMgPSBpbml0aWFsU2l6ZSA/IE1hdGguZmxvb3IoKGluaXRpYWxTaXplIC0gMSkgLyBQQUdFX1NJWkUpKzEgOiAwO1xuICAgIGZkLm8uZGF0YSA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuUGFnZXMtMTsgaSsrKSB7XG4gICAgICAgIGZkLm8uZGF0YS5wdXNoKCBuZXcgVWludDhBcnJheShQQUdFX1NJWkUpKTtcbiAgICB9XG4gICAgaWYgKG5QYWdlcykgZmQuby5kYXRhLnB1c2goIG5ldyBVaW50OEFycmF5KGluaXRpYWxTaXplIC0gUEFHRV9TSVpFKihuUGFnZXMtMSkpKTtcbiAgICBmZC50b3RhbFNpemUgPSAwO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRXhpc3Rpbmcobykge1xuICAgIGNvbnN0IGZkID0gbmV3IEJpZ01lbUZpbGUoKTtcbiAgICBmZC5vID0gbztcbiAgICBmZC50b3RhbFNpemUgPSAoby5kYXRhLmxlbmd0aC0xKSogUEFHRV9TSVpFICsgby5kYXRhW28uZGF0YS5sZW5ndGgtMV0uYnl0ZUxlbmd0aDtcbiAgICBmZC5yZWFkT25seSA9IHRydWU7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkV3JpdGVFeGlzdGluZyhvKSB7XG4gICAgY29uc3QgZmQgPSBuZXcgQmlnTWVtRmlsZSgpO1xuICAgIGZkLm8gPSBvO1xuICAgIGZkLnRvdGFsU2l6ZSA9IChvLmRhdGEubGVuZ3RoLTEpKiBQQUdFX1NJWkUgKyBvLmRhdGFbby5kYXRhLmxlbmd0aC0xXS5ieXRlTGVuZ3RoO1xuICAgIGZkLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgZmQucG9zID0gMDtcbiAgICByZXR1cm4gZmQ7XG59XG5cbmNvbnN0IHRtcEJ1ZmYzMiA9IG5ldyBVaW50OEFycmF5KDQpO1xuY29uc3QgdG1wQnVmZjMydiA9IG5ldyBEYXRhVmlldyh0bXBCdWZmMzIuYnVmZmVyKTtcbmNvbnN0IHRtcEJ1ZmY2NCA9IG5ldyBVaW50OEFycmF5KDgpO1xuY29uc3QgdG1wQnVmZjY0diA9IG5ldyBEYXRhVmlldyh0bXBCdWZmNjQuYnVmZmVyKTtcblxuY2xhc3MgQmlnTWVtRmlsZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEgPDwgMTQ7ICAvLyBmb3IgY29tcGF0aWJpbGl0eVxuICAgIH1cblxuICAgIF9yZXNpemVJZk5lZWRlZChuZXdMZW4pIHtcblxuICAgICAgICBpZiAobmV3TGVuIDw9IHRoaXMudG90YWxTaXplKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIGZpbGUgYm91bmRzXCIpO1xuXG4gICAgICAgIGNvbnN0IG5QYWdlcyA9IE1hdGguZmxvb3IoKG5ld0xlbiAtIDEpIC8gUEFHRV9TSVpFKSsxO1xuICAgICAgICBmb3IgKGxldCBpPSBNYXRoLm1heCh0aGlzLm8uZGF0YS5sZW5ndGgtMSwgMCk7IGk8blBhZ2VzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBpPG5QYWdlcy0xID8gUEFHRV9TSVpFIDogbmV3TGVuIC0gKG5QYWdlcy0xKSpQQUdFX1NJWkU7XG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFVpbnQ4QXJyYXkobmV3U2l6ZSk7XG4gICAgICAgICAgICBpZiAoaSA9PSB0aGlzLm8uZGF0YS5sZW5ndGgtMSkgcC5zZXQodGhpcy5vLmRhdGFbaV0pO1xuICAgICAgICAgICAgdGhpcy5vLmRhdGFbaV0gPSBwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxTaXplID0gbmV3TGVuO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKGJ1ZmYsIHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID10aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiKSBwb3MgPSBzZWxmLnBvcztcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHRocm93IG5ldyBFcnJvcihcIldyaXRpbmcgYSByZWFkIG9ubHkgZmlsZVwiKTtcblxuICAgICAgICB0aGlzLl9yZXNpemVJZk5lZWRlZChwb3MgKyBidWZmLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IocG9zIC8gUEFHRV9TSVpFKTtcblxuICAgICAgICBsZXQgcCA9IGZpcnN0UGFnZTtcbiAgICAgICAgbGV0IG8gPSBwb3MgJSBQQUdFX1NJWkU7XG4gICAgICAgIGxldCByID0gYnVmZi5ieXRlTGVuZ3RoO1xuICAgICAgICB3aGlsZSAocj4wKSB7XG4gICAgICAgICAgICBjb25zdCBsID0gKG8rciA+IFBBR0VfU0laRSkgPyAoUEFHRV9TSVpFIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gYnVmZi5zbGljZShidWZmLmJ5dGVMZW5ndGggLSByLCBidWZmLmJ5dGVMZW5ndGggLSByICsgbCk7XG4gICAgICAgICAgICBjb25zdCBkc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2VsZi5vLmRhdGFbcF0uYnVmZmVyLCBvLCBsKTtcbiAgICAgICAgICAgIGRzdFZpZXcuc2V0KHNyY1ZpZXcpO1xuICAgICAgICAgICAgciA9IHItbDtcbiAgICAgICAgICAgIHAgKys7XG4gICAgICAgICAgICBvID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zID0gcG9zICsgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRUb0J1ZmZlcihidWZmRHN0LCBvZmZzZXQsIGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyA9PSBcInVuZGVmaW5lZFwiKSBwb3MgPSBzZWxmLnBvcztcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGlmIChwb3MgKyBsZW4gPiB0aGlzLnRvdGFsU2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiUmVhZGluZyBvdXQgb2YgYm91bmRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUlmTmVlZGVkKHBvcyArIGxlbik7XG5cbiAgICAgICAgY29uc3QgZmlyc3RQYWdlID0gTWF0aC5mbG9vcihwb3MgLyBQQUdFX1NJWkUpO1xuXG4gICAgICAgIGxldCBwID0gZmlyc3RQYWdlO1xuICAgICAgICBsZXQgbyA9IHBvcyAlIFBBR0VfU0laRTtcbiAgICAgICAgLy8gUmVtYWluaW5nIGJ5dGVzIHRvIHJlYWRcbiAgICAgICAgbGV0IHIgPSBsZW47XG4gICAgICAgIHdoaWxlIChyPjApIHtcbiAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGwgPSAobytyID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLW8pIDogcjtcbiAgICAgICAgICAgIGNvbnN0IHNyY1ZpZXcgPSBuZXcgVWludDhBcnJheShzZWxmLm8uZGF0YVtwXS5idWZmZXIsIG8sIGwpO1xuICAgICAgICAgICAgYnVmZkRzdC5zZXQoc3JjVmlldywgb2Zmc2V0K2xlbi1yKTtcbiAgICAgICAgICAgIHIgPSByLWw7XG4gICAgICAgICAgICBwICsrO1xuICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcyA9IHBvcyArIGxlbjtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkKGxlbiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcblxuICAgICAgICBhd2FpdCBzZWxmLnJlYWRUb0J1ZmZlcihidWZmLCAwLCBsZW4sIHBvcyk7XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgZGlzY2FyZCgpIHtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIHRydWUpO1xuXG4gICAgICAgIGF3YWl0IHNlbGYud3JpdGUodG1wQnVmZjMyLCBwb3MpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVUJFMzIodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmYzMnYuc2V0VWludDMyKDAsIHYsIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBzZWxmLndyaXRlKHRtcEJ1ZmYzMiwgcG9zKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHdyaXRlVUxFNjQodiwgcG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRtcEJ1ZmY2NHYuc2V0VWludDMyKDAsIHYgJiAweEZGRkZGRkZGLCB0cnVlKTtcbiAgICAgICAgdG1wQnVmZjY0di5zZXRVaW50MzIoNCwgTWF0aC5mbG9vcih2IC8gMHgxMDAwMDAwMDApICwgdHJ1ZSk7XG5cbiAgICAgICAgYXdhaXQgc2VsZi53cml0ZSh0bXBCdWZmNjQsIHBvcyk7XG4gICAgfVxuXG5cbiAgICBhc3luYyByZWFkVUxFMzIocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgc2VsZi5yZWFkKDQsIHBvcyk7XG5cbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50MzJBcnJheShiLmJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHZpZXdbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVCRTMyKHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg0LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZFVMRTY0KHBvcykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IHNlbGYucmVhZCg4LCBwb3MpO1xuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDMyQXJyYXkoYi5idWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB2aWV3WzFdICogMHgxMDAwMDAwMDAgKyB2aWV3WzBdO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRTdHJpbmcocG9zKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBmaXhlZFNpemUgPSAyMDQ4O1xuXG4gICAgICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSB0eXBlb2YgcG9zID09IFwidW5kZWZpbmVkXCIgPyBzZWxmLnBvcyA6IHBvcztcblxuICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uID4gdGhpcy50b3RhbFNpemUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhZGluZyBvdXQgb2YgYm91bmRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVzaXplSWZOZWVkZWQocG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbmRPZlN0cmluZ0ZvdW5kID0gZmFsc2U7XG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xuXG4gICAgICAgIHdoaWxlICghZW5kT2ZTdHJpbmdGb3VuZCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gTWF0aC5mbG9vcihjdXJyZW50UG9zaXRpb24gLyBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgbGV0IG9mZnNldE9uUGFnZSA9IGN1cnJlbnRQb3NpdGlvbiAlIFBBR0VfU0laRTtcblxuICAgICAgICAgICAgaWYgKHNlbGYuby5kYXRhW2N1cnJlbnRQYWdlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRVJST1JcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZWFkTGVuZ3RoID0gTWF0aC5taW4oZml4ZWRTaXplLCBzZWxmLm8uZGF0YVtjdXJyZW50UGFnZV0ubGVuZ3RoIC0gb2Zmc2V0T25QYWdlKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBVaW50OEFycmF5KHNlbGYuby5kYXRhW2N1cnJlbnRQYWdlXS5idWZmZXIsIG9mZnNldE9uUGFnZSwgcmVhZExlbmd0aCk7XG5cbiAgICAgICAgICAgIGxldCBpbmRleEVuZE9mU3RyaW5nID0gZGF0YUFycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQgPT09IDApO1xuICAgICAgICAgICAgZW5kT2ZTdHJpbmdGb3VuZCA9IGluZGV4RW5kT2ZTdHJpbmcgIT09IC0xO1xuXG4gICAgICAgICAgICBpZiAoZW5kT2ZTdHJpbmdGb3VuZCkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5LnNsaWNlKDAsIGluZGV4RW5kT2ZTdHJpbmcpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogUEFHRV9TSVpFICsgb2Zmc2V0T25QYWdlICsgaW5kZXhFbmRPZlN0cmluZyArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YUFycmF5KTtcbiAgICAgICAgICAgICAgICBzZWxmLnBvcyA9IGN1cnJlbnRQYWdlICogUEFHRV9TSVpFICsgb2Zmc2V0T25QYWdlICsgZGF0YUFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gc2VsZi5wb3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iLCIvKiBnbG9iYWwgZmV0Y2ggKi9cbmltcG9ydCB7IG9wZW4gfSBmcm9tIFwiLi9vc2ZpbGUuanNcIjtcbmltcG9ydCAqIGFzIG1lbUZpbGUgZnJvbSBcIi4vbWVtZmlsZS5qc1wiO1xuaW1wb3J0ICogYXMgYmlnTWVtRmlsZSBmcm9tIFwiLi9iaWdtZW1maWxlLmpzXCI7XG5pbXBvcnQgeyBPX1RSVU5DLCBPX0NSRUFULCBPX1JEV1IsIE9fRVhDTCwgT19SRE9OTFkgfSBmcm9tIFwiY29uc3RhbnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FDSEVfU0laRSA9ICgxIDw8IDE2KTtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gKDEgPDwgMTMpO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVPdmVycmlkZShvLCBiLCBjKSB7XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG8gPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgIGZpbGVOYW1lOiBvLFxuICAgICAgICAgICAgY2FjaGVTaXplOiBiIHx8IERFRkFVTFRfQ0FDSEVfU0laRSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wZW4oby5maWxlTmFtZSwgT19UUlVOQyB8IE9fQ1JFQVQgfCBPX1JEV1IsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBiaWdNZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm9PdmVycmlkZShvLCBiLCBjKSB7XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG8gPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgIGZpbGVOYW1lOiBvLFxuICAgICAgICAgICAgY2FjaGVTaXplOiBiIHx8IERFRkFVTFRfQ0FDSEVfU0laRSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIG9wZW4oby5maWxlTmFtZSwgT19UUlVOQyB8IE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYQ0wsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBiaWdNZW1GaWxlLmNyZWF0ZU5ldyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEV4aXN0aW5nKG8sIGIsIGMpIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgbyA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwibWVtXCIsXG4gICAgICAgICAgICBkYXRhOiBvXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmV0Y2gobykudGhlbiggZnVuY3Rpb24ocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoYWIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwibWVtXCIsXG4gICAgICAgICAgICAgICAgZGF0YTogYnVmZlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgICAgICBjYWNoZVNpemU6IGIgfHwgREVGQVVMVF9DQUNIRV9TSVpFLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBjIHx8IERFRkFVTFRfUEFHRV9TSVpFXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChvLnR5cGUgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wZW4oby5maWxlTmFtZSwgT19SRE9OTFksIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBtZW1GaWxlLnJlYWRFeGlzdGluZyhvKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcImJpZ01lbVwiKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBiaWdNZW1GaWxlLnJlYWRFeGlzdGluZyhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZhc3RGaWxlIHR5cGU6IFwiK28udHlwZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFdyaXRlRXhpc3RpbmcobywgYiwgYykge1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgIGNhY2hlU2l6ZTogYiB8fCBERUZBVUxUX0NBQ0hFX1NJWkUsXG4gICAgICAgICAgICBwYWdlU2l6ZTogYyB8fCBERUZBVUxUX1BBR0VfU0laRVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoby50eXBlID09IFwiZmlsZVwiKSB7XG4gICAgICAgIHJldHVybiBvcGVuKG8uZmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IsIG8uY2FjaGVTaXplLCBvLnBhZ2VTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLnJlYWRXcml0ZUV4aXN0aW5nKG8pO1xuICAgIH0gZWxzZSBpZiAoby50eXBlID09IFwiYmlnTWVtXCIpIHtcbiAgICAgICAgcmV0dXJuIGJpZ01lbUZpbGUucmVhZFdyaXRlRXhpc3Rpbmcobyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBGYXN0RmlsZSB0eXBlOiBcIitvLnR5cGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRXcml0ZUV4aXN0aW5nT3JDcmVhdGUobywgYiwgYykge1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBmaWxlTmFtZTogbyxcbiAgICAgICAgICAgIGNhY2hlU2l6ZTogYiB8fCBERUZBVUxUX0NBQ0hFX1NJWkUsXG4gICAgICAgICAgICBwYWdlU2l6ZTogYyB8fCBERUZBVUxUX1BBR0VfU0laRVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoby50eXBlID09IFwiZmlsZVwiKSB7XG4gICAgICAgIHJldHVybiBvcGVuKG8uZmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYQ0wsIG8uY2FjaGVTaXplKTtcbiAgICB9IGVsc2UgaWYgKG8udHlwZSA9PSBcIm1lbVwiKSB7XG4gICAgICAgIHJldHVybiBtZW1GaWxlLnJlYWRXcml0ZUV4aXN0aW5nKG8pO1xuICAgIH0gZWxzZSBpZiAoby50eXBlID09IFwiYmlnTWVtXCIpIHtcbiAgICAgICAgcmV0dXJuIGJpZ01lbUZpbGUucmVhZFdyaXRlRXhpc3Rpbmcobyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBGYXN0RmlsZSB0eXBlOiBcIitvLnR5cGUpO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0ICB7IFNjYWxhciwgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQmluRmlsZShmaWxlTmFtZSwgdHlwZSwgbWF4VmVyc2lvbiwgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuXG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3RpbmcoZmlsZU5hbWUsIGNhY2hlU2l6ZSwgcGFnZVNpemUpO1xuXG4gICAgY29uc3QgYiA9IGF3YWl0IGZkLnJlYWQoNCk7XG4gICAgbGV0IHJlYWRlZFR5cGUgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTw0OyBpKyspIHJlYWRlZFR5cGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiW2ldKTtcblxuICAgIGlmIChyZWFkZWRUeXBlICE9IHR5cGUpIHRocm93IG5ldyBFcnJvcihmaWxlTmFtZSArIFwiOiBJbnZhbGlkIEZpbGUgZm9ybWF0XCIpO1xuXG4gICAgbGV0IHYgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcblxuICAgIGlmICh2Pm1heFZlcnNpb24pIHRocm93IG5ldyBFcnJvcihcIlZlcnNpb24gbm90IHN1cHBvcnRlZFwiKTtcblxuICAgIGNvbnN0IG5TZWN0aW9ucyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgLy8gU2NhbiBzZWN0aW9uc1xuICAgIGxldCBzZWN0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuU2VjdGlvbnM7IGkrKykge1xuICAgICAgICBsZXQgaHQgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICAgICAgbGV0IGhsID0gYXdhaXQgZmQucmVhZFVMRTY0KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VjdGlvbnNbaHRdID09IFwidW5kZWZpbmVkXCIpIHNlY3Rpb25zW2h0XSA9IFtdO1xuICAgICAgICBzZWN0aW9uc1todF0ucHVzaCh7XG4gICAgICAgICAgICBwOiBmZC5wb3MsXG4gICAgICAgICAgICBzaXplOiBobFxuICAgICAgICB9KTtcbiAgICAgICAgZmQucG9zICs9IGhsO1xuICAgIH1cblxuICAgIHJldHVybiB7ZmQsIHNlY3Rpb25zfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJpbkZpbGUoZmlsZU5hbWUsIHR5cGUsIHZlcnNpb24sIG5TZWN0aW9ucywgY2FjaGVTaXplLCBwYWdlU2l6ZSkge1xuXG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5jcmVhdGVPdmVycmlkZShmaWxlTmFtZSwgY2FjaGVTaXplLCBwYWdlU2l6ZSk7XG5cbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPDQ7IGkrKykgYnVmZltpXSA9IHR5cGUuY2hhckNvZGVBdChpKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmLCAwKTsgLy8gTWFnaWMgXCJyMWNzXCJcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIodmVyc2lvbik7IC8vIFZlcnNpb25cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKG5TZWN0aW9ucyk7IC8vIE51bWJlciBvZiBTZWN0aW9uc1xuXG4gICAgcmV0dXJuIGZkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXcml0ZVNlY3Rpb24oZmQsIGlkU2VjdGlvbikge1xuICAgIGlmICh0eXBlb2YgZmQud3JpdGluZ1NlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgd3JpdGluZyBhIHNlY3Rpb25cIik7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihpZFNlY3Rpb24pOyAvLyBIZWFkZXIgdHlwZVxuICAgIGZkLndyaXRpbmdTZWN0aW9uID0ge1xuICAgICAgICBwU2VjdGlvblNpemU6IGZkLnBvc1xuICAgIH07XG4gICAgYXdhaXQgZmQud3JpdGVVTEU2NCgwKTsgLy8gVGVtcG9yYWxseSBzZXQgdG8gMCBsZW5ndGhcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuZFdyaXRlU2VjdGlvbihmZCkge1xuICAgIGlmICh0eXBlb2YgZmQud3JpdGluZ1NlY3Rpb24gPT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIk5vdCB3cml0aW5nIGEgc2VjdGlvblwiKTtcblxuICAgIGNvbnN0IHNlY3Rpb25TaXplID0gZmQucG9zIC0gZmQud3JpdGluZ1NlY3Rpb24ucFNlY3Rpb25TaXplIC0gODtcbiAgICBjb25zdCBvbGRQb3MgPSBmZC5wb3M7XG4gICAgZmQucG9zID0gZmQud3JpdGluZ1NlY3Rpb24ucFNlY3Rpb25TaXplO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoc2VjdGlvblNpemUpO1xuICAgIGZkLnBvcyA9IG9sZFBvcztcbiAgICBkZWxldGUgZmQud3JpdGluZ1NlY3Rpb247XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgaWRTZWN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBmZC5yZWFkaW5nU2VjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikgdGhyb3cgbmV3IEVycm9yKFwiQWxyZWFkeSByZWFkaW5nIGEgc2VjdGlvblwiKTtcbiAgICBpZiAoIXNlY3Rpb25zW2lkU2VjdGlvbl0pICB0aHJvdyBuZXcgRXJyb3IoZmQuZmlsZU5hbWUgKyBcIjogTWlzc2luZyBzZWN0aW9uIFwiKyBpZFNlY3Rpb24gKTtcbiAgICBpZiAoc2VjdGlvbnNbaWRTZWN0aW9uXS5sZW5ndGg+MSkgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICtcIjogU2VjdGlvbiBEdXBsaWNhdGVkIFwiICtpZFNlY3Rpb24pO1xuXG4gICAgZmQucG9zID0gc2VjdGlvbnNbaWRTZWN0aW9uXVswXS5wO1xuXG4gICAgZmQucmVhZGluZ1NlY3Rpb24gPSBzZWN0aW9uc1tpZFNlY3Rpb25dWzBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5kUmVhZFNlY3Rpb24oZmQsIG5vQ2hlY2spIHtcbiAgICBpZiAodHlwZW9mIGZkLnJlYWRpbmdTZWN0aW9uID09PSBcInVuZGVmaW5lZFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgcmVhZGluZyBhIHNlY3Rpb25cIik7XG4gICAgaWYgKCFub0NoZWNrKSB7XG4gICAgICAgIGlmIChmZC5wb3MtZmQucmVhZGluZ1NlY3Rpb24ucCAhPSAgZmQucmVhZGluZ1NlY3Rpb24uc2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzZWN0aW9uIHNpemUgcmVhZGluZ1wiKTtcbiAgICB9XG4gICAgZGVsZXRlIGZkLnJlYWRpbmdTZWN0aW9uO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVCaWdJbnQoZmQsIG4sIG44LCBwb3MpIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkobjgpO1xuICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIDAsIG4sIG44KTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmLCBwb3MpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEJpZ0ludChmZCwgbjgsIHBvcykge1xuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKG44LCBwb3MpO1xuICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKGJ1ZmYsIDAsIG44KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlTZWN0aW9uKGZkRnJvbSwgc2VjdGlvbnMsIGZkVG8sIHNlY3Rpb25JZCwgc2l6ZSkge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzaXplID0gc2VjdGlvbnNbc2VjdGlvbklkXVswXS5zaXplO1xuICAgIH1cbiAgICBjb25zdCBjaHVua1NpemUgPSBmZEZyb20ucGFnZVNpemU7XG4gICAgYXdhaXQgc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZEZyb20sIHNlY3Rpb25zLCBzZWN0aW9uSWQpO1xuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkVG8sIHNlY3Rpb25JZCk7XG4gICAgZm9yIChsZXQgcD0wOyBwPHNpemU7IHArPWNodW5rU2l6ZSkge1xuICAgICAgICBjb25zdCBsID0gTWF0aC5taW4oc2l6ZSAtcCwgY2h1bmtTaXplKTtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGwpO1xuICAgICAgICBhd2FpdCBmZFRvLndyaXRlKGJ1ZmYpO1xuICAgIH1cbiAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRUbyk7XG4gICAgYXdhaXQgZW5kUmVhZFNlY3Rpb24oZmRGcm9tLCBzaXplICE9IHNlY3Rpb25zW3NlY3Rpb25JZF1bMF0uc2l6ZSk7XG5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTZWN0aW9uKGZkLCBzZWN0aW9ucywgaWRTZWN0aW9uLCBvZmZzZXQsIGxlbmd0aCkge1xuXG4gICAgb2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09IFwidW5kZWZpbmVkXCIpID8gMCA6IG9mZnNldDtcbiAgICBsZW5ndGggPSAodHlwZW9mIGxlbmd0aCA9PT0gXCJ1bmRlZmluZWRcIikgPyBzZWN0aW9uc1tpZFNlY3Rpb25dWzBdLnNpemUgLSBvZmZzZXQgOiBsZW5ndGg7XG5cbiAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gc2VjdGlvbnNbaWRTZWN0aW9uXVswXS5zaXplKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWRpbmcgb3V0IG9mIHRoZSByYW5nZSBvZiB0aGUgc2VjdGlvblwiKTtcbiAgICB9XG5cbiAgICBsZXQgYnVmZjtcbiAgICBpZiAobGVuZ3RoIDwgKDEgPDwgMzApICkge1xuICAgICAgICBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBidWZmID0gbmV3IEJpZ0J1ZmZlcihsZW5ndGgpO1xuICAgIH1cblxuICAgIGF3YWl0IGZkLnJlYWRUb0J1ZmZlcihidWZmLCAwLCBsZW5ndGgsIHNlY3Rpb25zW2lkU2VjdGlvbl1bMF0ucCArIG9mZnNldCk7XG4gICAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWN0aW9uSXNFcXVhbChmZDEsIHNlY3Rpb25zMSwgZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbikge1xuICAgIGNvbnN0IE1BWF9CVUZGX1NJWkUgPSBmZDEucGFnZVNpemUgKiAxNjtcbiAgICBhd2FpdCBzdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkMSwgc2VjdGlvbnMxLCBpZFNlY3Rpb24pO1xuICAgIGF3YWl0IHN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbik7XG4gICAgaWYgKHNlY3Rpb25zMVtpZFNlY3Rpb25dWzBdLnNpemUgIT0gc2VjdGlvbnMyW2lkU2VjdGlvbl1bMF0uc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHRvdGFsQnl0ZXM9c2VjdGlvbnMxW2lkU2VjdGlvbl1bMF0uc2l6ZTtcbiAgICBmb3IgKGxldCBpPTA7IGk8dG90YWxCeXRlczsgaSs9IE1BWF9CVUZGX1NJWkUpIHtcbiAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKHRvdGFsQnl0ZXMtaSwgTUFYX0JVRkZfU0laRSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYxID0gYXdhaXQgZmQxLnJlYWQobik7XG4gICAgICAgIGNvbnN0IGJ1ZmYyID0gYXdhaXQgZmQyLnJlYWQobik7XG4gICAgICAgIGZvciAobGV0IGo9MDsgajxuOyBqKyspIGlmIChidWZmMVtqXSAhPSBidWZmMltqXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCBlbmRSZWFkU2VjdGlvbihmZDEpO1xuICAgIGF3YWl0IGVuZFJlYWRTZWN0aW9uKGZkMik7XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyBTY2FsYXIsIGJ1aWxkQm4xMjgsIGJ1aWxkQmxzMTIzODF9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmNvbnN0IGJsczEyMzgxcSA9IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KTtcbmNvbnN0IGJuMTI4cSA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21SKHIpIHtcbiAgICBsZXQgY3VydmU7XG4gICAgaWYgKFNjYWxhci5lcShyLCBibjEyOHIpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOCgpO1xuICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKHIsIGJsczEyMzgxcikpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJsczEyMzgxKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJ2ZSBub3Qgc3VwcG9ydGVkOiAke1NjYWxhci50b1N0cmluZyhyKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VydmVGcm9tUShxKSB7XG4gICAgbGV0IGN1cnZlO1xuICAgIGlmIChTY2FsYXIuZXEocSwgYm4xMjhxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShxLCBibHMxMjM4MXEpKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbHMxMjM4MSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VydmUgbm90IHN1cHBvcnRlZDogJHtTY2FsYXIudG9TdHJpbmcocSl9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnZlRnJvbU5hbWUobmFtZSkge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBjb25zdCBub3JtTmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgaWYgKFtcIkJOMTI4XCIsIFwiQk4yNTRcIiwgXCJBTFRCTjEyOFwiXS5pbmRleE9mKG5vcm1OYW1lKSA+PSAwKSB7XG4gICAgICAgIGN1cnZlID0gYXdhaXQgYnVpbGRCbjEyOCgpO1xuICAgIH0gZWxzZSBpZiAoW1wiQkxTMTIzODFcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuKSB7XG4gICAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCkubWF0Y2goL1tBLVphLXowLTldKy9nKS5qb2luKFwiXCIpO1xuICAgIH1cblxufVxuXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGFzc2VydFxuXG5jbGFzcyBBc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHt9XG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdBc3NlcnRpb25FcnJvcidcblxuLyoqXG4gKiBNaW5pbWFsIGFzc2VydCBmdW5jdGlvblxuICogQHBhcmFtICB7YW55fSB0IFZhbHVlIHRvIGNoZWNrIGlmIGZhbHN5XG4gKiBAcGFyYW0gIHtzdHJpbmc9fSBtIE9wdGlvbmFsIGFzc2VydGlvbiBlcnJvciBtZXNzYWdlXG4gKiBAdGhyb3dzIHtBc3NlcnRpb25FcnJvcn1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0ICh0LCBtKSB7XG4gIGlmICghdCkge1xuICAgIHZhciBlcnIgPSBuZXcgQXNzZXJ0aW9uRXJyb3IobSlcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgYXNzZXJ0KVxuICAgIHRocm93IGVyclxuICB9XG59XG4iLCJmdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlcikge1xuICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbaV0pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcpKSB7XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImNvbnN0IGFscGhhYmV0ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5cbmNvbnN0IGNvZGVzID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IGFscGhhYmV0Lmxlbmd0aDsgaSsrKSB7XG4gIGNvZGVzW2FscGhhYmV0LmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG5jb2Rlc1svKiAtICovIDB4MmRdID0gNjJcbmNvZGVzWy8qIF8gKi8gMHg1Zl0gPSA2M1xuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgbGV0IGxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQobGVuIC0gMSkgPT09IDB4M2QpIGxlbi0tXG4gIGlmIChsZW4gPiAxICYmIHN0cmluZy5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSAweDNkKSBsZW4tLVxuXG4gIHJldHVybiAobGVuICogMykgPj4+IDJcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlcikge1xuICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpIHtcbiAgICByZXN1bHQgKz0gKFxuICAgICAgYWxwaGFiZXRbYnVmZmVyW2ldID4+IDJdICtcbiAgICAgIGFscGhhYmV0WygoYnVmZmVyW2ldICYgMykgPDwgNCkgfCAoYnVmZmVyW2kgKyAxXSA+PiA0KV0gK1xuICAgICAgYWxwaGFiZXRbKChidWZmZXJbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ1ZmZlcltpICsgMl0gPj4gNildICtcbiAgICAgIGFscGhhYmV0W2J1ZmZlcltpICsgMl0gJiA2M11cbiAgICApXG4gIH1cblxuICBpZiAobGVuICUgMyA9PT0gMikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDEpICsgJz0nXG4gIH0gZWxzZSBpZiAobGVuICUgMyA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDIpICsgJz09J1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufTtcblxuZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgY29uc3QgbGVuID0gTWF0aC5taW4obGVuZ3RoLCBidWZmZXIuYnl0ZUxlbmd0aCAtIG9mZnNldClcblxuICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGogPCBsZW47IGkgKz0gNCkge1xuICAgIGNvbnN0IGEgPSBjb2Rlc1tzdHJpbmcuY2hhckNvZGVBdChpKV1cbiAgICBjb25zdCBiID0gY29kZXNbc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpXVxuICAgIGNvbnN0IGMgPSBjb2Rlc1tzdHJpbmcuY2hhckNvZGVBdChpICsgMildXG4gICAgY29uc3QgZCA9IGNvZGVzW3N0cmluZy5jaGFyQ29kZUF0KGkgKyAzKV1cblxuICAgIGJ1ZmZlcltqKytdID0gKGEgPDwgMikgfCAoYiA+PiA0KVxuICAgIGJ1ZmZlcltqKytdID0gKChiICYgMTUpIDw8IDQpIHwgKGMgPj4gMilcbiAgICBidWZmZXJbaisrXSA9ICgoYyAmIDMpIDw8IDYpIHwgKGQgJiA2MylcbiAgfVxuXG4gIHJldHVybiBsZW5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA+Pj4gMVxufVxuXG5mdW5jdGlvbiB0b1N0cmluZyAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgYnVmZmVyID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBsZW4pXG5cbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBpID0gMFxuXG4gIGZvciAobGV0IG4gPSBsZW4gLSAobGVuICUgNCk7IGkgPCBuOyBpICs9IDQpIHtcbiAgICByZXN1bHQgKz0gYnVmZmVyLmdldFVpbnQzMihpKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKVxuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHJlc3VsdCArPSBidWZmZXIuZ2V0VWludDgoaSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgY29uc3QgbGVuID0gTWF0aC5taW4obGVuZ3RoLCBidWZmZXIuYnl0ZUxlbmd0aCAtIG9mZnNldClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYSA9IGhleFZhbHVlKHN0cmluZy5jaGFyQ29kZUF0KGkgKiAyKSlcbiAgICBjb25zdCBiID0gaGV4VmFsdWUoc3RyaW5nLmNoYXJDb2RlQXQoaSAqIDIgKyAxKSlcblxuICAgIGlmIChhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGkpXG4gICAgfVxuXG4gICAgYnVmZmVyW29mZnNldCArIGldID0gKGEgPDwgNCkgfCBiXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cblxuZnVuY3Rpb24gaGV4VmFsdWUgKGNoYXIpIHtcbiAgaWYgKGNoYXIgPj0gMHgzMCAmJiBjaGFyIDw9IDB4MzkpIHJldHVybiBjaGFyIC0gMHgzMFxuICBpZiAoY2hhciA+PSAweDQxICYmIGNoYXIgPD0gMHg0NikgcmV0dXJuIGNoYXIgLSAweDQxICsgMTBcbiAgaWYgKGNoYXIgPj0gMHg2MSAmJiBjaGFyIDw9IDB4NjYpIHJldHVybiBjaGFyIC0gMHg2MSArIDEwXG59XG4iLCJmdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcpIHtcbiAgbGV0IGxlbmd0aCA9IDBcblxuICBmb3IgKGxldCBpID0gMCwgbiA9IHN0cmluZy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZiAmJiBpICsgMSA8IG4pIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSlcblxuICAgICAgaWYgKGNvZGUgPj0gMHhkYzAwICYmIGNvZGUgPD0gMHhkZmZmKSB7XG4gICAgICAgIGxlbmd0aCArPSA0XG4gICAgICAgIGkrK1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlIDw9IDB4N2YpIGxlbmd0aCArPSAxXG4gICAgZWxzZSBpZiAoY29kZSA8PSAweDdmZikgbGVuZ3RoICs9IDJcbiAgICBlbHNlIGxlbmd0aCArPSAzXG4gIH1cblxuICByZXR1cm4gbGVuZ3RoXG59XG5cbmxldCB0b1N0cmluZ1xuXG5pZiAodHlwZW9mIFRleHREZWNvZGVyICE9PSAndW5kZWZpbmVkJykge1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuICB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIpIHtcbiAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuICB9XG59IGVsc2Uge1xuICB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIpIHtcbiAgICBjb25zdCBsZW4gPSBidWZmZXIuYnl0ZUxlbmd0aFxuXG4gICAgbGV0IG91dHB1dCA9ICcnXG4gICAgbGV0IGkgPSAwXG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgbGV0IGJ5dGUgPSBidWZmZXJbaV1cblxuICAgICAgaWYgKGJ5dGUgPD0gMHg3Zikge1xuICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuICAgICAgICBpKytcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgbGV0IGJ5dGVzTmVlZGVkID0gMFxuICAgICAgbGV0IGNvZGVQb2ludCA9IDBcblxuICAgICAgaWYgKGJ5dGUgPD0gMHhkZikge1xuICAgICAgICBieXRlc05lZWRlZCA9IDFcbiAgICAgICAgY29kZVBvaW50ID0gYnl0ZSAmIDB4MWZcbiAgICAgIH0gZWxzZSBpZiAoYnl0ZSA8PSAweGVmKSB7XG4gICAgICAgIGJ5dGVzTmVlZGVkID0gMlxuICAgICAgICBjb2RlUG9pbnQgPSBieXRlICYgMHgwZlxuICAgICAgfSBlbHNlIGlmIChieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgYnl0ZXNOZWVkZWQgPSAzXG4gICAgICAgIGNvZGVQb2ludCA9IGJ5dGUgJiAweDA3XG4gICAgICB9XG5cbiAgICAgIGlmIChsZW4gLSBpIC0gYnl0ZXNOZWVkZWQgPiAwKSB7XG4gICAgICAgIGxldCBrID0gMFxuXG4gICAgICAgIHdoaWxlIChrIDwgYnl0ZXNOZWVkZWQpIHtcbiAgICAgICAgICBieXRlID0gYnVmZmVyW2kgKyBrICsgMV1cbiAgICAgICAgICBjb2RlUG9pbnQgPSAoY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgICAgIGsgKz0gMVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlUG9pbnQgPSAweGZmZmRcbiAgICAgICAgYnl0ZXNOZWVkZWQgPSBsZW4gLSBpXG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpXG4gICAgICBpICs9IGJ5dGVzTmVlZGVkICsgMVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXRcbiAgfVxufVxuXG5sZXQgd3JpdGVcblxuaWYgKHR5cGVvZiBUZXh0RW5jb2RlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbiAgd3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCA9IDAsIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nKSkge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG4gICAgZW5jb2Rlci5lbmNvZGVJbnRvKHN0cmluZywgYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKSlcbiAgICByZXR1cm4gbGVuXG4gIH1cbn0gZWxzZSB7XG4gIHdyaXRlID0gZnVuY3Rpb24gd3JpdGUgKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQgPSAwLCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZykpIHtcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihsZW5ndGgsIGJ1ZmZlci5ieXRlTGVuZ3RoIC0gb2Zmc2V0KVxuXG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKVxuXG4gICAgbGV0IGkgPSAwXG4gICAgbGV0IGogPSAwXG5cbiAgICB3aGlsZSAoaSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSlcblxuICAgICAgaWYgKGNvZGUgPD0gMHg3Zikge1xuICAgICAgICBidWZmZXJbaisrXSA9IGNvZGVcbiAgICAgICAgaSsrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBjb3VudCA9IDBcbiAgICAgIGxldCBiaXRzID0gMFxuXG4gICAgICBpZiAoY29kZSA8PSAweDdmZikge1xuICAgICAgICBjb3VudCA9IDZcbiAgICAgICAgYml0cyA9IDB4YzBcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgICAgY291bnQgPSAxMlxuICAgICAgICBiaXRzID0gMHhlMFxuICAgICAgfSBlbHNlIGlmIChjb2RlIDw9IDB4MWZmZmZmKSB7XG4gICAgICAgIGNvdW50ID0gMThcbiAgICAgICAgYml0cyA9IDB4ZjBcbiAgICAgIH1cblxuICAgICAgYnVmZmVyW2orK10gPSBiaXRzIHwgKGNvZGUgPj4gY291bnQpXG4gICAgICBjb3VudCAtPSA2XG5cbiAgICAgIHdoaWxlIChjb3VudCA+PSAwKSB7XG4gICAgICAgIGJ1ZmZlcltqKytdID0gMHg4MCB8ICgoY29kZSA+PiBjb3VudCkgJiAweDNmKVxuICAgICAgICBjb3VudCAtPSA2XG4gICAgICB9XG5cbiAgICAgIGkgKz0gY29kZSA+PSAweDEwMDAwID8gMiA6IDFcbiAgICB9XG5cbiAgICByZXR1cm4gbGVuXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJ5dGVMZW5ndGgsXG4gIHRvU3RyaW5nLFxuICB3cml0ZVxufVxuIiwiZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoICogMlxufVxuXG5mdW5jdGlvbiB0b1N0cmluZyAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpICs9IDIpIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXJbaV0gKyAoYnVmZmVyW2kgKyAxXSAqIDI1NikpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcpKSB7XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmJ5dGVMZW5ndGggLSBvZmZzZXQpXG5cbiAgbGV0IHVuaXRzID0gbGVuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGNvbnN0IGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuICAgIGNvbnN0IGhpID0gYyA+PiA4XG4gICAgY29uc3QgbG8gPSBjICUgMjU2XG5cbiAgICBidWZmZXJbb2Zmc2V0ICsgaSAqIDJdID0gbG9cbiAgICBidWZmZXJbb2Zmc2V0ICsgaSAqIDIgKyAxXSA9IGhpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBieXRlTGVuZ3RoLFxuICB0b1N0cmluZyxcbiAgd3JpdGVcbn1cbiIsImNvbnN0IGFzY2lpID0gcmVxdWlyZSgnLi9saWIvYXNjaWknKVxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnLi9saWIvYmFzZTY0JylcbmNvbnN0IGhleCA9IHJlcXVpcmUoJy4vbGliL2hleCcpXG5jb25zdCB1dGY4ID0gcmVxdWlyZSgnLi9saWIvdXRmOCcpXG5jb25zdCB1dGYxNmxlID0gcmVxdWlyZSgnLi9saWIvdXRmMTZsZScpXG5cbmNvbnN0IExFID0gbmV3IFVpbnQ4QXJyYXkoVWludDE2QXJyYXkub2YoMHhmZikuYnVmZmVyKVswXSA9PT0gMHhmZlxuXG5mdW5jdGlvbiBjb2RlY0ZvciAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChlbmNvZGluZykge1xuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIHJldHVybiBhc2NpaVxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXR1cm4gYmFzZTY0XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldHVybiBoZXhcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICByZXR1cm4gdXRmOFxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdXRmMTZsZVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW5jb2Rpbmc6ICR7ZW5jb2Rpbmd9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheVxufVxuXG5mdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICB0cnkge1xuICAgIGNvZGVjRm9yKGVuY29kaW5nKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSBleHBvcnRzLmZpbGwoYnVmZmVyLCBmaWxsLCAwLCBidWZmZXIuYnl0ZUxlbmd0aCwgZW5jb2RpbmcpXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpemUpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyAoc2l6ZSkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gY29kZWNGb3IoZW5jb2RpbmcpLmJ5dGVMZW5ndGgoc3RyaW5nKVxufVxuXG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKGEuYnl0ZUxlbmd0aCwgYi5ieXRlTGVuZ3RoKVxuXG4gIGEgPSBuZXcgRGF0YVZpZXcoYS5idWZmZXIsIGEuYnl0ZU9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBiID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyLCBiLmJ5dGVPZmZzZXQsIGIuYnl0ZUxlbmd0aClcblxuICBsZXQgaSA9IDBcblxuICBmb3IgKGxldCBuID0gbGVuIC0gKGxlbiAlIDQpOyBpIDwgbjsgaSArPSA0KSB7XG4gICAgY29uc3QgeCA9IGEuZ2V0VWludDMyKGksIExFKVxuICAgIGNvbnN0IHkgPSBiLmdldFVpbnQzMihpLCBMRSlcbiAgICBpZiAoeCAhPT0geSkgYnJlYWtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gYS5nZXRVaW50OChpKVxuICAgIGNvbnN0IHkgPSBiLmdldFVpbnQ4KGkpXG4gICAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgICBpZiAoeCA+IHkpIHJldHVybiAxXG4gIH1cblxuICByZXR1cm4gYS5ieXRlTGVuZ3RoID4gYi5ieXRlTGVuZ3RoID8gMSA6IGEuYnl0ZUxlbmd0aCA8IGIuYnl0ZUxlbmd0aCA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBjb25jYXQgKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKSB7XG4gIGlmICh0b3RhbExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdG90YWxMZW5ndGggPSBidWZmZXJzLnJlZHVjZSgobGVuLCBidWZmZXIpID0+IGxlbiArIGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpXG5cbiAgYnVmZmVycy5yZWR1Y2UoXG4gICAgKG9mZnNldCwgYnVmZmVyKSA9PiB7XG4gICAgICByZXN1bHQuc2V0KGJ1ZmZlciwgb2Zmc2V0KVxuICAgICAgcmV0dXJuIG9mZnNldCArIGJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgfSxcbiAgICAwXG4gIClcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgdGFyZ2V0LCB0YXJnZXRTdGFydCA9IDAsIHN0YXJ0ID0gMCwgZW5kID0gc291cmNlLmJ5dGVMZW5ndGgpIHtcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIHJldHVybiAwXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAoc291cmNlLmJ5dGVMZW5ndGggPT09IDAgfHwgdGFyZ2V0LmJ5dGVMZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IGlzIG91dCBvZiByYW5nZScpXG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gc291cmNlLmJ5dGVMZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBpcyBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBpcyBvdXQgb2YgcmFuZ2UnKVxuXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQuYnl0ZUxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQuYnl0ZUxlbmd0aFxuICBpZiAoZW5kID4gc291cmNlLmJ5dGVMZW5ndGgpIGVuZCA9IHNvdXJjZS5ieXRlTGVuZ3RoXG4gIGlmICh0YXJnZXQuYnl0ZUxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcbiAgICB0YXJnZXQuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuc2V0KHNvdXJjZS5zdWJhcnJheShzdGFydCwgZW5kKSwgdGFyZ2V0U3RhcnQpXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbmZ1bmN0aW9uIGVxdWFscyAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWVcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBsZW4gPSBhLmJ5dGVMZW5ndGhcblxuICBhID0gbmV3IERhdGFWaWV3KGEuYnVmZmVyLCBhLmJ5dGVPZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgYiA9IG5ldyBEYXRhVmlldyhiLmJ1ZmZlciwgYi5ieXRlT2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG5cbiAgbGV0IGkgPSAwXG5cbiAgZm9yIChsZXQgbiA9IGxlbiAtIChsZW4gJSA0KTsgaSA8IG47IGkgKz0gNCkge1xuICAgIGlmIChhLmdldFVpbnQzMihpLCBMRSkgIT09IGIuZ2V0VWludDMyKGksIExFKSkgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGEuZ2V0VWludDgoaSkgIT09IGIuZ2V0VWludDgoaSkpIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmlsbCAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZmlsbChidWZmZXIsIHN0cmluZywgZW5jb2RpbmcpXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgICAgb2Zmc2V0ID0gMFxuICAgICAgZW5kID0gYnVmZmVyLmJ5dGVMZW5ndGhcblxuICAgIC8vIGZpbGwoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSAmIDB4ZmZcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWx1ZSA9ICt2YWx1ZVxuICB9XG5cbiAgaWYgKG9mZnNldCA8IDAgfHwgYnVmZmVyLmJ5dGVMZW5ndGggPCBvZmZzZXQgfHwgYnVmZmVyLmJ5dGVMZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGVuZCA8PSBvZmZzZXQpIHJldHVybiBidWZmZXJcblxuICBpZiAoIXZhbHVlKSB2YWx1ZSA9IDBcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgYnVmZmVyW2ldID0gdmFsdWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBpc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IGZyb20odmFsdWUsIGVuY29kaW5nKVxuXG4gICAgY29uc3QgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmQgLSBvZmZzZXQ7ICsraSkge1xuICAgICAgYnVmZmVyW2kgKyBvZmZzZXRdID0gdmFsdWVbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gZnJvbShzdHJpbmcsIGVuY29kaW5nKVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG5cbiAgLy8gZnJvbShhcnJheSlcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZnJvbUFycmF5KHZhbHVlKVxuXG4gIC8vIGZyb20oYnVmZmVyKVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkgcmV0dXJuIGZyb21CdWZmZXIodmFsdWUpXG5cbiAgLy8gZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGNvZGVjID0gY29kZWNGb3IoZW5jb2RpbmcpXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNvZGVjLmJ5dGVMZW5ndGgoc3RyaW5nKSlcbiAgY29kZWMud3JpdGUoYnVmZmVyLCBzdHJpbmcsIDAsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheSAoYXJyYXkpIHtcbiAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkubGVuZ3RoKVxuICBidWZmZXIuc2V0KGFycmF5KVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGZyb21CdWZmZXIgKGJ1ZmZlcikge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ5dGVMZW5ndGgpXG4gIGNvcHkuc2V0KGJ1ZmZlcilcbiAgcmV0dXJuIGNvcHlcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheUJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZpcnN0KSB7XG4gIGlmIChidWZmZXIuYnl0ZUxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnl0ZU9mZnNldCA9IGZpcnN0ID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGJ5dGVPZmZzZXQgKz0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgaWYgKGZpcnN0KSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIuYnl0ZUxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChmaXJzdCkgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IGZyb20odmFsdWUsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9IHZhbHVlICYgMHhmZlxuXG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICByZXR1cm4gYnVmZmVyLmluZGV4T2YodmFsdWUsIGJ5dGVPZmZzZXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWZmZXIubGFzdEluZGV4T2YodmFsdWUsIGJ5dGVPZmZzZXQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlLmJ5dGVMZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIGlmIChmaXJzdCkge1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTFcblxuICAgIGZvciAobGV0IGkgPSBieXRlT2Zmc2V0OyBpIDwgYnVmZmVyLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gdmFsdWVbZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXhdKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsdWUuYnl0ZUxlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWx1ZS5ieXRlTGVuZ3RoID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGJ5dGVPZmZzZXQgPSBidWZmZXIuYnl0ZUxlbmd0aCAtIHZhbHVlLmJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWVcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZS5ieXRlTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGJ1ZmZlcltpICsgal0gIT09IHZhbHVlW2pdKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUgLyogZmlyc3QgKi8pXG59XG5cbmZ1bmN0aW9uIGxhc3RJbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlIC8qIGxhc3QgKi8pXG59XG5cbmZ1bmN0aW9uIHN3YXAgKGJ1ZmZlciwgbiwgbSkge1xuICBjb25zdCBpID0gYnVmZmVyW25dXG4gIGJ1ZmZlcltuXSA9IGJ1ZmZlclttXVxuICBidWZmZXJbbV0gPSBpXG59XG5cbmZ1bmN0aW9uIHN3YXAxNiAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDIgIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgc3dhcChidWZmZXIsIGksIGkgKyAxKVxuXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gc3dhcDMyIChidWZmZXIpIHtcbiAgY29uc3QgbGVuID0gYnVmZmVyLmJ5dGVMZW5ndGhcblxuICBpZiAobGVuICUgNCAhPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcChidWZmZXIsIGksIGkgKyAzKVxuICAgIHN3YXAoYnVmZmVyLCBpICsgMSwgaSArIDIpXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHN3YXA2NCAoYnVmZmVyKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDggIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAoYnVmZmVyLCBpLCBpICsgNylcbiAgICBzd2FwKGJ1ZmZlciwgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAoYnVmZmVyLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcChidWZmZXIsIGkgKyAzLCBpICsgNClcbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXIgKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIsIGVuY29kaW5nLCBzdGFydCA9IDAsIGVuZCA9IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gIGNvbnN0IGxlbiA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG5cbiAgaWYgKHN0YXJ0ID49IGxlbikgcmV0dXJuICcnXG4gIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiAnJ1xuICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgaWYgKHN0YXJ0ICE9PSAwIHx8IGVuZCA8IGxlbikgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG5cbiAgcmV0dXJuIGNvZGVjRm9yKGVuY29kaW5nKS50b1N0cmluZyhidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIHdyaXRlKGJ1ZmZlciwgc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIC8vIHdyaXRlKGJ1ZmZlciwgc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gdW5kZWZpbmVkXG5cbiAgLy8gd3JpdGUoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gY29kZWNGb3IoZW5jb2RpbmcpLndyaXRlKGJ1ZmZlciwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSwgdHJ1ZSlcblxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0TEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbiAgdmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdmFsdWUsIHRydWUpXG5cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlLCB0cnVlKVxuXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuICB2aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIHRydWUpXG5cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZUxFIChidWZmZXIsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldCwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0TEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0LCB0cnVlKVxufVxuXG5mdW5jdGlvbiByZWFkVUludDMyTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMFxuXG4gIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpXG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMkxFIChidWZmZXIsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDBcblxuICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQsIHRydWUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IHtcbiAgaXNCdWZmZXIsXG4gIGlzRW5jb2RpbmcsXG4gIGFsbG9jLFxuICBhbGxvY1Vuc2FmZSxcbiAgYWxsb2NVbnNhZmVTbG93LFxuICBieXRlTGVuZ3RoLFxuICBjb21wYXJlLFxuICBjb25jYXQsXG4gIGNvcHksXG4gIGVxdWFscyxcbiAgZmlsbCxcbiAgZnJvbSxcbiAgaW5jbHVkZXMsXG4gIGluZGV4T2YsXG4gIGxhc3RJbmRleE9mLFxuICBzd2FwMTYsXG4gIHN3YXAzMixcbiAgc3dhcDY0LFxuICB0b0J1ZmZlcixcbiAgdG9TdHJpbmcsXG4gIHdyaXRlLFxuICB3cml0ZURvdWJsZUxFLFxuICB3cml0ZUZsb2F0TEUsXG4gIHdyaXRlVUludDMyTEUsXG4gIHdyaXRlSW50MzJMRSxcbiAgcmVhZERvdWJsZUxFLFxuICByZWFkRmxvYXRMRSxcbiAgcmVhZFVJbnQzMkxFLFxuICByZWFkSW50MzJMRVxufVxuIiwidmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICByZXR1cm4gbW9kIHx8ICgwLCBjYltPYmplY3Qua2V5cyhjYilbMF1dKSgobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cztcbn07XG52YXIgX190b0JpbmFyeSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICB2YXIgdGFibGUgPSBuZXcgVWludDhBcnJheSgxMjgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspXG4gICAgdGFibGVbaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpICogNCAtIDIwNV0gPSBpO1xuICByZXR1cm4gKGJhc2U2NCkgPT4ge1xuICAgIHZhciBuID0gYmFzZTY0Lmxlbmd0aCwgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoKG4gLSAoYmFzZTY0W24gLSAxXSA9PSBcIj1cIikgLSAoYmFzZTY0W24gLSAyXSA9PSBcIj1cIikpICogMyAvIDQgfCAwKTtcbiAgICBmb3IgKHZhciBpMiA9IDAsIGogPSAwOyBpMiA8IG47ICkge1xuICAgICAgdmFyIGMwID0gdGFibGVbYmFzZTY0LmNoYXJDb2RlQXQoaTIrKyldLCBjMSA9IHRhYmxlW2Jhc2U2NC5jaGFyQ29kZUF0KGkyKyspXTtcbiAgICAgIHZhciBjMiA9IHRhYmxlW2Jhc2U2NC5jaGFyQ29kZUF0KGkyKyspXSwgYzMgPSB0YWJsZVtiYXNlNjQuY2hhckNvZGVBdChpMisrKV07XG4gICAgICBieXRlczJbaisrXSA9IGMwIDw8IDIgfCBjMSA+PiA0O1xuICAgICAgYnl0ZXMyW2orK10gPSBjMSA8PCA0IHwgYzIgPj4gMjtcbiAgICAgIGJ5dGVzMltqKytdID0gYzIgPDwgNiB8IGMzO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXMyO1xuICB9O1xufSkoKTtcblxuLy8gd2FzbS1iaW5hcnk6Li9ibGFrZTJiLndhdFxudmFyIHJlcXVpcmVfYmxha2UyYiA9IF9fY29tbW9uSlMoe1xuICBcIndhc20tYmluYXJ5Oi4vYmxha2UyYi53YXRcIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IF9fdG9CaW5hcnkoXCJBR0Z6YlFFQUFBQUJFQU5nQW45L0FHQURmMzkvQUdBQmZ3QURCUVFBQVFJQ0JRVUJBUXJvQndkTkJRWnRaVzF2Y25rQ0FBeGliR0ZyWlRKaVgybHVhWFFBQUE1aWJHRnJaVEppWDNWd1pHRjBaUUFCRFdKc1lXdGxNbUpmWm1sdVlXd0FBaEJpYkdGclpUSmlYMk52YlhCeVpYTnpBQU1Ldno4RXdBSUFJQUJDQURjREFDQUFRZ0EzQXdnZ0FFSUFOd01RSUFCQ0FEY0RHQ0FBUWdBM0F5QWdBRUlBTndNb0lBQkNBRGNETUNBQVFnQTNBemdnQUVJQU53TkFJQUJDQURjRFNDQUFRZ0EzQTFBZ0FFSUFOd05ZSUFCQ0FEY0RZQ0FBUWdBM0EyZ2dBRUlBTndOd0lBQkNBRGNEZUNBQVFvaVM4NTMvelBtRTZnQkJBQ2tEQUlVM0E0QUJJQUJDdTg2cXB0alE2N083ZjBFSUtRTUFoVGNEaUFFZ0FFS3I4TlAwcis2OHR6eEJFQ2tEQUlVM0E1QUJJQUJDOGUzMCtLV24vYWVsZjBFWUtRTUFoVGNEbUFFZ0FFTFJoWnJ2K3MrVWg5RUFRU0FwQXdDRk53T2dBU0FBUXAvWStkbkNrZHFDbTM5QktDa0RBSVUzQTZnQklBQkM2L3FHMnIrMTlzRWZRVEFwQXdDRk53T3dBU0FBUXZuQytKdVJvN1B3MndCQk9Da0RBSVUzQTdnQklBQkNBRGNEd0FFZ0FFSUFOd1BJQVNBQVFnQTNBOUFCQzIwQkEzOGdBRUhBQVdvaEF5QUFRY2dCYWlFRUlBUXBBd0NuSVFVQ1FBTkFJQUVnQWtZTkFTQUZRWUFCUmdSQUlBTWdBeWtEQUNBRnJYdzNBd0JCQUNFRklBQVFBd3NnQUNBRmFpQUJMUUFBT2dBQUlBVkJBV29oQlNBQlFRRnFJUUVNQUFzTElBUWdCYTAzQXdBTFlRRURmeUFBUWNBQmFpRUJJQUJCeUFGcUlRSWdBU0FCS1FNQUlBSXBBd0I4TndNQUlBQkNmemNEMEFFZ0Fpa0RBS2NoQXdKQUEwQWdBMEdBQVVZTkFTQUFJQU5xUVFBNkFBQWdBMEVCYWlFRERBQUxDeUFDSUFPdE53TUFJQUFRQXd1cU93SWdmZ2wvSUFCQmdBRnFJU0VnQUVHSUFXb2hJaUFBUVpBQmFpRWpJQUJCbUFGcUlTUWdBRUdnQVdvaEpTQUFRYWdCYWlFbUlBQkJzQUZxSVNjZ0FFRzRBV29oS0NBaEtRTUFJUUVnSWlrREFDRUNJQ01wQXdBaEF5QWtLUU1BSVFRZ0pTa0RBQ0VGSUNZcEF3QWhCaUFuS1FNQUlRY2dLQ2tEQUNFSVFvaVM4NTMvelBtRTZnQWhDVUs3enFxbTJORHJzN3QvSVFwQ3EvRFQ5Sy91dkxjOElRdEM4ZTMwK0tXbi9hZWxmeUVNUXRHRm11LzZ6NVNIMFFBaERVS2YyUG5ad3BIYWdwdC9JUTVDNi9xRzJyKzE5c0VmSVE5QytjTDRtNUdqcy9EYkFDRVFJQUFwQXdBaEVTQUFLUU1JSVJJZ0FDa0RFQ0VUSUFBcEF4Z2hGQ0FBS1FNZ0lSVWdBQ2tES0NFV0lBQXBBekFoRnlBQUtRTTRJUmdnQUNrRFFDRVpJQUFwQTBnaEdpQUFLUU5RSVJzZ0FDa0RXQ0VjSUFBcEEyQWhIU0FBS1FOb0lSNGdBQ2tEY0NFZklBQXBBM2doSUNBTklBQXBBOEFCaFNFTklBOGdBQ2tEMEFHRklROGdBU0FGSUJGOGZDRUJJQTBnQVlWQ0lJb2hEU0FKSUExOElRa2dCU0FKaFVJWWlpRUZJQUVnQlNBU2ZId2hBU0FOSUFHRlFoQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ1A0b2hCU0FDSUFZZ0UzeDhJUUlnRGlBQ2hVSWdpaUVPSUFvZ0Rud2hDaUFHSUFxRlFoaUtJUVlnQWlBR0lCUjhmQ0VDSUE0Z0FvVkNFSW9oRGlBS0lBNThJUW9nQmlBS2hVSS9paUVHSUFNZ0J5QVZmSHdoQXlBUElBT0ZRaUNLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNHSW9oQnlBRElBY2dGbng4SVFNZ0R5QURoVUlRaWlFUElBc2dEM3doQ3lBSElBdUZRaitLSVFjZ0JDQUlJQmQ4ZkNFRUlCQWdCSVZDSUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUlZaWlFSUlBUWdDQ0FZZkh3aEJDQVFJQVNGUWhDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDUDRvaENDQUJJQVlnR1h4OElRRWdFQ0FCaFVJZ2lpRVFJQXNnRUh3aEN5QUdJQXVGUWhpS0lRWWdBU0FHSUJwOGZDRUJJQkFnQVlWQ0VJb2hFQ0FMSUJCOElRc2dCaUFMaFVJL2lpRUdJQUlnQnlBYmZId2hBaUFOSUFLRlFpQ0tJUTBnRENBTmZDRU1JQWNnRElWQ0dJb2hCeUFDSUFjZ0hIeDhJUUlnRFNBQ2hVSVFpaUVOSUF3Z0RYd2hEQ0FISUF5RlFqK0tJUWNnQXlBSUlCMThmQ0VESUE0Z0E0VkNJSW9oRGlBSklBNThJUWtnQ0NBSmhVSVlpaUVJSUFNZ0NDQWVmSHdoQXlBT0lBT0ZRaENLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNQNG9oQ0NBRUlBVWdIM3g4SVFRZ0R5QUVoVUlnaWlFUElBb2dEM3doQ2lBRklBcUZRaGlLSVFVZ0JDQUZJQ0I4ZkNFRUlBOGdCSVZDRUlvaER5QUtJQTk4SVFvZ0JTQUtoVUkvaWlFRklBRWdCU0FmZkh3aEFTQU5JQUdGUWlDS0lRMGdDU0FOZkNFSklBVWdDWVZDR0lvaEJTQUJJQVVnRzN4OElRRWdEU0FCaFVJUWlpRU5JQWtnRFh3aENTQUZJQW1GUWorS0lRVWdBaUFHSUJWOGZDRUNJQTRnQW9WQ0lJb2hEaUFLSUE1OElRb2dCaUFLaFVJWWlpRUdJQUlnQmlBWmZId2hBaUFPSUFLRlFoQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ1A0b2hCaUFESUFjZ0dueDhJUU1nRHlBRGhVSWdpaUVQSUFzZ0Qzd2hDeUFISUF1RlFoaUtJUWNnQXlBSElDQjhmQ0VESUE4Z0E0VkNFSW9oRHlBTElBOThJUXNnQnlBTGhVSS9paUVISUFRZ0NDQWVmSHdoQkNBUUlBU0ZRaUNLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNHSW9oQ0NBRUlBZ2dGM3g4SVFRZ0VDQUVoVUlRaWlFUUlBd2dFSHdoRENBSUlBeUZRaitLSVFnZ0FTQUdJQko4ZkNFQklCQWdBWVZDSUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUlZaWlFR0lBRWdCaUFkZkh3aEFTQVFJQUdGUWhDS0lSQWdDeUFRZkNFTElBWWdDNFZDUDRvaEJpQUNJQWNnRVh4OElRSWdEU0FDaFVJZ2lpRU5JQXdnRFh3aERDQUhJQXlGUWhpS0lRY2dBaUFISUJOOGZDRUNJQTBnQW9WQ0VJb2hEU0FNSUExOElRd2dCeUFNaFVJL2lpRUhJQU1nQ0NBY2ZId2hBeUFPSUFPRlFpQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ0dJb2hDQ0FESUFnZ0dIeDhJUU1nRGlBRGhVSVFpaUVPSUFrZ0Rud2hDU0FJSUFtRlFqK0tJUWdnQkNBRklCWjhmQ0VFSUE4Z0JJVkNJSW9oRHlBS0lBOThJUW9nQlNBS2hVSVlpaUVGSUFRZ0JTQVVmSHdoQkNBUElBU0ZRaENLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNQNG9oQlNBQklBVWdISHg4SVFFZ0RTQUJoVUlnaWlFTklBa2dEWHdoQ1NBRklBbUZRaGlLSVFVZ0FTQUZJQmw4ZkNFQklBMGdBWVZDRUlvaERTQUpJQTE4SVFrZ0JTQUpoVUkvaWlFRklBSWdCaUFkZkh3aEFpQU9JQUtGUWlDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDR0lvaEJpQUNJQVlnRVh4OElRSWdEaUFDaFVJUWlpRU9JQW9nRG53aENpQUdJQXFGUWorS0lRWWdBeUFISUJaOGZDRURJQThnQTRWQ0lJb2hEeUFMSUE5OElRc2dCeUFMaFVJWWlpRUhJQU1nQnlBVGZId2hBeUFQSUFPRlFoQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ1A0b2hCeUFFSUFnZ0lIeDhJUVFnRUNBRWhVSWdpaUVRSUF3Z0VId2hEQ0FJSUF5RlFoaUtJUWdnQkNBSUlCNThmQ0VFSUJBZ0JJVkNFSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSS9paUVJSUFFZ0JpQWJmSHdoQVNBUUlBR0ZRaUNLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNHSW9oQmlBQklBWWdIM3g4SVFFZ0VDQUJoVUlRaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaitLSVFZZ0FpQUhJQlI4ZkNFQ0lBMGdBb1ZDSUlvaERTQU1JQTE4SVF3Z0J5QU1oVUlZaWlFSElBSWdCeUFYZkh3aEFpQU5JQUtGUWhDS0lRMGdEQ0FOZkNFTUlBY2dESVZDUDRvaEJ5QURJQWdnR0h4OElRTWdEaUFEaFVJZ2lpRU9JQWtnRG53aENTQUlJQW1GUWhpS0lRZ2dBeUFJSUJKOGZDRURJQTRnQTRWQ0VJb2hEaUFKSUE1OElRa2dDQ0FKaFVJL2lpRUlJQVFnQlNBYWZId2hCQ0FQSUFTRlFpQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ0dJb2hCU0FFSUFVZ0ZYeDhJUVFnRHlBRWhVSVFpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFqK0tJUVVnQVNBRklCaDhmQ0VCSUEwZ0FZVkNJSW9oRFNBSklBMThJUWtnQlNBSmhVSVlpaUVGSUFFZ0JTQWFmSHdoQVNBTklBR0ZRaENLSVEwZ0NTQU5mQ0VKSUFVZ0NZVkNQNG9oQlNBQ0lBWWdGSHg4SVFJZ0RpQUNoVUlnaWlFT0lBb2dEbndoQ2lBR0lBcUZRaGlLSVFZZ0FpQUdJQko4ZkNFQ0lBNGdBb1ZDRUlvaERpQUtJQTU4SVFvZ0JpQUtoVUkvaWlFR0lBTWdCeUFlZkh3aEF5QVBJQU9GUWlDS0lROGdDeUFQZkNFTElBY2dDNFZDR0lvaEJ5QURJQWNnSFh4OElRTWdEeUFEaFVJUWlpRVBJQXNnRDN3aEN5QUhJQXVGUWorS0lRY2dCQ0FJSUJ4OGZDRUVJQkFnQklWQ0lJb2hFQ0FNSUJCOElRd2dDQ0FNaFVJWWlpRUlJQVFnQ0NBZmZId2hCQ0FRSUFTRlFoQ0tJUkFnRENBUWZDRU1JQWdnRElWQ1A0b2hDQ0FCSUFZZ0UzeDhJUUVnRUNBQmhVSWdpaUVRSUFzZ0VId2hDeUFHSUF1RlFoaUtJUVlnQVNBR0lCZDhmQ0VCSUJBZ0FZVkNFSW9oRUNBTElCQjhJUXNnQmlBTGhVSS9paUVHSUFJZ0J5QVdmSHdoQWlBTklBS0ZRaUNLSVEwZ0RDQU5mQ0VNSUFjZ0RJVkNHSW9oQnlBQ0lBY2dHM3g4SVFJZ0RTQUNoVUlRaWlFTklBd2dEWHdoRENBSElBeUZRaitLSVFjZ0F5QUlJQlY4ZkNFRElBNGdBNFZDSUlvaERpQUpJQTU4SVFrZ0NDQUpoVUlZaWlFSUlBTWdDQ0FSZkh3aEF5QU9JQU9GUWhDS0lRNGdDU0FPZkNFSklBZ2dDWVZDUDRvaENDQUVJQVVnSUh4OElRUWdEeUFFaFVJZ2lpRVBJQW9nRDN3aENpQUZJQXFGUWhpS0lRVWdCQ0FGSUJsOGZDRUVJQThnQklWQ0VJb2hEeUFLSUE5OElRb2dCU0FLaFVJL2lpRUZJQUVnQlNBYWZId2hBU0FOSUFHRlFpQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ0dJb2hCU0FCSUFVZ0VYeDhJUUVnRFNBQmhVSVFpaUVOSUFrZ0RYd2hDU0FGSUFtRlFqK0tJUVVnQWlBR0lCWjhmQ0VDSUE0Z0FvVkNJSW9oRGlBS0lBNThJUW9nQmlBS2hVSVlpaUVHSUFJZ0JpQVlmSHdoQWlBT0lBS0ZRaENLSVE0Z0NpQU9mQ0VLSUFZZ0NvVkNQNG9oQmlBRElBY2dFM3g4SVFNZ0R5QURoVUlnaWlFUElBc2dEM3doQ3lBSElBdUZRaGlLSVFjZ0F5QUhJQlY4ZkNFRElBOGdBNFZDRUlvaER5QUxJQTk4SVFzZ0J5QUxoVUkvaWlFSElBUWdDQ0FiZkh3aEJDQVFJQVNGUWlDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDR0lvaENDQUVJQWdnSUh4OElRUWdFQ0FFaFVJUWlpRVFJQXdnRUh3aERDQUlJQXlGUWorS0lRZ2dBU0FHSUI5OGZDRUJJQkFnQVlWQ0lJb2hFQ0FMSUJCOElRc2dCaUFMaFVJWWlpRUdJQUVnQmlBU2ZId2hBU0FRSUFHRlFoQ0tJUkFnQ3lBUWZDRUxJQVlnQzRWQ1A0b2hCaUFDSUFjZ0hIeDhJUUlnRFNBQ2hVSWdpaUVOSUF3Z0RYd2hEQ0FISUF5RlFoaUtJUWNnQWlBSElCMThmQ0VDSUEwZ0FvVkNFSW9oRFNBTUlBMThJUXdnQnlBTWhVSS9paUVISUFNZ0NDQVhmSHdoQXlBT0lBT0ZRaUNLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNHSW9oQ0NBRElBZ2dHWHg4SVFNZ0RpQURoVUlRaWlFT0lBa2dEbndoQ1NBSUlBbUZRaitLSVFnZ0JDQUZJQlI4ZkNFRUlBOGdCSVZDSUlvaER5QUtJQTk4SVFvZ0JTQUtoVUlZaWlFRklBUWdCU0FlZkh3aEJDQVBJQVNGUWhDS0lROGdDaUFQZkNFS0lBVWdDb1ZDUDRvaEJTQUJJQVVnRTN4OElRRWdEU0FCaFVJZ2lpRU5JQWtnRFh3aENTQUZJQW1GUWhpS0lRVWdBU0FGSUIxOGZDRUJJQTBnQVlWQ0VJb2hEU0FKSUExOElRa2dCU0FKaFVJL2lpRUZJQUlnQmlBWGZId2hBaUFPSUFLRlFpQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ0dJb2hCaUFDSUFZZ0czeDhJUUlnRGlBQ2hVSVFpaUVPSUFvZ0Rud2hDaUFHSUFxRlFqK0tJUVlnQXlBSElCRjhmQ0VESUE4Z0E0VkNJSW9oRHlBTElBOThJUXNnQnlBTGhVSVlpaUVISUFNZ0J5QWNmSHdoQXlBUElBT0ZRaENLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNQNG9oQnlBRUlBZ2dHWHg4SVFRZ0VDQUVoVUlnaWlFUUlBd2dFSHdoRENBSUlBeUZRaGlLSVFnZ0JDQUlJQlI4ZkNFRUlCQWdCSVZDRUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUkvaWlFSUlBRWdCaUFWZkh3aEFTQVFJQUdGUWlDS0lSQWdDeUFRZkNFTElBWWdDNFZDR0lvaEJpQUJJQVlnSG54OElRRWdFQ0FCaFVJUWlpRVFJQXNnRUh3aEN5QUdJQXVGUWorS0lRWWdBaUFISUJoOGZDRUNJQTBnQW9WQ0lJb2hEU0FNSUExOElRd2dCeUFNaFVJWWlpRUhJQUlnQnlBV2ZId2hBaUFOSUFLRlFoQ0tJUTBnRENBTmZDRU1JQWNnRElWQ1A0b2hCeUFESUFnZ0lIeDhJUU1nRGlBRGhVSWdpaUVPSUFrZ0Rud2hDU0FJSUFtRlFoaUtJUWdnQXlBSUlCOThmQ0VESUE0Z0E0VkNFSW9oRGlBSklBNThJUWtnQ0NBSmhVSS9paUVJSUFRZ0JTQVNmSHdoQkNBUElBU0ZRaUNLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNHSW9oQlNBRUlBVWdHbng4SVFRZ0R5QUVoVUlRaWlFUElBb2dEM3doQ2lBRklBcUZRaitLSVFVZ0FTQUZJQjE4ZkNFQklBMGdBWVZDSUlvaERTQUpJQTE4SVFrZ0JTQUpoVUlZaWlFRklBRWdCU0FXZkh3aEFTQU5JQUdGUWhDS0lRMGdDU0FOZkNFSklBVWdDWVZDUDRvaEJTQUNJQVlnRW54OElRSWdEaUFDaFVJZ2lpRU9JQW9nRG53aENpQUdJQXFGUWhpS0lRWWdBaUFHSUNCOGZDRUNJQTRnQW9WQ0VJb2hEaUFLSUE1OElRb2dCaUFLaFVJL2lpRUdJQU1nQnlBZmZId2hBeUFQSUFPRlFpQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ0dJb2hCeUFESUFjZ0hueDhJUU1nRHlBRGhVSVFpaUVQSUFzZ0Qzd2hDeUFISUF1RlFqK0tJUWNnQkNBSUlCVjhmQ0VFSUJBZ0JJVkNJSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSVlpaUVJSUFRZ0NDQWJmSHdoQkNBUUlBU0ZRaENLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNQNG9oQ0NBQklBWWdFWHg4SVFFZ0VDQUJoVUlnaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaGlLSVFZZ0FTQUdJQmg4ZkNFQklCQWdBWVZDRUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUkvaWlFR0lBSWdCeUFYZkh3aEFpQU5JQUtGUWlDS0lRMGdEQ0FOZkNFTUlBY2dESVZDR0lvaEJ5QUNJQWNnRkh4OElRSWdEU0FDaFVJUWlpRU5JQXdnRFh3aERDQUhJQXlGUWorS0lRY2dBeUFJSUJwOGZDRURJQTRnQTRWQ0lJb2hEaUFKSUE1OElRa2dDQ0FKaFVJWWlpRUlJQU1nQ0NBVGZId2hBeUFPSUFPRlFoQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ1A0b2hDQ0FFSUFVZ0dYeDhJUVFnRHlBRWhVSWdpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFoaUtJUVVnQkNBRklCeDhmQ0VFSUE4Z0JJVkNFSW9oRHlBS0lBOThJUW9nQlNBS2hVSS9paUVGSUFFZ0JTQWVmSHdoQVNBTklBR0ZRaUNLSVEwZ0NTQU5mQ0VKSUFVZ0NZVkNHSW9oQlNBQklBVWdISHg4SVFFZ0RTQUJoVUlRaWlFTklBa2dEWHdoQ1NBRklBbUZRaitLSVFVZ0FpQUdJQmg4ZkNFQ0lBNGdBb1ZDSUlvaERpQUtJQTU4SVFvZ0JpQUtoVUlZaWlFR0lBSWdCaUFmZkh3aEFpQU9JQUtGUWhDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDUDRvaEJpQURJQWNnSFh4OElRTWdEeUFEaFVJZ2lpRVBJQXNnRDN3aEN5QUhJQXVGUWhpS0lRY2dBeUFISUJKOGZDRURJQThnQTRWQ0VJb2hEeUFMSUE5OElRc2dCeUFMaFVJL2lpRUhJQVFnQ0NBVWZId2hCQ0FRSUFTRlFpQ0tJUkFnRENBUWZDRU1JQWdnRElWQ0dJb2hDQ0FFSUFnZ0dueDhJUVFnRUNBRWhVSVFpaUVRSUF3Z0VId2hEQ0FJSUF5RlFqK0tJUWdnQVNBR0lCWjhmQ0VCSUJBZ0FZVkNJSW9oRUNBTElCQjhJUXNnQmlBTGhVSVlpaUVHSUFFZ0JpQVJmSHdoQVNBUUlBR0ZRaENLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNQNG9oQmlBQ0lBY2dJSHg4SVFJZ0RTQUNoVUlnaWlFTklBd2dEWHdoRENBSElBeUZRaGlLSVFjZ0FpQUhJQlY4ZkNFQ0lBMGdBb1ZDRUlvaERTQU1JQTE4SVF3Z0J5QU1oVUkvaWlFSElBTWdDQ0FaZkh3aEF5QU9JQU9GUWlDS0lRNGdDU0FPZkNFSklBZ2dDWVZDR0lvaENDQURJQWdnRjN4OElRTWdEaUFEaFVJUWlpRU9JQWtnRG53aENTQUlJQW1GUWorS0lRZ2dCQ0FGSUJOOGZDRUVJQThnQklWQ0lJb2hEeUFLSUE5OElRb2dCU0FLaFVJWWlpRUZJQVFnQlNBYmZId2hCQ0FQSUFTRlFoQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ1A0b2hCU0FCSUFVZ0YzeDhJUUVnRFNBQmhVSWdpaUVOSUFrZ0RYd2hDU0FGSUFtRlFoaUtJUVVnQVNBRklDQjhmQ0VCSUEwZ0FZVkNFSW9oRFNBSklBMThJUWtnQlNBSmhVSS9paUVGSUFJZ0JpQWZmSHdoQWlBT0lBS0ZRaUNLSVE0Z0NpQU9mQ0VLSUFZZ0NvVkNHSW9oQmlBQ0lBWWdHbng4SVFJZ0RpQUNoVUlRaWlFT0lBb2dEbndoQ2lBR0lBcUZRaitLSVFZZ0F5QUhJQng4ZkNFRElBOGdBNFZDSUlvaER5QUxJQTk4SVFzZ0J5QUxoVUlZaWlFSElBTWdCeUFVZkh3aEF5QVBJQU9GUWhDS0lROGdDeUFQZkNFTElBY2dDNFZDUDRvaEJ5QUVJQWdnRVh4OElRUWdFQ0FFaFVJZ2lpRVFJQXdnRUh3aERDQUlJQXlGUWhpS0lRZ2dCQ0FJSUJsOGZDRUVJQkFnQklWQ0VJb2hFQ0FNSUJCOElRd2dDQ0FNaFVJL2lpRUlJQUVnQmlBZGZId2hBU0FRSUFHRlFpQ0tJUkFnQ3lBUWZDRUxJQVlnQzRWQ0dJb2hCaUFCSUFZZ0UzeDhJUUVnRUNBQmhVSVFpaUVRSUFzZ0VId2hDeUFHSUF1RlFqK0tJUVlnQWlBSElCNThmQ0VDSUEwZ0FvVkNJSW9oRFNBTUlBMThJUXdnQnlBTWhVSVlpaUVISUFJZ0J5QVlmSHdoQWlBTklBS0ZRaENLSVEwZ0RDQU5mQ0VNSUFjZ0RJVkNQNG9oQnlBRElBZ2dFbng4SVFNZ0RpQURoVUlnaWlFT0lBa2dEbndoQ1NBSUlBbUZRaGlLSVFnZ0F5QUlJQlY4ZkNFRElBNGdBNFZDRUlvaERpQUpJQTU4SVFrZ0NDQUpoVUkvaWlFSUlBUWdCU0FiZkh3aEJDQVBJQVNGUWlDS0lROGdDaUFQZkNFS0lBVWdDb1ZDR0lvaEJTQUVJQVVnRm54OElRUWdEeUFFaFVJUWlpRVBJQW9nRDN3aENpQUZJQXFGUWorS0lRVWdBU0FGSUJ0OGZDRUJJQTBnQVlWQ0lJb2hEU0FKSUExOElRa2dCU0FKaFVJWWlpRUZJQUVnQlNBVGZId2hBU0FOSUFHRlFoQ0tJUTBnQ1NBTmZDRUpJQVVnQ1lWQ1A0b2hCU0FDSUFZZ0dYeDhJUUlnRGlBQ2hVSWdpaUVPSUFvZ0Rud2hDaUFHSUFxRlFoaUtJUVlnQWlBR0lCVjhmQ0VDSUE0Z0FvVkNFSW9oRGlBS0lBNThJUW9nQmlBS2hVSS9paUVHSUFNZ0J5QVlmSHdoQXlBUElBT0ZRaUNLSVE4Z0N5QVBmQ0VMSUFjZ0M0VkNHSW9oQnlBRElBY2dGM3g4SVFNZ0R5QURoVUlRaWlFUElBc2dEM3doQ3lBSElBdUZRaitLSVFjZ0JDQUlJQko4ZkNFRUlCQWdCSVZDSUlvaEVDQU1JQkI4SVF3Z0NDQU1oVUlZaWlFSUlBUWdDQ0FXZkh3aEJDQVFJQVNGUWhDS0lSQWdEQ0FRZkNFTUlBZ2dESVZDUDRvaENDQUJJQVlnSUh4OElRRWdFQ0FCaFVJZ2lpRVFJQXNnRUh3aEN5QUdJQXVGUWhpS0lRWWdBU0FHSUJ4OGZDRUJJQkFnQVlWQ0VJb2hFQ0FMSUJCOElRc2dCaUFMaFVJL2lpRUdJQUlnQnlBYWZId2hBaUFOSUFLRlFpQ0tJUTBnRENBTmZDRU1JQWNnRElWQ0dJb2hCeUFDSUFjZ0gzeDhJUUlnRFNBQ2hVSVFpaUVOSUF3Z0RYd2hEQ0FISUF5RlFqK0tJUWNnQXlBSUlCUjhmQ0VESUE0Z0E0VkNJSW9oRGlBSklBNThJUWtnQ0NBSmhVSVlpaUVJSUFNZ0NDQWRmSHdoQXlBT0lBT0ZRaENLSVE0Z0NTQU9mQ0VKSUFnZ0NZVkNQNG9oQ0NBRUlBVWdIbng4SVFRZ0R5QUVoVUlnaWlFUElBb2dEM3doQ2lBRklBcUZRaGlLSVFVZ0JDQUZJQkY4ZkNFRUlBOGdCSVZDRUlvaER5QUtJQTk4SVFvZ0JTQUtoVUkvaWlFRklBRWdCU0FSZkh3aEFTQU5JQUdGUWlDS0lRMGdDU0FOZkNFSklBVWdDWVZDR0lvaEJTQUJJQVVnRW54OElRRWdEU0FCaFVJUWlpRU5JQWtnRFh3aENTQUZJQW1GUWorS0lRVWdBaUFHSUJOOGZDRUNJQTRnQW9WQ0lJb2hEaUFLSUE1OElRb2dCaUFLaFVJWWlpRUdJQUlnQmlBVWZId2hBaUFPSUFLRlFoQ0tJUTRnQ2lBT2ZDRUtJQVlnQ29WQ1A0b2hCaUFESUFjZ0ZYeDhJUU1nRHlBRGhVSWdpaUVQSUFzZ0Qzd2hDeUFISUF1RlFoaUtJUWNnQXlBSElCWjhmQ0VESUE4Z0E0VkNFSW9oRHlBTElBOThJUXNnQnlBTGhVSS9paUVISUFRZ0NDQVhmSHdoQkNBUUlBU0ZRaUNLSVJBZ0RDQVFmQ0VNSUFnZ0RJVkNHSW9oQ0NBRUlBZ2dHSHg4SVFRZ0VDQUVoVUlRaWlFUUlBd2dFSHdoRENBSUlBeUZRaitLSVFnZ0FTQUdJQmw4ZkNFQklCQWdBWVZDSUlvaEVDQUxJQkI4SVFzZ0JpQUxoVUlZaWlFR0lBRWdCaUFhZkh3aEFTQVFJQUdGUWhDS0lSQWdDeUFRZkNFTElBWWdDNFZDUDRvaEJpQUNJQWNnRzN4OElRSWdEU0FDaFVJZ2lpRU5JQXdnRFh3aERDQUhJQXlGUWhpS0lRY2dBaUFISUJ4OGZDRUNJQTBnQW9WQ0VJb2hEU0FNSUExOElRd2dCeUFNaFVJL2lpRUhJQU1nQ0NBZGZId2hBeUFPSUFPRlFpQ0tJUTRnQ1NBT2ZDRUpJQWdnQ1lWQ0dJb2hDQ0FESUFnZ0hueDhJUU1nRGlBRGhVSVFpaUVPSUFrZ0Rud2hDU0FJSUFtRlFqK0tJUWdnQkNBRklCOThmQ0VFSUE4Z0JJVkNJSW9oRHlBS0lBOThJUW9nQlNBS2hVSVlpaUVGSUFRZ0JTQWdmSHdoQkNBUElBU0ZRaENLSVE4Z0NpQVBmQ0VLSUFVZ0NvVkNQNG9oQlNBQklBVWdIM3g4SVFFZ0RTQUJoVUlnaWlFTklBa2dEWHdoQ1NBRklBbUZRaGlLSVFVZ0FTQUZJQnQ4ZkNFQklBMGdBWVZDRUlvaERTQUpJQTE4SVFrZ0JTQUpoVUkvaWlFRklBSWdCaUFWZkh3aEFpQU9JQUtGUWlDS0lRNGdDaUFPZkNFS0lBWWdDb1ZDR0lvaEJpQUNJQVlnR1h4OElRSWdEaUFDaFVJUWlpRU9JQW9nRG53aENpQUdJQXFGUWorS0lRWWdBeUFISUJwOGZDRURJQThnQTRWQ0lJb2hEeUFMSUE5OElRc2dCeUFMaFVJWWlpRUhJQU1nQnlBZ2ZId2hBeUFQSUFPRlFoQ0tJUThnQ3lBUGZDRUxJQWNnQzRWQ1A0b2hCeUFFSUFnZ0hueDhJUVFnRUNBRWhVSWdpaUVRSUF3Z0VId2hEQ0FJSUF5RlFoaUtJUWdnQkNBSUlCZDhmQ0VFSUJBZ0JJVkNFSW9oRUNBTUlCQjhJUXdnQ0NBTWhVSS9paUVJSUFFZ0JpQVNmSHdoQVNBUUlBR0ZRaUNLSVJBZ0N5QVFmQ0VMSUFZZ0M0VkNHSW9oQmlBQklBWWdIWHg4SVFFZ0VDQUJoVUlRaWlFUUlBc2dFSHdoQ3lBR0lBdUZRaitLSVFZZ0FpQUhJQkY4ZkNFQ0lBMGdBb1ZDSUlvaERTQU1JQTE4SVF3Z0J5QU1oVUlZaWlFSElBSWdCeUFUZkh3aEFpQU5JQUtGUWhDS0lRMGdEQ0FOZkNFTUlBY2dESVZDUDRvaEJ5QURJQWdnSEh4OElRTWdEaUFEaFVJZ2lpRU9JQWtnRG53aENTQUlJQW1GUWhpS0lRZ2dBeUFJSUJoOGZDRURJQTRnQTRWQ0VJb2hEaUFKSUE1OElRa2dDQ0FKaFVJL2lpRUlJQVFnQlNBV2ZId2hCQ0FQSUFTRlFpQ0tJUThnQ2lBUGZDRUtJQVVnQ29WQ0dJb2hCU0FFSUFVZ0ZIeDhJUVFnRHlBRWhVSVFpaUVQSUFvZ0Qzd2hDaUFGSUFxRlFqK0tJUVVnSVNBaEtRTUFJQUVnQ1lXRk53TUFJQ0lnSWlrREFDQUNJQXFGaFRjREFDQWpJQ01wQXdBZ0F5QUxoWVUzQXdBZ0pDQWtLUU1BSUFRZ0RJV0ZOd01BSUNVZ0pTa0RBQ0FGSUEyRmhUY0RBQ0FtSUNZcEF3QWdCaUFPaFlVM0F3QWdKeUFuS1FNQUlBY2dENFdGTndNQUlDZ2dLQ2tEQUNBSUlCQ0ZoVGNEQUFzPVwiKTtcbiAgfVxufSk7XG5cbi8vIHdhc20tbW9kdWxlOi4vYmxha2UyYi53YXRcbnZhciBieXRlcyA9IHJlcXVpcmVfYmxha2UyYigpO1xudmFyIGNvbXBpbGVkID0gV2ViQXNzZW1ibHkuY29tcGlsZShieXRlcyk7XG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIChpbXBvcnRzKSA9PiB7XG4gIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYXdhaXQgY29tcGlsZWQsIGltcG9ydHMpO1xuICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cztcbn07XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbmFub2Fzc2VydCcpXG52YXIgYjRhID0gcmVxdWlyZSgnYjRhJylcblxudmFyIHdhc20gPSBudWxsXG52YXIgd2FzbVByb21pc2UgPSB0eXBlb2YgV2ViQXNzZW1ibHkgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWlyZSgnLi9ibGFrZTJiJykoKS50aGVuKG1vZCA9PiB7XG4gIHdhc20gPSBtb2Rcbn0pXG5cbnZhciBoZWFkID0gNjRcbnZhciBmcmVlTGlzdCA9IFtdXG5cbm1vZHVsZS5leHBvcnRzID0gQmxha2UyYlxudmFyIEJZVEVTX01JTiA9IG1vZHVsZS5leHBvcnRzLkJZVEVTX01JTiA9IDE2XG52YXIgQllURVNfTUFYID0gbW9kdWxlLmV4cG9ydHMuQllURVNfTUFYID0gNjRcbnZhciBCWVRFUyA9IG1vZHVsZS5leHBvcnRzLkJZVEVTID0gMzJcbnZhciBLRVlCWVRFU19NSU4gPSBtb2R1bGUuZXhwb3J0cy5LRVlCWVRFU19NSU4gPSAxNlxudmFyIEtFWUJZVEVTX01BWCA9IG1vZHVsZS5leHBvcnRzLktFWUJZVEVTX01BWCA9IDY0XG52YXIgS0VZQllURVMgPSBtb2R1bGUuZXhwb3J0cy5LRVlCWVRFUyA9IDMyXG52YXIgU0FMVEJZVEVTID0gbW9kdWxlLmV4cG9ydHMuU0FMVEJZVEVTID0gMTZcbnZhciBQRVJTT05BTEJZVEVTID0gbW9kdWxlLmV4cG9ydHMuUEVSU09OQUxCWVRFUyA9IDE2XG5cbmZ1bmN0aW9uIEJsYWtlMmIgKGRpZ2VzdExlbmd0aCwga2V5LCBzYWx0LCBwZXJzb25hbCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJsYWtlMmIpKSByZXR1cm4gbmV3IEJsYWtlMmIoZGlnZXN0TGVuZ3RoLCBrZXksIHNhbHQsIHBlcnNvbmFsLCBub0Fzc2VydClcbiAgaWYgKCF3YXNtKSB0aHJvdyBuZXcgRXJyb3IoJ1dBU00gbm90IGxvYWRlZC4gV2FpdCBmb3IgQmxha2UyYi5yZWFkeShjYiknKVxuICBpZiAoIWRpZ2VzdExlbmd0aCkgZGlnZXN0TGVuZ3RoID0gMzJcblxuICBpZiAobm9Bc3NlcnQgIT09IHRydWUpIHtcbiAgICBhc3NlcnQoZGlnZXN0TGVuZ3RoID49IEJZVEVTX01JTiwgJ2RpZ2VzdExlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICcgKyBCWVRFU19NSU4gKyAnLCB3YXMgZ2l2ZW4gJyArIGRpZ2VzdExlbmd0aClcbiAgICBhc3NlcnQoZGlnZXN0TGVuZ3RoIDw9IEJZVEVTX01BWCwgJ2RpZ2VzdExlbmd0aCBtdXN0IGJlIGF0IG1vc3QgJyArIEJZVEVTX01BWCArICcsIHdhcyBnaXZlbiAnICsgZGlnZXN0TGVuZ3RoKVxuICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgYXNzZXJ0KGtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdrZXkgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gICAgICBhc3NlcnQoa2V5Lmxlbmd0aCA+PSBLRVlCWVRFU19NSU4sICdrZXkgbXVzdCBiZSBhdCBsZWFzdCAnICsgS0VZQllURVNfTUlOICsgJywgd2FzIGdpdmVuICcgKyBrZXkubGVuZ3RoKVxuICAgICAgYXNzZXJ0KGtleS5sZW5ndGggPD0gS0VZQllURVNfTUFYLCAna2V5IG11c3QgYmUgYXQgbGVhc3QgJyArIEtFWUJZVEVTX01BWCArICcsIHdhcyBnaXZlbiAnICsga2V5Lmxlbmd0aClcbiAgICB9XG4gICAgaWYgKHNhbHQgIT0gbnVsbCkge1xuICAgICAgYXNzZXJ0KHNhbHQgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAnc2FsdCBtdXN0IGJlIFVpbnQ4QXJyYXkgb3IgQnVmZmVyJylcbiAgICAgIGFzc2VydChzYWx0Lmxlbmd0aCA9PT0gU0FMVEJZVEVTLCAnc2FsdCBtdXN0IGJlIGV4YWN0bHkgJyArIFNBTFRCWVRFUyArICcsIHdhcyBnaXZlbiAnICsgc2FsdC5sZW5ndGgpXG4gICAgfVxuICAgIGlmIChwZXJzb25hbCAhPSBudWxsKSB7XG4gICAgICBhc3NlcnQocGVyc29uYWwgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAncGVyc29uYWwgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gICAgICBhc3NlcnQocGVyc29uYWwubGVuZ3RoID09PSBQRVJTT05BTEJZVEVTLCAncGVyc29uYWwgbXVzdCBiZSBleGFjdGx5ICcgKyBQRVJTT05BTEJZVEVTICsgJywgd2FzIGdpdmVuICcgKyBwZXJzb25hbC5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFmcmVlTGlzdC5sZW5ndGgpIHtcbiAgICBmcmVlTGlzdC5wdXNoKGhlYWQpXG4gICAgaGVhZCArPSAyMTZcbiAgfVxuXG4gIHRoaXMuZGlnZXN0TGVuZ3RoID0gZGlnZXN0TGVuZ3RoXG4gIHRoaXMuZmluYWxpemVkID0gZmFsc2VcbiAgdGhpcy5wb2ludGVyID0gZnJlZUxpc3QucG9wKClcbiAgdGhpcy5fbWVtb3J5ID0gbmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKVxuXG4gIHRoaXMuX21lbW9yeS5maWxsKDAsIDAsIDY0KVxuICB0aGlzLl9tZW1vcnlbMF0gPSB0aGlzLmRpZ2VzdExlbmd0aFxuICB0aGlzLl9tZW1vcnlbMV0gPSBrZXkgPyBrZXkubGVuZ3RoIDogMFxuICB0aGlzLl9tZW1vcnlbMl0gPSAxIC8vIGZhbm91dFxuICB0aGlzLl9tZW1vcnlbM10gPSAxIC8vIGRlcHRoXG5cbiAgaWYgKHNhbHQpIHRoaXMuX21lbW9yeS5zZXQoc2FsdCwgMzIpXG4gIGlmIChwZXJzb25hbCkgdGhpcy5fbWVtb3J5LnNldChwZXJzb25hbCwgNDgpXG5cbiAgaWYgKHRoaXMucG9pbnRlciArIDIxNiA+IHRoaXMuX21lbW9yeS5sZW5ndGgpIHRoaXMuX3JlYWxsb2ModGhpcy5wb2ludGVyICsgMjE2KSAvLyB3ZSBuZWVkIDIxNiBieXRlcyBmb3IgdGhlIHN0YXRlXG4gIHdhc20uYmxha2UyYl9pbml0KHRoaXMucG9pbnRlciwgdGhpcy5kaWdlc3RMZW5ndGgpXG5cbiAgaWYgKGtleSkge1xuICAgIHRoaXMudXBkYXRlKGtleSlcbiAgICB0aGlzLl9tZW1vcnkuZmlsbCgwLCBoZWFkLCBoZWFkICsga2V5Lmxlbmd0aCkgLy8gd2hpdGVvdXQga2V5XG4gICAgdGhpcy5fbWVtb3J5W3RoaXMucG9pbnRlciArIDIwMF0gPSAxMjhcbiAgfVxufVxuXG5CbGFrZTJiLnByb3RvdHlwZS5fcmVhbGxvYyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHdhc20ubWVtb3J5Lmdyb3coTWF0aC5tYXgoMCwgTWF0aC5jZWlsKE1hdGguYWJzKHNpemUgLSB0aGlzLl9tZW1vcnkubGVuZ3RoKSAvIDY1NTM2KSkpXG4gIHRoaXMuX21lbW9yeSA9IG5ldyBVaW50OEFycmF5KHdhc20ubWVtb3J5LmJ1ZmZlcilcbn1cblxuQmxha2UyYi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIGFzc2VydCh0aGlzLmZpbmFsaXplZCA9PT0gZmFsc2UsICdIYXNoIGluc3RhbmNlIGZpbmFsaXplZCcpXG4gIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdpbnB1dCBtdXN0IGJlIFVpbnQ4QXJyYXkgb3IgQnVmZmVyJylcblxuICBpZiAoaGVhZCArIGlucHV0Lmxlbmd0aCA+IHRoaXMuX21lbW9yeS5sZW5ndGgpIHRoaXMuX3JlYWxsb2MoaGVhZCArIGlucHV0Lmxlbmd0aClcbiAgdGhpcy5fbWVtb3J5LnNldChpbnB1dCwgaGVhZClcbiAgd2FzbS5ibGFrZTJiX3VwZGF0ZSh0aGlzLnBvaW50ZXIsIGhlYWQsIGhlYWQgKyBpbnB1dC5sZW5ndGgpXG4gIHJldHVybiB0aGlzXG59XG5cbkJsYWtlMmIucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgYXNzZXJ0KHRoaXMuZmluYWxpemVkID09PSBmYWxzZSwgJ0hhc2ggaW5zdGFuY2UgZmluYWxpemVkJylcbiAgdGhpcy5maW5hbGl6ZWQgPSB0cnVlXG5cbiAgZnJlZUxpc3QucHVzaCh0aGlzLnBvaW50ZXIpXG4gIHdhc20uYmxha2UyYl9maW5hbCh0aGlzLnBvaW50ZXIpXG5cbiAgaWYgKCFlbmMgfHwgZW5jID09PSAnYmluYXJ5Jykge1xuICAgIHJldHVybiB0aGlzLl9tZW1vcnkuc2xpY2UodGhpcy5wb2ludGVyICsgMTI4LCB0aGlzLnBvaW50ZXIgKyAxMjggKyB0aGlzLmRpZ2VzdExlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5jID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBiNGEudG9TdHJpbmcodGhpcy5fbWVtb3J5LCBlbmMsIHRoaXMucG9pbnRlciArIDEyOCwgdGhpcy5wb2ludGVyICsgMTI4ICsgdGhpcy5kaWdlc3RMZW5ndGgpXG4gIH1cblxuICBhc3NlcnQoZW5jIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBlbmMubGVuZ3RoID49IHRoaXMuZGlnZXN0TGVuZ3RoLCAnaW5wdXQgbXVzdCBiZSBVaW50OEFycmF5IG9yIEJ1ZmZlcicpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaWdlc3RMZW5ndGg7IGkrKykge1xuICAgIGVuY1tpXSA9IHRoaXMuX21lbW9yeVt0aGlzLnBvaW50ZXIgKyAxMjggKyBpXVxuICB9XG5cbiAgcmV0dXJuIGVuY1xufVxuXG4vLyBsaWJzb2RpdW0gY29tcGF0XG5CbGFrZTJiLnByb3RvdHlwZS5maW5hbCA9IEJsYWtlMmIucHJvdG90eXBlLmRpZ2VzdFxuXG5CbGFrZTJiLldBU00gPSB3YXNtXG5CbGFrZTJiLlNVUFBPUlRFRCA9IHR5cGVvZiBXZWJBc3NlbWJseSAhPT0gJ3VuZGVmaW5lZCdcblxuQmxha2UyYi5yZWFkeSA9IGZ1bmN0aW9uIChjYikge1xuICBpZiAoIWNiKSBjYiA9IG5vb3BcbiAgaWYgKCF3YXNtUHJvbWlzZSkgcmV0dXJuIGNiKG5ldyBFcnJvcignV2ViQXNzZW1ibHkgbm90IHN1cHBvcnRlZCcpKVxuICByZXR1cm4gd2FzbVByb21pc2UudGhlbigoKSA9PiBjYigpLCBjYilcbn1cblxuQmxha2UyYi5wcm90b3R5cGUucmVhZHkgPSBCbGFrZTJiLnJlYWR5XG5cbkJsYWtlMmIucHJvdG90eXBlLmdldFBhcnRpYWxIYXNoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fbWVtb3J5LnNsaWNlKHRoaXMucG9pbnRlciwgdGhpcy5wb2ludGVyICsgMjE2KTtcbn1cblxuQmxha2UyYi5wcm90b3R5cGUuc2V0UGFydGlhbEhhc2ggPSBmdW5jdGlvbiAocGgpIHtcbiAgdGhpcy5fbWVtb3J5LnNldChwaCwgdGhpcy5wb2ludGVyKTtcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLyogZ2xvYmFsIHdpbmRvdyAqL1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xuaW1wb3J0IHsgQ2hhQ2hhIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5cbmNvbnN0IF9yZXZUYWJsZSA9IFtdO1xuZm9yIChsZXQgaT0wOyBpPDI1NjsgaSsrKSB7XG4gICAgX3JldlRhYmxlW2ldID0gX3JldlNsb3coaSwgOCk7XG59XG5cbmZ1bmN0aW9uIF9yZXZTbG93KGlkeCwgYml0cykge1xuICAgIGxldCByZXMgPTA7XG4gICAgbGV0IGEgPSBpZHg7XG4gICAgZm9yIChsZXQgaT0wOyBpPGJpdHM7IGkrKykge1xuICAgICAgICByZXMgPDw9IDE7XG4gICAgICAgIHJlcyA9IHJlcyB8IChhICYxKTtcbiAgICAgICAgYSA+Pj0xO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYml0UmV2ZXJzZShpZHgsIGJpdHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBfcmV2VGFibGVbaWR4ID4+PiAyNF0gfFxuICAgICAgICAoX3JldlRhYmxlWyhpZHggPj4+IDE2KSAmIDB4RkZdIDw8IDgpIHxcbiAgICAgICAgKF9yZXZUYWJsZVsoaWR4ID4+PiA4KSAmIDB4RkZdIDw8IDE2KSB8XG4gICAgICAgIChfcmV2VGFibGVbaWR4ICYgMHhGRl0gPDwgMjQpXG4gICAgKSA+Pj4gKDMyLWJpdHMpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cyKCBWIClcbntcbiAgICByZXR1cm4oICggKCBWICYgMHhGRkZGMDAwMCApICE9PSAwID8gKCBWICY9IDB4RkZGRjAwMDAsIDE2ICkgOiAwICkgfCAoICggViAmIDB4RkYwMEZGMDAgKSAhPT0gMCA/ICggViAmPSAweEZGMDBGRjAwLCA4ICkgOiAwICkgfCAoICggViAmIDB4RjBGMEYwRjAgKSAhPT0gMCA/ICggViAmPSAweEYwRjBGMEYwLCA0ICkgOiAwICkgfCAoICggViAmIDB4Q0NDQ0NDQ0MgKSAhPT0gMCA/ICggViAmPSAweENDQ0NDQ0NDLCAyICkgOiAwICkgfCAoICggViAmIDB4QUFBQUFBQUEgKSAhPT0gMCApICk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEhhc2goYiwgdGl0bGUpIHtcbiAgICBjb25zdCBhID0gbmV3IERhdGFWaWV3KGIuYnVmZmVyLCBiLmJ5dGVPZmZzZXQsIGIuYnl0ZUxlbmd0aCk7XG4gICAgbGV0IFMgPSBcIlwiO1xuICAgIGZvciAobGV0IGk9MDsgaTw0OyBpKyspIHtcbiAgICAgICAgaWYgKGk+MCkgUyArPSBcIlxcblwiO1xuICAgICAgICBTICs9IFwiXFx0XFx0XCI7XG4gICAgICAgIGZvciAobGV0IGo9MDsgajw0OyBqKyspIHtcbiAgICAgICAgICAgIGlmIChqPjApIFMgKz0gXCIgXCI7XG4gICAgICAgICAgICBTICs9IGEuZ2V0VWludDMyKGkqMTYraio0KS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0aXRsZSkgUyA9IHRpdGxlICsgXCJcXG5cIiArIFM7XG4gICAgcmV0dXJuIFM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoSXNFcXVhbChoMSwgaDIpIHtcbiAgICBpZiAoaDEuYnl0ZUxlbmd0aCAhPSBoMi5ieXRlTGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGR2MSA9IG5ldyBJbnQ4QXJyYXkoaDEpO1xuICAgIHZhciBkdjIgPSBuZXcgSW50OEFycmF5KGgyKTtcbiAgICBmb3IgKHZhciBpID0gMCA7IGkgIT0gaDEuYnl0ZUxlbmd0aCA7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChkdjFbaV0gIT0gZHYyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVIYXNoZXIoaCkge1xuICAgIGNvbnN0IHBoID0gaC5nZXRQYXJ0aWFsSGFzaCgpO1xuICAgIGNvbnN0IHJlcyA9IEJsYWtlMmIoNjQpO1xuICAgIHJlcy5zZXRQYXJ0aWFsSGFzaChwaCk7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbWVSYXRpbyhjdXJ2ZSwgZzFzLCBnMXN4LCBnMnMsIGcyc3gpIHtcbiAgICBpZiAoY3VydmUuRzEuaXNaZXJvKGcxcykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY3VydmUuRzEuaXNaZXJvKGcxc3gpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGN1cnZlLkcyLmlzWmVybyhnMnMpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGN1cnZlLkcyLmlzWmVybyhnMnN4KSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIHJldHVybiBjdXJ2ZS5GMTIuZXEoY3VydmUucGFpcmluZyhnMXMsIGcyc3gpLCBjdXJ2ZS5wYWlyaW5nKGcxc3gsIGcycykpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnBhaXJpbmdFcShnMXMsIGcyc3gsIGN1cnZlLkcxLm5lZyhnMXN4KSwgZzJzKTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc2tFbnRyb3B5KCkge1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5wcm9tcHQoXCJFbnRlciBhIHJhbmRvbSB0ZXh0LiAoRW50cm9weSk6IFwiLCBcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgICAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBybC5xdWVzdGlvbihcIkVudGVyIGEgcmFuZG9tIHRleHQuIChFbnRyb3B5KTogXCIsIChpbnB1dCkgPT4gcmVzb2x2ZShpbnB1dCkgKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tQnl0ZXMobikge1xuICAgIGxldCBhcnJheSA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHsgLy8gU3VwcG9ydGVkXG4gICAgICAgIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgfSBlbHNlIHsgLy8gTm9kZUpTXG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoYTI1NmRpZ2VzdChkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIFN1cHBvcnRlZFxuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBkYXRhLmJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIH0gZWxzZSB7IC8vIE5vZGVKU1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShkYXRhLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gbmV3IERhdGFWaWV3KGRhdGEuYnVmZmVyKS5nZXRVaW50MzIob2Zmc2V0LCBmYWxzZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSYW5kb21SbmcoZW50cm9weSkge1xuICAgIC8vIEdlbmVyYXRlIGEgcmFuZG9tIFJuZ1xuICAgIHdoaWxlICghZW50cm9weSkge1xuICAgICAgICBlbnRyb3B5ID0gYXdhaXQgYXNrRW50cm9weSgpO1xuICAgIH1cbiAgICBjb25zdCBoYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBoYXNoZXIudXBkYXRlKGdldFJhbmRvbUJ5dGVzKDY0KSk7XG4gICAgY29uc3QgZW5jID0gbmV3IFRleHRFbmNvZGVyKCk7IC8vIGFsd2F5cyB1dGYtOFxuICAgIGhhc2hlci51cGRhdGUoZW5jLmVuY29kZShlbnRyb3B5KSk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hlci5kaWdlc3QoKTtcblxuICAgIGNvbnN0IHNlZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7aTw4O2krKykge1xuICAgICAgICBzZWVkW2ldID0gcmVhZFVJbnQzMkJFKGhhc2gsIGkqNCk7XG4gICAgfVxuICAgIGNvbnN0IHJuZyA9IG5ldyBDaGFDaGEoc2VlZCk7XG4gICAgcmV0dXJuIHJuZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJuZ0Zyb21CZWFjb25QYXJhbXMoYmVhY29uSGFzaCwgbnVtSXRlcmF0aW9uc0V4cCkge1xuICAgIGxldCBuSXRlcmF0aW9uc0lubmVyO1xuICAgIGxldCBuSXRlcmF0aW9uc091dGVyO1xuICAgIGlmIChudW1JdGVyYXRpb25zRXhwPDMyKSB7XG4gICAgICAgIG5JdGVyYXRpb25zSW5uZXIgPSAoMSA8PCBudW1JdGVyYXRpb25zRXhwKSA+Pj4gMDtcbiAgICAgICAgbkl0ZXJhdGlvbnNPdXRlciA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbkl0ZXJhdGlvbnNJbm5lciA9IDB4MTAwMDAwMDAwO1xuICAgICAgICBuSXRlcmF0aW9uc091dGVyID0gKDEgPDwgKG51bUl0ZXJhdGlvbnNFeHAtMzIpKSA+Pj4gMDtcbiAgICB9XG5cbiAgICBsZXQgY3VySGFzaCA9IGJlYWNvbkhhc2g7XG4gICAgZm9yIChsZXQgaT0wOyBpPG5JdGVyYXRpb25zT3V0ZXI7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkl0ZXJhdGlvbnNJbm5lcjsgaisrKSB7XG4gICAgICAgICAgICBjdXJIYXNoID0gYXdhaXQgc2hhMjU2ZGlnZXN0KGN1ckhhc2gpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VySGFzaFYgPSBuZXcgRGF0YVZpZXcoY3VySGFzaC5idWZmZXIsIGN1ckhhc2guYnl0ZU9mZnNldCwgY3VySGFzaC5ieXRlTGVuZ3RoKTtcbiAgICBjb25zdCBzZWVkID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPDg7IGkrKykge1xuICAgICAgICBzZWVkW2ldID0gY3VySGFzaFYuZ2V0VWludDMyKGkqNCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHJuZyA9IG5ldyBDaGFDaGEoc2VlZCk7XG5cbiAgICByZXR1cm4gcm5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4MkJ5dGVBcnJheShzKSB7XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gcztcbiAgICBpZiAocy5zbGljZSgwLDIpID09IFwiMHhcIikgcz0gcy5zbGljZSgyKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocy5tYXRjaCgvW1xcZGEtZl17Mn0vZ2kpLm1hcChmdW5jdGlvbiAoaCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaCwgMTYpO1xuICAgIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVBcnJheTJoZXgoYnl0ZUFycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChieXRlQXJyYXksIGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgICAgcmV0dXJuIChcIjBcIiArIChieXRlICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUJpZ0ludHNXaXRoRmllbGQoRnIsIG8pIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpICB7XG4gICAgICAgIHJldHVybiBGci50b1N0cmluZyhvKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgICAgcmV0dXJuIG8ubWFwKHN0cmluZ2lmeUJpZ0ludHNXaXRoRmllbGQuYmluZChudWxsLCBGcikpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goIChrKSA9PiB7XG4gICAgICAgICAgICByZXNba10gPSBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkKEZyLCBvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mKG8pID09IFwiYmlnaW50XCIpIHx8IG8uZXEgIT09IHVuZGVmaW5lZCkgIHtcbiAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn0iLCJleHBvcnQgY29uc3QgSEVBREVSX1pLRVlfU0VDVElPTiA9IDE7XG5cbmV4cG9ydCBjb25zdCBHUk9USDE2X1BST1RPQ09MX0lEID0gMTtcbmV4cG9ydCBjb25zdCBQTE9OS19QUk9UT0NPTF9JRCA9IDI7XG5leHBvcnQgY29uc3QgRkZMT05LX1BST1RPQ09MX0lEID0gMTA7XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBGRmxvbmsgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgRkZfVF9QT0xfREVHX01JTiA9IDM7XG5cbi8vIEZGbG9uayBBXG5leHBvcnQgY29uc3QgQSA9IDEyO1xuXG4vLyBaS0VZIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfTlNFQ1RJT05TID0gMTc7XG5cbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0hFQURFUl9TRUNUSU9OID0gMjtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OID0gMztcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0FfTUFQX1NFQ1RJT04gPSA0O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfQl9NQVBfU0VDVElPTiA9IDU7XG5leHBvcnQgY29uc3QgWktFWV9GRl9DX01BUF9TRUNUSU9OID0gNjtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FMX1NFQ1RJT04gPSA3O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfUVJfU0VDVElPTiA9IDg7XG5leHBvcnQgY29uc3QgWktFWV9GRl9RTV9TRUNUSU9OID0gOTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FPX1NFQ1RJT04gPSAxMDtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1FDX1NFQ1RJT04gPSAxMTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1NJR01BMV9TRUNUSU9OID0gMTI7XG5leHBvcnQgY29uc3QgWktFWV9GRl9TSUdNQTJfU0VDVElPTiA9IDEzO1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04gPSAxNDtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX0xBR1JBTkdFX1NFQ1RJT04gPSAxNTtcbmV4cG9ydCBjb25zdCBaS0VZX0ZGX1BUQVVfU0VDVElPTiA9IDE2O1xuZXhwb3J0IGNvbnN0IFpLRVlfRkZfQzBfU0VDVElPTiA9IDE3O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLy8gRm9ybWF0XG4vLyA9PT09PT1cbi8vIEhlYWRlcigxKVxuLy8gICAgICBQcm92ZXIgVHlwZSAxIEdyb3RoXG4vLyBIZWFkZXJHcm90aCgyKVxuLy8gICAgICBuOHFcbi8vICAgICAgcVxuLy8gICAgICBuOHJcbi8vICAgICAgclxuLy8gICAgICBOVmFyc1xuLy8gICAgICBOUHViXG4vLyAgICAgIERvbWFpblNpemUgIChtdWx0aXBsZSBvZiAyXG4vLyAgICAgIGFscGhhMVxuLy8gICAgICBiZXRhMVxuLy8gICAgICBkZWx0YTFcbi8vICAgICAgYmV0YTJcbi8vICAgICAgZ2FtbWEyXG4vLyAgICAgIGRlbHRhMlxuLy8gSUMoMylcbi8vIENvZWZzKDQpXG4vLyBQb2ludHNBKDUpXG4vLyBQb2ludHNCMSg2KVxuLy8gUG9pbnRzQjIoNylcbi8vIFBvaW50c0MoOClcbi8vIFBvaW50c0goOSlcbi8vIENvbnRyaWJ1dGlvbnMoMTApXG5cbmltcG9ydCB7IFNjYWxhciwgRjFGaWVsZCB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyBsb2cyIH0gZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IHtGRkxPTktfUFJPVE9DT0xfSUQsIEdST1RIMTZfUFJPVE9DT0xfSUQsIFBMT05LX1BST1RPQ09MX0lEfSBmcm9tIFwiLi96a2V5X2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHtaS0VZX0ZGX0hFQURFUl9TRUNUSU9OfSBmcm9tIFwiLi9mZmxvbmtfY29uc3RhbnRzLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUhlYWRlcihmZCwgemtleSkge1xuXG4gICAgLy8gV3JpdGUgdGhlIGhlYWRlclxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDEpOyAvLyBHcm90aFxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgLy8gV3JpdGUgdGhlIEdyb3RoIGhlYWRlciBzZWN0aW9uXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMik7XG4gICAgY29uc3QgcHJpbWVRID0gY3VydmUucTtcbiAgICBjb25zdCBuOHEgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgY29uc3QgcHJpbWVSID0gY3VydmUucjtcbiAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVSKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihuOHEpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgcHJpbWVRLCBuOHEpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIobjhyKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMud3JpdGVCaWdJbnQoZmQsIHByaW1lUiwgbjhyKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHprZXkublZhcnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgYmFyc1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoemtleS5uUHVibGljKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiBwdWJsaWMgdmFycyAobm90IGluY2x1ZGluZyBPTkUpXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMih6a2V5LmRvbWFpblNpemUpOyAgICAgICAgICAgICAgICAgIC8vIGRvbWFpblNpemVcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS52a19hbHBoYV8xKTtcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS52a19iZXRhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoZmQsIGN1cnZlLCB6a2V5LnZrX2JldGFfMik7XG4gICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkudmtfZ2FtbWFfMik7XG4gICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkudmtfZGVsdGFfMSk7XG4gICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkudmtfZGVsdGFfMik7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVpLZXkoZmlsZU5hbWUsIHprZXkpIHtcblxuICAgIGxldCBjdXJ2ZSA9IGdldEN1cnZlKHprZXkucSk7XG5cbiAgICBjb25zdCBmZCA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKGZpbGVOYW1lLFwiemtleVwiLCAxLCA5KTtcblxuICAgIGF3YWl0IHdyaXRlSGVhZGVyKGZkLCB6a2V5KTtcbiAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgoemtleS5yKSAtIDEpIC8gNjQpICsxKSo4O1xuICAgIGNvbnN0IFJyID0gU2NhbGFyLm1vZChTY2FsYXIuc2hsKDEsIG44cio4KSwgemtleS5yKTtcbiAgICBjb25zdCBSMnIgPSBTY2FsYXIubW9kKFNjYWxhci5tdWwoUnIsUnIpLCB6a2V5LnIpO1xuXG4gICAgLy8gV3JpdGUgUG9scyAoQSBhbmQgQiAoQyBjYW4gYmUgb21taXRlZCkpXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIHprZXkuY2NvZWZzID0gemtleS5jY29lZnMuZmlsdGVyKGMgPT4gYy5tYXRyaXg8Mik7XG4gICAgemtleS5jY29lZnMuc29ydCggKGEsYikgPT4gYS5jb25zdHJhaW50IC0gYi5jb25zdHJhaW50ICk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA0KTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHprZXkuY2NvZWZzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPHprZXkuY2NvZWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZWYgPSB6a2V5LmNjb2Vmc1tpXTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb2VmLm1hdHJpeCk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY29lZi5jb25zdHJhaW50KTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb2VmLnNpZ25hbCk7XG4gICAgICAgIGF3YWl0IHdyaXRlRnIyKGNvZWYudmFsdWUpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gV3JpdGUgSUMgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAzKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgemtleS5JQ1tpXSApO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gV3JpdGUgQVxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA1KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uVmFyczsgaSsrKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoZmQsIGN1cnZlLCB6a2V5LkFbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIEIxXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDYpO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuQjFbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIEIyXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDcpO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIHprZXkuQjJbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIENcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgOCk7XG4gICAgZm9yIChsZXQgaT16a2V5Lm5QdWJsaWMrMTsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuQ1tpXSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG5cbiAgICAvLyBXcml0ZSBIIHBvaW50c1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA5KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShmZCwgY3VydmUsIHprZXkuaEV4cHNbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUZyMihuKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdG8gbW9udGdvbWVyeVxuICAgICAgICBuID0gU2NhbGFyLm1vZCggU2NhbGFyLm11bChuLCBSMnIpLCB6a2V5LnIpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgbiwgbjhyKTtcbiAgICB9XG5cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShmZCwgY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzEuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMS50b1JwckxFTShidWZmLCAwLCBwKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihmZCwgY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzIuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMi50b1JwckxFTShidWZmLCAwLCBwKTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMS5GLm44KjIpO1xuICAgIGNvbnN0IHJlcyA9IGN1cnZlLkcxLmZyb21ScHJMRU0oYnVmZiwgMCk7XG4gICAgcmV0dXJuIHRvT2JqZWN0ID8gY3VydmUuRzEudG9PYmplY3QocmVzKSA6IHJlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEcyKGZkLCBjdXJ2ZSwgdG9PYmplY3QpIHtcbiAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMi5GLm44KjIpO1xuICAgIGNvbnN0IHJlcyA9IGN1cnZlLkcyLmZyb21ScHJMRU0oYnVmZiwgMCk7XG4gICAgcmV0dXJuIHRvT2JqZWN0ID8gY3VydmUuRzIudG9PYmplY3QocmVzKSA6IHJlcztcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEhlYWRlcihmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KSB7XG4gICAgLy8gUmVhZCBIZWFkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDEpO1xuICAgIGNvbnN0IHByb3RvY29sSWQgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgaWYgKHByb3RvY29sSWQgPT09IEdST1RIMTZfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRIZWFkZXJHcm90aDE2KGZkLCBzZWN0aW9ucywgdG9PYmplY3QpO1xuICAgIH0gZWxzZSBpZiAocHJvdG9jb2xJZCA9PT0gUExPTktfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRIZWFkZXJQbG9uayhmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KTtcbiAgICB9IGVsc2UgaWYgKHByb3RvY29sSWQgPT09IEZGTE9OS19QUk9UT0NPTF9JRCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEhlYWRlckZGbG9uayhmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm90b2NvbCBub3Qgc3VwcG9ydGVkOiBcIik7XG4gICAgfVxufVxuXG5cblxuXG5hc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyR3JvdGgxNihmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KSB7XG4gICAgY29uc3QgemtleSA9IHt9O1xuXG4gICAgemtleS5wcm90b2NvbCA9IFwiZ3JvdGgxNlwiO1xuXG4gICAgLy8gUmVhZCBHcm90aCBIZWFkZXJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDIpO1xuICAgIGNvbnN0IG44cSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkubjhxID0gbjhxO1xuICAgIHprZXkucSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCBuOHEpO1xuXG4gICAgY29uc3QgbjhyID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uOHIgPSBuOHI7XG4gICAgemtleS5yID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44cik7XG4gICAgemtleS5jdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG4gICAgemtleS5uVmFycyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkublB1YmxpYyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkuZG9tYWluU2l6ZSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkucG93ZXIgPSBsb2cyKHprZXkuZG9tYWluU2l6ZSk7XG4gICAgemtleS52a19hbHBoYV8xID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS52a19iZXRhXzEgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LnZrX2JldGFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZ2FtbWFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZGVsdGFfMSA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkudmtfZGVsdGFfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICByZXR1cm4gemtleTtcblxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkSGVhZGVyUGxvbmsoZmQsIHNlY3Rpb25zLCB0b09iamVjdCkge1xuICAgIGNvbnN0IHprZXkgPSB7fTtcblxuICAgIHprZXkucHJvdG9jb2wgPSBcInBsb25rXCI7XG5cbiAgICAvLyBSZWFkIFBsb25rIEhlYWRlclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMik7XG4gICAgY29uc3QgbjhxID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uOHEgPSBuOHE7XG4gICAgemtleS5xID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44cSk7XG5cbiAgICBjb25zdCBuOHIgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm44ciA9IG44cjtcbiAgICB6a2V5LnIgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpZ0ludChmZCwgbjhyKTtcbiAgICB6a2V5LmN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcbiAgICB6a2V5Lm5WYXJzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uUHVibGljID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5kb21haW5TaXplID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5wb3dlciA9IGxvZzIoemtleS5kb21haW5TaXplKTtcbiAgICB6a2V5Lm5BZGRpdGlvbnMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm5Db25zdHJhaW50cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkuazEgPSBhd2FpdCBmZC5yZWFkKG44cik7XG4gICAgemtleS5rMiA9IGF3YWl0IGZkLnJlYWQobjhyKTtcblxuICAgIHprZXkuUW0gPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlFsID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS5RciA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkuUW8gPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlFjID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS5TMSA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuICAgIHprZXkuUzIgPSBhd2FpdCByZWFkRzEoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcbiAgICB6a2V5LlMzID0gYXdhaXQgcmVhZEcxKGZkLCB6a2V5LmN1cnZlLCB0b09iamVjdCk7XG4gICAgemtleS5YXzIgPSBhd2FpdCByZWFkRzIoZmQsIHprZXkuY3VydmUsIHRvT2JqZWN0KTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICByZXR1cm4gemtleTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEhlYWRlckZGbG9uayhmZCwgc2VjdGlvbnMsIHRvT2JqZWN0KSB7XG4gICAgY29uc3QgemtleSA9IHt9O1xuXG4gICAgemtleS5wcm90b2NvbCA9IFwiZmZsb25rXCI7XG4gICAgemtleS5wcm90b2NvbElkID0gRkZMT05LX1BST1RPQ09MX0lEO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCBaS0VZX0ZGX0hFQURFUl9TRUNUSU9OKTtcbiAgICBjb25zdCBuOHEgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICB6a2V5Lm44cSA9IG44cTtcbiAgICB6a2V5LnEgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpZ0ludChmZCwgbjhxKTtcbiAgICB6a2V5LmN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcblxuICAgIGNvbnN0IG44ciA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkubjhyID0gbjhyO1xuICAgIHprZXkuciA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCBuOHIpO1xuXG4gICAgemtleS5uVmFycyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkublB1YmxpYyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkuZG9tYWluU2l6ZSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkucG93ZXIgPSBsb2cyKHprZXkuZG9tYWluU2l6ZSk7XG4gICAgemtleS5uQWRkaXRpb25zID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgemtleS5uQ29uc3RyYWludHMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcblxuICAgIHprZXkuazEgPSBhd2FpdCBmZC5yZWFkKG44cik7XG4gICAgemtleS5rMiA9IGF3YWl0IGZkLnJlYWQobjhyKTtcblxuICAgIHprZXkudzMgPSBhd2FpdCBmZC5yZWFkKG44cik7XG4gICAgemtleS53NCA9IGF3YWl0IGZkLnJlYWQobjhyKTtcbiAgICB6a2V5Lnc4ID0gYXdhaXQgZmQucmVhZChuOHIpO1xuICAgIHprZXkud3IgPSBhd2FpdCBmZC5yZWFkKG44cik7XG5cbiAgICB6a2V5LlhfMiA9IGF3YWl0IHJlYWRHMihmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuXG4gICAgemtleS5DMCA9IGF3YWl0IHJlYWRHMShmZCwgemtleS5jdXJ2ZSwgdG9PYmplY3QpO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiB6a2V5O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFpLZXkoZmlsZU5hbWUsIHRvT2JqZWN0KSB7XG4gICAgY29uc3Qge2ZkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoZmlsZU5hbWUsIFwiemtleVwiLCAxKTtcblxuICAgIGNvbnN0IHprZXkgPSBhd2FpdCByZWFkSGVhZGVyKGZkLCBzZWN0aW9ucywgdG9PYmplY3QpO1xuXG4gICAgY29uc3QgRnIgPSBuZXcgRjFGaWVsZCh6a2V5LnIpO1xuICAgIGNvbnN0IFJyID0gU2NhbGFyLm1vZChTY2FsYXIuc2hsKDEsIHprZXkubjhyKjgpLCB6a2V5LnIpO1xuICAgIGNvbnN0IFJyaSA9IEZyLmludihScik7XG4gICAgY29uc3QgUnJpMiA9IEZyLm11bChScmksIFJyaSk7XG5cbiAgICBsZXQgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgLy8gUmVhZCBJQyBTZWN0aW9uXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDMpO1xuICAgIHprZXkuSUMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBjb25zdCBQID0gYXdhaXQgcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgICAgICB6a2V5LklDLnB1c2goUCk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cblxuICAgIC8vIFJlYWQgQ29lZnNcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgNCk7XG4gICAgY29uc3QgbkNDb2VmcyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHprZXkuY2NvZWZzID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPG5DQ29lZnM7IGkrKykge1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgcmVhZEZyMih0b09iamVjdCk7XG4gICAgICAgIHprZXkuY2NvZWZzLnB1c2goe1xuICAgICAgICAgICAgbWF0cml4OiBtLFxuICAgICAgICAgICAgY29uc3RyYWludDogYyxcbiAgICAgICAgICAgIHNpZ25hbDogcyxcbiAgICAgICAgICAgIHZhbHVlOiB2XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgLy8gUmVhZCBBIHBvaW50c1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCA1KTtcbiAgICB6a2V5LkEgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5uVmFyczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IEEgPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgICAgIHprZXkuQVtpXSA9IEE7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cblxuICAgIC8vIFJlYWQgQjFcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgNik7XG4gICAgemtleS5CMSA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTx6a2V5Lm5WYXJzOyBpKyspIHtcbiAgICAgICAgY29uc3QgQjEgPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG5cbiAgICAgICAgemtleS5CMVtpXSA9IEIxO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG5cbiAgICAvLyBSZWFkIEIyIHBvaW50c1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCA3KTtcbiAgICB6a2V5LkIyID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPHprZXkublZhcnM7IGkrKykge1xuICAgICAgICBjb25zdCBCMiA9IGF3YWl0IHJlYWRHMihmZCwgY3VydmUsIHRvT2JqZWN0KTtcbiAgICAgICAgemtleS5CMltpXSA9IEIyO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG5cbiAgICAvLyBSZWFkIEMgcG9pbnRzXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDgpO1xuICAgIHprZXkuQyA9IFtdO1xuICAgIGZvciAobGV0IGk9emtleS5uUHVibGljKzE7IGk8emtleS5uVmFyczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IEMgPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG5cbiAgICAgICAgemtleS5DW2ldID0gQztcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuXG4gICAgLy8gUmVhZCBIIHBvaW50c1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCA5KTtcbiAgICB6a2V5LmhFeHBzID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IEggPSBhd2FpdCByZWFkRzEoZmQsIGN1cnZlLCB0b09iamVjdCk7XG4gICAgICAgIHprZXkuaEV4cHMucHVzaChIKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gemtleTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRGcjIoLyogdG9PYmplY3QgKi8pIHtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCB6a2V5Lm44cik7XG4gICAgICAgIHJldHVybiBGci5tdWwobiwgUnJpMik7XG4gICAgfVxuXG59XG5cblxuYXN5bmMgZnVuY3Rpb24gcmVhZENvbnRyaWJ1dGlvbihmZCwgY3VydmUsIHRvT2JqZWN0KSB7XG4gICAgY29uc3QgYyA9IHtkZWx0YTp7fX07XG4gICAgYy5kZWx0YUFmdGVyID0gYXdhaXQgcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGMuZGVsdGEuZzFfcyA9IGF3YWl0IHJlYWRHMShmZCwgY3VydmUsIHRvT2JqZWN0KTtcbiAgICBjLmRlbHRhLmcxX3N4ID0gYXdhaXQgcmVhZEcxKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGMuZGVsdGEuZzJfc3B4ID0gYXdhaXQgcmVhZEcyKGZkLCBjdXJ2ZSwgdG9PYmplY3QpO1xuICAgIGMudHJhbnNjcmlwdCA9IGF3YWl0IGZkLnJlYWQoNjQpO1xuICAgIGMudHlwZSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgY29uc3QgcGFyYW1MZW5ndGggPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBjb25zdCBjdXJQb3MgPSBmZC5wb3M7XG4gICAgbGV0IGxhc3RUeXBlID0wO1xuICAgIHdoaWxlIChmZC5wb3MtY3VyUG9zIDwgcGFyYW1MZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYnVmZlR5cGUgPSBhd2FpdCBmZC5yZWFkKDEpO1xuICAgICAgICBpZiAoYnVmZlR5cGVbMF08PSBsYXN0VHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVycyBpbiB0aGUgY29udHJpYnV0aW9uIG11c3QgYmUgc29ydGVkXCIpO1xuICAgICAgICBsYXN0VHlwZSA9IGJ1ZmZUeXBlWzBdO1xuICAgICAgICBpZiAoYnVmZlR5cGVbMF09PTEpIHsgICAgIC8vIE5hbWVcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMZW4gPSBhd2FpdCBmZC5yZWFkKDEpO1xuICAgICAgICAgICAgY29uc3QgYnVmZlN0ciA9IGF3YWl0IGZkLnJlYWQoYnVmZkxlblswXSk7XG4gICAgICAgICAgICBjLm5hbWUgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnVmZlN0cik7XG4gICAgICAgIH0gZWxzZSBpZiAoYnVmZlR5cGVbMF09PTIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZFeHAgPSBhd2FpdCBmZC5yZWFkKDEpO1xuICAgICAgICAgICAgYy5udW1JdGVyYXRpb25zRXhwID0gYnVmZkV4cFswXTtcbiAgICAgICAgfSBlbHNlIGlmIChidWZmVHlwZVswXT09Mykge1xuICAgICAgICAgICAgY29uc3QgYnVmZkxlbiA9IGF3YWl0IGZkLnJlYWQoMSk7XG4gICAgICAgICAgICBjLmJlYWNvbkhhc2ggPSBhd2FpdCBmZC5yZWFkKGJ1ZmZMZW5bMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChmZC5wb3MgIT0gY3VyUG9zICsgcGFyYW1MZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVzIGRvIG5vdCBtYXRjaFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1QQ1BhcmFtcyhmZCwgY3VydmUsIHNlY3Rpb25zKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCAxMCk7XG4gICAgY29uc3QgcmVzID0geyBjb250cmlidXRpb25zOiBbXX07XG4gICAgcmVzLmNzSGFzaCA9IGF3YWl0IGZkLnJlYWQoNjQpO1xuICAgIGNvbnN0IG4gPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCByZWFkQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSk7XG4gICAgICAgIHJlcy5jb250cmlidXRpb25zLnB1c2goYyk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUNvbnRyaWJ1dGlvbihmZCwgY3VydmUsIGMpIHtcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgYy5kZWx0YUFmdGVyKTtcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zKTtcbiAgICBhd2FpdCB3cml0ZUcxKGZkLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zeCk7XG4gICAgYXdhaXQgd3JpdGVHMihmZCwgY3VydmUsIGMuZGVsdGEuZzJfc3B4KTtcbiAgICBhd2FpdCBmZC53cml0ZShjLnRyYW5zY3JpcHQpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoYy50eXBlIHx8IDApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgaWYgKGMubmFtZSkge1xuICAgICAgICBwYXJhbXMucHVzaCgxKTsgICAgICAvLyBQYXJhbSBOYW1lXG4gICAgICAgIGNvbnN0IG5hbWVEYXRhID0gbmV3IFRleHRFbmNvZGVyKFwidXRmLThcIikuZW5jb2RlKGMubmFtZS5zdWJzdHJpbmcoMCw2NCkpO1xuICAgICAgICBwYXJhbXMucHVzaChuYW1lRGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5hbWVEYXRhLmJ5dGVMZW5ndGg7IGkrKykgcGFyYW1zLnB1c2gobmFtZURhdGFbaV0pO1xuICAgIH1cbiAgICBpZiAoYy50eXBlID09IDEpIHtcbiAgICAgICAgcGFyYW1zLnB1c2goMik7ICAgICAgLy8gUGFyYW0gbnVtSXRlcmF0aW9uc0V4cFxuICAgICAgICBwYXJhbXMucHVzaChjLm51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgICAgIHBhcmFtcy5wdXNoKDMpOyAgICAgIC8vIEJlYWNvbiBIYXNoXG4gICAgICAgIHBhcmFtcy5wdXNoKGMuYmVhY29uSGFzaC5ieXRlTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGMuYmVhY29uSGFzaC5ieXRlTGVuZ3RoOyBpKyspIHBhcmFtcy5wdXNoKGMuYmVhY29uSGFzaFtpXSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubGVuZ3RoPjApIHtcbiAgICAgICAgY29uc3QgcGFyYW1zQnVmZiA9IG5ldyBVaW50OEFycmF5KHBhcmFtcyk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlVUxFMzIocGFyYW1zQnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUocGFyYW1zQnVmZik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMigwKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlTVBDUGFyYW1zKGZkLCBjdXJ2ZSwgbXBjUGFyYW1zKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxMCk7XG4gICAgYXdhaXQgZmQud3JpdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGk9MDsgaTxtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhd2FpdCB3cml0ZUNvbnRyaWJ1dGlvbihmZCwgY3VydmUsbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0pO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hHMShoYXNoZXIsIGN1cnZlLCBwKSB7XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkcxLkYubjgqMik7XG4gICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYnVmZiwgMCwgcCk7XG4gICAgaGFzaGVyLnVwZGF0ZShidWZmKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hHMihoYXNoZXIsY3VydmUsIHApIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzIuRi5uOCoyKTtcbiAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBwKTtcbiAgICBoYXNoZXIudXBkYXRlKGJ1ZmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFB1YktleShoYXNoZXIsIGN1cnZlLCBjKSB7XG4gICAgaGFzaEcxKGhhc2hlciwgY3VydmUsIGMuZGVsdGFBZnRlcik7XG4gICAgaGFzaEcxKGhhc2hlciwgY3VydmUsIGMuZGVsdGEuZzFfcyk7XG4gICAgaGFzaEcxKGhhc2hlciwgY3VydmUsIGMuZGVsdGEuZzFfc3gpO1xuICAgIGhhc2hHMihoYXNoZXIsIGN1cnZlLCBjLmRlbHRhLmcyX3NweCk7XG4gICAgaGFzaGVyLnVwZGF0ZShjLnRyYW5zY3JpcHQpO1xufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZShmZCwgd2l0bmVzcywgcHJpbWUpIHtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMSk7XG4gICAgY29uc3QgbjggPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWUpIC0gMSkgLyA2NCkgKzEpKjg7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihuOCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLndyaXRlQmlnSW50KGZkLCBwcmltZSwgbjgpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIod2l0bmVzcy5sZW5ndGgpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAyKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8d2l0bmVzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMud3JpdGVCaWdJbnQoZmQsIHdpdG5lc3NbaV0sIG44KTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCwgMik7XG5cblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVCaW4oZmQsIHdpdG5lc3NCaW4sIHByaW1lKSB7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDEpO1xuICAgIGNvbnN0IG44ID0gKE1hdGguZmxvb3IoIChTY2FsYXIuYml0TGVuZ3RoKHByaW1lKSAtIDEpIC8gNjQpICsxKSo4O1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIobjgpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy53cml0ZUJpZ0ludChmZCwgcHJpbWUsIG44KTtcbiAgICBpZiAod2l0bmVzc0Jpbi5ieXRlTGVuZ3RoICUgbjggIT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHdpdG5lc3MgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHdpdG5lc3NCaW4uYnl0ZUxlbmd0aCAvIG44KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAyKTtcbiAgICBhd2FpdCBmZC53cml0ZSh3aXRuZXNzQmluKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEhlYWRlcihmZCwgc2VjdGlvbnMpIHtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMSk7XG4gICAgY29uc3QgbjggPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICBjb25zdCBxID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaWdJbnQoZmQsIG44KTtcbiAgICBjb25zdCBuV2l0bmVzcyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICByZXR1cm4ge244LCBxLCBuV2l0bmVzc307XG5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWQoZmlsZU5hbWUpIHtcblxuICAgIGNvbnN0IHtmZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKGZpbGVOYW1lLCBcInd0bnNcIiwgMik7XG5cbiAgICBjb25zdCB7bjgsIG5XaXRuZXNzfSA9IGF3YWl0IHJlYWRIZWFkZXIoZmQsIHNlY3Rpb25zKTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMik7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPG5XaXRuZXNzOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCBuOCk7XG4gICAgICAgIHJlcy5wdXNoKHYpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgYXdhaXQgZmQuY2xvc2UoKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgemtleVV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIHd0bnNVdGlscyBmcm9tIFwiLi93dG5zX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyBsb2cyIH0gZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IHsgU2NhbGFyLCB1dGlscywgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3N0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGdyb3RoMTZQcm92ZSh6a2V5RmlsZU5hbWUsIHdpdG5lc3NGaWxlTmFtZSwgbG9nZ2VyKSB7XG4gICAgY29uc3Qge2ZkOiBmZFd0bnMsIHNlY3Rpb25zOiBzZWN0aW9uc1d0bnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHdpdG5lc3NGaWxlTmFtZSwgXCJ3dG5zXCIsIDIsIDE8PDI1LCAxPDwyMyk7XG5cbiAgICBjb25zdCB3dG5zID0gYXdhaXQgd3Ruc1V0aWxzLnJlYWRIZWFkZXIoZmRXdG5zLCBzZWN0aW9uc1d0bnMpO1xuXG4gICAgY29uc3Qge2ZkOiBmZFpLZXksIHNlY3Rpb25zOiBzZWN0aW9uc1pLZXl9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHprZXlGaWxlTmFtZSwgXCJ6a2V5XCIsIDIsIDE8PDI1LCAxPDwyMyk7XG5cbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCBzZWN0aW9uc1pLZXkpO1xuXG4gICAgaWYgKHprZXkucHJvdG9jb2wgIT0gXCJncm90aDE2XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiemtleSBmaWxlIGlzIG5vdCBncm90aDE2XCIpO1xuICAgIH1cblxuICAgIGlmICghU2NhbGFyLmVxKHprZXkuciwgIHd0bnMucSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3VydmUgb2YgdGhlIHdpdG5lc3MgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnZlIG9mIHRoZSBwcm92aW5nIGtleVwiKTtcbiAgICB9XG5cbiAgICBpZiAod3Rucy5uV2l0bmVzcyAhPSB6a2V5Lm5WYXJzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRuZXNzIGxlbmd0aC4gQ2lyY3VpdDogJHt6a2V5Lm5WYXJzfSwgd2l0bmVzczogJHt3dG5zLm5XaXRuZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnZlID0gemtleS5jdXJ2ZTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRzIgPSBjdXJ2ZS5HMjtcblxuICAgIGNvbnN0IHBvd2VyID0gbG9nMih6a2V5LmRvbWFpblNpemUpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiUmVhZGluZyBXdG5zXCIpO1xuICAgIGNvbnN0IGJ1ZmZXaXRuZXNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkV3Rucywgc2VjdGlvbnNXdG5zLCAyKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIENvZWZmc1wiKTtcbiAgICBjb25zdCBidWZmQ29lZmZzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA0KTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkJ1aWxkaW5nIEFCQ1wiKTtcbiAgICBjb25zdCBbYnVmZkFfVCwgYnVmZkJfVCwgYnVmZkNfVF0gPSBhd2FpdCBidWlsZEFCQzEoY3VydmUsIHprZXksIGJ1ZmZXaXRuZXNzLCBidWZmQ29lZmZzLCBsb2dnZXIpO1xuXG4gICAgY29uc3QgaW5jID0gcG93ZXIgPT0gRnIucyA/IGN1cnZlLkZyLnNoaWZ0IDogY3VydmUuRnIud1twb3dlcisxXTtcblxuICAgIGNvbnN0IGJ1ZmZBID0gYXdhaXQgRnIuaWZmdChidWZmQV9ULCBcIlwiLCBcIlwiLCBsb2dnZXIsIFwiSUZGVF9BXCIpO1xuICAgIGNvbnN0IGJ1ZmZBb2RkID0gYXdhaXQgRnIuYmF0Y2hBcHBseUtleShidWZmQSwgRnIuZSgxKSwgaW5jKTtcbiAgICBjb25zdCBidWZmQW9kZF9UID0gYXdhaXQgRnIuZmZ0KGJ1ZmZBb2RkLCBcIlwiLCBcIlwiLCBsb2dnZXIsIFwiRkZUX0FcIik7XG5cbiAgICBjb25zdCBidWZmQiA9IGF3YWl0IEZyLmlmZnQoYnVmZkJfVCwgXCJcIiwgXCJcIiwgbG9nZ2VyLCBcIklGRlRfQlwiKTtcbiAgICBjb25zdCBidWZmQm9kZCA9IGF3YWl0IEZyLmJhdGNoQXBwbHlLZXkoYnVmZkIsIEZyLmUoMSksIGluYyk7XG4gICAgY29uc3QgYnVmZkJvZGRfVCA9IGF3YWl0IEZyLmZmdChidWZmQm9kZCwgXCJcIiwgXCJcIiwgbG9nZ2VyLCBcIkZGVF9CXCIpO1xuXG4gICAgY29uc3QgYnVmZkMgPSBhd2FpdCBGci5pZmZ0KGJ1ZmZDX1QsIFwiXCIsIFwiXCIsIGxvZ2dlciwgXCJJRkZUX0NcIik7XG4gICAgY29uc3QgYnVmZkNvZGQgPSBhd2FpdCBGci5iYXRjaEFwcGx5S2V5KGJ1ZmZDLCBGci5lKDEpLCBpbmMpO1xuICAgIGNvbnN0IGJ1ZmZDb2RkX1QgPSBhd2FpdCBGci5mZnQoYnVmZkNvZGQsIFwiXCIsIFwiXCIsIGxvZ2dlciwgXCJGRlRfQ1wiKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkpvaW4gQUJDXCIpO1xuICAgIGNvbnN0IGJ1ZmZQb2RkX1QgPSBhd2FpdCBqb2luQUJDKGN1cnZlLCB6a2V5LCBidWZmQW9kZF9ULCBidWZmQm9kZF9ULCBidWZmQ29kZF9ULCBsb2dnZXIpO1xuXG4gICAgbGV0IHByb29mID0ge307XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIEEgUG9pbnRzXCIpO1xuICAgIGNvbnN0IGJ1ZmZCYXNlc0EgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDUpO1xuICAgIHByb29mLnBpX2EgPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShidWZmQmFzZXNBLCBidWZmV2l0bmVzcywgbG9nZ2VyLCBcIm11bHRpZXhwIEFcIik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIEIxIFBvaW50c1wiKTtcbiAgICBjb25zdCBidWZmQmFzZXNCMSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNik7XG4gICAgbGV0IHBpYjEgPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShidWZmQmFzZXNCMSwgYnVmZldpdG5lc3MsIGxvZ2dlciwgXCJtdWx0aWV4cCBCMVwiKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlJlYWRpbmcgQjIgUG9pbnRzXCIpO1xuICAgIGNvbnN0IGJ1ZmZCYXNlc0IyID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA3KTtcbiAgICBwcm9vZi5waV9iID0gYXdhaXQgY3VydmUuRzIubXVsdGlFeHBBZmZpbmUoYnVmZkJhc2VzQjIsIGJ1ZmZXaXRuZXNzLCBsb2dnZXIsIFwibXVsdGlleHAgQjJcIik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIEMgUG9pbnRzXCIpO1xuICAgIGNvbnN0IGJ1ZmZCYXNlc0MgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDgpO1xuICAgIHByb29mLnBpX2MgPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShidWZmQmFzZXNDLCBidWZmV2l0bmVzcy5zbGljZSgoemtleS5uUHVibGljKzEpKmN1cnZlLkZyLm44KSwgbG9nZ2VyLCBcIm11bHRpZXhwIENcIik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJSZWFkaW5nIEggUG9pbnRzXCIpO1xuICAgIGNvbnN0IGJ1ZmZCYXNlc0ggPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDkpO1xuICAgIGNvbnN0IHJlc0ggPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShidWZmQmFzZXNILCBidWZmUG9kZF9ULCBsb2dnZXIsIFwibXVsdGlleHAgSFwiKTtcblxuICAgIGNvbnN0IHIgPSBjdXJ2ZS5Gci5yYW5kb20oKTtcbiAgICBjb25zdCBzID0gY3VydmUuRnIucmFuZG9tKCk7XG5cbiAgICBwcm9vZi5waV9hICA9IEcxLmFkZCggcHJvb2YucGlfYSwgemtleS52a19hbHBoYV8xICk7XG4gICAgcHJvb2YucGlfYSAgPSBHMS5hZGQoIHByb29mLnBpX2EsIEcxLnRpbWVzRnIoIHprZXkudmtfZGVsdGFfMSwgciApKTtcblxuICAgIHByb29mLnBpX2IgID0gRzIuYWRkKCBwcm9vZi5waV9iLCB6a2V5LnZrX2JldGFfMiApO1xuICAgIHByb29mLnBpX2IgID0gRzIuYWRkKCBwcm9vZi5waV9iLCBHMi50aW1lc0ZyKCB6a2V5LnZrX2RlbHRhXzIsIHMgKSk7XG5cbiAgICBwaWIxID0gRzEuYWRkKCBwaWIxLCB6a2V5LnZrX2JldGFfMSApO1xuICAgIHBpYjEgPSBHMS5hZGQoIHBpYjEsIEcxLnRpbWVzRnIoIHprZXkudmtfZGVsdGFfMSwgcyApKTtcblxuICAgIHByb29mLnBpX2MgPSBHMS5hZGQocHJvb2YucGlfYywgcmVzSCk7XG5cblxuICAgIHByb29mLnBpX2MgID0gRzEuYWRkKCBwcm9vZi5waV9jLCBHMS50aW1lc0ZyKCBwcm9vZi5waV9hLCBzICkpO1xuICAgIHByb29mLnBpX2MgID0gRzEuYWRkKCBwcm9vZi5waV9jLCBHMS50aW1lc0ZyKCBwaWIxLCByICkpO1xuICAgIHByb29mLnBpX2MgID0gRzEuYWRkKCBwcm9vZi5waV9jLCBHMS50aW1lc0ZyKCB6a2V5LnZrX2RlbHRhXzEsIEZyLm5lZyhGci5tdWwocixzKSApKSk7XG5cblxuICAgIGxldCBwdWJsaWNTaWduYWxzID0gW107XG5cbiAgICBmb3IgKGxldCBpPTE7IGk8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBjb25zdCBiID0gYnVmZldpdG5lc3Muc2xpY2UoaSpGci5uOCwgaSpGci5uOCtGci5uOCk7XG4gICAgICAgIHB1YmxpY1NpZ25hbHMucHVzaChTY2FsYXIuZnJvbVJwckxFKGIpKTtcbiAgICB9XG5cbiAgICBwcm9vZi5waV9hID0gRzEudG9PYmplY3QoRzEudG9BZmZpbmUocHJvb2YucGlfYSkpO1xuICAgIHByb29mLnBpX2IgPSBHMi50b09iamVjdChHMi50b0FmZmluZShwcm9vZi5waV9iKSk7XG4gICAgcHJvb2YucGlfYyA9IEcxLnRvT2JqZWN0KEcxLnRvQWZmaW5lKHByb29mLnBpX2MpKTtcblxuICAgIHByb29mLnByb3RvY29sID0gXCJncm90aDE2XCI7XG4gICAgcHJvb2YuY3VydmUgPSBjdXJ2ZS5uYW1lO1xuXG4gICAgYXdhaXQgZmRaS2V5LmNsb3NlKCk7XG4gICAgYXdhaXQgZmRXdG5zLmNsb3NlKCk7XG5cbiAgICBwcm9vZiA9IHN0cmluZ2lmeUJpZ0ludHMocHJvb2YpO1xuICAgIHB1YmxpY1NpZ25hbHMgPSBzdHJpbmdpZnlCaWdJbnRzKHB1YmxpY1NpZ25hbHMpO1xuXG4gICAgcmV0dXJuIHtwcm9vZiwgcHVibGljU2lnbmFsc307XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRBQkMxKGN1cnZlLCB6a2V5LCB3aXRuZXNzLCBjb2VmZnMsIGxvZ2dlcikge1xuICAgIGNvbnN0IG44ID0gY3VydmUuRnIubjg7XG4gICAgY29uc3Qgc0NvZWYgPSA0KjMgKyB6a2V5Lm44cjtcbiAgICBjb25zdCBuQ29lZiA9IChjb2VmZnMuYnl0ZUxlbmd0aC00KSAvIHNDb2VmO1xuXG4gICAgY29uc3Qgb3V0QnVmZkEgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIG44KTtcbiAgICBjb25zdCBvdXRCdWZmQiA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogbjgpO1xuICAgIGNvbnN0IG91dEJ1ZmZDID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUgKiBuOCk7XG5cbiAgICBjb25zdCBvdXRCdWYgPSBbIG91dEJ1ZmZBLCBvdXRCdWZmQiBdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuQ29lZjsgaSsrKSB7XG4gICAgICAgIGlmICgobG9nZ2VyKSYmKGklMTAwMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGBRQVAgQUI6ICR7aX0vJHtuQ29lZn1gKTtcbiAgICAgICAgY29uc3QgYnVmZkNvZWYgPSBjb2VmZnMuc2xpY2UoNCtpKnNDb2VmLCA0K2kqc0NvZWYrc0NvZWYpO1xuICAgICAgICBjb25zdCBidWZmQ29lZlYgPSBuZXcgRGF0YVZpZXcoYnVmZkNvZWYuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgbT0gYnVmZkNvZWZWLmdldFVpbnQzMigwLCB0cnVlKTtcbiAgICAgICAgY29uc3QgYz0gYnVmZkNvZWZWLmdldFVpbnQzMig0LCB0cnVlKTtcbiAgICAgICAgY29uc3Qgcz0gYnVmZkNvZWZWLmdldFVpbnQzMig4LCB0cnVlKTtcbiAgICAgICAgY29uc3QgY29lZiA9IGJ1ZmZDb2VmLnNsaWNlKDEyLCAxMituOCk7XG4gICAgICAgIG91dEJ1ZlttXS5zZXQoXG4gICAgICAgICAgICBjdXJ2ZS5Gci5hZGQoXG4gICAgICAgICAgICAgICAgb3V0QnVmW21dLnNsaWNlKGMqbjgsIGMqbjgrbjgpLFxuICAgICAgICAgICAgICAgIGN1cnZlLkZyLm11bChjb2VmLCB3aXRuZXNzLnNsaWNlKHMqbjgsIHMqbjgrbjgpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMqbjhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYFFBUCBDOiAke2l9LyR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICBvdXRCdWZmQy5zZXQoXG4gICAgICAgICAgICBjdXJ2ZS5Gci5tdWwoXG4gICAgICAgICAgICAgICAgb3V0QnVmZkEuc2xpY2UoaSpuOCwgaSpuOCtuOCksXG4gICAgICAgICAgICAgICAgb3V0QnVmZkIuc2xpY2UoaSpuOCwgaSpuOCtuOCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaSpuOFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBbb3V0QnVmZkEsIG91dEJ1ZmZCLCBvdXRCdWZmQ107XG5cbn1cblxuLypcbmFzeW5jIGZ1bmN0aW9uIGJ1bGRBQkMoY3VydmUsIHprZXksIHdpdG5lc3MsIGNvZWZmcywgbG9nZ2VyKSB7XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSBjdXJ2ZS50bS5jb25jdXJyZW5jeTtcbiAgICBjb25zdCBzQ29lZiA9IDQqMyArIHprZXkubjhyO1xuXG4gICAgbGV0IGdldFVpbnQzMjtcblxuICAgIGlmIChjb2VmZnMgaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgY29uc3QgY29lZmZzRFYgPSBbXTtcbiAgICAgICAgY29uc3QgUEFHRV9MRU4gPSBjb2VmZnMuYnVmZmVyc1swXS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgY29lZmZzLmJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvZWZmc0RWLnB1c2gobmV3IERhdGFWaWV3KGNvZWZmcy5idWZmZXJzW2ldLmJ1ZmZlcikpO1xuICAgICAgICB9XG4gICAgICAgIGdldFVpbnQzMiA9IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2VmZnNEVltNYXRoLmZsb29yKHBvcy9QQUdFX0xFTildLmdldFVpbnQzMihwb3MgJSBQQUdFX0xFTiwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29lZmZzRFYgPSBuZXcgRGF0YVZpZXcoY29lZmZzLmJ1ZmZlciwgY29lZmZzLmJ5dGVPZmZzZXQsIGNvZWZmcy5ieXRlTGVuZ3RoKTtcbiAgICAgICAgZ2V0VWludDMyID0gZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvZWZmc0RWLmdldFVpbnQzMihwb3MsIHRydWUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKHprZXkuZG9tYWluU2l6ZS9jb25jdXJyZW5jeSk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgIGNvbnN0IGN1dFBvaW50cyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb25jdXJyZW5jeTsgaSsrKSB7XG4gICAgICAgIGN1dFBvaW50cy5wdXNoKCBnZXRDdXRQb2ludCggTWF0aC5mbG9vcihpKmVsZW1lbnRzUGVyQ2h1bmspICkpO1xuICAgIH1cbiAgICBjdXRQb2ludHMucHVzaChjb2VmZnMuYnl0ZUxlbmd0aCk7XG5cbiAgICBjb25zdCBjaHVua1NpemUgPSAyKioyNjtcbiAgICBmb3IgKGxldCBzPTAgOyBzPHprZXkublZhcnMgOyBzKz0gY2h1bmtTaXplKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgUUFQICR7c306ICR7c30vJHt6a2V5Lm5WYXJzfWApO1xuICAgICAgICBjb25zdCBucz0gTWF0aC5taW4oemtleS5uVmFycy1zLCBjaHVua1NpemUgKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Y29uY3VycmVuY3k7IGkrKykge1xuICAgICAgICAgICAgbGV0IG47XG4gICAgICAgICAgICBpZiAoaTwgY29uY3VycmVuY3ktMSkge1xuICAgICAgICAgICAgICAgIG4gPSBlbGVtZW50c1BlckNodW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuID0gemtleS5kb21haW5TaXplIC0gaSplbGVtZW50c1BlckNodW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG49PTApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMCwgYnVmZjogY29lZmZzLnNsaWNlKGN1dFBvaW50c1tpXSwgY3V0UG9pbnRzW2krMV0pfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IHdpdG5lc3Muc2xpY2UocypjdXJ2ZS5Gci5uOCwgKHMrbnMpKmN1cnZlLkZyLm44KX0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAyLCBsZW46IG4qY3VydmUuRnIubjh9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMywgbGVuOiBuKmN1cnZlLkZyLm44fSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDQsIGxlbjogbipjdXJ2ZS5Gci5uOH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwicWFwX2J1aWxkQUJDXCIsIHBhcmFtczpbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhbDogKGN1dFBvaW50c1tpKzFdIC0gY3V0UG9pbnRzW2ldKS9zQ29lZn0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhcjogM30sXG4gICAgICAgICAgICAgICAge3ZhcjogNH0sXG4gICAgICAgICAgICAgICAge3ZhbDogaSplbGVtZW50c1BlckNodW5rfSxcbiAgICAgICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgICAgICB7dmFsOiBzfSxcbiAgICAgICAgICAgICAgICB7dmFsOiBuc31cbiAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMiwgbGVuOiBuKmN1cnZlLkZyLm44fSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDMsIGxlbjogbipjdXJ2ZS5Gci5uOH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMiwgdmFyOiA0LCBsZW46IG4qY3VydmUuRnIubjh9KTtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goY3VydmUudG0ucXVldWVBY3Rpb24odGFzaykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGNvbnN0IG5Hcm91cHMgPSByZXN1bHQubGVuZ3RoIC8gY29uY3VycmVuY3k7XG4gICAgaWYgKG5Hcm91cHM+MSkge1xuICAgICAgICBjb25zdCBwcm9taXNlczIgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2s9W107XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDAsIGxlbjogcmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGh9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMSwgbGVuOiByZXN1bHRbaV1bMF0uYnl0ZUxlbmd0aH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgbT0wOyBtPDM7IG0rKykge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIlNFVFwiLCB2YXI6IDAsIGJ1ZmY6IHJlc3VsdFtpXVttXX0pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHM9MTsgczxuR3JvdXBzOyBzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiU0VUXCIsIHZhcjogMSwgYnVmZjogcmVzdWx0W3MqY29uY3VycmVuY3kgKyBpXVttXX0pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJxYXBfYmF0Y2hBZGRcIiwgcGFyYW1zOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiByZXN1bHRbaV1bbV0ubGVuZ3RoL2N1cnZlLkZyLm44fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9XG4gICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogbSwgdmFyOiAwLCBsZW46IHJlc3VsdFtpXVttXS5sZW5ndGh9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb21pc2VzMi5wdXNoKGN1cnZlLnRtLnF1ZXVlQWN0aW9uKHRhc2spKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlczIpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dEJ1ZmZBID0gbmV3IEJpZ0J1ZmZlcih6a2V5LmRvbWFpblNpemUgKiBjdXJ2ZS5Gci5uOCk7XG4gICAgY29uc3Qgb3V0QnVmZkIgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIGN1cnZlLkZyLm44KTtcbiAgICBjb25zdCBvdXRCdWZmQyA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogY3VydmUuRnIubjgpO1xuICAgIGxldCBwPTA7XG4gICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBvdXRCdWZmQS5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgb3V0QnVmZkIuc2V0KHJlc3VsdFtpXVsxXSwgcCk7XG4gICAgICAgIG91dEJ1ZmZDLnNldChyZXN1bHRbaV1bMl0sIHApO1xuICAgICAgICBwICs9IHJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBbb3V0QnVmZkEsIG91dEJ1ZmZCLCBvdXRCdWZmQ107XG5cbiAgICBmdW5jdGlvbiBnZXRDdXRQb2ludCh2KSB7XG4gICAgICAgIGxldCBtID0gMDtcbiAgICAgICAgbGV0IG4gPSBnZXRVaW50MzIoMCk7XG4gICAgICAgIHdoaWxlIChtIDwgbikge1xuICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKChuICsgbSkgLyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHZhID0gZ2V0VWludDMyKDQgKyBrKnNDb2VmICsgNCk7XG4gICAgICAgICAgICBpZiAodmEgPiB2KSB7XG4gICAgICAgICAgICAgICAgbiA9IGsgLSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YSA8IHYpIHtcbiAgICAgICAgICAgICAgICBtID0gayArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG4gPSBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiA0ICsgbSpzQ29lZjtcbiAgICB9XG59XG4qL1xuXG5hc3luYyBmdW5jdGlvbiBqb2luQUJDKGN1cnZlLCB6a2V5LCBhLCBiLCBjLCBsb2dnZXIpIHtcbiAgICBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDEgPDwgMjI7XG5cbiAgICBjb25zdCBuOCA9IGN1cnZlLkZyLm44O1xuICAgIGNvbnN0IG5FbGVtZW50cyA9IE1hdGguZmxvb3IoYS5ieXRlTGVuZ3RoIC8gY3VydmUuRnIubjgpO1xuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxuRWxlbWVudHM7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBKb2luQUJDOiAke2l9LyR7bkVsZW1lbnRzfWApO1xuICAgICAgICBjb25zdCBuPSBNYXRoLm1pbihuRWxlbWVudHMgLSBpLCBNQVhfQ0hVTktfU0laRSk7XG5cbiAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGFDaHVuayA9IGEuc2xpY2UoaSpuOCwgKGkgKyBuKSpuOCApO1xuICAgICAgICBjb25zdCBiQ2h1bmsgPSBiLnNsaWNlKGkqbjgsIChpICsgbikqbjggKTtcbiAgICAgICAgY29uc3QgY0NodW5rID0gYy5zbGljZShpKm44LCAoaSArIG4pKm44ICk7XG5cbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBhQ2h1bmt9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBiQ2h1bmt9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBjQ2h1bmt9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAzLCBsZW46IG4qbjh9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwicWFwX2pvaW5BQkNcIiwgcGFyYW1zOltcbiAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAge3ZhcjogM30sXG4gICAgICAgIF19KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwiZnJtX2JhdGNoRnJvbU1vbnRnb21lcnlcIiwgcGFyYW1zOltcbiAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICB7dmFyOiAzfVxuICAgICAgICBdfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMywgbGVuOiBuKm44fSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goY3VydmUudG0ucXVldWVBY3Rpb24odGFzaykpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGxldCBvdXRCdWZmO1xuICAgIGlmIChhIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgIG91dEJ1ZmYgPSBuZXcgQmlnQnVmZmVyKGEuYnl0ZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0QnVmZiA9IG5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgbGV0IHA9MDtcbiAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dEJ1ZmYuc2V0KHJlc3VsdFtpXVswXSwgcCk7XG4gICAgICAgIHAgKz0gcmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dEJ1ZmY7XG59XG5cbiIsIi8qXG5cbkNvcHlyaWdodCAyMDIwIDBLSU1TIGFzc29jaWF0aW9uLlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXRBcnJheShhKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZpbGxBcnJheShyZXMsIGEpO1xuICAgIHJldHVybiByZXM7XG5cbiAgICBmdW5jdGlvbiBmaWxsQXJyYXkocmVzLCBhKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZpbGxBcnJheShyZXMsIGFbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLnB1c2goYSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbnZIYXNoKHN0cikge1xuICAgIGNvbnN0IHVpbnQ2NF9tYXggPSBCaWdJbnQoMikgKiogQmlnSW50KDY0KTtcbiAgICBsZXQgaGFzaCA9IEJpZ0ludChcIjB4Q0JGMjlDRTQ4NDIyMjMyNVwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGhhc2ggXj0gQmlnSW50KHN0cltpXS5jaGFyQ29kZUF0KCkpO1xuICAgIGhhc2ggKj0gQmlnSW50KDB4MTAwMDAwMDAxQjMpO1xuICAgIGhhc2ggJT0gdWludDY0X21heDtcbiAgICB9XG4gICAgbGV0IHNoYXNoID0gaGFzaC50b1N0cmluZygxNik7XG4gICAgbGV0IG4gPSAxNiAtIHNoYXNoLmxlbmd0aDtcbiAgICBzaGFzaCA9ICcwJy5yZXBlYXQobikuY29uY2F0KHNoYXNoKTtcbiAgICByZXR1cm4gc2hhc2g7XG59XG5cbi8vIE5vdGUgdGhhdCB0aGlzIHBhZHMgemVyb3NcbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5MzIocyxzaXplKSB7XG4gICAgY29uc3QgcmVzID0gW107IC8vbmV3IFVpbnQzMkFycmF5KHNpemUpOyAvL2hhcyBubyB1bnNoaWZ0XG4gICAgbGV0IHJlbSA9IEJpZ0ludChzKTtcbiAgICBjb25zdCByYWRpeCA9IEJpZ0ludCgweDEwMDAwMDAwMCk7XG4gICAgd2hpbGUgKHJlbSkge1xuICAgICAgICByZXMudW5zaGlmdCggTnVtYmVyKHJlbSAlIHJhZGl4KSk7XG4gICAgICAgIHJlbSA9IHJlbSAvIHJhZGl4O1xuICAgIH1cbiAgICBpZiAoc2l6ZSkge1xuICAgIHZhciBpID0gc2l6ZSAtIHJlcy5sZW5ndGg7XG4gICAgd2hpbGUgKGk+MCkge1xuICAgICAgICByZXMudW5zaGlmdCgwKTtcbiAgICAgICAgaS0tO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsIlxuLyogZ2xvYmFsIEJpZ0ludCAqL1xuY29uc3QgaGV4TGVuID0gWyAwLCAxLCAyLCAyLCAzLCAzLCAzLCAzLCA0ICw0ICw0ICw0ICw0ICw0ICw0ICw0XTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJpbmcocywgcmFkaXgpIHtcbiAgICBpZiAoKCFyYWRpeCl8fChyYWRpeD09MTApKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQocyk7XG4gICAgfSBlbHNlIGlmIChyYWRpeD09MTYpIHtcbiAgICAgICAgaWYgKHMuc2xpY2UoMCwyKSA9PSBcIjB4XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBCaWdJbnQocyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQmlnSW50KFwiMHhcIitzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGUgPSBmcm9tU3RyaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUFycmF5KGEsIHJhZGl4KSB7XG4gICAgbGV0IGFjYyA9QmlnSW50KDApO1xuICAgIHJhZGl4ID0gQmlnSW50KHJhZGl4KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgPSBhY2MqcmFkaXggKyBCaWdJbnQoYVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRMZW5ndGgoYSkge1xuICAgIGNvbnN0IGFTID1hLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gKGFTLmxlbmd0aC0xKSo0ICtoZXhMZW5bcGFyc2VJbnQoYVNbMF0sIDE2KV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lZ2F0aXZlKGEpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDwgQmlnSW50KDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNaZXJvKGEpIHtcbiAgICByZXR1cm4gIWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlmdExlZnQoYSwgbikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPDwgQmlnSW50KG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hpZnRSaWdodChhLCBuKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PiBCaWdJbnQobik7XG59XG5cbmV4cG9ydCBjb25zdCBzaGwgPSBzaGlmdExlZnQ7XG5leHBvcnQgY29uc3Qgc2hyID0gc2hpZnRSaWdodDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2RkKGEpIHtcbiAgICByZXR1cm4gKEJpZ0ludChhKSAmIEJpZ0ludCgxKSkgPT0gQmlnSW50KDEpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBuYWYobikge1xuICAgIGxldCBFID0gQmlnSW50KG4pO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIHdoaWxlIChFKSB7XG4gICAgICAgIGlmIChFICYgQmlnSW50KDEpKSB7XG4gICAgICAgICAgICBjb25zdCB6ID0gMiAtIE51bWJlcihFICUgQmlnSW50KDQpKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKCB6ICk7XG4gICAgICAgICAgICBFID0gRSAtIEJpZ0ludCh6KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgIH1cbiAgICAgICAgRSA9IEUgPj4gQmlnSW50KDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBiaXRzKG4pIHtcbiAgICBsZXQgRSA9IEJpZ0ludChuKTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICB3aGlsZSAoRSkge1xuICAgICAgICBpZiAoRSAmIEJpZ0ludCgxKSkge1xuICAgICAgICAgICAgcmVzLnB1c2goMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICB9XG4gICAgICAgIEUgPSBFID4+IEJpZ0ludCgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHMpIHtcbiAgICBpZiAocz5CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdW1iZXIgdG9vIGJpZ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkocywgcmFkaXgpIHtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBsZXQgcmVtID0gQmlnSW50KHMpO1xuICAgIHJhZGl4ID0gQmlnSW50KHJhZGl4KTtcbiAgICB3aGlsZSAocmVtKSB7XG4gICAgICAgIHJlcy51bnNoaWZ0KCBOdW1iZXIocmVtICUgcmFkaXgpKTtcbiAgICAgICAgcmVtID0gcmVtIC8gcmFkaXg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSArIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAtIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZyhhKSB7XG4gICAgcmV0dXJuIC1CaWdJbnQoYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmUoYSkge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiBCaWdJbnQoYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3coYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiogQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICoqIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFicyhhKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PSAwID8gQmlnSW50KGEpIDogLUJpZ0ludChhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAvIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAlIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID09IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAhPSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsdChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA8IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd0KGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID4gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDw9IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlcShhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA+PSBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYW5kKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICYgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9yKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIHwgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnhvcihhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSBeIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmQoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgJiYgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9yKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIHx8IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxub3QoYSkge1xuICAgIHJldHVybiAhQmlnSW50KGEpO1xufVxuXG4vLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggTGl0dGxlIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHRvUnByTEUoYnVmZiwgbywgZSwgbjgpIHtcbiAgICBjb25zdCBzID0gXCIwMDAwMDAwXCIgKyBlLnRvU3RyaW5nKDE2KTtcbiAgICBjb25zdCB2ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmYuYnVmZmVyLCBvLCBuOC80KTtcbiAgICBjb25zdCBsID0gKCgocy5sZW5ndGgtNykqNCAtIDEpID4+IDUpKzE7ICAgIC8vIE51bWJlciBvZiAzMmJpdCB3b3JkcztcbiAgICBmb3IgKGxldCBpPTA7IGk8bDsgaSsrKSB2W2ldID0gcGFyc2VJbnQocy5zdWJzdHJpbmcocy5sZW5ndGgtOCppLTgsIHMubGVuZ3RoLTgqaSksIDE2KTtcbiAgICBmb3IgKGxldCBpPWw7IGk8di5sZW5ndGg7IGkrKykgdltpXSA9IDA7XG4gICAgZm9yIChsZXQgaT12Lmxlbmd0aCo0OyBpPG44OyBpKyspIGJ1ZmZbaV0gPSB0b051bWJlcihiYW5kKHNoaWZ0UmlnaHQoZSwgaSo4KSwgMHhGRikpO1xufVxuXG4vLyBSZXR1cm5zIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHRvUnByQkUoYnVmZiwgbywgZSwgbjgpIHtcbiAgICBjb25zdCBzID0gXCIwMDAwMDAwXCIgKyBlLnRvU3RyaW5nKDE2KTtcbiAgICBjb25zdCB2ID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQgKyBvLCBuOCk7XG4gICAgY29uc3QgbCA9ICgoKHMubGVuZ3RoLTcpKjQgLSAxKSA+PiA1KSsxOyAgICAvLyBOdW1iZXIgb2YgMzJiaXQgd29yZHM7XG4gICAgZm9yIChsZXQgaT0wOyBpPGw7IGkrKykgdi5zZXRVaW50MzIobjgtaSo0IC00LCBwYXJzZUludChzLnN1YnN0cmluZyhzLmxlbmd0aC04KmktOCwgcy5sZW5ndGgtOCppKSwgMTYpLCBmYWxzZSk7XG4gICAgZm9yIChsZXQgaT0wOyBpPG44LzQtbDsgaSsrKSB2W2ldID0gMDtcbn1cblxuLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJwckxFKGJ1ZmYsIG8sIG44KSB7XG4gICAgbjggPSBuOCB8fCBidWZmLmJ5dGVMZW5ndGg7XG4gICAgbyA9IG8gfHwgMDtcbiAgICBjb25zdCB2ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmYuYnVmZmVyLCBvLCBuOC80KTtcbiAgICBjb25zdCBhID0gbmV3IEFycmF5KG44LzQpO1xuICAgIHYuZm9yRWFjaCggKGNoLGkpID0+IGFbYS5sZW5ndGgtaS0xXSA9IGNoLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LFwiMFwiKSApO1xuICAgIHJldHVybiBmcm9tU3RyaW5nKGEuam9pbihcIlwiKSwgMTYpO1xufVxuXG4vLyBQYXNlcyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gUmVwcmVzZW50YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUnByQkUoYnVmZiwgbywgbjgpIHtcbiAgICBuOCA9IG44IHx8IGJ1ZmYuYnl0ZUxlbmd0aDtcbiAgICBvID0gbyB8fCAwO1xuICAgIGNvbnN0IHYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCArIG8sIG44KTtcbiAgICBjb25zdCBhID0gbmV3IEFycmF5KG44LzQpO1xuICAgIGZvciAobGV0IGk9MDsgaTxuOC80OyBpKyspIHtcbiAgICAgICAgYVtpXSA9IHYuZ2V0VWludDMyKGkqNCwgZmFsc2UpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tU3RyaW5nKGEuam9pbihcIlwiKSwgMTYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoYSwgcmFkaXgpIHtcbiAgICByZXR1cm4gYS50b1N0cmluZyhyYWRpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xFQnVmZihhKSB7XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KE1hdGguZmxvb3IoKGJpdExlbmd0aChhKSAtIDEpIC8gOCkgKzEpO1xuICAgIHRvUnByTEUoYnVmZiwgMCwgYSwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGNvbnN0IHplcm8gPSBlKDApO1xuZXhwb3J0IGNvbnN0IG9uZSA9IGUoMSk7XG5cblxuXG5cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWxTY2FsYXIoRiwgYmFzZSwgZSkge1xuICAgIGxldCByZXM7XG5cbiAgICBpZiAoU2NhbGFyLmlzWmVybyhlKSkgcmV0dXJuIEYuemVybztcblxuICAgIGNvbnN0IG4gPSBTY2FsYXIubmFmKGUpO1xuXG4gICAgaWYgKG5bbi5sZW5ndGgtMV0gPT0gMSkge1xuICAgICAgICByZXMgPSBiYXNlO1xuICAgIH0gZWxzZSBpZiAobltuLmxlbmd0aC0xXSA9PSAtMSkge1xuICAgICAgICByZXMgPSBGLm5lZyhiYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZsYXVkIE5BRlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpPW4ubGVuZ3RoLTI7IGk+PTA7IGktLSkge1xuXG4gICAgICAgIHJlcyA9IEYuZG91YmxlKHJlcyk7XG5cbiAgICAgICAgaWYgKG5baV0gPT0gMSkge1xuICAgICAgICAgICAgcmVzID0gRi5hZGQocmVzLCBiYXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChuW2ldID09IC0xKSB7XG4gICAgICAgICAgICByZXMgPSBGLnN1YihyZXMsIGJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4vKlxuZXhwb3J0cy5tdWxTY2FsYXIgPSAoRiwgYmFzZSwgZSkgPT57XG4gICAgbGV0IHJlcyA9IEYuemVybztcbiAgICBsZXQgcmVtID0gYmlnSW50KGUpO1xuICAgIGxldCBleHAgPSBiYXNlO1xuXG4gICAgd2hpbGUgKCEgcmVtLmVxKGJpZ0ludC56ZXJvKSkge1xuICAgICAgICBpZiAocmVtLmFuZChiaWdJbnQub25lKS5lcShiaWdJbnQub25lKSkge1xuICAgICAgICAgICAgcmVzID0gRi5hZGQocmVzLCBleHApO1xuICAgICAgICB9XG4gICAgICAgIGV4cCA9IEYuZG91YmxlKGV4cCk7XG4gICAgICAgIHJlbSA9IHJlbS5zaGlmdFJpZ2h0KDEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59O1xuKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZXhwKEYsIGJhc2UsIGUpIHtcblxuICAgIGlmIChTY2FsYXIuaXNaZXJvKGUpKSByZXR1cm4gRi5vbmU7XG5cbiAgICBjb25zdCBuID0gU2NhbGFyLmJpdHMoZSk7XG5cbiAgICBpZiAobi5sZW5ndGg9PTApIHJldHVybiBGLm9uZTtcblxuICAgIGxldCByZXMgPSBiYXNlO1xuXG4gICAgZm9yIChsZXQgaT1uLmxlbmd0aC0yOyBpPj0wOyBpLS0pIHtcblxuICAgICAgICByZXMgPSBGLnNxdWFyZShyZXMpO1xuXG4gICAgICAgIGlmIChuW2ldKSB7XG4gICAgICAgICAgICByZXMgPSBGLm11bChyZXMsIGJhc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4iLCJpbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG4vLyBDaGVjayBoZXJlOiBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDEyLzY4NS5wZGZcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRTcXJ0IChGKSB7XG4gICAgaWYgKChGLm0gJSAyKSA9PSAxKSB7XG4gICAgICAgIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDQpLCAxICkpIHtcbiAgICAgICAgICAgIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDgpLCAxICkpIHtcbiAgICAgICAgICAgICAgICBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCAxNiksIDEgKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhbGc3X211bGxlcihGKTtcbiAgICAgICAgICAgICAgICAgICAgYWxnNV90b25lbGxpU2hhbmtzKEYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU2NhbGFyLmVxKFNjYWxhci5tb2QoRi5wLCAxNiksIDkgKSkge1xuICAgICAgICAgICAgICAgICAgICBhbGc0X2tvbmcoRik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2l0aG90IHNxcnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDgpLCA1ICkpIHtcbiAgICAgICAgICAgICAgICBhbGczX2F0a2luKEYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3aXRob3Qgc3FydFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDQpLCAzICkpIHtcbiAgICAgICAgICAgIGFsZzJfc2hhbmtzKEYpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG0ybW9kNCA9IFNjYWxhci5tb2QoU2NhbGFyLnBvdyhGLnAsIEYubS8yKSwgNCk7XG4gICAgICAgIGlmIChwbTJtb2Q0ID09IDEpIHtcbiAgICAgICAgICAgIGFsZzEwX2FkaihGKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbTJtb2Q0ID09IDMpIHtcbiAgICAgICAgICAgIGFsZzlfYWRqKEYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxnOF9jb21wbGV4KEYpO1xuICAgICAgICB9XG5cbiAgICB9XG59XG5cblxuZnVuY3Rpb24gYWxnNV90b25lbGxpU2hhbmtzKEYpIHtcbiAgICBGLnNxcnRfcSA9IFNjYWxhci5wb3coRi5wLCBGLm0pO1xuXG4gICAgRi5zcXJ0X3MgPSAwO1xuICAgIEYuc3FydF90ID0gU2NhbGFyLnN1YihGLnNxcnRfcSwgMSk7XG5cbiAgICB3aGlsZSAoIVNjYWxhci5pc09kZChGLnNxcnRfdCkpIHtcbiAgICAgICAgRi5zcXJ0X3MgPSBGLnNxcnRfcyArIDE7XG4gICAgICAgIEYuc3FydF90ID0gU2NhbGFyLmRpdihGLnNxcnRfdCwgMik7XG4gICAgfVxuXG4gICAgbGV0IGMwID0gRi5vbmU7XG5cbiAgICB3aGlsZSAoRi5lcShjMCwgRi5vbmUpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBGLnJhbmRvbSgpO1xuICAgICAgICBGLnNxcnRfeiA9IEYucG93KGMsIEYuc3FydF90KTtcbiAgICAgICAgYzAgPSBGLnBvdyhGLnNxcnRfeiwgMiAqKiAoRi5zcXJ0X3MtMSkgKTtcbiAgICB9XG5cbiAgICBGLnNxcnRfdG0xZDIgPSBTY2FsYXIuZGl2KFNjYWxhci5zdWIoRi5zcXJ0X3QsIDEpLDIpO1xuXG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICBjb25zdCBGPXRoaXM7XG4gICAgICAgIGlmIChGLmlzWmVybyhhKSkgcmV0dXJuIEYuemVybztcbiAgICAgICAgbGV0IHcgPSBGLnBvdyhhLCBGLnNxcnRfdG0xZDIpO1xuICAgICAgICBjb25zdCBhMCA9IEYucG93KCBGLm11bChGLnNxdWFyZSh3KSwgYSksIDIgKiogKEYuc3FydF9zLTEpICk7XG4gICAgICAgIGlmIChGLmVxKGEwLCBGLm5lZ29uZSkpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCB2ID0gRi5zcXJ0X3M7XG4gICAgICAgIGxldCB4ID0gRi5tdWwoYSwgdyk7XG4gICAgICAgIGxldCBiID0gRi5tdWwoeCwgdyk7XG4gICAgICAgIGxldCB6ID0gRi5zcXJ0X3o7XG4gICAgICAgIHdoaWxlICghRi5lcShiLCBGLm9uZSkpIHtcbiAgICAgICAgICAgIGxldCBiMmsgPSBGLnNxdWFyZShiKTtcbiAgICAgICAgICAgIGxldCBrPTE7XG4gICAgICAgICAgICB3aGlsZSAoIUYuZXEoYjJrLCBGLm9uZSkpIHtcbiAgICAgICAgICAgICAgICBiMmsgPSBGLnNxdWFyZShiMmspO1xuICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdyA9IHo7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8di1rLTE7IGkrKykge1xuICAgICAgICAgICAgICAgIHcgPSBGLnNxdWFyZSh3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHogPSBGLnNxdWFyZSh3KTtcbiAgICAgICAgICAgIGIgPSBGLm11bChiLCB6KTtcbiAgICAgICAgICAgIHggPSBGLm11bCh4LCB3KTtcbiAgICAgICAgICAgIHYgPSBrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGLmdlcSh4LCBGLnplcm8pID8geCA6IEYubmVnKHgpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzRfa29uZyhGKSB7XG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNxcnQgYWxnIDQgbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzNfYXRraW4oRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyAzIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGcyX3NoYW5rcyhGKSB7XG5cbiAgICBGLnNxcnRfcSA9IFNjYWxhci5wb3coRi5wLCBGLm0pO1xuICAgIEYuc3FydF9lMSA9IFNjYWxhci5kaXYoIFNjYWxhci5zdWIoRi5zcXJ0X3EsIDMpICwgNCk7XG5cbiAgICBGLnNxcnQgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzWmVybyhhKSkgcmV0dXJuIHRoaXMuemVybztcblxuICAgICAgICAvLyBUZXN0IHRoYXQgaGF2ZSBzb2x1dGlvblxuICAgICAgICBjb25zdCBhMSA9IHRoaXMucG93KGEsIHRoaXMuc3FydF9lMSk7XG5cbiAgICAgICAgY29uc3QgYTAgPSB0aGlzLm11bCh0aGlzLnNxdWFyZShhMSksIGEpO1xuXG4gICAgICAgIGlmICggdGhpcy5lcShhMCwgdGhpcy5uZWdvbmUpICkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgeCA9IHRoaXMubXVsKGExLCBhKTtcblxuICAgICAgICByZXR1cm4gRi5nZXEoeCwgRi56ZXJvKSA/IHggOiBGLm5lZyh4KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGcxMF9hZGooRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyAxMCBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnOV9hZGooRikge1xuICAgIEYuc3FydF9xID0gU2NhbGFyLnBvdyhGLnAsIEYubS8yKTtcbiAgICBGLnNxcnRfZTM0ID0gU2NhbGFyLmRpdiggU2NhbGFyLnN1YihGLnNxcnRfcSwgMykgLCA0KTtcbiAgICBGLnNxcnRfZTEyID0gU2NhbGFyLmRpdiggU2NhbGFyLnN1YihGLnNxcnRfcSwgMSkgLCAyKTtcblxuICAgIEYuZnJvYmVuaXVzID0gZnVuY3Rpb24obiwgeCkge1xuICAgICAgICBpZiAoKG4lMikgPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIEYuY29uanVnYXRlKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICBjb25zdCBGID0gdGhpcztcbiAgICAgICAgY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgY29uc3QgYWxmYSA9IEYubXVsKEYuc3F1YXJlKGExKSwgYSk7XG4gICAgICAgIGNvbnN0IGEwID0gRi5tdWwoRi5mcm9iZW5pdXMoMSwgYWxmYSksIGFsZmEpO1xuICAgICAgICBpZiAoRi5lcShhMCwgRi5uZWdvbmUpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgeDAgPSBGLm11bChhMSwgYSk7XG4gICAgICAgIGxldCB4O1xuICAgICAgICBpZiAoRi5lcShhbGZhLCBGLm5lZ29uZSkpIHtcbiAgICAgICAgICAgIHggPSBGLm11bCh4MCwgW0YuRi56ZXJvLCBGLkYub25lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiID0gRi5wb3coRi5hZGQoRi5vbmUsIGFsZmEpLCBGLnNxcnRfZTEyKTtcbiAgICAgICAgICAgIHggPSBGLm11bChiLCB4MCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEYuZ2VxKHgsIEYuemVybykgPyB4IDogRi5uZWcoeCk7XG4gICAgfTtcbn1cblxuXG5mdW5jdGlvbiBhbGc4X2NvbXBsZXgoRikge1xuICAgIEYuc3FydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcXJ0IGFsZyA4IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IENoYUNoYSBmcm9tIFwiLi9jaGFjaGEuanNcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tQnl0ZXMobikge1xuICAgIGxldCBhcnJheSA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHsgLy8gQnJvd3NlclxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIFN1cHBvcnRlZFxuICAgICAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICAgICAgfSBlbHNlIHsgLy8gZmFsbGJhY2tcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IChNYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTYpPj4+MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHsgLy8gTm9kZUpTXG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQoKSB7XG4gICAgY29uc3QgYXJyID0gZ2V0UmFuZG9tQnl0ZXMoMzIpO1xuICAgIGNvbnN0IGFyclYgPSBuZXcgVWludDMyQXJyYXkoYXJyLmJ1ZmZlcik7XG4gICAgY29uc3Qgc2VlZCA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgc2VlZC5wdXNoKGFyclZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VlZDtcbn1cblxubGV0IHRocmVhZFJuZyA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRSbmcoKSB7XG4gICAgaWYgKHRocmVhZFJuZykgcmV0dXJuIHRocmVhZFJuZztcbiAgICB0aHJlYWRSbmcgPSBuZXcgQ2hhQ2hhKGdldFJhbmRvbVNlZWQoKSk7XG4gICAgcmV0dXJuIHRocmVhZFJuZztcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qXG4gICAgVGhpcyBsaWJyYXJ5IGRvZXMgb3BlcmF0aW9ucyBvbiBwb2x5bm9taWFscyB3aXRoIGNvZWZmaWNpZW50cyBpbiBhIGZpZWxkIEYuXG5cbiAgICBBIHBvbHlub21pYWwgUCh4KSA9IHAwICsgcDEgKiB4ICsgcDIgKiB4XjIgKyAuLi4gKyBwbiAqIHhebiAgaXMgcmVwcmVzZW50ZWRcbiAgICBieSB0aGUgYXJyYXkgWyBwMCwgcDEsIHAyLCAuLi4gLCBwbiBdLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZGVCB7XG4gICAgY29uc3RydWN0b3IgKEcsIEYsIG9wTXVsR0YpIHtcbiAgICAgICAgdGhpcy5GID0gRjtcbiAgICAgICAgdGhpcy5HID0gRztcbiAgICAgICAgdGhpcy5vcE11bEdGID0gb3BNdWxHRjtcblxuICAgICAgICBsZXQgcmVtID0gRi5zcXJ0X3QgfHwgRi50O1xuICAgICAgICBsZXQgcyA9IEYuc3FydF9zIHx8IEYucztcblxuICAgICAgICBsZXQgbnFyID0gRi5vbmU7XG4gICAgICAgIHdoaWxlIChGLmVxKEYucG93KG5xciwgRi5oYWxmKSwgRi5vbmUpKSBucXIgPSBGLmFkZChucXIsIEYub25lKTtcblxuICAgICAgICB0aGlzLncgPSBuZXcgQXJyYXkocysxKTtcbiAgICAgICAgdGhpcy53aSA9IG5ldyBBcnJheShzKzEpO1xuICAgICAgICB0aGlzLndbc10gPSB0aGlzLkYucG93KG5xciwgcmVtKTtcbiAgICAgICAgdGhpcy53aVtzXSA9IHRoaXMuRi5pbnYodGhpcy53W3NdKTtcblxuICAgICAgICBsZXQgbj1zLTE7XG4gICAgICAgIHdoaWxlIChuPj0wKSB7XG4gICAgICAgICAgICB0aGlzLndbbl0gPSB0aGlzLkYuc3F1YXJlKHRoaXMud1tuKzFdKTtcbiAgICAgICAgICAgIHRoaXMud2lbbl0gPSB0aGlzLkYuc3F1YXJlKHRoaXMud2lbbisxXSk7XG4gICAgICAgICAgICBuLS07XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucm9vdHMgPSBbXTtcbiAgICAgICAgLypcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDE2OyBpKyspIHtcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5GLm9uZTtcbiAgICAgICAgICAgIG4gPSAxIDw8IGk7XG4gICAgICAgICAgICBjb25zdCByb290c2kgPSBuZXcgQXJyYXkobik7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bjsgaisrKSB7XG4gICAgICAgICAgICAgICAgcm9vdHNpW2pdID0gcjtcbiAgICAgICAgICAgICAgICByID0gdGhpcy5GLm11bChyLCB0aGlzLndbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvb3RzLnB1c2gocm9vdHNpKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLl9zZXRSb290cyhNYXRoLm1pbihzLCAxNSkpO1xuICAgIH1cblxuICAgIF9zZXRSb290cyhuKSB7XG4gICAgICAgIGZvciAobGV0IGk9bjsgKGk+PTApICYmICghdGhpcy5yb290c1tpXSk7IGktLSkge1xuICAgICAgICAgICAgbGV0IHIgPSB0aGlzLkYub25lO1xuICAgICAgICAgICAgY29uc3QgbnJvb3RzID0gMSA8PCBpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdHNpID0gbmV3IEFycmF5KG5yb290cyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bnJvb3RzOyBqKyspIHtcbiAgICAgICAgICAgICAgICByb290c2lbal0gPSByO1xuICAgICAgICAgICAgICAgIHIgPSB0aGlzLkYubXVsKHIsIHRoaXMud1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm9vdHNbaV0gPSByb290c2k7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmZnQocCkge1xuICAgICAgICBpZiAocC5sZW5ndGggPD0gMSkgcmV0dXJuIHA7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKHAubGVuZ3RoLTEpKzE7XG4gICAgICAgIHRoaXMuX3NldFJvb3RzKGJpdHMpO1xuXG4gICAgICAgIGNvbnN0IG0gPSAxIDw8IGJpdHM7XG4gICAgICAgIGlmIChwLmxlbmd0aCAhPSBtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBfX2ZmdCh0aGlzLCBwLCBiaXRzLCAwLCAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZmZ0KHApIHtcblxuICAgICAgICBpZiAocC5sZW5ndGggPD0gMSkgcmV0dXJuIHA7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKHAubGVuZ3RoLTEpKzE7XG4gICAgICAgIHRoaXMuX3NldFJvb3RzKGJpdHMpO1xuICAgICAgICBjb25zdCBtID0gMSA8PCBiaXRzO1xuICAgICAgICBpZiAocC5sZW5ndGggIT0gbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDJcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gIF9fZmZ0KHRoaXMsIHAsIGJpdHMsIDAsIDEpO1xuICAgICAgICBjb25zdCB0d29pbnZtID0gdGhpcy5GLmludiggdGhpcy5GLm11bFNjYWxhcih0aGlzLkYub25lLCBtKSApO1xuICAgICAgICBjb25zdCByZXNuID0gbmV3IEFycmF5KG0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bTsgaSsrKSB7XG4gICAgICAgICAgICByZXNuW2ldID0gdGhpcy5vcE11bEdGKHJlc1sobS1pKSVtXSwgdHdvaW52bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzbjtcbiAgICB9XG5cblxufVxuXG5mdW5jdGlvbiBsb2cyKCBWIClcbntcbiAgICByZXR1cm4oICggKCBWICYgMHhGRkZGMDAwMCApICE9PSAwID8gKCBWICY9IDB4RkZGRjAwMDAsIDE2ICkgOiAwICkgfCAoICggViAmIDB4RkYwMEZGMDAgKSAhPT0gMCA/ICggViAmPSAweEZGMDBGRjAwLCA4ICkgOiAwICkgfCAoICggViAmIDB4RjBGMEYwRjAgKSAhPT0gMCA/ICggViAmPSAweEYwRjBGMEYwLCA0ICkgOiAwICkgfCAoICggViAmIDB4Q0NDQ0NDQ0MgKSAhPT0gMCA/ICggViAmPSAweENDQ0NDQ0NDLCAyICkgOiAwICkgfCAoICggViAmIDB4QUFBQUFBQUEgKSAhPT0gMCApICk7XG59XG5cblxuZnVuY3Rpb24gX19mZnQoUEYsIHBhbGwsIGJpdHMsIG9mZnNldCwgc3RlcCkge1xuXG4gICAgY29uc3QgbiA9IDEgPDwgYml0cztcbiAgICBpZiAobj09MSkge1xuICAgICAgICByZXR1cm4gWyBwYWxsW29mZnNldF0gXTtcbiAgICB9IGVsc2UgaWYgKG49PTIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFBGLkcuYWRkKHBhbGxbb2Zmc2V0XSwgcGFsbFtvZmZzZXQgKyBzdGVwXSksXG4gICAgICAgICAgICBQRi5HLnN1YihwYWxsW29mZnNldF0sIHBhbGxbb2Zmc2V0ICsgc3RlcF0pXTtcbiAgICB9XG5cbiAgICBjb25zdCBuZGl2MiA9IG4gPj4gMTtcbiAgICBjb25zdCBwMSA9IF9fZmZ0KFBGLCBwYWxsLCBiaXRzLTEsIG9mZnNldCwgc3RlcCoyKTtcbiAgICBjb25zdCBwMiA9IF9fZmZ0KFBGLCBwYWxsLCBiaXRzLTEsIG9mZnNldCtzdGVwLCBzdGVwKjIpO1xuXG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5KG4pO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPG5kaXYyOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gUEYuRy5hZGQocDFbaV0sIFBGLm9wTXVsR0YocDJbaV0sIFBGLnJvb3RzW2JpdHNdW2ldKSk7XG4gICAgICAgIG91dFtpK25kaXYyXSA9IFBGLkcuc3ViKHAxW2ldLCBQRi5vcE11bEdGKHAyW2ldLCBQRi5yb290c1tiaXRzXVtpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59XG5cbiIsIi8qIGdsb2JhbCBCaWdJbnQgKi9cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCAqIGFzIGZ1dGlscyBmcm9tIFwiLi9mdXRpbHMuanNcIjtcbmltcG9ydCBidWlsZFNxcnQgZnJvbSBcIi4vZnNxcnQuanNcIjtcbmltcG9ydCB7Z2V0UmFuZG9tQnl0ZXN9IGZyb20gXCIuL3JhbmRvbS5qc1wiO1xuaW1wb3J0IEZGRlQgZnJvbSBcIi4vZmZ0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpxRmllbGQge1xuICAgIGNvbnN0cnVjdG9yKHApIHtcbiAgICAgICAgdGhpcy50eXBlPVwiRjFcIjtcbiAgICAgICAgdGhpcy5vbmUgPSBCaWdJbnQoMSk7XG4gICAgICAgIHRoaXMuemVybyA9IEJpZ0ludCgwKTtcbiAgICAgICAgdGhpcy5wID0gQmlnSW50KHApO1xuICAgICAgICB0aGlzLm0gPSAxO1xuICAgICAgICB0aGlzLm5lZ29uZSA9IHRoaXMucC10aGlzLm9uZTtcbiAgICAgICAgdGhpcy50d28gPSBCaWdJbnQoMik7XG4gICAgICAgIHRoaXMuaGFsZiA9IHRoaXMucCA+PiB0aGlzLm9uZTtcbiAgICAgICAgdGhpcy5iaXRMZW5ndGggPSBTY2FsYXIuYml0TGVuZ3RoKHRoaXMucCk7XG4gICAgICAgIHRoaXMubWFzayA9ICh0aGlzLm9uZSA8PCBCaWdJbnQodGhpcy5iaXRMZW5ndGgpKSAtIHRoaXMub25lO1xuXG4gICAgICAgIHRoaXMubjY0ID0gTWF0aC5mbG9vcigodGhpcy5iaXRMZW5ndGggLSAxKSAvIDY0KSsxO1xuICAgICAgICB0aGlzLm4zMiA9IHRoaXMubjY0KjI7XG4gICAgICAgIHRoaXMubjggPSB0aGlzLm42NCo4O1xuICAgICAgICB0aGlzLlIgPSB0aGlzLmUodGhpcy5vbmUgPDwgQmlnSW50KHRoaXMubjY0KjY0KSk7XG4gICAgICAgIHRoaXMuUmkgPSB0aGlzLmludih0aGlzLlIpO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLm5lZ29uZSA+PiB0aGlzLm9uZTtcbiAgICAgICAgdGhpcy5ucXIgPSB0aGlzLnR3bztcbiAgICAgICAgbGV0IHIgPSB0aGlzLnBvdyh0aGlzLm5xciwgZSk7XG4gICAgICAgIHdoaWxlICghdGhpcy5lcShyLCB0aGlzLm5lZ29uZSkpIHtcbiAgICAgICAgICAgIHRoaXMubnFyID0gdGhpcy5ucXIgKyB0aGlzLm9uZTtcbiAgICAgICAgICAgIHIgPSB0aGlzLnBvdyh0aGlzLm5xciwgZSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucyA9IDA7XG4gICAgICAgIHRoaXMudCA9IHRoaXMubmVnb25lO1xuXG4gICAgICAgIHdoaWxlICgodGhpcy50ICYgdGhpcy5vbmUpID09IHRoaXMuemVybykge1xuICAgICAgICAgICAgdGhpcy5zID0gdGhpcy5zICsgMTtcbiAgICAgICAgICAgIHRoaXMudCA9IHRoaXMudCA+PiB0aGlzLm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubnFyX3RvX3QgPSB0aGlzLnBvdyh0aGlzLm5xciwgdGhpcy50KTtcblxuICAgICAgICBidWlsZFNxcnQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5GRlQgPSBuZXcgRkZGVCh0aGlzLCB0aGlzLCB0aGlzLm11bC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmZmdCA9IHRoaXMuRkZULmZmdC5iaW5kKHRoaXMuRkZUKTtcbiAgICAgICAgdGhpcy5pZmZ0ID0gdGhpcy5GRlQuaWZmdC5iaW5kKHRoaXMuRkZUKTtcbiAgICAgICAgdGhpcy53ID0gdGhpcy5GRlQudztcbiAgICAgICAgdGhpcy53aSA9IHRoaXMuRkZULndpOyBcbiAgICBcbiAgICAgICAgdGhpcy5zaGlmdCA9IHRoaXMuc3F1YXJlKHRoaXMubnFyKTtcbiAgICAgICAgdGhpcy5rID0gdGhpcy5leHAodGhpcy5ucXIsIDIqKnRoaXMucyk7XG4gICAgfVxuXG4gICAgZShhLGIpIHtcbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgaWYgKCFiKSB7XG4gICAgICAgICAgICByZXMgPSBCaWdJbnQoYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYj09MTYpIHtcbiAgICAgICAgICAgIHJlcyA9IEJpZ0ludChcIjB4XCIrYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcyA8IDApIHtcbiAgICAgICAgICAgIGxldCBucmVzID0gLXJlcztcbiAgICAgICAgICAgIGlmIChucmVzID49IHRoaXMucCkgbnJlcyA9IG5yZXMgJSB0aGlzLnA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wIC0gbnJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAocmVzPj0gdGhpcy5wKSA/IHJlcyV0aGlzLnAgOiByZXM7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGFkZChhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGEgKyBiO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgc3ViKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhID49IGIpID8gYS1iIDogdGhpcy5wLWIrYTtcbiAgICB9XG5cbiAgICBuZWcoYSkge1xuICAgICAgICByZXR1cm4gYSA/IHRoaXMucC1hIDogYTtcbiAgICB9XG5cbiAgICBtdWwoYSwgYikge1xuICAgICAgICByZXR1cm4gKGEqYikldGhpcy5wO1xuICAgIH1cblxuICAgIG11bFNjYWxhcihiYXNlLCBzKSB7XG4gICAgICAgIHJldHVybiAoYmFzZSAqIHRoaXMuZShzKSkgJSB0aGlzLnA7XG4gICAgfVxuXG4gICAgc3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIChhKmEpICUgdGhpcy5wO1xuICAgIH1cblxuICAgIGVxKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGE9PWI7XG4gICAgfVxuXG4gICAgbmVxKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEhPWI7XG4gICAgfVxuXG4gICAgbHQoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPCBiYjtcbiAgICB9XG5cbiAgICBndChhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA+IGJiO1xuICAgIH1cblxuICAgIGxlcShhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA8PSBiYjtcbiAgICB9XG5cbiAgICBnZXEoYSwgYikge1xuICAgICAgICBjb25zdCBhYSA9IChhID4gdGhpcy5oYWxmKSA/IGEgLSB0aGlzLnAgOiBhO1xuICAgICAgICBjb25zdCBiYiA9IChiID4gdGhpcy5oYWxmKSA/IGIgLSB0aGlzLnAgOiBiO1xuICAgICAgICByZXR1cm4gYWEgPj0gYmI7XG4gICAgfVxuXG4gICAgZGl2KGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKGEsIHRoaXMuaW52KGIpKTtcbiAgICB9XG5cbiAgICBpZGl2KGEsIGIpIHtcbiAgICAgICAgaWYgKCFiKSB0aHJvdyBuZXcgRXJyb3IoXCJEaXZpc2lvbiBieSB6ZXJvXCIpO1xuICAgICAgICByZXR1cm4gYSAvIGI7XG4gICAgfVxuXG4gICAgaW52KGEpIHtcbiAgICAgICAgaWYgKCFhKSB0aHJvdyBuZXcgRXJyb3IoXCJEaXZpc2lvbiBieSB6ZXJvXCIpO1xuXG4gICAgICAgIGxldCB0ID0gdGhpcy56ZXJvO1xuICAgICAgICBsZXQgciA9IHRoaXMucDtcbiAgICAgICAgbGV0IG5ld3QgPSB0aGlzLm9uZTtcbiAgICAgICAgbGV0IG5ld3IgPSBhICUgdGhpcy5wO1xuICAgICAgICB3aGlsZSAobmV3cikge1xuICAgICAgICAgICAgbGV0IHEgPSByL25ld3I7XG4gICAgICAgICAgICBbdCwgbmV3dF0gPSBbbmV3dCwgdC1xKm5ld3RdO1xuICAgICAgICAgICAgW3IsIG5ld3JdID0gW25ld3IsIHItcSpuZXdyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodDx0aGlzLnplcm8pIHQgKz0gdGhpcy5wO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG5cbiAgICBtb2QoYSwgYikge1xuICAgICAgICByZXR1cm4gYSAlIGI7XG4gICAgfVxuXG4gICAgcG93KGIsIGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1dGlscy5leHAodGhpcywgYiwgZSk7XG4gICAgfVxuXG4gICAgZXhwKGIsIGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1dGlscy5leHAodGhpcywgYiwgZSk7XG4gICAgfVxuXG4gICAgYmFuZChhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICAoKGEgJiBiKSAmIHRoaXMubWFzayk7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBib3IoYSwgYikge1xuICAgICAgICBjb25zdCByZXMgPSAgKChhIHwgYikgJiB0aGlzLm1hc2spO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgYnhvcihhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICAoKGEgXiBiKSAmIHRoaXMubWFzayk7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBibm90KGEpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYSBeIHRoaXMubWFzaztcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIHNobChhLCBiKSB7XG4gICAgICAgIGlmIChOdW1iZXIoYikgPCB0aGlzLmJpdExlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gKGEgPDwgYikgJiB0aGlzLm1hc2s7XG4gICAgICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuYiA9IHRoaXMucCAtIGI7XG4gICAgICAgICAgICBpZiAoTnVtYmVyKG5iKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPj4gbmI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnplcm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaHIoYSwgYikge1xuICAgICAgICBpZiAoTnVtYmVyKGIpIDwgdGhpcy5iaXRMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBhID4+IGI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuYiA9IHRoaXMucCAtIGI7XG4gICAgICAgICAgICBpZiAoTnVtYmVyKG5iKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gKGEgPDwgbmIpICYgdGhpcy5tYXNrO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsYW5kKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhICYmIGIpID8gdGhpcy5vbmUgOiB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgbG9yKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhIHx8IGIpID8gdGhpcy5vbmUgOiB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgbG5vdChhKSB7XG4gICAgICAgIHJldHVybiAoYSkgPyB0aGlzLnplcm8gOiB0aGlzLm9uZTtcbiAgICB9XG5cbiAgICBzcXJ0X29sZChuKSB7XG5cbiAgICAgICAgaWYgKG4gPT0gdGhpcy56ZXJvKSByZXR1cm4gdGhpcy56ZXJvO1xuXG4gICAgICAgIC8vIFRlc3QgdGhhdCBoYXZlIHNvbHV0aW9uXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucG93KG4sIHRoaXMubmVnb25lID4+IHRoaXMub25lKTtcbiAgICAgICAgaWYgKCByZXMgIT0gdGhpcy5vbmUgKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBsZXQgbSA9IHRoaXMucztcbiAgICAgICAgbGV0IGMgPSB0aGlzLm5xcl90b190O1xuICAgICAgICBsZXQgdCA9IHRoaXMucG93KG4sIHRoaXMudCk7XG4gICAgICAgIGxldCByID0gdGhpcy5wb3cobiwgdGhpcy5hZGQodGhpcy50LCB0aGlzLm9uZSkgPj4gdGhpcy5vbmUgKTtcblxuICAgICAgICB3aGlsZSAoIHQgIT0gdGhpcy5vbmUgKSB7XG4gICAgICAgICAgICBsZXQgc3EgPSB0aGlzLnNxdWFyZSh0KTtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIHdoaWxlIChzcSAhPSB0aGlzLm9uZSApIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgc3EgPSB0aGlzLnNxdWFyZShzcSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGIgPSBjIF4gbS1pLTFcbiAgICAgICAgICAgIGxldCBiID0gYztcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajwgbS1pLTE7IGogKyspIGIgPSB0aGlzLnNxdWFyZShiKTtcblxuICAgICAgICAgICAgbSA9IGk7XG4gICAgICAgICAgICBjID0gdGhpcy5zcXVhcmUoYik7XG4gICAgICAgICAgICB0ID0gdGhpcy5tdWwodCwgYyk7XG4gICAgICAgICAgICByID0gdGhpcy5tdWwociwgYik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAociA+ICh0aGlzLnAgPj4gdGhpcy5vbmUpKSB7XG4gICAgICAgICAgICByID0gdGhpcy5uZWcocik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBub3JtYWxpemUoYSwgYikge1xuICAgICAgICBhID0gQmlnSW50KGEsYik7XG4gICAgICAgIGlmIChhIDwgMCkge1xuICAgICAgICAgICAgbGV0IG5hID0gLWE7XG4gICAgICAgICAgICBpZiAobmEgPj0gdGhpcy5wKSBuYSA9IG5hICUgdGhpcy5wO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucCAtIG5hO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChhPj0gdGhpcy5wKSA/IGEldGhpcy5wIDogYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgY29uc3QgbkJ5dGVzID0gKHRoaXMuYml0TGVuZ3RoKjIgLyA4KTtcbiAgICAgICAgbGV0IHJlcyA9dGhpcy56ZXJvO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkJ5dGVzOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyA9IChyZXMgPDwgQmlnSW50KDgpKSArIEJpZ0ludChnZXRSYW5kb21CeXRlcygxKVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcyAlIHRoaXMucDtcbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCBiYXNlKSB7XG4gICAgICAgIGJhc2UgPSBiYXNlIHx8IDEwO1xuICAgICAgICBsZXQgdnM7XG4gICAgICAgIGlmICgoYSA+IHRoaXMuaGFsZikmJihiYXNlID09IDEwKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMucC1hO1xuICAgICAgICAgICAgdnMgPSBcIi1cIit2LnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdnMgPSBhLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2cztcbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICByZXR1cm4gYSA9PSB0aGlzLnplcm87XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHY9dGhpcy56ZXJvO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMubjY0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ICs9IHJuZy5uZXh0VTY0KCkgPDwgQmlnSW50KDY0ICppKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHYgJj0gdGhpcy5tYXNrO1xuICAgICAgICB9IHdoaWxlICh2ID49IHRoaXMucCk7XG4gICAgICAgIHYgPSAodiAqIHRoaXMuUmkpICUgdGhpcy5wOyAgIC8vIENvbnZlcnQgZnJvbSBtb250Z29tZXJ5XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cblxuICAgIGZmdChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkZGVC5mZnQoYSk7XG4gICAgfVxuXG4gICAgaWZmdChhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkZGVC5pZmZ0KGEpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgdG9ScHJMRShidWZmLCBvLCBlKSB7XG4gICAgICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIG8sIGUsIHRoaXMubjY0KjgpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgdG9ScHJCRShidWZmLCBvLCBlKSB7XG4gICAgICAgIFNjYWxhci50b1JwckJFKGJ1ZmYsIG8sIGUsIHRoaXMubjY0KjgpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIE1vbnRnb21lcnkgUmVwcmVzZW50YXRpb25cbiAgICB0b1JwckJFTShidWZmLCBvLCBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUnByQkUoYnVmZiwgbywgdGhpcy5tdWwodGhpcy5SLCBlKSk7XG4gICAgfVxuXG4gICAgdG9ScHJMRU0oYnVmZiwgbywgZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1JwckxFKGJ1ZmYsIG8sIHRoaXMubXVsKHRoaXMuUiwgZSkpO1xuICAgIH1cblxuXG4gICAgLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgZnJvbVJwckxFKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByTEUoYnVmZiwgbywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgLy8gUGFzZXMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG4gICAgZnJvbVJwckJFKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5mcm9tUnByQkUoYnVmZiwgbywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgZnJvbVJwckxFTShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bCh0aGlzLmZyb21ScHJMRShidWZmLCBvKSwgdGhpcy5SaSk7XG4gICAgfVxuXG4gICAgZnJvbVJwckJFTShidWZmLCBvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bCh0aGlzLmZyb21ScHJCRShidWZmLCBvKSwgdGhpcy5SaSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59IiwiLyogZ2xvYmFsIFdlYkFzc2VtYmx5ICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocmVhZChzZWxmKSB7XG4gICAgY29uc3QgTUFYTUVNID0gMzI3Njc7XG4gICAgbGV0IGluc3RhbmNlO1xuICAgIGxldCBtZW1vcnk7XG5cbiAgICBpZiAoc2VsZikge1xuICAgICAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgaWYgKGUuZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBlLmRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YVswXS5jbWQgPT0gXCJJTklUXCIpIHtcbiAgICAgICAgICAgICAgICBpbml0KGRhdGFbMF0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhWzBdLmNtZCA9PSBcIlRFUk1JTkFURVwiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBydW5UYXNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IG5ldyBVaW50OEFycmF5KGRhdGEuY29kZSk7XG4gICAgICAgIGNvbnN0IHdhc21Nb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGNvZGUpO1xuICAgICAgICBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOmRhdGEuaW5pdCwgbWF4aW11bTogTUFYTUVNfSk7XG5cbiAgICAgICAgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtTW9kdWxlLCB7XG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICBcIm1lbW9yeVwiOiBtZW1vcnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGFsbG9jKGxlbmd0aCkge1xuICAgICAgICBjb25zdCB1MzIgPSBuZXcgVWludDMyQXJyYXkobWVtb3J5LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgIHdoaWxlICh1MzJbMF0gJiAzKSB1MzJbMF0rKzsgIC8vIFJldHVybiBhbHdheXMgYWxpZ25lZCBwb2ludGVyc1xuICAgICAgICBjb25zdCByZXMgPSB1MzJbMF07XG4gICAgICAgIHUzMlswXSArPSBsZW5ndGg7XG4gICAgICAgIGlmICh1MzJbMF0gKyBsZW5ndGggPiBtZW1vcnkuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlcyA9IG1lbW9yeS5idWZmZXIuYnl0ZUxlbmd0aCAvIDB4MTAwMDA7XG4gICAgICAgICAgICBsZXQgcmVxdWlyZWRQYWdlcyA9IE1hdGguZmxvb3IoKHUzMlswXSArIGxlbmd0aCkgLyAweDEwMDAwKSsxO1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkUGFnZXM+TUFYTUVNKSByZXF1aXJlZFBhZ2VzPU1BWE1FTTtcbiAgICAgICAgICAgIG1lbW9yeS5ncm93KHJlcXVpcmVkUGFnZXMtY3VycmVudFBhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFsbG9jQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBwID0gYWxsb2MoYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICBzZXRCdWZmZXIocCwgYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QnVmZmVyKHBvaW50ZXIsIGxlbmd0aCkge1xuICAgICAgICBjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodTguYnVmZmVyLCB1OC5ieXRlT2Zmc2V0ICsgcG9pbnRlciwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRCdWZmZXIocG9pbnRlciwgYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHU4ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgIHU4LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwb2ludGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5UYXNrKHRhc2spIHtcbiAgICAgICAgaWYgKHRhc2tbMF0uY21kID09IFwiSU5JVFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdCh0YXNrWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICB2YXJzOiBbXSxcbiAgICAgICAgICAgIG91dDogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdTMyYSA9IG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyLCAwLCAxKTtcbiAgICAgICAgY29uc3Qgb2xkQWxsb2MgPSB1MzJhWzBdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGFzay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoICh0YXNrW2ldLmNtZCkge1xuICAgICAgICAgICAgY2FzZSBcIkFMTE9DU0VUXCI6XG4gICAgICAgICAgICAgICAgY3R4LnZhcnNbdGFza1tpXS52YXJdID0gYWxsb2NCdWZmZXIodGFza1tpXS5idWZmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJBTExPQ1wiOlxuICAgICAgICAgICAgICAgIGN0eC52YXJzW3Rhc2tbaV0udmFyXSA9IGFsbG9jKHRhc2tbaV0ubGVuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJTRVRcIjpcbiAgICAgICAgICAgICAgICBzZXRCdWZmZXIoY3R4LnZhcnNbdGFza1tpXS52YXJdLCB0YXNrW2ldLmJ1ZmYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkNBTExcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajx0YXNrW2ldLnBhcmFtcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gdGFza1tpXS5wYXJhbXNbal07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcC52YXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGN0eC52YXJzW3AudmFyXSArIChwLm9mZnNldCB8fCAwKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHAudmFsICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHAudmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5leHBvcnRzW3Rhc2tbaV0uZm5OYW1lXSguLi5wYXJhbXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkdFVFwiOlxuICAgICAgICAgICAgICAgIGN0eC5vdXRbdGFza1tpXS5vdXRdID0gZ2V0QnVmZmVyKGN0eC52YXJzW3Rhc2tbaV0udmFyXSwgdGFza1tpXS5sZW4pLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY21kXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUzMmIgPSBuZXcgVWludDMyQXJyYXkobWVtb3J5LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgIHUzMmJbMF0gPSBvbGRBbGxvYztcbiAgICAgICAgcmV0dXJuIGN0eC5vdXQ7XG4gICAgfVxuXG5cbiAgICByZXR1cm4gcnVuVGFzaztcbn1cbiIsIi8qIGdsb2JhbCBuYXZpZ2F0b3IsIFdlYkFzc2VtYmx5ICovXG4vKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIGNvbnN0IE1FTV9TSVpFID0gMTAwMDsgIC8vIE1lbW9yeSBzaXplIGluIDY0SyBQYWtlcyAoNTEyTWIpXG5jb25zdCBNRU1fU0laRSA9IDI1OyAgLy8gTWVtb3J5IHNpemUgaW4gNjRLIFBha2VzICgxNjAwS2IpXG5cblxuaW1wb3J0IHRocmVhZCBmcm9tIFwiLi90aHJlYWRtYW5fdGhyZWFkLmpzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgV29ya2VyIGZyb20gXCJ3ZWItd29ya2VyXCI7XG5cbmNsYXNzIERlZmVycmVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PiB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2xlZXAobXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cikge1xuICAgIGlmIChwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuYnRvYShzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuY29uc3QgdGhyZWFkU291cmNlID0gc3RyaW5nVG9CYXNlNjQoXCIoXCIgKyB0aHJlYWQudG9TdHJpbmcoKSArIFwiKShzZWxmKVwiKTtcbmNvbnN0IHdvcmtlclNvdXJjZSA9IFwiZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCxcIiArIHRocmVhZFNvdXJjZTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGhyZWFkTWFuYWdlcih3YXNtLCBzaW5nbGVUaHJlYWQpIHtcbiAgICBjb25zdCB0bSA9IG5ldyBUaHJlYWRNYW5hZ2VyKCk7XG5cbiAgICB0bS5tZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOk1FTV9TSVpFfSk7XG4gICAgdG0udTggPSBuZXcgVWludDhBcnJheSh0bS5tZW1vcnkuYnVmZmVyKTtcbiAgICB0bS51MzIgPSBuZXcgVWludDMyQXJyYXkodG0ubWVtb3J5LmJ1ZmZlcik7XG5cbiAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSh3YXNtLmNvZGUpO1xuXG4gICAgdG0uaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtTW9kdWxlLCB7XG4gICAgICAgIGVudjoge1xuICAgICAgICAgICAgXCJtZW1vcnlcIjogdG0ubWVtb3J5XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRtLnNpbmdsZVRocmVhZCA9IHNpbmdsZVRocmVhZDtcbiAgICB0bS5pbml0YWxQRnJlZSA9IHRtLnUzMlswXTsgICAvLyBTYXZlIHRoZSBQb2ludGVyIHRvIGZyZWUgc3BhY2UuXG4gICAgdG0ucHEgPSB3YXNtLnBxO1xuICAgIHRtLnByID0gd2FzbS5wcjtcbiAgICB0bS5wRzFnZW4gPSB3YXNtLnBHMWdlbjtcbiAgICB0bS5wRzF6ZXJvID0gd2FzbS5wRzF6ZXJvO1xuICAgIHRtLnBHMmdlbiA9IHdhc20ucEcyZ2VuO1xuICAgIHRtLnBHMnplcm8gPSB3YXNtLnBHMnplcm87XG4gICAgdG0ucE9uZVQgPSB3YXNtLnBPbmVUO1xuXG4gICAgLy8gICAgdG0ucFRtcDAgPSB0bS5hbGxvYyhjdXJ2ZS5HMi5GLm44KjMpO1xuICAgIC8vICAgIHRtLnBUbXAxID0gdG0uYWxsb2MoY3VydmUuRzIuRi5uOCozKTtcblxuXG4gICAgaWYgKHNpbmdsZVRocmVhZCkge1xuICAgICAgICB0bS5jb2RlID0gd2FzbS5jb2RlO1xuICAgICAgICB0bS50YXNrTWFuYWdlciA9IHRocmVhZCgpO1xuICAgICAgICBhd2FpdCB0bS50YXNrTWFuYWdlcihbe1xuICAgICAgICAgICAgY21kOiBcIklOSVRcIixcbiAgICAgICAgICAgIGluaXQ6IE1FTV9TSVpFLFxuICAgICAgICAgICAgY29kZTogdG0uY29kZS5zbGljZSgpXG4gICAgICAgIH1dKTtcbiAgICAgICAgdG0uY29uY3VycmVuY3kgID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0bS53b3JrZXJzID0gW107XG4gICAgICAgIHRtLnBlbmRpbmdEZWZlcnJlZHMgPSBbXTtcbiAgICAgICAgdG0ud29ya2luZyA9IFtdO1xuXG4gICAgICAgIGxldCBjb25jdXJyZW5jeTtcblxuICAgICAgICBpZiAoKHR5cGVvZihuYXZpZ2F0b3IpID09PSBcIm9iamVjdFwiKSAmJiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gb3MuY3B1cygpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbmN1cnJlbmN5ID09IDApe1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGltaXQgdG8gNjQgdGhyZWFkcyBmb3IgbWVtb3J5IHJlYXNvbnMuXG4gICAgICAgIGlmIChjb25jdXJyZW5jeT42NCkgY29uY3VycmVuY3k9NjQ7XG4gICAgICAgIHRtLmNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3k7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGk8Y29uY3VycmVuY3k7IGkrKykge1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldID0gbmV3IFdvcmtlcih3b3JrZXJTb3VyY2UpO1xuXG4gICAgICAgICAgICB0bS53b3JrZXJzW2ldLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGdldE9uTXNnKGkpKTtcblxuICAgICAgICAgICAgdG0ud29ya2luZ1tpXT1mYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dG0ud29ya2Vycy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5Q29kZSA9IHdhc20uY29kZS5zbGljZSgpO1xuICAgICAgICAgICAgaW5pdFByb21pc2VzLnB1c2godG0ucG9zdEFjdGlvbihpLCBbe1xuICAgICAgICAgICAgICAgIGNtZDogXCJJTklUXCIsXG4gICAgICAgICAgICAgICAgaW5pdDogTUVNX1NJWkUsXG4gICAgICAgICAgICAgICAgY29kZTogY29weUNvZGVcbiAgICAgICAgICAgIH1dLCBbY29weUNvZGUuYnVmZmVyXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoaW5pdFByb21pc2VzKTtcblxuICAgIH1cbiAgICByZXR1cm4gdG07XG5cbiAgICBmdW5jdGlvbiBnZXRPbk1zZyhpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICgoZSkmJihlLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGUuZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRtLndvcmtpbmdbaV09ZmFsc2U7XG4gICAgICAgICAgICB0bS5wZW5kaW5nRGVmZXJyZWRzW2ldLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB0bS5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbn1cblxuY2xhc3MgVGhyZWFkTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5vbGRQRnJlZSA9IDA7XG4gICAgfVxuXG4gICAgc3RhcnRTeW5jT3AoKSB7XG4gICAgICAgIGlmICh0aGlzLm9sZFBGcmVlICE9IDApIHRocm93IG5ldyBFcnJvcihcIlN5bmMgb3BlcmF0aW9uIGluIHByb2dyZXNzXCIpO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gdGhpcy51MzJbMF07XG4gICAgfVxuXG4gICAgZW5kU3luY09wKCkge1xuICAgICAgICBpZiAodGhpcy5vbGRQRnJlZSA9PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBzeW5jIG9wZXJhdGlvbiBpbiBwcm9ncmVzc1wiKTtcbiAgICAgICAgdGhpcy51MzJbMF0gPSB0aGlzLm9sZFBGcmVlO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gMDtcbiAgICB9XG5cbiAgICBwb3N0QWN0aW9uKHdvcmtlcklkLCBlLCB0cmFuc2ZlcnMsIF9kZWZlcnJlZCkge1xuICAgICAgICBpZiAodGhpcy53b3JraW5nW3dvcmtlcklkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdGluZyBhIGpvYiB0IGEgd29ya2luZyB3b3JrZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53b3JraW5nW3dvcmtlcklkXSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nRGVmZXJyZWRzW3dvcmtlcklkXSA9IF9kZWZlcnJlZCA/IF9kZWZlcnJlZCA6IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgICB0aGlzLndvcmtlcnNbd29ya2VySWRdLnBvc3RNZXNzYWdlKGUsIHRyYW5zZmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0RlZmVycmVkc1t3b3JrZXJJZF0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcm9jZXNzV29ya3MoKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgKGk8dGhpcy53b3JrZXJzLmxlbmd0aCkmJih0aGlzLmFjdGlvblF1ZXVlLmxlbmd0aCA+IDApOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndvcmtpbmdbaV0gPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrID0gdGhpcy5hY3Rpb25RdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdEFjdGlvbihpLCB3b3JrLmRhdGEsIHdvcmsudHJhbnNmZXJzLCB3b3JrLmRlZmVycmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlQWN0aW9uKGFjdGlvbkRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICBjb25zdCBkID0gbmV3IERlZmVycmVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRhc2tNYW5hZ2VyKGFjdGlvbkRhdGEpO1xuICAgICAgICAgICAgZC5yZXNvbHZlKHJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJzOiB0cmFuc2ZlcnMsXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQ6IGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzV29ya3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZC5wcm9taXNlO1xuICAgIH1cblxuICAgIHJlc2V0TWVtb3J5KCkge1xuICAgICAgICB0aGlzLnUzMlswXSA9IHRoaXMuaW5pdGFsUEZyZWU7XG4gICAgfVxuXG4gICAgYWxsb2NCdWZmKGJ1ZmYpIHtcbiAgICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYWxsb2MoYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRCdWZmKHBvaW50ZXIsIGJ1ZmYpO1xuICAgICAgICByZXR1cm4gcG9pbnRlcjtcbiAgICB9XG5cbiAgICBnZXRCdWZmKHBvaW50ZXIsIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy51OC5zbGljZShwb2ludGVyLCBwb2ludGVyKyBsZW5ndGgpO1xuICAgIH1cblxuICAgIHNldEJ1ZmYocG9pbnRlciwgYnVmZmVyKSB7XG4gICAgICAgIHRoaXMudTguc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGFsbG9jKGxlbmd0aCkge1xuICAgICAgICB3aGlsZSAodGhpcy51MzJbMF0gJiAzKSB0aGlzLnUzMlswXSsrOyAgLy8gUmV0dXJuIGFsd2F5cyBhbGlnbmVkIHBvaW50ZXJzXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudTMyWzBdO1xuICAgICAgICB0aGlzLnUzMlswXSArPSBsZW5ndGg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgdGVybWluYXRlKCkge1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy53b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnNbaV0ucG9zdE1lc3NhZ2UoW3tjbWQ6IFwiVEVSTUlOQVRFXCJ9XSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IGJ1aWxkQm4xMjggYXMgYnVpbGRCbjEyOHdhc20gfSBmcm9tIFwid2FzbWN1cnZlc1wiO1xuaW1wb3J0IGJ1aWxkRW5naW5lIGZyb20gXCIuL2VuZ2luZS5qc1wiO1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHsgTW9kdWxlQnVpbGRlciB9IGZyb20gXCJ3YXNtYnVpbGRlclwiO1xuXG5nbG9iYWxUaGlzLmN1cnZlX2JuMTI4ID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYnVpbGRCbjEyOChzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcblxuICAgIGNvbnN0IG1vZHVsZUJ1aWxkZXIgPSBuZXcgTW9kdWxlQnVpbGRlcigpO1xuICAgIG1vZHVsZUJ1aWxkZXIuc2V0TWVtb3J5KDI1KTtcbiAgICBidWlsZEJuMTI4d2FzbShtb2R1bGVCdWlsZGVyKTtcblxuICAgIGlmIChwbHVnaW5zKSBwbHVnaW5zKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgY29uc3QgYm4xMjh3YXNtID0ge307XG5cbiAgICBibjEyOHdhc20uY29kZSA9IG1vZHVsZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICBibjEyOHdhc20ucHEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZjFtLnBxO1xuICAgIGJuMTI4d2FzbS5wciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mcm0ucHE7XG4gICAgYm4xMjh3YXNtLnBHMWdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzFnZW47XG4gICAgYm4xMjh3YXNtLnBHMXplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcxemVybztcbiAgICBibjEyOHdhc20ucEcxYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzFiO1xuICAgIGJuMTI4d2FzbS5wRzJnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyZ2VuO1xuICAgIGJuMTI4d2FzbS5wRzJ6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMnplcm87XG4gICAgYm4xMjh3YXNtLnBHMmIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyYjtcbiAgICBibjEyOHdhc20ucE9uZVQgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucE9uZVQ7XG4gICAgYm4xMjh3YXNtLnByZVBTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnByZVBTaXplO1xuICAgIGJuMTI4d2FzbS5wcmVRU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wcmVRU2l6ZTtcbiAgICBibjEyOHdhc20ubjhxID0gMzI7XG4gICAgYm4xMjh3YXNtLm44ciA9IDMyO1xuICAgIGJuMTI4d2FzbS5xID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnE7XG4gICAgYm4xMjh3YXNtLnIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucjtcblxuICAgIGlmICgoIXNpbmdsZVRocmVhZCkgJiYgKGdsb2JhbFRoaXMuY3VydmVfYm4xMjgpKSByZXR1cm4gZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyODtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG5hbWU6IFwiYm4xMjhcIixcbiAgICAgICAgd2FzbTogYm4xMjh3YXNtLFxuICAgICAgICBxOiBTY2FsYXIuZShcIjIxODg4MjQyODcxODM5Mjc1MjIyMjQ2NDA1NzQ1MjU3Mjc1MDg4Njk2MzExMTU3Mjk3ODIzNjYyNjg5MDM3ODk0NjQ1MjI2MjA4NTgzXCIpLFxuICAgICAgICByOiBTY2FsYXIuZShcIjIxODg4MjQyODcxODM5Mjc1MjIyMjQ2NDA1NzQ1MjU3Mjc1MDg4NTQ4MzY0NDAwNDE2MDM0MzQzNjk4MjA0MTg2NTc1ODA4NDk1NjE3XCIpLFxuICAgICAgICBuOHE6IDMyLFxuICAgICAgICBuOHI6IDMyLFxuICAgICAgICBjb2ZhY3RvckcyOiBTY2FsYXIuZShcIjMwNjQ0ZTcyZTEzMWEwMjliODUwNDViNjgxODE1ODVlMDZjZWVjZGE1NzJhMjQ4OTM0NWYyMjk5YzBmOWZhOGRcIiwgMTYpLFxuICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCA/IHRydWUgOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGJ1aWxkRW5naW5lKHBhcmFtcyk7XG4gICAgY3VydmUudGVybWluYXRlID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5zaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBudWxsO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50bS50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXNpbmdsZVRocmVhZCkge1xuICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JuMTI4ID0gY3VydmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG4iLCJpbXBvcnQgeyBidWlsZEJsczEyMzgxIGFzIGJ1aWxkQmxzMTIzODF3YXNtIH0gZnJvbSBcIndhc21jdXJ2ZXNcIjtcbmltcG9ydCBidWlsZEVuZ2luZSBmcm9tIFwiLi9lbmdpbmUuanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCB7IE1vZHVsZUJ1aWxkZXIgfSBmcm9tIFwid2FzbWJ1aWxkZXJcIjtcblxuZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSA9IG51bGw7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG5cbiAgICBjb25zdCBtb2R1bGVCdWlsZGVyID0gbmV3IE1vZHVsZUJ1aWxkZXIoKTtcbiAgICBtb2R1bGVCdWlsZGVyLnNldE1lbW9yeSgyNSk7XG4gICAgYnVpbGRCbHMxMjM4MXdhc20obW9kdWxlQnVpbGRlcik7XG5cbiAgICBpZiAocGx1Z2lucykgcGx1Z2lucyhtb2R1bGVCdWlsZGVyKTtcblxuICAgIGNvbnN0IGJsczEyMzgxd2FzbSA9IHt9O1xuXG4gICAgYmxzMTIzODF3YXNtLmNvZGUgPSBtb2R1bGVCdWlsZGVyLmJ1aWxkKCk7XG4gICAgYmxzMTIzODF3YXNtLnBxID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmYxbS5wcTtcbiAgICBibHMxMjM4MXdhc20ucHIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZnJtLnBxO1xuICAgIGJsczEyMzgxd2FzbS5wRzFnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxZ2VuO1xuICAgIGJsczEyMzgxd2FzbS5wRzF6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMXplcm87XG4gICAgYmxzMTIzODF3YXNtLnBHMWIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxYjtcbiAgICBibHMxMjM4MXdhc20ucEcyZ2VuID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMmdlbjtcbiAgICBibHMxMjM4MXdhc20ucEcyemVybyA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzJ6ZXJvO1xuICAgIGJsczEyMzgxd2FzbS5wRzJiID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMmI7XG4gICAgYmxzMTIzODF3YXNtLnBPbmVUID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBPbmVUO1xuICAgIGJsczEyMzgxd2FzbS5wcmVQU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wcmVQU2l6ZTtcbiAgICBibHMxMjM4MXdhc20ucHJlUVNpemUgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucHJlUVNpemU7XG4gICAgYmxzMTIzODF3YXNtLm44cSA9IDQ4O1xuICAgIGJsczEyMzgxd2FzbS5uOHIgPSAzMjtcbiAgICBibHMxMjM4MXdhc20ucSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5xO1xuICAgIGJsczEyMzgxd2FzbS5yID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnI7XG5cblxuICAgIGlmICgoIXNpbmdsZVRocmVhZCkgJiYgKGdsb2JhbFRoaXMuY3VydmVfYmxzMTIzODEpKSByZXR1cm4gZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG5hbWU6IFwiYmxzMTIzODFcIixcbiAgICAgICAgd2FzbTogYmxzMTIzODF3YXNtLFxuICAgICAgICBxOiBTY2FsYXIuZShcIjFhMDExMWVhMzk3ZmU2OWE0YjFiYTdiNjQzNGJhY2Q3NjQ3NzRiODRmMzg1MTJiZjY3MzBkMmEwZjZiMGY2MjQxZWFiZmZmZWIxNTNmZmZmYjlmZWZmZmZmZmZmYWFhYlwiLCAxNiksXG4gICAgICAgIHI6IFNjYWxhci5lKFwiNzNlZGE3NTMyOTlkN2Q0ODMzMzlkODA4MDlhMWQ4MDU1M2JkYTQwMmZmZmU1YmZlZmZmZmZmZmYwMDAwMDAwMVwiLCAxNiksXG4gICAgICAgIG44cTogNDgsXG4gICAgICAgIG44cjogMzIsXG4gICAgICAgIGNvZmFjdG9yRzE6IFNjYWxhci5lKFwiMHgzOTZjOGMwMDU1NTVlMTU2OGMwMGFhYWIwMDAwYWFhYlwiLCAxNiksXG4gICAgICAgIGNvZmFjdG9yRzI6IFNjYWxhci5lKFwiMHg1ZDU0M2E5NTQxNGU3ZjEwOTFkNTA3OTI4NzZhMjAyY2Q5MWRlNDU0NzA4NWFiYWE2OGEyMDViMmU1YTdkZGZhNjI4ZjFjYjRkOWU4MmVmMjE1MzdlMjkzYTY2OTFhZTE2MTZlYzZlNzg2ZjBjNzBjZjFjMzhlMzFjNzIzOGU1XCIsIDE2KSxcbiAgICAgICAgc2luZ2xlVGhyZWFkOiBzaW5nbGVUaHJlYWQgPyB0cnVlIDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBidWlsZEVuZ2luZShwYXJhbXMpO1xuICAgIGN1cnZlLnRlcm1pbmF0ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMuc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gbnVsbDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG0udGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFzaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSA9IGN1cnZlO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuIiwiaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHtkZWZhdWx0IGFzIGJ1aWxkQm4xMjh9IGZyb20gXCIuL2JuMTI4LmpzXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbHMxMjM4MX0gZnJvbSBcIi4vYmxzMTIzODEuanNcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmNvbnN0IGJsczEyMzgxcSA9IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KTtcbmNvbnN0IGJuMTI4cSA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21SKHIsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBpZiAoU2NhbGFyLmVxKHIsIGJuMTI4cikpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIGlmIChTY2FsYXIuZXEociwgYmxzMTIzODFyKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7U2NhbGFyLnRvU3RyaW5nKHIpfWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21RKHEsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBpZiAoU2NhbGFyLmVxKHEsIGJuMTI4cSkpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIGlmIChTY2FsYXIuZXEocSwgYmxzMTIzODFxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7U2NhbGFyLnRvU3RyaW5nKHEsIDE2KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VydmVGcm9tTmFtZShuYW1lLCBzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcbiAgICBsZXQgY3VydmU7XG4gICAgY29uc3Qgbm9ybU5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIGlmIChbXCJCTjEyOFwiLCBcIkJOMjU0XCIsIFwiQUxUQk4xMjhcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFtcIkJMUzEyMzgxXCJdLmluZGV4T2Yobm9ybU5hbWUpID49IDApIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJsczEyMzgxKHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJ2ZSBub3Qgc3VwcG9ydGVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobikge1xuICAgICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpLm1hdGNoKC9bQS1aYS16MC05XSsvZykuam9pbihcIlwiKTtcbiAgICB9XG5cbn1cbiIsIlxuaW1wb3J0ICogYXMgX1NjYWxhciAgZnJvbSBcIi4vc3JjL3NjYWxhci5qc1wiO1xuZXhwb3J0IGNvbnN0IFNjYWxhcj1fU2NhbGFyO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgUG9sRmllbGR9IGZyb20gXCIuL3NyYy9wb2xmaWVsZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEYxRmllbGR9IGZyb20gXCIuL3NyYy9mMWZpZWxkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgRjJGaWVsZH0gZnJvbSBcIi4vc3JjL2YyZmllbGQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBGM0ZpZWxkfSBmcm9tIFwiLi9zcmMvZjNmaWVsZC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgWnFGaWVsZH0gZnJvbSBcIi4vc3JjL2YxZmllbGQuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIEVDfSBmcm9tIFwiLi9zcmMvZWMuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIGJ1aWxkQm4xMjh9IGZyb20gXCIuL3NyYy9ibjEyOC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJ1aWxkQmxzMTIzODF9IGZyb20gXCIuL3NyYy9ibHMxMjM4MS5qc1wiO1xuXG5pbXBvcnQgKiBhcyBfdXRpbHMgZnJvbSBcIi4vc3JjL3V0aWxzLmpzXCI7XG5leHBvcnQgY29uc3QgdXRpbHMgPSBfdXRpbHM7XG5leHBvcnQge2RlZmF1bHQgYXMgQ2hhQ2hhfSBmcm9tIFwiLi9zcmMvY2hhY2hhLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBCaWdCdWZmZXJ9IGZyb20gXCIuL3NyYy9iaWdidWZmZXIuanNcIjtcblxuZXhwb3J0IHtnZXRDdXJ2ZUZyb21SLCBnZXRDdXJ2ZUZyb21RLCBnZXRDdXJ2ZUZyb21OYW1lfSBmcm9tIFwiLi9zcmMvY3VydmVzLmpzXCI7XG5cbiIsIi8qIGdsb2JhbHMgV2ViQXNzZW1ibHkgKi9cbi8qXG5cbkNvcHlyaWdodCAyMDIwIDBLSU1TIGFzc29jaWF0aW9uLlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuKi9cblxuaW1wb3J0IHsgZmxhdEFycmF5LCBmbnZIYXNoLCB0b0FycmF5MzIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgU2NhbGFyLCBGMUZpZWxkIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZGVyKGNvZGUsIG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgbGV0IG1lbW9yeVNpemUgPSAzMjc2NztcbiAgICBsZXQgbWVtb3J5O1xuICAgIGxldCBtZW1vcnlBbGxvY2F0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoIW1lbW9yeUFsbG9jYXRlZCl7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6bWVtb3J5U2l6ZX0pO1xuICAgICAgICAgICAgbWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaChlcnIpe1xuICAgICAgICAgICAgaWYobWVtb3J5U2l6ZSA9PT0gMSl7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGFsbG9jYXRlIFwiICsgbWVtb3J5U2l6ZSAqIDEwMjQgKiA2NCArIFwiIGJ5dGVzLiBUaGlzIG1heSBjYXVzZSBzZXZlcmUgaW5zdGFiaWxpdHkuIFRyeWluZyB3aXRoIFwiICsgbWVtb3J5U2l6ZSAqIDEwMjQgKiA2NCAvIDIgKyBcIiBieXRlc1wiKTtcbiAgICAgICAgICAgIG1lbW9yeVNpemUgPSBNYXRoLmZsb29yKG1lbW9yeVNpemUvMik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3YXNtTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShjb2RlKTtcblxuICAgIGxldCB3YztcblxuICAgIGxldCBlcnJTdHIgPSBcIlwiO1xuICAgIGxldCBtc2dTdHIgPSBcIlwiO1xuXG4gICAgLy8gT25seSBjaXJjb20gMiBpbXBsZW1lbnRzIHZlcnNpb24gbG9va3VwIHRocm91Z2ggZXhwb3J0cyBpbiB0aGUgV0FTTVxuICAgIC8vIFdlIGRlZmF1bHQgdG8gYDFgIGFuZCB1cGRhdGUgaWYgd2Ugc2VlIHRoZSBgZ2V0VmVyc2lvbmAgZXhwb3J0IChtYWpvciB2ZXJzaW9uKVxuICAgIC8vIFRoZXNlIGFyZSB1cGRhdGVkIGFmdGVyIHRoZSBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQsIGFzc3VtaW5nIHRoZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZVxuICAgIGxldCBtYWpvclZlcnNpb24gPSAxO1xuICAgIC8vIEFmdGVyIENpcmNvbSAyLjAuNywgQmxhaW5lIGFkZGVkIGV4cG9ydGVkIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBtaW5vciBhbmQgcGF0Y2ggdmVyc2lvbnNcbiAgICBsZXQgbWlub3JWZXJzaW9uID0gMDtcbiAgICAvLyBJZiB3ZSBjYW4ndCBsb29rdXAgdGhlIHBhdGNoIHZlcnNpb24sIGFzc3VtZSB0aGUgbG93ZXN0XG4gICAgbGV0IHBhdGNoVmVyc2lvbiA9IDA7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21Nb2R1bGUsIHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgICBcIm1lbW9yeVwiOiBtZW1vcnlcbiAgICAgICAgfSxcbiAgICAgICAgcnVudGltZToge1xuICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcjogZnVuY3Rpb24oY29kZSkge1xuICAgICAgICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBlcnIgPSBcIlNpZ25hbCBub3QgZm91bmQuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiVG9vIG1hbnkgc2lnbmFscyBzZXQuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiU2lnbmFsIGFscmVhZHkgc2V0LiBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICBlcnIgPSBcIkFzc2VydCBGYWlsZWQuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiTm90IGVub3VnaCBtZW1vcnkuIFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IFwiSW5wdXQgc2lnbmFsIGFycmF5IGFjY2VzcyBleGNlZWRzIHRoZSBzaXplLiBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnIgPSBcIlVua25vd24gZXJyb3IuIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRVJST1I6IFwiLCBjb2RlLCBlcnJTdHIpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIgKyBlcnJTdHIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEEgbmV3IHdheSBvZiBsb2dnaW5nIG1lc3NhZ2VzIHdhcyBhZGRlZCBpbiBDaXJjb20gMi4wLjcgdGhhdCByZXF1aXJlcyAyIG5ldyBpbXBvcnRzXG4gICAgICAgICAgICAvLyBgcHJpbnRFcnJvck1lc3NhZ2VgIGFuZCBgd3JpdGVCdWZmZXJNZXNzYWdlYC5cbiAgICAgICAgICAgIHByaW50RXJyb3JNZXNzYWdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBlcnJTdHIgKz0gZ2V0TWVzc2FnZSgpICsgXCJcXG5cIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3cml0ZUJ1ZmZlck1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGdldE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAvLyBBbnkgY2FsbHMgdG8gYGxvZygpYCB3aWxsIGFsd2F5cyBlbmQgd2l0aCBhIGBcXG5gLCBzbyB0aGF0J3Mgd2hlbiB3ZSBwcmludCBhbmQgcmVzZXRcbiAgICAgICAgICAgICAgICBpZiAobXNnID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZ1N0cik7XG4gICAgICAgICAgICAgICAgICAgIG1zZ1N0ciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgYnVmZmVyZWQgb3RoZXIgY29udGVudCwgcHV0IGEgc3BhY2UgaW4gYmV0d2VlbiB0aGUgaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZ1N0ciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnU3RyICs9IFwiIFwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBhcHBlbmQgdGhlIG1lc3NhZ2UgdG8gdGhlIG1lc3NhZ2Ugd2UgYXJlIGNyZWF0aW5nXG4gICAgICAgICAgICAgICAgICAgIG1zZ1N0ciArPSBtc2c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNob3dTaGFyZWRSV01lbW9yeTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkX3J3X21lbW9yeV9zaXplID0gaW5zdGFuY2UuZXhwb3J0cy5nZXRGaWVsZE51bUxlbjMyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQzMkFycmF5KHNoYXJlZF9yd19tZW1vcnlfc2l6ZSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHNoYXJlZF9yd19tZW1vcnlfc2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycltzaGFyZWRfcndfbWVtb3J5X3NpemUtMS1qXSA9IGluc3RhbmNlLmV4cG9ydHMucmVhZFNoYXJlZFJXTWVtb3J5KGopO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEluIGNpcmNvbSAyLjAuNywgdGhleSBjaGFuZ2VkIHRoZSBsb2coKSBmdW5jdGlvbiB0byBhbGxvdyBzdHJpbmdzIGFuZCBjaGFuZ2VkIHRoZVxuICAgICAgICAgICAgICAgIC8vIG91dHB1dCBBUEkuIFRoaXMgc21vb3RoZXMgb3ZlciB0aGUgYnJlYWtpbmcgY2hhbmdlLlxuICAgICAgICAgICAgICAgIGlmIChtYWpvclZlcnNpb24gPj0gMiAmJiAobWlub3JWZXJzaW9uID49IDEgfHwgcGF0Y2hWZXJzaW9uID49IDcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGJ1ZmZlcmVkIG90aGVyIGNvbnRlbnQsIHB1dCBhIHNwYWNlIGluIGJldHdlZW4gdGhlIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2dTdHIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZ1N0ciArPSBcIiBcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gYXBwZW5kIHRoZSB2YWx1ZSB0byB0aGUgbWVzc2FnZSB3ZSBhcmUgY3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gKFNjYWxhci5mcm9tQXJyYXkoYXJyLCAweDEwMDAwMDAwMCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG1zZ1N0ciArPSBtc2c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coU2NhbGFyLmZyb21BcnJheShhcnIsIDB4MTAwMDAwMDAwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihjb2RlLCBwc3RyLCBhLGIsYyxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVyclN0cjtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSA3KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0cj1wMnN0cihwc3RyKSArIFwiIFwiICsgd2MuZ2V0RnIoYikudG9TdHJpbmcoKSArIFwiICE9IFwiICsgd2MuZ2V0RnIoYykudG9TdHJpbmcoKSArIFwiIFwiICtwMnN0cihkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gOSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHI9cDJzdHIocHN0cikgKyBcIiBcIiArIHdjLmdldEZyKGIpLnRvU3RyaW5nKCkgKyBcIiBcIiArcDJzdHIoYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY29kZSA9PSA1KSYmKG9wdGlvbnMuc3ltKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHI9cDJzdHIocHN0cikrIFwiIFwiICsgb3B0aW9ucy5zeW0ubGFiZWxJZHgyTmFtZVtjXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHI9cDJzdHIocHN0cikrIFwiIFwiICsgYSArIFwiIFwiICsgYiArIFwiIFwiICsgYyArIFwiIFwiICsgZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFUlJPUjogXCIsIGNvZGUsIGVyclN0cik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyclN0cik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cod2MuZ2V0RnIoYSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nR2V0U2lnbmFsOiBmdW5jdGlvbihzaWduYWwsIHBWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2dHZXRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dHZXRTaWduYWwoc2lnbmFsLCB3Yy5nZXRGcihwVmFsKSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dTZXRTaWduYWw6IGZ1bmN0aW9uKHNpZ25hbCwgcFZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvZ1NldFNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ1NldFNpZ25hbChzaWduYWwsIHdjLmdldEZyKHBWYWwpICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvZ1N0YXJ0Q29tcG9uZW50OiBmdW5jdGlvbihjSWR4KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9nU3RhcnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dTdGFydENvbXBvbmVudChjSWR4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nRmluaXNoQ29tcG9uZW50OiBmdW5jdGlvbihjSWR4KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9nRmluaXNoQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nRmluaXNoQ29tcG9uZW50KGNJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5leHBvcnRzLmdldFZlcnNpb24gPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtYWpvclZlcnNpb24gPSBpbnN0YW5jZS5leHBvcnRzLmdldFZlcnNpb24oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5leHBvcnRzLmdldE1pbm9yVmVyc2lvbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1pbm9yVmVyc2lvbiA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0TWlub3JWZXJzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZXhwb3J0cy5nZXRQYXRjaFZlcnNpb24gPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwYXRjaFZlcnNpb24gPSBpbnN0YW5jZS5leHBvcnRzLmdldFBhdGNoVmVyc2lvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbml0eUNoZWNrID1cbiAgICAgICAgb3B0aW9ucyAmJlxuICAgICAgICAoXG4gICAgICAgICAgICBvcHRpb25zLnNhbml0eUNoZWNrIHx8XG4gICAgICAgICAgICBvcHRpb25zLmxvZ0dldFNpZ25hbCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5sb2dTZXRTaWduYWwgfHxcbiAgICAgICAgICAgIG9wdGlvbnMubG9nU3RhcnRDb21wb25lbnQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMubG9nRmluaXNoQ29tcG9uZW50XG4gICAgICAgICk7XG5cbiAgICAvLyBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciBtYWpvciB2ZXJzaW9uIDIgaW4gY2FzZSB0aGVyZSdzIGEgY2lyY29tIHYzIGluIHRoZSBmdXR1cmVcbiAgICBpZiAobWFqb3JWZXJzaW9uID09PSAyKSB7XG4gICAgICAgIHdjID0gbmV3IFdpdG5lc3NDYWxjdWxhdG9yQ2lyY29tMihpbnN0YW5jZSwgc2FuaXR5Q2hlY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IE1heWJlIHdlIHdhbnQgdG8gY2hlY2sgZm9yIHRoZSBleHBsaWNpdCB2ZXJzaW9uIDEgYmVmb3JlIGNob29zaW5nIHRoaXM/XG4gICAgICAgIHdjID0gbmV3IFdpdG5lc3NDYWxjdWxhdG9yQ2lyY29tMShtZW1vcnksIGluc3RhbmNlLCBzYW5pdHlDaGVjayk7XG4gICAgfVxuICAgIHJldHVybiB3YztcblxuICAgIGZ1bmN0aW9uIGdldE1lc3NhZ2UoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdmFyIGMgPSBpbnN0YW5jZS5leHBvcnRzLmdldE1lc3NhZ2VDaGFyKCk7XG4gICAgICAgIHdoaWxlICggYyAhPSAwICkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgYyA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0TWVzc2FnZUNoYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwMnN0cihwKSB7XG4gICAgICAgIGNvbnN0IGk4ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7XG5cbiAgICAgICAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk4W3AraV0+MDsgaSsrKSAgYnl0ZXMucHVzaChpOFtwK2ldKTtcblxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBieXRlcyk7XG4gICAgfVxufTtcblxuY2xhc3MgV2l0bmVzc0NhbGN1bGF0b3JDaXJjb20xIHtcbiAgICBjb25zdHJ1Y3RvcihtZW1vcnksIGluc3RhbmNlLCBzYW5pdHlDaGVjaykge1xuICAgICAgICB0aGlzLm1lbW9yeSA9IG1lbW9yeTtcbiAgICAgICAgdGhpcy5pMzIgPSBuZXcgVWludDMyQXJyYXkobWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICB0aGlzLm4zMiA9ICh0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0RnJMZW4oKSA+PiAyKSAtIDI7XG4gICAgICAgIGNvbnN0IHBSYXdQcmltZSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRQUmF3UHJpbWUoKTtcblxuICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkodGhpcy5uMzIpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uMzI7IGkrKykge1xuICAgICAgICAgICAgYXJyW3RoaXMubjMyLTEtaV0gPSB0aGlzLmkzMlsocFJhd1ByaW1lID4+IDIpICsgaV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW1lID0gU2NhbGFyLmZyb21BcnJheShhcnIsIDB4MTAwMDAwMDAwKTtcblxuICAgICAgICB0aGlzLkZyID0gbmV3IEYxRmllbGQodGhpcy5wcmltZSk7XG5cbiAgICAgICAgdGhpcy5tYXNrMzIgPSBTY2FsYXIuZnJvbVN0cmluZyhcIkZGRkZGRkZGXCIsIDE2KTtcbiAgICAgICAgdGhpcy5OVmFycyA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXROVmFycygpO1xuICAgICAgICB0aGlzLm42NCA9IE1hdGguZmxvb3IoKHRoaXMuRnIuYml0TGVuZ3RoIC0gMSkgLyA2NCkrMTtcbiAgICAgICAgdGhpcy5SID0gdGhpcy5Gci5lKCBTY2FsYXIuc2hpZnRMZWZ0KDEgLCB0aGlzLm42NCo2NCkpO1xuICAgICAgICB0aGlzLlJJbnYgPSB0aGlzLkZyLmludih0aGlzLlIpO1xuICAgICAgICB0aGlzLnNhbml0eUNoZWNrID0gc2FuaXR5Q2hlY2s7XG4gICAgfVxuXG4gICAgY2lyY29tX3ZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGFzeW5jIF9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5pbml0KCh0aGlzLnNhbml0eUNoZWNrIHx8IHNhbml0eUNoZWNrKSA/IDEgOiAwKTtcbiAgICAgICAgY29uc3QgcFNpZ09mZnNldCA9IHRoaXMuYWxsb2NJbnQoKTtcbiAgICAgICAgY29uc3QgcEZyID0gdGhpcy5hbGxvY0ZyKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnB1dCk7XG4gICAgICAgIGtleXMuZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGggPSBmbnZIYXNoKGspO1xuICAgICAgICAgICAgY29uc3QgaE1TQiA9IHBhcnNlSW50KGguc2xpY2UoMCw4KSwgMTYpO1xuICAgICAgICAgICAgY29uc3QgaExTQiA9IHBhcnNlSW50KGguc2xpY2UoOCwxNiksIDE2KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldFNpZ25hbE9mZnNldDMyKHBTaWdPZmZzZXQsIDAsIGhNU0IsIGhMU0IpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaWduYWwgJHtrfSBpcyBub3QgYW4gaW5wdXQgb2YgdGhlIGNpcmN1aXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaWdPZmZzZXQgPSB0aGlzLmdldEludChwU2lnT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGZBcnIgPSBmbGF0QXJyYXkoaW5wdXRba10pO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGZBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZyKHBGciwgZkFycltpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLnNldFNpZ25hbCgwLCAwLCBzaWdPZmZzZXQgKyBpLCBwRnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBjYWxjdWxhdGVXaXRuZXNzKGlucHV0LCBzYW5pdHlDaGVjaykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBjb25zdCBvbGQwID0gc2VsZi5pMzJbMF07XG4gICAgICAgIGNvbnN0IHcgPSBbXTtcblxuICAgICAgICBhd2FpdCBzZWxmLl9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8c2VsZi5OVmFyczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwV2l0bmVzcyA9IHNlbGYuaW5zdGFuY2UuZXhwb3J0cy5nZXRQV2l0bmVzcyhpKTtcbiAgICAgICAgICAgIHcucHVzaChzZWxmLmdldEZyKHBXaXRuZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmkzMlswXSA9IG9sZDA7XG4gICAgICAgIHJldHVybiB3O1xuICAgIH1cblxuICAgIGFzeW5jIGNhbGN1bGF0ZUJpbldpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IG9sZDAgPSBzZWxmLmkzMlswXTtcblxuICAgICAgICBhd2FpdCBzZWxmLl9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKTtcblxuICAgICAgICBjb25zdCBwV2l0bmVzc0J1ZmZlciA9IHNlbGYuaW5zdGFuY2UuZXhwb3J0cy5nZXRXaXRuZXNzQnVmZmVyKCk7XG5cbiAgICAgICAgc2VsZi5pMzJbMF0gPSBvbGQwO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBzZWxmLm1lbW9yeS5idWZmZXIuc2xpY2UocFdpdG5lc3NCdWZmZXIsIHBXaXRuZXNzQnVmZmVyICsgKHNlbGYuTlZhcnMgKiBzZWxmLm42NCAqIDgpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmYpO1xuICAgIH1cblxuICAgIGFsbG9jSW50KCkge1xuICAgICAgICBjb25zdCBwID0gdGhpcy5pMzJbMF07XG4gICAgICAgIHRoaXMuaTMyWzBdID0gcCs4O1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBhbGxvY0ZyKCkge1xuICAgICAgICBjb25zdCBwID0gdGhpcy5pMzJbMF07XG4gICAgICAgIHRoaXMuaTMyWzBdID0gcCt0aGlzLm4zMio0ICsgODtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgZ2V0SW50KHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaTMyW3A+PjJdO1xuICAgIH1cblxuICAgIHNldEludChwLCB2KSB7XG4gICAgICAgIHRoaXMuaTMyW3A+PjJdID0gdjtcbiAgICB9XG5cbiAgICBnZXRGcihwKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBpZHggPSAocD4+Mik7XG5cbiAgICAgICAgaWYgKHNlbGYuaTMyW2lkeCArIDFdICYgMHg4MDAwMDAwMCkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KHNlbGYubjMyKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxzZWxmLm4zMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJyW3NlbGYubjMyLTEtaV0gPSBzZWxmLmkzMltpZHgrMitpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHNlbGYuRnIuZShTY2FsYXIuZnJvbUFycmF5KGFyciwgMHgxMDAwMDAwMDApKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmkzMltpZHggKyAxXSAmIDB4NDAwMDAwMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbU1vbnRnb21lcnkocmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNlbGYuaTMyW2lkeF0gJiAweDgwMDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRnIuZSggc2VsZi5pMzJbaWR4XSAtIDB4MTAwMDAwMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRnIuZShzZWxmLmkzMltpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZyb21Nb250Z29tZXJ5KG4pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLkZyLm11bChzZWxmLlJJbnYsIG4pO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIHNldEZyKHAsIHYpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdiA9IHNlbGYuRnIuZSh2KTtcblxuICAgICAgICBjb25zdCBtaW5TaG9ydCA9IHNlbGYuRnIubmVnKHNlbGYuRnIuZShcIjgwMDAwMDAwXCIsIDE2KSk7XG4gICAgICAgIGNvbnN0IG1heFNob3J0ID0gc2VsZi5Gci5lKFwiN0ZGRkZGRkZcIiwgMTYpO1xuXG4gICAgICAgIGlmICggIChzZWxmLkZyLmdlcSh2LCBtaW5TaG9ydCkpXG4gICAgICAgICAgICAmJihzZWxmLkZyLmxlcSh2LCBtYXhTaG9ydCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgYTtcbiAgICAgICAgICAgIGlmIChzZWxmLkZyLmdlcSh2LCBzZWxmLkZyLnplcm8pKSB7XG4gICAgICAgICAgICAgICAgYSA9IFNjYWxhci50b051bWJlcih2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYSA9IFNjYWxhci50b051bWJlciggc2VsZi5Gci5zdWIodiwgbWluU2hvcnQpKTtcbiAgICAgICAgICAgICAgICBhID0gYSAtIDB4ODAwMDAwMDA7XG4gICAgICAgICAgICAgICAgYSA9IDB4MTAwMDAwMDAwICsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaTMyWyhwID4+IDIpXSA9IGE7XG4gICAgICAgICAgICBzZWxmLmkzMlsocCA+PiAyKSArIDFdID0gMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuaTMyWyhwID4+IDIpXSA9IDA7XG4gICAgICAgIHNlbGYuaTMyWyhwID4+IDIpICsgMV0gPSAweDgwMDAwMDAwO1xuICAgICAgICBjb25zdCBhcnIgPSBTY2FsYXIudG9BcnJheSh2LCAweDEwMDAwMDAwMCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxzZWxmLm4zMjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBhcnIubGVuZ3RoLTEtaTtcblxuICAgICAgICAgICAgaWYgKCBpZHggPj0wKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pMzJbKHAgPj4gMikgKyAyICsgaV0gPSBhcnJbaWR4XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pMzJbKHAgPj4gMikgKyAyICsgaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBXaXRuZXNzQ2FsY3VsYXRvckNpcmNvbTIge1xuICAgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzYW5pdHlDaGVjaykge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5pbnN0YW5jZS5leHBvcnRzLmdldFZlcnNpb24oKTtcbiAgICAgICAgdGhpcy5uMzIgPSB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0RmllbGROdW1MZW4zMigpO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRSYXdQcmltZSgpO1xuICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkodGhpcy5uMzIpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uMzI7IGkrKykge1xuICAgICAgICAgICAgYXJyW3RoaXMubjMyLTEtaV0gPSB0aGlzLmluc3RhbmNlLmV4cG9ydHMucmVhZFNoYXJlZFJXTWVtb3J5KGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpbWUgPSBTY2FsYXIuZnJvbUFycmF5KGFyciwgMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIHRoaXMud2l0bmVzc1NpemUgPSB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0V2l0bmVzc1NpemUoKTtcblxuICAgICAgICB0aGlzLnNhbml0eUNoZWNrID0gc2FuaXR5Q2hlY2s7XG4gICAgfVxuXG4gICAgY2lyY29tX3ZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0VmVyc2lvbigpO1xuICAgIH1cblxuICAgIGFzeW5jIF9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIC8vaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBhIG1hcCBmcm9tIHNpZ25hbHMgdG8gYXJyYXlzIG9mIGJpZ2ludHNcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLmluaXQoKHRoaXMuc2FuaXR5Q2hlY2sgfHwgc2FuaXR5Q2hlY2spID8gMSA6IDApO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5wdXQpO1xuICAgICAgICB2YXIgaW5wdXRfY291bnRlciA9IDA7XG4gICAgICAgIGtleXMuZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGggPSBmbnZIYXNoKGspO1xuICAgICAgICAgICAgY29uc3QgaE1TQiA9IHBhcnNlSW50KGguc2xpY2UoMCw4KSwgMTYpO1xuICAgICAgICAgICAgY29uc3QgaExTQiA9IHBhcnNlSW50KGguc2xpY2UoOCwxNiksIDE2KTtcbiAgICAgICAgICAgIGNvbnN0IGZBcnIgPSBmbGF0QXJyYXkoaW5wdXRba10pO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGZBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJyRnIgPSB0b0FycmF5MzIoZkFycltpXSx0aGlzLm4zMilcbiAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMubjMyOyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy53cml0ZVNoYXJlZFJXTWVtb3J5KGosYXJyRnJbdGhpcy5uMzItMS1qXSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5leHBvcnRzLnNldElucHV0U2lnbmFsKGhNU0IsIGhMU0IsaSk7XG4gICAgICAgICAgICBpbnB1dF9jb3VudGVyKys7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFmdGVyIGFkZGluZyBzaWduYWwgJHtpfSBvZiAke2t9YClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlucHV0X2NvdW50ZXIgPCB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0SW5wdXRTaXplKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGFsbCBpbnB1dHMgaGF2ZSBiZWVuIHNldC4gT25seSAke2lucHV0X2NvdW50ZXJ9IG91dCBvZiAke3RoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRJbnB1dFNpemUoKX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKSB7XG4gICAgICAgIGNvbnN0IHcgPSBbXTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy53aXRuZXNzU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0V2l0bmVzcyhpKTtcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubjMyKTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajx0aGlzLm4zMjsgaisrKSB7XG4gICAgICAgICAgICBhcnJbdGhpcy5uMzItMS1qXSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5yZWFkU2hhcmVkUldNZW1vcnkoaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3LnB1c2goU2NhbGFyLmZyb21BcnJheShhcnIsIDB4MTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdztcbiAgICB9XG5cbiAgICBhc3luYyBjYWxjdWxhdGVXVE5TQmluKGlucHV0LCBzYW5pdHlDaGVjaykge1xuICAgICAgICBjb25zdCBidWZmMzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy53aXRuZXNzU2l6ZSp0aGlzLm4zMit0aGlzLm4zMisxMSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgIFVpbnQ4QXJyYXkoIGJ1ZmYzMi5idWZmZXIpO1xuICAgICAgICBhd2FpdCB0aGlzLl9kb0NhbGN1bGF0ZVdpdG5lc3MoaW5wdXQsIHNhbml0eUNoZWNrKTtcblxuICAgICAgICAvL1wid3Ruc1wiXG4gICAgICAgIGJ1ZmZbMF0gPSBcIndcIi5jaGFyQ29kZUF0KDApXG4gICAgICAgIGJ1ZmZbMV0gPSBcInRcIi5jaGFyQ29kZUF0KDApXG4gICAgICAgIGJ1ZmZbMl0gPSBcIm5cIi5jaGFyQ29kZUF0KDApXG4gICAgICAgIGJ1ZmZbM10gPSBcInNcIi5jaGFyQ29kZUF0KDApXG5cbiAgICAgICAgLy92ZXJzaW9uIDJcbiAgICAgICAgYnVmZjMyWzFdID0gMjtcblxuICAgICAgICAvL251bWJlciBvZiBzZWN0aW9uczogMlxuICAgICAgICBidWZmMzJbMl0gPSAyO1xuXG4gICAgICAgIC8vaWQgc2VjdGlvbiAxXG4gICAgICAgIGJ1ZmYzMlszXSA9IDE7XG5cbiAgICAgICAgY29uc3QgbjggPSB0aGlzLm4zMio0O1xuICAgICAgICAvL2lkIHNlY3Rpb24gMSBsZW5ndGggaW4gNjRieXRlc1xuICAgICAgICBjb25zdCBpZFNlY3Rpb24xbGVuZ3RoID0gOCArIG44O1xuICAgICAgICBjb25zdCBpZFNlY3Rpb24xbGVuZ3RoSGV4ID0gaWRTZWN0aW9uMWxlbmd0aC50b1N0cmluZygxNik7XG4gICAgICAgICAgICBidWZmMzJbNF0gPSBwYXJzZUludChpZFNlY3Rpb24xbGVuZ3RoSGV4LnNsaWNlKDAsOCksIDE2KTtcbiAgICAgICAgICAgIGJ1ZmYzMls1XSA9IHBhcnNlSW50KGlkU2VjdGlvbjFsZW5ndGhIZXguc2xpY2UoOCwxNiksIDE2KTtcblxuICAgICAgICAvL3RoaXMubjMyXG4gICAgICAgIGJ1ZmYzMls2XSA9IG44O1xuXG4gICAgICAgIC8vcHJpbWUgbnVtYmVyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5nZXRSYXdQcmltZSgpO1xuXG4gICAgICAgIHZhciBwb3MgPSA3O1xuICAgICAgICBmb3IgKGxldCBqPTA7IGo8dGhpcy5uMzI7IGorKykge1xuICAgICAgICAgICAgYnVmZjMyW3BvcytqXSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5yZWFkU2hhcmVkUldNZW1vcnkoaik7XG4gICAgICAgIH1cbiAgICAgICAgcG9zICs9IHRoaXMubjMyO1xuXG4gICAgICAgIC8vIHdpdG5lc3Mgc2l6ZVxuICAgICAgICBidWZmMzJbcG9zXSA9IHRoaXMud2l0bmVzc1NpemU7XG4gICAgICAgIHBvcysrO1xuXG4gICAgICAgIC8vaWQgc2VjdGlvbiAyXG4gICAgICAgIGJ1ZmYzMltwb3NdID0gMjtcbiAgICAgICAgcG9zKys7XG5cbiAgICAgICAgLy8gc2VjdGlvbiAyIGxlbmd0aFxuICAgICAgICBjb25zdCBpZFNlY3Rpb24ybGVuZ3RoID0gbjgqdGhpcy53aXRuZXNzU2l6ZTtcbiAgICAgICAgY29uc3QgaWRTZWN0aW9uMmxlbmd0aEhleCA9IGlkU2VjdGlvbjJsZW5ndGgudG9TdHJpbmcoMTYpO1xuICAgICAgICBidWZmMzJbcG9zXSA9IHBhcnNlSW50KGlkU2VjdGlvbjJsZW5ndGhIZXguc2xpY2UoMCw4KSwgMTYpO1xuICAgICAgICBidWZmMzJbcG9zKzFdID0gcGFyc2VJbnQoaWRTZWN0aW9uMmxlbmd0aEhleC5zbGljZSg4LDE2KSwgMTYpO1xuXG4gICAgICAgIHBvcyArPSAyO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy53aXRuZXNzU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmV4cG9ydHMuZ2V0V2l0bmVzcyhpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajx0aGlzLm4zMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgYnVmZjMyW3BvcytqXSA9IHRoaXMuaW5zdGFuY2UuZXhwb3J0cy5yZWFkU2hhcmVkUldNZW1vcnkoaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MgKz0gdGhpcy5uMzI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IHsgV2l0bmVzc0NhbGN1bGF0b3JCdWlsZGVyIH0gZnJvbSBcImNpcmNvbV9ydW50aW1lXCI7XG5pbXBvcnQgKiBhcyB3dG5zVXRpbHMgZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgeyAgdXRpbHMgfSAgIGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmNvbnN0IHsgdW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB3dG5zQ2FsY3VsYXRlKF9pbnB1dCwgd2FzbUZpbGVOYW1lLCB3dG5zRmlsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBpbnB1dCA9IHVuc3RyaW5naWZ5QmlnSW50cyhfaW5wdXQpO1xuXG4gICAgY29uc3QgZmRXYXNtID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKHdhc21GaWxlTmFtZSk7XG4gICAgY29uc3Qgd2FzbSA9IGF3YWl0IGZkV2FzbS5yZWFkKGZkV2FzbS50b3RhbFNpemUpO1xuICAgIGF3YWl0IGZkV2FzbS5jbG9zZSgpO1xuXG4gICAgY29uc3Qgd2MgPSBhd2FpdCBXaXRuZXNzQ2FsY3VsYXRvckJ1aWxkZXIod2FzbSk7XG4gICAgaWYgKHdjLmNpcmNvbV92ZXJzaW9uKCkgPT0gMSkge1xuICAgICAgICBjb25zdCB3ID0gYXdhaXQgd2MuY2FsY3VsYXRlQmluV2l0bmVzcyhpbnB1dCk7XG5cbiAgICAgICAgY29uc3QgZmRXdG5zID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUod3Ruc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMik7XG5cbiAgICAgICAgYXdhaXQgd3Ruc1V0aWxzLndyaXRlQmluKGZkV3Rucywgdywgd2MucHJpbWUpO1xuICAgICAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmZFd0bnMgPSBhd2FpdCBmYXN0RmlsZS5jcmVhdGVPdmVycmlkZSh3dG5zRmlsZU5hbWUpO1xuXG4gICAgICAgIGNvbnN0IHcgPSBhd2FpdCB3Yy5jYWxjdWxhdGVXVE5TQmluKGlucHV0KTtcblxuICAgICAgICBhd2FpdCBmZFd0bnMud3JpdGUodyk7XG4gICAgICAgIGF3YWl0IGZkV3Rucy5jbG9zZSgpO1xuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCBncm90aDE2X3Byb3ZlIGZyb20gXCIuL2dyb3RoMTZfcHJvdmUuanNcIjtcbmltcG9ydCB3dG5zX2NhbGN1bGF0ZSBmcm9tIFwiLi93dG5zX2NhbGN1bGF0ZS5qc1wiO1xuaW1wb3J0IHt1dGlsc30gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZ3JvdGgxNkZ1bGxQcm92ZShfaW5wdXQsIHdhc21GaWxlLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuICAgIGNvbnN0IGlucHV0ID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9pbnB1dCk7XG5cbiAgICBjb25zdCB3dG5zPSB7XG4gICAgICAgIHR5cGU6IFwibWVtXCJcbiAgICB9O1xuICAgIGF3YWl0IHd0bnNfY2FsY3VsYXRlKGlucHV0LCB3YXNtRmlsZSwgd3Rucyk7XG4gICAgcmV0dXJuIGF3YWl0IGdyb3RoMTZfcHJvdmUoemtleUZpbGVOYW1lLCB3dG5zLCBsb2dnZXIpO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLyogSW1wbGVtZW50YXRpb24gb2YgdGhpcyBwYXBlcjogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNi8yNjAucGRmICovXG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgKiBhcyBjdXJ2ZXMgZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyAgdXRpbHMgfSAgIGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmNvbnN0IHt1bnN0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGdyb3RoMTZWZXJpZnkoX3ZrX3ZlcmlmaWVyLCBfcHVibGljU2lnbmFscywgX3Byb29mLCBsb2dnZXIpIHtcbi8qXG4gICAgbGV0IGNwdWIgPSB2a192ZXJpZmllci5JQ1swXTtcbiAgICBmb3IgKGxldCBzPSAwOyBzPCB2a192ZXJpZmllci5uUHVibGljOyBzKyspIHtcbiAgICAgICAgY3B1YiAgPSBHMS5hZGQoIGNwdWIsIEcxLnRpbWVzU2NhbGFyKCB2a192ZXJpZmllci5JQ1tzKzFdLCBwdWJsaWNTaWduYWxzW3NdKSk7XG4gICAgfVxuKi9cblxuICAgIGNvbnN0IHZrX3ZlcmlmaWVyID0gdW5zdHJpbmdpZnlCaWdJbnRzKF92a192ZXJpZmllcik7XG4gICAgY29uc3QgcHJvb2YgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKTtcbiAgICBjb25zdCBwdWJsaWNTaWduYWxzID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wdWJsaWNTaWduYWxzKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgY3VydmVzLmdldEN1cnZlRnJvbU5hbWUodmtfdmVyaWZpZXIuY3VydmUpO1xuXG4gICAgY29uc3QgSUMwID0gY3VydmUuRzEuZnJvbU9iamVjdCh2a192ZXJpZmllci5JQ1swXSk7XG4gICAgY29uc3QgSUMgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5HMS5GLm44KjIgKiBwdWJsaWNTaWduYWxzLmxlbmd0aCk7XG4gICAgY29uc3QgdyA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkZyLm44ICogcHVibGljU2lnbmFscy5sZW5ndGgpO1xuXG4gICAgaWYgKCFwdWJsaWNJbnB1dHNBcmVWYWxpZChjdXJ2ZSwgcHVibGljU2lnbmFscykpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUHVibGljIGlucHV0cyBhcmUgbm90IHZhbGlkLlwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9MDsgaTxwdWJsaWNTaWduYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZQID0gY3VydmUuRzEuZnJvbU9iamVjdCh2a192ZXJpZmllci5JQ1tpKzFdKTtcbiAgICAgICAgSUMuc2V0KGJ1ZmZQLCBpKmN1cnZlLkcxLkYubjgqMik7XG4gICAgICAgIFNjYWxhci50b1JwckxFKHcsIGN1cnZlLkZyLm44KmksIHB1YmxpY1NpZ25hbHNbaV0sIGN1cnZlLkZyLm44KTtcbiAgICB9XG5cbiAgICBsZXQgY3B1YiA9IGF3YWl0IGN1cnZlLkcxLm11bHRpRXhwQWZmaW5lKElDLCB3KTtcbiAgICBjcHViID0gY3VydmUuRzEuYWRkKGNwdWIsIElDMCk7XG5cbiAgICBjb25zdCBwaV9hID0gY3VydmUuRzEuZnJvbU9iamVjdChwcm9vZi5waV9hKTtcbiAgICBjb25zdCBwaV9iID0gY3VydmUuRzIuZnJvbU9iamVjdChwcm9vZi5waV9iKTtcbiAgICBjb25zdCBwaV9jID0gY3VydmUuRzEuZnJvbU9iamVjdChwcm9vZi5waV9jKTtcblxuICAgIGlmICghaXNXZWxsQ29uc3RydWN0ZWQoY3VydmUsIHtwaV9hLCBwaV9iLCBwaV9jfSkpIHtcbiAgICAgICAgaWYobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJQcm9vZiBjb21taXRtZW50cyBhcmUgbm90IHZhbGlkLlwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZrX2dhbW1hXzIgPSBjdXJ2ZS5HMi5mcm9tT2JqZWN0KHZrX3ZlcmlmaWVyLnZrX2dhbW1hXzIpO1xuICAgIGNvbnN0IHZrX2RlbHRhXzIgPSBjdXJ2ZS5HMi5mcm9tT2JqZWN0KHZrX3ZlcmlmaWVyLnZrX2RlbHRhXzIpO1xuICAgIGNvbnN0IHZrX2FscGhhXzEgPSBjdXJ2ZS5HMS5mcm9tT2JqZWN0KHZrX3ZlcmlmaWVyLnZrX2FscGhhXzEpO1xuICAgIGNvbnN0IHZrX2JldGFfMiA9IGN1cnZlLkcyLmZyb21PYmplY3QodmtfdmVyaWZpZXIudmtfYmV0YV8yKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnBhaXJpbmdFcShcbiAgICAgICAgY3VydmUuRzEubmVnKHBpX2EpICwgcGlfYixcbiAgICAgICAgY3B1YiAsIHZrX2dhbW1hXzIsXG4gICAgICAgIHBpX2MgLCB2a19kZWx0YV8yLFxuXG4gICAgICAgIHZrX2FscGhhXzEsIHZrX2JldGFfMlxuICAgICk7XG5cbiAgICBpZiAoISByZXMpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBwcm9vZlwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiT0shXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1dlbGxDb25zdHJ1Y3RlZChjdXJ2ZSwgcHJvb2YpIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IEcyID0gY3VydmUuRzI7XG5cbiAgICByZXR1cm4gRzEuaXNWYWxpZChwcm9vZi5waV9hKVxuICAgICAgICAmJiBHMi5pc1ZhbGlkKHByb29mLnBpX2IpXG4gICAgICAgICYmIEcxLmlzVmFsaWQocHJvb2YucGlfYyk7XG59XG5cbmZ1bmN0aW9uIHB1YmxpY0lucHV0c0FyZVZhbGlkKGN1cnZlLCBwdWJsaWNJbnB1dHMpIHtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgcHVibGljSW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmKCFTY2FsYXIubHQocHVibGljSW5wdXRzW2ldLCBjdXJ2ZS5yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3QgeyB1bnN0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmZ1bmN0aW9uIHAyNTYobikge1xuICAgIGxldCBuc3RyID0gbi50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKG5zdHIubGVuZ3RoIDwgNjQpIG5zdHIgPSBcIjBcIituc3RyO1xuICAgIG5zdHIgPSBgXCIweCR7bnN0cn1cImA7XG4gICAgcmV0dXJuIG5zdHI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGdyb3RoMTZFeHBvcnRTb2xpZGl0eUNhbGxEYXRhKF9wcm9vZiwgX3B1Yikge1xuICAgIGNvbnN0IHByb29mID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wcm9vZik7XG4gICAgY29uc3QgcHViID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wdWIpO1xuXG4gICAgbGV0IGlucHV0cyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaT0wOyBpPHB1Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5wdXRzICE9IFwiXCIpIGlucHV0cyA9IGlucHV0cyArIFwiLFwiO1xuICAgICAgICBpbnB1dHMgPSBpbnB1dHMgKyBwMjU2KHB1YltpXSk7XG4gICAgfVxuXG4gICAgbGV0IFM7XG4gICAgUz1gWyR7cDI1Nihwcm9vZi5waV9hWzBdKX0sICR7cDI1Nihwcm9vZi5waV9hWzFdKX1dLGAgK1xuICAgICAgICBgW1ske3AyNTYocHJvb2YucGlfYlswXVsxXSl9LCAke3AyNTYocHJvb2YucGlfYlswXVswXSl9XSxbJHtwMjU2KHByb29mLnBpX2JbMV1bMV0pfSwgJHtwMjU2KHByb29mLnBpX2JbMV1bMF0pfV1dLGAgK1xuICAgICAgICBgWyR7cDI1Nihwcm9vZi5waV9jWzBdKX0sICR7cDI1Nihwcm9vZi5waV9jWzFdKX1dLGAgK1xuICAgICAgICBgWyR7aW5wdXRzfV1gO1xuXG4gICAgcmV0dXJuIFM7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQge2RlZmF1bHQgYXMgZnVsbFByb3ZlfSBmcm9tIFwiLi9ncm90aDE2X2Z1bGxwcm92ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByb3ZlfSBmcm9tIFwiLi9ncm90aDE2X3Byb3ZlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5fSBmcm9tIFwiLi9ncm90aDE2X3ZlcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5Q2FsbERhdGF9IGZyb20gXCIuL2dyb3RoMTZfZXhwb3J0c29saWRpdHljYWxsZGF0YS5qc1wiO1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IGJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuXG5pbXBvcnQgeyBDaGFDaGEgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoVG9HMihjdXJ2ZSwgaGFzaCkge1xuICAgIGNvbnN0IGhhc2hWID0gbmV3IERhdGFWaWV3KGhhc2guYnVmZmVyLCBoYXNoLmJ5dGVPZmZzZXQsIGhhc2guYnl0ZUxlbmd0aCk7XG4gICAgY29uc3Qgc2VlZCA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgc2VlZFtpXSA9IGhhc2hWLmdldFVpbnQzMihpKjQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJuZyA9IG5ldyBDaGFDaGEoc2VlZCk7XG5cbiAgICBjb25zdCBnMl9zcCA9IGN1cnZlLkcyLmZyb21Sbmcocm5nKTtcblxuICAgIHJldHVybiBnMl9zcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEcyc3AoY3VydmUsIHBlcnNpbmFsaXphdGlvbiwgY2hhbGxlbmdlLCBnMXMsIGcxc3gpIHtcblxuICAgIGNvbnN0IGggPSBibGFrZTJiKDY0KTtcbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KFtwZXJzaW5hbGl6YXRpb25dKTtcbiAgICBoLnVwZGF0ZShiMSk7XG4gICAgaC51cGRhdGUoY2hhbGxlbmdlKTtcbiAgICBjb25zdCBiMyA9IGN1cnZlLkcxLnRvVW5jb21wcmVzc2VkKGcxcyk7XG4gICAgaC51cGRhdGUoIGIzKTtcbiAgICBjb25zdCBiNCA9IGN1cnZlLkcxLnRvVW5jb21wcmVzc2VkKGcxc3gpO1xuICAgIGgudXBkYXRlKCBiNCk7XG4gICAgY29uc3QgaGFzaCA9aC5kaWdlc3QoKTtcblxuICAgIHJldHVybiBoYXNoVG9HMihjdXJ2ZSwgaGFzaCk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVB1YktleShrLCBjdXJ2ZSwgcGVyc29uYWxpemF0aW9uLCBjaGFsbGVuZ2VIYXNoLCBybmcgKSB7XG4gICAgay5nMV9zID0gY3VydmUuRzEudG9BZmZpbmUoY3VydmUuRzEuZnJvbVJuZyhybmcpKTtcbiAgICBrLmcxX3N4ID0gY3VydmUuRzEudG9BZmZpbmUoY3VydmUuRzEudGltZXNGcihrLmcxX3MsIGsucHJ2S2V5KSk7XG4gICAgay5nMl9zcCA9IGN1cnZlLkcyLnRvQWZmaW5lKGdldEcyc3AoY3VydmUsIHBlcnNvbmFsaXphdGlvbiwgY2hhbGxlbmdlSGFzaCwgay5nMV9zLCBrLmcxX3N4KSk7XG4gICAgay5nMl9zcHggPSBjdXJ2ZS5HMi50b0FmZmluZShjdXJ2ZS5HMi50aW1lc0ZyKGsuZzJfc3AsIGsucHJ2S2V5KSk7XG4gICAgcmV0dXJuIGs7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQVGF1S2V5KGN1cnZlLCBjaGFsbGVuZ2VIYXNoLCBybmcpIHtcbiAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgIHRhdToge30sXG4gICAgICAgIGFscGhhOiB7fSxcbiAgICAgICAgYmV0YToge31cbiAgICB9O1xuICAgIGtleS50YXUucHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgIGtleS5hbHBoYS5wcnZLZXkgPSBjdXJ2ZS5Gci5mcm9tUm5nKHJuZyk7XG4gICAga2V5LmJldGEucHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgIGNhbGN1bGF0ZVB1YktleShrZXkudGF1LCBjdXJ2ZSwgMCwgY2hhbGxlbmdlSGFzaCwgcm5nKTtcbiAgICBjYWxjdWxhdGVQdWJLZXkoa2V5LmFscGhhLCBjdXJ2ZSwgMSwgY2hhbGxlbmdlSGFzaCwgcm5nKTtcbiAgICBjYWxjdWxhdGVQdWJLZXkoa2V5LmJldGEsIGN1cnZlLCAyLCBjaGFsbGVuZ2VIYXNoLCBybmcpO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWx0YUtleShjdXJ2ZSwgdHJhbnNjcmlwdCwgcm5nKSB7XG4gICAgY29uc3QgZGVsdGEgPSB7fTtcbiAgICBkZWx0YS5wcnZLZXkgPSBjdXJ2ZS5Gci5mcm9tUm5nKHJuZyk7XG4gICAgZGVsdGEuZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgZGVsdGEuZzFfc3ggPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS50aW1lc1NjYWxhcihkZWx0YS5nMV9zLCBkZWx0YS5wcnZLZXkpKTtcbiAgICBkZWx0YS5nMl9zcCA9IGhhc2hUb0cyKGN1cnZlLCB0cmFuc2NyaXB0KTtcbiAgICBkZWx0YS5nMl9zcHggPSBjdXJ2ZS5HMi50b0FmZmluZShjdXJ2ZS5HMi50aW1lc1NjYWxhcihkZWx0YS5nMl9zcCwgZGVsdGEucHJ2S2V5KSk7XG4gICAgcmV0dXJuIGRlbHRhO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMga2V5UGFpciBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUFRhdUhlYWRlcihmZCwgY3VydmUsIHBvd2VyLCBjZXJlbW9ueVBvd2VyKSB7XG4gICAgLy8gV3JpdGUgdGhlIGhlYWRlclxuICAgIC8vLy8vLy8vLy8vXG5cbiAgICBpZiAoISBjZXJlbW9ueVBvd2VyKSBjZXJlbW9ueVBvd2VyID0gcG93ZXI7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMigxKTsgLy8gSGVhZGVyIHR5cGVcbiAgICBjb25zdCBwSGVhZGVyU2l6ZSA9IGZkLnBvcztcbiAgICBhd2FpdCBmZC53cml0ZVVMRTY0KDApOyAvLyBUZW1wb3JhbGx5IHNldCB0byAwIGxlbmd0aFxuXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjdXJ2ZS5GMS5uNjQqOCk7XG5cbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjEubjgpO1xuICAgIFNjYWxhci50b1JwckxFKGJ1ZmYsIDAsIGN1cnZlLnEsIGN1cnZlLkYxLm44KTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKHBvd2VyKTsgICAgICAgICAgICAgICAgICAgIC8vIHBvd2VyXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjZXJlbW9ueVBvd2VyKTsgICAgICAgICAgICAgICAvLyBwb3dlclxuXG4gICAgY29uc3QgaGVhZGVyU2l6ZSA9IGZkLnBvcyAtIHBIZWFkZXJTaXplIC0gODtcblxuICAgIGNvbnN0IG9sZFBvcyA9IGZkLnBvcztcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoaGVhZGVyU2l6ZSwgcEhlYWRlclNpemUpO1xuXG4gICAgZmQucG9zID0gb2xkUG9zO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBUYXVIZWFkZXIoZmQsIHNlY3Rpb25zKSB7XG4gICAgaWYgKCFzZWN0aW9uc1sxXSkgIHRocm93IG5ldyBFcnJvcihmZC5maWxlTmFtZSArIFwiOiBGaWxlIGhhcyBubyAgaGVhZGVyXCIpO1xuICAgIGlmIChzZWN0aW9uc1sxXS5sZW5ndGg+MSkgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICtcIjogRmlsZSBoYXMgbW9yZSB0aGFuIG9uZSBoZWFkZXJcIik7XG5cbiAgICBmZC5wb3MgPSBzZWN0aW9uc1sxXVswXS5wO1xuICAgIGNvbnN0IG44ID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQobjgpO1xuICAgIGNvbnN0IHEgPSBTY2FsYXIuZnJvbVJwckxFKGJ1ZmYpO1xuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZUZyb21RKHEpO1xuXG4gICAgaWYgKGN1cnZlLkYxLm42NCo4ICE9IG44KSB0aHJvdyBuZXcgRXJyb3IoZmQuZmlsZU5hbWUgK1wiOiBJbnZhbGlkIHNpemVcIik7XG5cbiAgICBjb25zdCBwb3dlciA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIGNvbnN0IGNlcmVtb255UG93ZXIgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcblxuICAgIGlmIChmZC5wb3Mtc2VjdGlvbnNbMV1bMF0ucCAhPSBzZWN0aW9uc1sxXVswXS5zaXplKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFBUYXUgaGVhZGVyIHNpemVcIik7XG5cbiAgICByZXR1cm4ge2N1cnZlLCBwb3dlciwgY2VyZW1vbnlQb3dlcn07XG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRQdGF1UHViS2V5KGZkLCBjdXJ2ZSwgbW9udGdvbWVyeSkge1xuXG4gICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoY3VydmUuRjEubjgqMio2ICsgY3VydmUuRjIubjgqMiozKTtcblxuICAgIHJldHVybiBmcm9tUHRhdVB1YktleVJwcihidWZmLCAwLCBjdXJ2ZSwgbW9udGdvbWVyeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUHRhdVB1YktleVJwcihidWZmLCBwb3MsIGN1cnZlLCBtb250Z29tZXJ5KSB7XG5cbiAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgIHRhdToge30sXG4gICAgICAgIGFscGhhOiB7fSxcbiAgICAgICAgYmV0YToge31cbiAgICB9O1xuXG4gICAga2V5LnRhdS5nMV9zID0gcmVhZEcxKCk7XG4gICAga2V5LnRhdS5nMV9zeCA9IHJlYWRHMSgpO1xuICAgIGtleS5hbHBoYS5nMV9zID0gcmVhZEcxKCk7XG4gICAga2V5LmFscGhhLmcxX3N4ID0gcmVhZEcxKCk7XG4gICAga2V5LmJldGEuZzFfcyA9IHJlYWRHMSgpO1xuICAgIGtleS5iZXRhLmcxX3N4ID0gcmVhZEcxKCk7XG4gICAga2V5LnRhdS5nMl9zcHggPSByZWFkRzIoKTtcbiAgICBrZXkuYWxwaGEuZzJfc3B4ID0gcmVhZEcyKCk7XG4gICAga2V5LmJldGEuZzJfc3B4ID0gcmVhZEcyKCk7XG5cbiAgICByZXR1cm4ga2V5O1xuXG4gICAgZnVuY3Rpb24gcmVhZEcxKCkge1xuICAgICAgICBsZXQgcDtcbiAgICAgICAgaWYgKG1vbnRnb21lcnkpIHtcbiAgICAgICAgICAgIHAgPSBjdXJ2ZS5HMS5mcm9tUnByTEVNKCBidWZmLCBwb3MgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSBjdXJ2ZS5HMS5mcm9tUnByVW5jb21wcmVzc2VkKCBidWZmLCBwb3MgKTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gY3VydmUuRzEuRi5uOCoyO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkRzIoKSB7XG4gICAgICAgIGxldCBwO1xuICAgICAgICBpZiAobW9udGdvbWVyeSkge1xuICAgICAgICAgICAgcCA9IGN1cnZlLkcyLmZyb21ScHJMRU0oIGJ1ZmYsIHBvcyApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IGN1cnZlLkcyLmZyb21ScHJVbmNvbXByZXNzZWQoIGJ1ZmYsIHBvcyApO1xuICAgICAgICB9XG4gICAgICAgIHBvcyArPSBjdXJ2ZS5HMi5GLm44KjI7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUHRhdVB1YktleVJwcihidWZmLCBwb3MsIGN1cnZlLCBrZXksIG1vbnRnb21lcnkpIHtcblxuICAgIHdyaXRlRzEoa2V5LnRhdS5nMV9zKTtcbiAgICB3cml0ZUcxKGtleS50YXUuZzFfc3gpO1xuICAgIHdyaXRlRzEoa2V5LmFscGhhLmcxX3MpO1xuICAgIHdyaXRlRzEoa2V5LmFscGhhLmcxX3N4KTtcbiAgICB3cml0ZUcxKGtleS5iZXRhLmcxX3MpO1xuICAgIHdyaXRlRzEoa2V5LmJldGEuZzFfc3gpO1xuICAgIHdyaXRlRzIoa2V5LnRhdS5nMl9zcHgpO1xuICAgIHdyaXRlRzIoa2V5LmFscGhhLmcyX3NweCk7XG4gICAgd3JpdGVHMihrZXkuYmV0YS5nMl9zcHgpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShwKSB7XG4gICAgICAgIGlmIChtb250Z29tZXJ5KSB7XG4gICAgICAgICAgICBjdXJ2ZS5HMS50b1JwckxFTShidWZmLCBwb3MsIHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYnVmZiwgcG9zLCBwKTtcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gY3VydmUuRjEubjgqMjtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUcyKHApIHtcbiAgICAgICAgaWYgKG1vbnRnb21lcnkpIHtcbiAgICAgICAgICAgIGN1cnZlLkcyLnRvUnByTEVNKGJ1ZmYsIHBvcywgcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCBwb3MsIHApO1xuICAgICAgICB9XG4gICAgICAgIHBvcyArPSBjdXJ2ZS5GMi5uOCoyO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVQdGF1UHViS2V5KGZkLCBjdXJ2ZSwga2V5LCBtb250Z29tZXJ5KSB7XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkYxLm44KjIqNiArIGN1cnZlLkYyLm44KjIqMyk7XG4gICAgdG9QdGF1UHViS2V5UnByKGJ1ZmYsIDAsIGN1cnZlLCBrZXksIG1vbnRnb21lcnkpO1xuICAgIGF3YWl0IGZkLndyaXRlKGJ1ZmYpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSkge1xuICAgIGNvbnN0IGMgPSB7fTtcblxuICAgIGMudGF1RzEgPSBhd2FpdCByZWFkRzEoKTtcbiAgICBjLnRhdUcyID0gYXdhaXQgcmVhZEcyKCk7XG4gICAgYy5hbHBoYUcxID0gYXdhaXQgcmVhZEcxKCk7XG4gICAgYy5iZXRhRzEgPSBhd2FpdCByZWFkRzEoKTtcbiAgICBjLmJldGFHMiA9IGF3YWl0IHJlYWRHMigpO1xuICAgIGMua2V5ID0gYXdhaXQgcmVhZFB0YXVQdWJLZXkoZmQsIGN1cnZlLCB0cnVlKTtcbiAgICBjLnBhcnRpYWxIYXNoID0gYXdhaXQgZmQucmVhZCgyMTYpO1xuICAgIGMubmV4dENoYWxsZW5nZSA9IGF3YWl0IGZkLnJlYWQoNjQpO1xuICAgIGMudHlwZSA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgY29uc3QgYnVmZlYgID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRzEuRi5uOCoyKjYrY3VydmUuRzIuRi5uOCoyKjMpO1xuICAgIHRvUHRhdVB1YktleVJwcihidWZmViwgMCwgY3VydmUsIGMua2V5LCBmYWxzZSk7XG5cbiAgICBjb25zdCByZXNwb25zZUhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnNldFBhcnRpYWxIYXNoKGMucGFydGlhbEhhc2gpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShidWZmVik7XG4gICAgYy5yZXNwb25zZUhhc2ggPSByZXNwb25zZUhhc2hlci5kaWdlc3QoKTtcblxuICAgIGNvbnN0IHBhcmFtTGVuZ3RoID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgY29uc3QgY3VyUG9zID0gZmQucG9zO1xuICAgIGxldCBsYXN0VHlwZSA9MDtcbiAgICB3aGlsZSAoZmQucG9zLWN1clBvcyA8IHBhcmFtTGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZUeXBlID0gYXdhaXQgcmVhZERWKDEpO1xuICAgICAgICBpZiAoYnVmZlR5cGVbMF08PSBsYXN0VHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVycyBpbiB0aGUgY29udHJpYnV0aW9uIG11c3QgYmUgc29ydGVkXCIpO1xuICAgICAgICBsYXN0VHlwZSA9IGJ1ZmZUeXBlWzBdO1xuICAgICAgICBpZiAoYnVmZlR5cGVbMF09PTEpIHsgICAgIC8vIE5hbWVcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZMZW4gPSBhd2FpdCByZWFkRFYoMSk7XG4gICAgICAgICAgICBjb25zdCBidWZmU3RyID0gYXdhaXQgcmVhZERWKGJ1ZmZMZW5bMF0pO1xuICAgICAgICAgICAgYy5uYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ1ZmZTdHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZUeXBlWzBdPT0yKSB7XG4gICAgICAgICAgICBjb25zdCBidWZmRXhwID0gYXdhaXQgcmVhZERWKDEpO1xuICAgICAgICAgICAgYy5udW1JdGVyYXRpb25zRXhwID0gYnVmZkV4cFswXTtcbiAgICAgICAgfSBlbHNlIGlmIChidWZmVHlwZVswXT09Mykge1xuICAgICAgICAgICAgY29uc3QgYnVmZkxlbiA9IGF3YWl0IHJlYWREVigxKTtcbiAgICAgICAgICAgIGMuYmVhY29uSGFzaCA9IGF3YWl0IHJlYWREVihidWZmTGVuWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmQucG9zICE9IGN1clBvcyArIHBhcmFtTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlcyBkbyBub3QgbWF0Y2hcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRzEoKSB7XG4gICAgICAgIGNvbnN0IHBCdWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMS5GLm44KjIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRzEuZnJvbVJwckxFTSggcEJ1ZmYgKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRzIoKSB7XG4gICAgICAgIGNvbnN0IHBCdWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMi5GLm44KjIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRzIuZnJvbVJwckxFTSggcEJ1ZmYgKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRFYobikge1xuICAgICAgICBjb25zdCBiID0gYXdhaXQgZmQucmVhZChuKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDb250cmlidXRpb25zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpIHtcbiAgICBpZiAoIXNlY3Rpb25zWzddKSAgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICsgXCI6IEZpbGUgaGFzIG5vICBjb250cmlidXRpb25zXCIpO1xuICAgIGlmIChzZWN0aW9uc1s3XVswXS5sZW5ndGg+MSkgdGhyb3cgbmV3IEVycm9yKGZkLmZpbGVOYW1lICtcIjogRmlsZSBoYXMgbW9yZSB0aGFuIG9uZSBjb250cmlidXRpb25zIHNlY3Rpb25cIik7XG5cbiAgICBmZC5wb3MgPSBzZWN0aW9uc1s3XVswXS5wO1xuICAgIGNvbnN0IG5Db250cmlidXRpb25zID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgY29uc3QgY29udHJpYnV0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuQ29udHJpYnV0aW9uczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCByZWFkQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSk7XG4gICAgICAgIGMuaWQgPSBpKzE7XG4gICAgICAgIGNvbnRyaWJ1dGlvbnMucHVzaChjKTtcbiAgICB9XG5cbiAgICBpZiAoZmQucG9zLXNlY3Rpb25zWzddWzBdLnAgIT0gc2VjdGlvbnNbN11bMF0uc2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb250cmlidXRpb24gc2VjdGlvbiBzaXplXCIpO1xuXG4gICAgcmV0dXJuIGNvbnRyaWJ1dGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSwgY29udHJpYnV0aW9uKSB7XG5cbiAgICBjb25zdCBidWZmRzEgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5GMS5uOCoyKTtcbiAgICBjb25zdCBidWZmRzIgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5GMi5uOCoyKTtcbiAgICBhd2FpdCB3cml0ZUcxKGNvbnRyaWJ1dGlvbi50YXVHMSk7XG4gICAgYXdhaXQgd3JpdGVHMihjb250cmlidXRpb24udGF1RzIpO1xuICAgIGF3YWl0IHdyaXRlRzEoY29udHJpYnV0aW9uLmFscGhhRzEpO1xuICAgIGF3YWl0IHdyaXRlRzEoY29udHJpYnV0aW9uLmJldGFHMSk7XG4gICAgYXdhaXQgd3JpdGVHMihjb250cmlidXRpb24uYmV0YUcyKTtcbiAgICBhd2FpdCB3cml0ZVB0YXVQdWJLZXkoZmQsIGN1cnZlLCBjb250cmlidXRpb24ua2V5LCB0cnVlKTtcbiAgICBhd2FpdCBmZC53cml0ZShjb250cmlidXRpb24ucGFydGlhbEhhc2gpO1xuICAgIGF3YWl0IGZkLndyaXRlKGNvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKGNvbnRyaWJ1dGlvbi50eXBlIHx8IDApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgaWYgKGNvbnRyaWJ1dGlvbi5uYW1lKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKDEpOyAgICAgIC8vIFBhcmFtIE5hbWVcbiAgICAgICAgY29uc3QgbmFtZURhdGEgPSBuZXcgVGV4dEVuY29kZXIoXCJ1dGYtOFwiKS5lbmNvZGUoY29udHJpYnV0aW9uLm5hbWUuc3Vic3RyaW5nKDAsNjQpKTtcbiAgICAgICAgcGFyYW1zLnB1c2gobmFtZURhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuYW1lRGF0YS5ieXRlTGVuZ3RoOyBpKyspIHBhcmFtcy5wdXNoKG5hbWVEYXRhW2ldKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyaWJ1dGlvbi50eXBlID09IDEpIHtcbiAgICAgICAgcGFyYW1zLnB1c2goMik7ICAgICAgLy8gUGFyYW0gbnVtSXRlcmF0aW9uc0V4cFxuICAgICAgICBwYXJhbXMucHVzaChjb250cmlidXRpb24ubnVtSXRlcmF0aW9uc0V4cCk7XG5cbiAgICAgICAgcGFyYW1zLnB1c2goMyk7ICAgICAgLy8gQmVhY29uIEhhc2hcbiAgICAgICAgcGFyYW1zLnB1c2goY29udHJpYnV0aW9uLmJlYWNvbkhhc2guYnl0ZUxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxjb250cmlidXRpb24uYmVhY29uSGFzaC5ieXRlTGVuZ3RoOyBpKyspIHBhcmFtcy5wdXNoKGNvbnRyaWJ1dGlvbi5iZWFjb25IYXNoW2ldKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sZW5ndGg+MCkge1xuICAgICAgICBjb25zdCBwYXJhbXNCdWZmID0gbmV3IFVpbnQ4QXJyYXkocGFyYW1zKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEUzMihwYXJhbXNCdWZmLmJ5dGVMZW5ndGgpO1xuICAgICAgICBhd2FpdCBmZC53cml0ZShwYXJhbXNCdWZmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDApO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShwKSB7XG4gICAgICAgIGN1cnZlLkcxLnRvUnByTEVNKGJ1ZmZHMSwgMCwgcCk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlKGJ1ZmZHMSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihwKSB7XG4gICAgICAgIGN1cnZlLkcyLnRvUnByTEVNKGJ1ZmZHMiwgMCwgcCk7XG4gICAgICAgIGF3YWl0IGZkLndyaXRlKGJ1ZmZHMik7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUNvbnRyaWJ1dGlvbnMoZmQsIGN1cnZlLCBjb250cmlidXRpb25zKSB7XG5cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDcpOyAvLyBIZWFkZXIgdHlwZVxuICAgIGNvbnN0IHBDb250cmlidXRpb25zU2l6ZSA9IGZkLnBvcztcbiAgICBhd2FpdCBmZC53cml0ZVVMRTY0KDApOyAvLyBUZW1wb3JhbGx5IHNldCB0byAwIGxlbmd0aFxuXG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjb250cmlidXRpb25zLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPCBjb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlQ29udHJpYnV0aW9uKGZkLCBjdXJ2ZSwgY29udHJpYnV0aW9uc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnNTaXplID0gZmQucG9zIC0gcENvbnRyaWJ1dGlvbnNTaXplIC0gODtcblxuICAgIGNvbnN0IG9sZFBvcyA9IGZkLnBvcztcblxuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoY29udHJpYnV0aW9uc1NpemUsIHBDb250cmlidXRpb25zU2l6ZSk7XG4gICAgZmQucG9zID0gb2xkUG9zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBwb3dlciwgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQ2FsY3VsYXRpbmcgRmlyc3QgQ2hhbGxlbmdlIEhhc2hcIik7XG5cbiAgICBjb25zdCBoYXNoZXIgPSBuZXcgQmxha2UyYig2NCk7XG5cbiAgICBjb25zdCB2RzEgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5HMS5GLm44KjIpO1xuICAgIGNvbnN0IHZHMiA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkcyLkYubjgqMik7XG4gICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQodkcxLCAwLCBjdXJ2ZS5HMS5nKTtcbiAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZCh2RzIsIDAsIGN1cnZlLkcyLmcpO1xuXG4gICAgaGFzaGVyLnVwZGF0ZShCbGFrZTJiKDY0KS5kaWdlc3QoKSk7XG5cbiAgICBsZXQgbjtcblxuICAgIG49KDIgKiogcG93ZXIpKjIgLTE7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiQ2FsY3VsYXRlIEluaXRpYWwgSGFzaDogdGF1RzFcIik7XG4gICAgaGFzaEJsb2NrKHZHMSwgbik7XG4gICAgbj0gMiAqKiBwb3dlcjtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJDYWxjdWxhdGUgSW5pdGlhbCBIYXNoOiB0YXVHMlwiKTtcbiAgICBoYXNoQmxvY2sodkcyLCBuKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJDYWxjdWxhdGUgSW5pdGlhbCBIYXNoOiBhbHBoYVRhdUcxXCIpO1xuICAgIGhhc2hCbG9jayh2RzEsIG4pO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIkNhbGN1bGF0ZSBJbml0aWFsIEhhc2g6IGJldGFUYXVHMVwiKTtcbiAgICBoYXNoQmxvY2sodkcxLCBuKTtcbiAgICBoYXNoZXIudXBkYXRlKHZHMik7XG5cbiAgICByZXR1cm4gaGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgZnVuY3Rpb24gaGFzaEJsb2NrKGJ1ZmYsIG4pIHtcbiAgICAgICAgLy8gdGhpcyBibG9jayBzaXplIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kIHRoZSBtYXhpbXVtXG4gICAgICAgIC8vIGlucHV0IHNpemUgb2YgdGhlIEJsYWtlMmIgdXBkYXRlIG1ldGhvZCAoNjUsNTM1LDcyMCBieXRlcykuXG4gICAgICAgIGNvbnN0IGJsb2NrU2l6ZSA9IDM0MTAwMDtcbiAgICAgICAgY29uc3QgbkJsb2NrcyA9IE1hdGguZmxvb3IobiAvIGJsb2NrU2l6ZSk7XG4gICAgICAgIGNvbnN0IHJlbSA9IG4gJSBibG9ja1NpemU7XG4gICAgICAgIGNvbnN0IGJpZ0J1ZmYgPSBuZXcgVWludDhBcnJheShibG9ja1NpemUgKiBidWZmLmJ5dGVMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGJpZ0J1ZmYuc2V0KGJ1ZmYsIGkqYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkJsb2NrczsgaSsrKSB7XG4gICAgICAgICAgICBoYXNoZXIudXBkYXRlKGJpZ0J1ZmYpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiSW5pdGlhbCBoYXNoOiBcIiAraSpibG9ja1NpemUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZW07IGkrKykge1xuICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShidWZmKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2V5RnJvbUJlYWNvbihjdXJ2ZSwgY2hhbGxlbmdlSGFzaCwgYmVhY29uSGFzaCwgbnVtSXRlcmF0aW9uc0V4cCkge1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5ybmdGcm9tQmVhY29uUGFyYW1zKGJlYWNvbkhhc2gsIG51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgY29uc3Qga2V5ID0ga2V5UGFpci5jcmVhdGVQVGF1S2V5KGN1cnZlLCBjaGFsbGVuZ2VIYXNoLCBybmcpO1xuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLypcbkhlYWRlcigxKVxuICAgIG44XG4gICAgcHJpbWVcbiAgICBwb3dlclxudGF1RzEoMilcbiAgICB7KDIgKiogcG93ZXIpKjItMX0gW1xuICAgICAgICBHMSwgdGF1KkcxLCB0YXVeMiAqIEcxLCAuLi4uXG4gICAgXVxudGF1RzIoMylcbiAgICB7MiAqKiBwb3dlcn1bXG4gICAgICAgIEcyLCB0YXUqRzIsIHRhdV4yICogRzIsIC4uLlxuICAgIF1cbmFscGhhVGF1RzEoNClcbiAgICB7MiAqKiBwb3dlcn1bXG4gICAgICAgIGFscGhhKkcxLCBhbHBoYSp0YXUqRzEsIGFscGhhKnRhdV4yKkcxLC4uLi5cbiAgICBdXG5iZXRhVGF1RzEoNSlcbiAgICB7MiAqKiBwb3dlcn0gW11cbiAgICAgICAgYmV0YSpHMSwgYmV0YSp0YXUqRzEsIGJldGEqdGF1XjIqRzEsIC4uLi5cbiAgICBdXG5iZXRhRzIoNilcbiAgICB7MX1bXG4gICAgICAgIGJldGEqRzJcbiAgICBdXG5jb250cmlidXRpb25zKDcpXG4gICAgTkNvbnRyaWJ1dGlvbnNcbiAgICB7TkNvbnRyaWJ1dGlvbnN9W1xuICAgICAgICB0YXUqRzFcbiAgICAgICAgdGF1KkcyXG4gICAgICAgIGFscGhhKkcxXG4gICAgICAgIGJldGEqRzFcbiAgICAgICAgYmV0YSpHMlxuICAgICAgICBwdWJLZXlcbiAgICAgICAgICAgIHRhdV9nMXNcbiAgICAgICAgICAgIHRhdV9nMXN4XG4gICAgICAgICAgICB0YXVfZzJzcHhcbiAgICAgICAgICAgIGFscGhhX2cxc1xuICAgICAgICAgICAgYWxwaGFfZzFzeFxuICAgICAgICAgICAgYWxwaGFfZzFzcHhcbiAgICAgICAgICAgIGJldGFfZzFzXG4gICAgICAgICAgICBiZXRhX2cxc3hcbiAgICAgICAgICAgIGJldGFfZzFzcHhcbiAgICAgICAgcGFydGlhbEhhc2ggKDIxNiBieXRlcykgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvYmxha2UyYi13YXNtL2Jsb2IvMjNiZWUwNjk0NTgwNjMwOTk3N2FmODAyYmMzNzQ3Mjc1NDI2MTdjNy9ibGFrZTJiLndhdCNMOVxuICAgICAgICBoYXNoTmV3Q2hhbGxlbmdlXG4gICAgXVxuICovXG5cbmltcG9ydCAqIGFzIHB0YXVVdGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gbmV3QWNjdW11bGF0b3IoY3VydmUsIHBvd2VyLCBmaWxlTmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBhd2FpdCBCbGFrZTJiLnJlYWR5KCk7XG5cbiAgICBjb25zdCBmZCA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKGZpbGVOYW1lLCBcInB0YXVcIiwgMSwgNyk7XG5cbiAgICBhd2FpdCBwdGF1VXRpbHMud3JpdGVQVGF1SGVhZGVyKGZkLCBjdXJ2ZSwgcG93ZXIsIDApO1xuXG4gICAgY29uc3QgYnVmZkcxID0gY3VydmUuRzEub25lQWZmaW5lO1xuICAgIGNvbnN0IGJ1ZmZHMiA9IGN1cnZlLkcyLm9uZUFmZmluZTtcblxuICAgIC8vIFdyaXRlIHRhdUcxXG4gICAgLy8vLy8vLy8vLy9cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmQsIDIpO1xuICAgIGNvbnN0IG5UYXVHMSA9ICgyICoqIHBvd2VyKSAqIDIgLTE7XG4gICAgZm9yIChsZXQgaT0wOyBpPCBuVGF1RzE7IGkrKykge1xuICAgICAgICBhd2FpdCBmZC53cml0ZShidWZmRzEpO1xuICAgICAgICBpZiAoKGxvZ2dlcikmJigoaSUxMDAwMDApID09IDApJiZpKSBsb2dnZXIubG9nKFwidGF1RzE6IFwiICsgaSk7XG4gICAgfVxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgLy8gV3JpdGUgdGF1RzJcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMyk7XG4gICAgY29uc3QgblRhdUcyID0gKDIgKiogcG93ZXIpO1xuICAgIGZvciAobGV0IGk9MDsgaTwgblRhdUcyOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZmQud3JpdGUoYnVmZkcyKTtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoKGklMTAwMDAwKSA9PSAwKSYmaSkgbG9nZ2VyLmxvZyhcInRhdUcyOiBcIiArIGkpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIGFscGhhVGF1RzFcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgNCk7XG4gICAgY29uc3QgbkFsZmFUYXVHMSA9ICgyICoqIHBvd2VyKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8IG5BbGZhVGF1RzE7IGkrKykge1xuICAgICAgICBhd2FpdCBmZC53cml0ZShidWZmRzEpO1xuICAgICAgICBpZiAoKGxvZ2dlcikmJigoaSUxMDAwMDApID09IDApJiZpKSBsb2dnZXIubG9nKFwiYWxwaGFUYXVHMTogXCIgKyBpKTtcbiAgICB9XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cbiAgICAvLyBXcml0ZSBiZXRhVGF1RzFcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgNSk7XG4gICAgY29uc3QgbkJldGFUYXVHMSA9ICgyICoqIHBvd2VyKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8IG5CZXRhVGF1RzE7IGkrKykge1xuICAgICAgICBhd2FpdCBmZC53cml0ZShidWZmRzEpO1xuICAgICAgICBpZiAoKGxvZ2dlcikmJigoaSUxMDAwMDApID09IDApJiZpKSBsb2dnZXIubG9nKFwiYmV0YVRhdUcxOiBcIiArIGkpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIC8vIFdyaXRlIGJldGFHMlxuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA2KTtcbiAgICBhd2FpdCBmZC53cml0ZShidWZmRzIpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmQpO1xuXG4gICAgLy8gQ29udHJpYnV0aW9uc1xuICAgIC8vLy8vLy8vLy8vXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCA3KTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKDApOyAvLyAwIENvbnRyaWJ1dGlvbnNcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBjb25zdCBmaXJzdENoYWxsZW5nZUhhc2ggPSBwdGF1VXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBwb3dlciwgbG9nZ2VyKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhtaXNjLmZvcm1hdEhhc2goQmxha2UyYig2NCkuZGlnZXN0KCksIFwiQmxhbmsgQ29udHJpYnV0aW9uIEhhc2g6XCIpKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChmaXJzdENoYWxsZW5nZUhhc2gsIFwiRmlyc3QgQ29udHJpYnV0aW9uIEhhc2g6XCIpKTtcblxuICAgIHJldHVybiBmaXJzdENoYWxsZW5nZUhhc2g7XG5cbn1cbiIsIi8vIEZvcm1hdCBvZiB0aGUgb3V0cHVcbi8vICAgICBIYXNoIG9mIHRoZSBsYXN0IGNvbnRyaWJ1dGlvbiAgNjRCeXRlc1xuLy8gICAgIDJeTiAqIDIgLTEgIFRhdUcxIHBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgIDJeTiAgVGF1RzIgUG9pbnRzICh1bmNvbXByZXNzZWQpXG4vLyAgICAgMl5OICBBbHBoYVRhdUcxIFBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgIDJeTiAgQmV0YVRhdUcxIFBvaW50cyAodW5jb21wcmVzc2VkKVxuLy8gICAgIEJldGFHMiAodW5jb21wcmVzc2VkKVxuXG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBleHBvcnRDaGFsbGVuZ2UocFRhdUZpbGVuYW1lLCBjaGFsbGVuZ2VGaWxlbmFtZSwgbG9nZ2VyKSB7XG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuICAgIGNvbnN0IHtmZDogZmRGcm9tLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUocFRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSk7XG5cbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkRnJvbSwgc2VjdGlvbnMpO1xuXG4gICAgY29uc3QgY29udHJpYnV0aW9ucyA9IGF3YWl0IHV0aWxzLnJlYWRDb250cmlidXRpb25zKGZkRnJvbSwgY3VydmUsIHNlY3Rpb25zKTtcbiAgICBsZXQgbGFzdFJlc3BvbnNlSGFzaCwgY3VyQ2hhbGxlbmdlSGFzaDtcbiAgICBpZiAoY29udHJpYnV0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICBsYXN0UmVzcG9uc2VIYXNoID0gQmxha2UyYig2NCkuZGlnZXN0KCk7XG4gICAgICAgIGN1ckNoYWxsZW5nZUhhc2ggPSB1dGlscy5jYWxjdWxhdGVGaXJzdENoYWxsZW5nZUhhc2goY3VydmUsIHBvd2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXN0UmVzcG9uc2VIYXNoID0gY29udHJpYnV0aW9uc1tjb250cmlidXRpb25zLmxlbmd0aC0xXS5yZXNwb25zZUhhc2g7XG4gICAgICAgIGN1ckNoYWxsZW5nZUhhc2ggPSBjb250cmlidXRpb25zW2NvbnRyaWJ1dGlvbnMubGVuZ3RoLTFdLm5leHRDaGFsbGVuZ2U7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGxhc3RSZXNwb25zZUhhc2gsIFwiTGFzdCBSZXNwb25zZSBIYXNoOiBcIikpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGN1ckNoYWxsZW5nZUhhc2gsIFwiTmV3IENoYWxsZW5nZSBIYXNoOiBcIikpO1xuXG5cbiAgICBjb25zdCBmZFRvID0gYXdhaXQgZmFzdEZpbGUuY3JlYXRlT3ZlcnJpZGUoY2hhbGxlbmdlRmlsZW5hbWUpO1xuXG4gICAgY29uc3QgdG9IYXNoID0gQmxha2UyYig2NCk7XG4gICAgYXdhaXQgZmRUby53cml0ZShsYXN0UmVzcG9uc2VIYXNoKTtcbiAgICB0b0hhc2gudXBkYXRlKGxhc3RSZXNwb25zZUhhc2gpO1xuXG4gICAgYXdhaXQgZXhwb3J0U2VjdGlvbigyLCBcIkcxXCIsICgyICoqIHBvd2VyKSAqIDIgLTEsIFwidGF1RzFcIik7XG4gICAgYXdhaXQgZXhwb3J0U2VjdGlvbigzLCBcIkcyXCIsICgyICoqIHBvd2VyKSAgICAgICAsIFwidGF1RzJcIik7XG4gICAgYXdhaXQgZXhwb3J0U2VjdGlvbig0LCBcIkcxXCIsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYWxwaGFUYXVHMVwiKTtcbiAgICBhd2FpdCBleHBvcnRTZWN0aW9uKDUsIFwiRzFcIiwgKDIgKiogcG93ZXIpICAgICAgICwgXCJiZXRhVGF1RzFcIik7XG4gICAgYXdhaXQgZXhwb3J0U2VjdGlvbig2LCBcIkcyXCIsIDEgICAgICAgICAgICAgICAgICAsIFwiYmV0YUcyXCIpO1xuXG4gICAgYXdhaXQgZmRGcm9tLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRUby5jbG9zZSgpO1xuXG4gICAgY29uc3QgY2FsY0N1ckNoYWxsZW5nZUhhc2ggPSB0b0hhc2guZGlnZXN0KCk7XG5cbiAgICBpZiAoIW1pc2MuaGFzaElzRXF1YWwgKGN1ckNoYWxsZW5nZUhhc2gsIGNhbGNDdXJDaGFsbGVuZ2VIYXNoKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY2FsY0N1ckNoYWxsZW5nZUhhc2gsIFwiQ2FsYyBDdXJyZXQgQ2hhbGxlbmdlIEhhc2g6IFwiKSk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUFRhdSBmaWxlIGlzIGNvcnJ1cHRlZC4gQ2FsY3VsYXRlZCBuZXcgY2hhbGxlbmdlIGhhc2ggZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgZWNsYXJlZCBvbmVcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBUYXUgZmlsZSBpcyBjb3JydXB0ZWQuIENhbGN1bGF0ZWQgbmV3IGNoYWxsZW5nZSBoYXNoIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGVjbGFyZWQgb25lXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJDaGFsbGVuZ2VIYXNoO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZXhwb3J0U2VjdGlvbihzZWN0aW9uSWQsIGdyb3VwTmFtZSwgblBvaW50cywgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgICAgIGNvbnN0IG5Qb2ludHNDaHVuayA9IE1hdGguZmxvb3IoKDE8PDI0KS9zRyk7XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmRGcm9tLCBzZWN0aW9ucywgc2VjdGlvbklkKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBuUG9pbnRzOyBpKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEV4cG9ydGluZyAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oblBvaW50cy1pLCBuUG9pbnRzQ2h1bmspO1xuICAgICAgICAgICAgbGV0IGJ1ZmY7XG4gICAgICAgICAgICBidWZmID0gYXdhaXQgZmRGcm9tLnJlYWQobipzRyk7XG4gICAgICAgICAgICBidWZmID0gYXdhaXQgRy5iYXRjaExFTXRvVShidWZmKTtcbiAgICAgICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYnVmZik7XG4gICAgICAgICAgICB0b0hhc2gudXBkYXRlKGJ1ZmYpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZEZyb20pO1xuICAgIH1cblxuXG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3BvbnNlKG9sZFB0YXVGaWxlbmFtZSwgY29udHJpYnV0aW9uRmlsZW5hbWUsIG5ld1BUYXVGaWxlbmFtZSwgbmFtZSwgaW1wb3J0UG9pbnRzLCBsb2dnZXIpIHtcblxuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IG5vSGFzaCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8NjQ7IGkrKykgbm9IYXNoW2ldID0gMHhGRjtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShvbGRQdGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkT2xkLCBzZWN0aW9ucyk7XG4gICAgY29uc3QgY29udHJpYnV0aW9ucyA9IGF3YWl0IHV0aWxzLnJlYWRDb250cmlidXRpb25zKGZkT2xkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuICAgIGNvbnN0IGN1cnJlbnRDb250cmlidXRpb24gPSB7fTtcblxuICAgIGlmIChuYW1lKSBjdXJyZW50Q29udHJpYnV0aW9uLm5hbWUgPSBuYW1lO1xuXG4gICAgY29uc3Qgc0cxID0gY3VydmUuRjEubjgqMjtcbiAgICBjb25zdCBzY0cxID0gY3VydmUuRjEubjg7IC8vIENvbXByZXNlZCBzaXplXG4gICAgY29uc3Qgc0cyID0gY3VydmUuRjIubjgqMjtcbiAgICBjb25zdCBzY0cyID0gY3VydmUuRjIubjg7IC8vIENvbXByZXNlZCBzaXplXG5cbiAgICBjb25zdCBmZFJlc3BvbnNlID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKGNvbnRyaWJ1dGlvbkZpbGVuYW1lKTtcblxuICAgIGlmICAoZmRSZXNwb25zZS50b3RhbFNpemUgIT1cbiAgICAgICAgNjQgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbGQgSGFzaFxuICAgICAgICAoKDIgKiogcG93ZXIpKjItMSkqc2NHMSArXG4gICAgICAgICgyICoqIHBvd2VyKSpzY0cyICtcbiAgICAgICAgKDIgKiogcG93ZXIpKnNjRzEgK1xuICAgICAgICAoMiAqKiBwb3dlcikqc2NHMSArXG4gICAgICAgIHNjRzIgK1xuICAgICAgICBzRzEqNiArIHNHMiozKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXplIG9mIHRoZSBjb250cmlidXRpb24gaXMgaW52YWxpZFwiKTtcblxuICAgIGxldCBsYXN0Q2hhbGxlbmdlSGFzaDtcblxuICAgIGlmIChjb250cmlidXRpb25zLmxlbmd0aD4wKSB7XG4gICAgICAgIGxhc3RDaGFsbGVuZ2VIYXNoID0gY29udHJpYnV0aW9uc1tjb250cmlidXRpb25zLmxlbmd0aC0xXS5uZXh0Q2hhbGxlbmdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxhc3RDaGFsbGVuZ2VIYXNoID0gdXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBwb3dlciwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKG5ld1BUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIGltcG9ydFBvaW50cyA/IDc6IDIpO1xuICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHBvd2VyKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvblByZXZpb3VzSGFzaCA9IGF3YWl0IGZkUmVzcG9uc2UucmVhZCg2NCk7XG5cbiAgICBpZiAobWlzYy5oYXNoSXNFcXVhbChub0hhc2gsbGFzdENoYWxsZW5nZUhhc2gpKSB7XG4gICAgICAgIGxhc3RDaGFsbGVuZ2VIYXNoID0gY29udHJpYnV0aW9uUHJldmlvdXNIYXNoO1xuICAgICAgICBjb250cmlidXRpb25zW2NvbnRyaWJ1dGlvbnMubGVuZ3RoLTFdLm5leHRDaGFsbGVuZ2UgPSBsYXN0Q2hhbGxlbmdlSGFzaDtcbiAgICB9XG5cbiAgICBpZighbWlzYy5oYXNoSXNFcXVhbChjb250cmlidXRpb25QcmV2aW91c0hhc2gsbGFzdENoYWxsZW5nZUhhc2gpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBjb250cmlidXRpb24uIHRoaXMgY29udHJpYnV0aW9uIGlzIG5vdCBiYXNlZCBvbiB0aGUgcHJldml1cyBoYXNoXCIpO1xuXG4gICAgY29uc3QgaGFzaGVyUmVzcG9uc2UgPSBuZXcgQmxha2UyYig2NCk7XG4gICAgaGFzaGVyUmVzcG9uc2UudXBkYXRlKGNvbnRyaWJ1dGlvblByZXZpb3VzSGFzaCk7XG5cbiAgICBjb25zdCBzdGFydFNlY3Rpb25zID0gW107XG4gICAgbGV0IHJlcztcbiAgICByZXMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbihmZFJlc3BvbnNlLCBmZE5ldywgXCJHMVwiLCAyLCAoMiAqKiBwb3dlcikgKiAyIC0xLCBbMV0sIFwidGF1RzFcIik7XG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi50YXVHMSA9IHJlc1swXTtcbiAgICByZXMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbihmZFJlc3BvbnNlLCBmZE5ldywgXCJHMlwiLCAzLCAoMiAqKiBwb3dlcikgICAgICAgLCBbMV0sIFwidGF1RzJcIik7XG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi50YXVHMiA9IHJlc1swXTtcbiAgICByZXMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbihmZFJlc3BvbnNlLCBmZE5ldywgXCJHMVwiLCA0LCAoMiAqKiBwb3dlcikgICAgICAgLCBbMF0sIFwiYWxwaGFHMVwiKTtcbiAgICBjdXJyZW50Q29udHJpYnV0aW9uLmFscGhhRzEgPSByZXNbMF07XG4gICAgcmVzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oZmRSZXNwb25zZSwgZmROZXcsIFwiRzFcIiwgNSwgKDIgKiogcG93ZXIpICAgICAgICwgWzBdLCBcImJldGFHMVwiKTtcbiAgICBjdXJyZW50Q29udHJpYnV0aW9uLmJldGFHMSA9IHJlc1swXTtcbiAgICByZXMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbihmZFJlc3BvbnNlLCBmZE5ldywgXCJHMlwiLCA2LCAxICAgICAgICAgICAgICAgICAgLCBbMF0sIFwiYmV0YUcyXCIpO1xuICAgIGN1cnJlbnRDb250cmlidXRpb24uYmV0YUcyID0gcmVzWzBdO1xuXG4gICAgY3VycmVudENvbnRyaWJ1dGlvbi5wYXJ0aWFsSGFzaCA9IGhhc2hlclJlc3BvbnNlLmdldFBhcnRpYWxIYXNoKCk7XG5cblxuICAgIGNvbnN0IGJ1ZmZLZXkgPSBhd2FpdCBmZFJlc3BvbnNlLnJlYWQoY3VydmUuRjEubjgqMio2K2N1cnZlLkYyLm44KjIqMyk7XG5cbiAgICBjdXJyZW50Q29udHJpYnV0aW9uLmtleSA9IHV0aWxzLmZyb21QdGF1UHViS2V5UnByKGJ1ZmZLZXksIDAsIGN1cnZlLCBmYWxzZSk7XG5cbiAgICBoYXNoZXJSZXNwb25zZS51cGRhdGUobmV3IFVpbnQ4QXJyYXkoYnVmZktleSkpO1xuICAgIGNvbnN0IGhhc2hSZXNwb25zZSA9IGhhc2hlclJlc3BvbnNlLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGhhc2hSZXNwb25zZSwgXCJDb250cmlidXRpb24gUmVzcG9uc2UgSGFzaCBpbXBvcnRlZDogXCIpKTtcblxuICAgIGlmIChpbXBvcnRQb2ludHMpIHtcbiAgICAgICAgY29uc3QgbmV4dENoYWxsZW5nZUhhc2hlciA9IG5ldyBCbGFrZTJiKDY0KTtcbiAgICAgICAgbmV4dENoYWxsZW5nZUhhc2hlci51cGRhdGUoaGFzaFJlc3BvbnNlKTtcblxuICAgICAgICBhd2FpdCBoYXNoU2VjdGlvbihuZXh0Q2hhbGxlbmdlSGFzaGVyLCBmZE5ldywgXCJHMVwiLCAyLCAoMiAqKiBwb3dlcikgKiAyIC0xLCBcInRhdUcxXCIsIGxvZ2dlcik7XG4gICAgICAgIGF3YWl0IGhhc2hTZWN0aW9uKG5leHRDaGFsbGVuZ2VIYXNoZXIsIGZkTmV3LCBcIkcyXCIsIDMsICgyICoqIHBvd2VyKSAgICAgICAsIFwidGF1RzJcIiwgbG9nZ2VyKTtcbiAgICAgICAgYXdhaXQgaGFzaFNlY3Rpb24obmV4dENoYWxsZW5nZUhhc2hlciwgZmROZXcsIFwiRzFcIiwgNCwgKDIgKiogcG93ZXIpICAgICAgICwgXCJhbHBoYVRhdUcxXCIsIGxvZ2dlcik7XG4gICAgICAgIGF3YWl0IGhhc2hTZWN0aW9uKG5leHRDaGFsbGVuZ2VIYXNoZXIsIGZkTmV3LCBcIkcxXCIsIDUsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYmV0YVRhdUcxXCIsIGxvZ2dlcik7XG4gICAgICAgIGF3YWl0IGhhc2hTZWN0aW9uKG5leHRDaGFsbGVuZ2VIYXNoZXIsIGZkTmV3LCBcIkcyXCIsIDYsIDEgICAgICAgICAgICAgICAgICAsIFwiYmV0YUcyXCIsIGxvZ2dlcik7XG5cbiAgICAgICAgY3VycmVudENvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlID0gbmV4dENoYWxsZW5nZUhhc2hlci5kaWdlc3QoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY3VycmVudENvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlLCBcIk5leHQgQ2hhbGxlbmdlIEhhc2g6IFwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudENvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlID0gbm9IYXNoO1xuICAgIH1cblxuICAgIGNvbnRyaWJ1dGlvbnMucHVzaChjdXJyZW50Q29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHV0aWxzLndyaXRlQ29udHJpYnV0aW9ucyhmZE5ldywgY3VydmUsIGNvbnRyaWJ1dGlvbnMpO1xuXG4gICAgYXdhaXQgZmRSZXNwb25zZS5jbG9zZSgpO1xuICAgIGF3YWl0IGZkTmV3LmNsb3NlKCk7XG4gICAgYXdhaXQgZmRPbGQuY2xvc2UoKTtcblxuICAgIHJldHVybiBjdXJyZW50Q29udHJpYnV0aW9uLm5leHRDaGFsbGVuZ2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbihmZEZyb20sIGZkVG8sIGdyb3VwTmFtZSwgc2VjdGlvbklkLCBuUG9pbnRzLCBzaW5ndWxhclBvaW50SW5kZXhlcywgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgaWYgKGltcG9ydFBvaW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHByb2Nlc3NTZWN0aW9uSW1wb3J0UG9pbnRzKGZkRnJvbSwgZmRUbywgZ3JvdXBOYW1lLCBzZWN0aW9uSWQsIG5Qb2ludHMsIHNpbmd1bGFyUG9pbnRJbmRleGVzLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcHJvY2Vzc1NlY3Rpb25Ob0ltcG9ydFBvaW50cyhmZEZyb20sIGZkVG8sIGdyb3VwTmFtZSwgc2VjdGlvbklkLCBuUG9pbnRzLCBzaW5ndWxhclBvaW50SW5kZXhlcywgc2VjdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb25JbXBvcnRQb2ludHMoZmRGcm9tLCBmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2luZ3VsYXJQb2ludEluZGV4ZXMsIHNlY3Rpb25OYW1lKSB7XG5cbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNjRyA9IEcuRi5uODtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcblxuICAgICAgICBjb25zdCBzaW5ndWxhclBvaW50cyA9IFtdO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZFRvLCBzZWN0aW9uSWQpO1xuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc0cpO1xuXG4gICAgICAgIHN0YXJ0U2VjdGlvbnNbc2VjdGlvbklkXSA9IGZkVG8ucG9zO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgblBvaW50czsgaSArPSBuUG9pbnRzQ2h1bmspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSW1wb3J0aW5nICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzLWksIG5Qb2ludHNDaHVuayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZDID0gYXdhaXQgZmRGcm9tLnJlYWQobiAqIHNjRyk7XG4gICAgICAgICAgICBoYXNoZXJSZXNwb25zZS51cGRhdGUoYnVmZkMpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmTEVNID0gYXdhaXQgRy5iYXRjaEN0b0xFTShidWZmQyk7XG5cbiAgICAgICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYnVmZkxFTSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2luZ3VsYXJQb2ludEluZGV4ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcCA9IHNpbmd1bGFyUG9pbnRJbmRleGVzW2pdO1xuICAgICAgICAgICAgICAgIGlmICgoc3AgPj1pKSAmJiAoc3AgPCBpK24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFAgPSBHLmZyb21ScHJMRU0oYnVmZkxFTSwgKHNwLWkpKnNHKTtcbiAgICAgICAgICAgICAgICAgICAgc2luZ3VsYXJQb2ludHMucHVzaChQKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkVG8pO1xuXG4gICAgICAgIHJldHVybiBzaW5ndWxhclBvaW50cztcbiAgICB9XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uTm9JbXBvcnRQb2ludHMoZmRGcm9tLCBmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2luZ3VsYXJQb2ludEluZGV4ZXMsIHNlY3Rpb25OYW1lKSB7XG5cbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNjRyA9IEcuRi5uODtcblxuICAgICAgICBjb25zdCBzaW5ndWxhclBvaW50cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG5Qb2ludHNDaHVuayA9IE1hdGguZmxvb3IoKDE8PDI0KS9zY0cpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgblBvaW50czsgaSArPSBuUG9pbnRzQ2h1bmspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSW1wb3J0aW5nICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuUG9pbnRzLWksIG5Qb2ludHNDaHVuayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZDID0gYXdhaXQgZmRGcm9tLnJlYWQobiAqIHNjRyk7XG4gICAgICAgICAgICBoYXNoZXJSZXNwb25zZS51cGRhdGUoYnVmZkMpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2luZ3VsYXJQb2ludEluZGV4ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcCA9IHNpbmd1bGFyUG9pbnRJbmRleGVzW2pdO1xuICAgICAgICAgICAgICAgIGlmICgoc3AgPj1pKSAmJiAoc3AgPCBpK24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFAgPSBHLmZyb21ScHJDb21wcmVzc2VkKGJ1ZmZDLCAoc3AtaSkqc2NHKTtcbiAgICAgICAgICAgICAgICAgICAgc2luZ3VsYXJQb2ludHMucHVzaChQKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2luZ3VsYXJQb2ludHM7XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBoYXNoU2VjdGlvbihuZXh0Q2hhbGxlbmdlSGFzaGVyLCBmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2VjdGlvbk5hbWUsIGxvZ2dlcikge1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc0cpO1xuXG4gICAgICAgIGNvbnN0IG9sZFBvcyA9IGZkVG8ucG9zO1xuICAgICAgICBmZFRvLnBvcyA9IHN0YXJ0U2VjdGlvbnNbc2VjdGlvbklkXTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkgKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEhhc2hpbmcgJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKG5Qb2ludHMtaSwgblBvaW50c0NodW5rKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkxFTSA9IGF3YWl0IGZkVG8ucmVhZChuICogc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmVSA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYnVmZkxFTSk7XG5cbiAgICAgICAgICAgIG5leHRDaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGJ1ZmZVKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZkVG8ucG9zID0gb2xkUG9zO1xuICAgIH1cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMga2V5UGFpciBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7IENoYUNoYSwgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5jb25zdCBzYW1lUmF0aW8gPSBtaXNjLnNhbWVSYXRpbztcblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5Q29udHJpYnV0aW9uKGN1cnZlLCBjdXIsIHByZXYsIGxvZ2dlcikge1xuICAgIGxldCBzcjtcbiAgICBpZiAoY3VyLnR5cGUgPT0gMSkgeyAgICAvLyBWZXJpZnkgdGhlIGJlYWNvbi5cbiAgICAgICAgY29uc3QgYmVhY29uS2V5ID0gYXdhaXQgdXRpbHMua2V5RnJvbUJlYWNvbihjdXJ2ZSwgcHJldi5uZXh0Q2hhbGxlbmdlLCBjdXIuYmVhY29uSGFzaCwgY3VyLm51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoY3VyLmtleS50YXUuZzFfcywgYmVhY29uS2V5LnRhdS5nMV9zKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5ICh0YXVHMV9zKSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ci5rZXkudGF1LmcxX3N4LCBiZWFjb25LZXkudGF1LmcxX3N4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5ICh0YXVHMV9zeCkgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMi5lcShjdXIua2V5LnRhdS5nMl9zcHgsIGJlYWNvbktleS50YXUuZzJfc3B4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5ICh0YXVHMl9zcHgpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXIua2V5LmFscGhhLmcxX3MsIGJlYWNvbktleS5hbHBoYS5nMV9zKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChhbHBoYUcxX3MpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoY3VyLmtleS5hbHBoYS5nMV9zeCwgYmVhY29uS2V5LmFscGhhLmcxX3N4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChhbHBoYUcxX3N4KSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnZlLkcyLmVxKGN1ci5rZXkuYWxwaGEuZzJfc3B4LCBiZWFjb25LZXkuYWxwaGEuZzJfc3B4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChhbHBoYUcyX3NweCkgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ci5rZXkuYmV0YS5nMV9zLCBiZWFjb25LZXkuYmV0YS5nMV9zKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChiZXRhRzFfcykgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgaW4gY2hhbGxlbmdlICMke2N1ci5pZH0gICR7Y3VyLm5hbWUgfHwgXCJcIn1gICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXIua2V5LmJldGEuZzFfc3gsIGJlYWNvbktleS5iZXRhLmcxX3N4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChiZXRhRzFfc3gpIGlzIG5vdCBnZW5lcmF0ZWQgY29ycmVjdGx5IGluIGNoYWxsZW5nZSAjJHtjdXIuaWR9ICAke2N1ci5uYW1lIHx8IFwiXCJ9YCApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VydmUuRzIuZXEoY3VyLmtleS5iZXRhLmcyX3NweCwgYmVhY29uS2V5LmJldGEuZzJfc3B4KSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBCRUFDT04ga2V5IChiZXRhRzJfc3B4KSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBpbiBjaGFsbGVuZ2UgIyR7Y3VyLmlkfSAgJHtjdXIubmFtZSB8fCBcIlwifWAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGN1ci5rZXkudGF1LmcyX3NwID0gY3VydmUuRzIudG9BZmZpbmUoa2V5UGFpci5nZXRHMnNwKGN1cnZlLCAwLCBwcmV2Lm5leHRDaGFsbGVuZ2UsIGN1ci5rZXkudGF1LmcxX3MsIGN1ci5rZXkudGF1LmcxX3N4KSk7XG4gICAgY3VyLmtleS5hbHBoYS5nMl9zcCA9IGN1cnZlLkcyLnRvQWZmaW5lKGtleVBhaXIuZ2V0RzJzcChjdXJ2ZSwgMSwgcHJldi5uZXh0Q2hhbGxlbmdlLCBjdXIua2V5LmFscGhhLmcxX3MsIGN1ci5rZXkuYWxwaGEuZzFfc3gpKTtcbiAgICBjdXIua2V5LmJldGEuZzJfc3AgPSBjdXJ2ZS5HMi50b0FmZmluZShrZXlQYWlyLmdldEcyc3AoY3VydmUsIDIsIHByZXYubmV4dENoYWxsZW5nZSwgY3VyLmtleS5iZXRhLmcxX3MsIGN1ci5rZXkuYmV0YS5nMV9zeCkpO1xuXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1ci5rZXkudGF1LmcxX3MsIGN1ci5rZXkudGF1LmcxX3N4LCBjdXIua2V5LnRhdS5nMl9zcCwgY3VyLmtleS50YXUuZzJfc3B4KTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRCBrZXkgKHRhdSkgaW4gY2hhbGxlbmdlICNcIitjdXIuaWQpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1ci5rZXkuYWxwaGEuZzFfcywgY3VyLmtleS5hbHBoYS5nMV9zeCwgY3VyLmtleS5hbHBoYS5nMl9zcCwgY3VyLmtleS5hbHBoYS5nMl9zcHgpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIGtleSAoYWxwaGEpIGluIGNoYWxsZW5nZSAjXCIrY3VyLmlkKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBjdXIua2V5LmJldGEuZzFfcywgY3VyLmtleS5iZXRhLmcxX3N4LCBjdXIua2V5LmJldGEuZzJfc3AsIGN1ci5rZXkuYmV0YS5nMl9zcHgpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIGtleSAoYmV0YSkgaW4gY2hhbGxlbmdlICNcIitjdXIuaWQpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIHByZXYudGF1RzEsIGN1ci50YXVHMSwgY3VyLmtleS50YXUuZzJfc3AsIGN1ci5rZXkudGF1LmcyX3NweCk7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQgdGF1KkcxLiBjaGFsbGVuZ2UgI1wiK2N1ci5pZCtcIiBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHByZXZpb3VzIGNvbnRyaWJ1dGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCAgY3VyLmtleS50YXUuZzFfcywgY3VyLmtleS50YXUuZzFfc3gsIHByZXYudGF1RzIsIGN1ci50YXVHMik7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQgdGF1KkcyLiBjaGFsbGVuZ2UgI1wiK2N1ci5pZCtcIiBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHByZXZpb3VzIGNvbnRyaWJ1dGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNyID0gYXdhaXQgc2FtZVJhdGlvKGN1cnZlLCBwcmV2LmFscGhhRzEsIGN1ci5hbHBoYUcxLCBjdXIua2V5LmFscGhhLmcyX3NwLCBjdXIua2V5LmFscGhhLmcyX3NweCk7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQgYWxwaGEqRzEuIGNoYWxsZW5nZSAjXCIrY3VyLmlkK1wiIEl0IGRvZXMgbm90IGZvbGxvdyB0aGUgcHJldmlvdXMgY29udHJpYnV0aW9uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIHByZXYuYmV0YUcxLCBjdXIuYmV0YUcxLCBjdXIua2V5LmJldGEuZzJfc3AsIGN1ci5rZXkuYmV0YS5nMl9zcHgpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEIGJldGEqRzEuIGNoYWxsZW5nZSAjXCIrY3VyLmlkK1wiIEl0IGRvZXMgbm90IGZvbGxvdyB0aGUgcHJldmlvdXMgY29udHJpYnV0aW9uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsICBjdXIua2V5LmJldGEuZzFfcywgY3VyLmtleS5iZXRhLmcxX3N4LCBwcmV2LmJldGFHMiwgY3VyLmJldGFHMik7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQgYmV0YSpHMi4gY2hhbGxlbmdlICNcIitjdXIuaWQrXCJJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHByZXZpb3VzIGNvbnRyaWJ1dGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUG93ZXJzIE9mIHRhdSBmaWxlIE9LIVwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5KHRhdUZpbGVuYW1lLCBsb2dnZXIpIHtcbiAgICBsZXQgc3I7XG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3Qge2ZkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUodGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyLCBjZXJlbW9ueVBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkLCBzZWN0aW9ucyk7XG4gICAgY29uc3QgY29udHJzID0gYXdhaXQgdXRpbHMucmVhZENvbnRyaWJ1dGlvbnMoZmQsIGN1cnZlLCBzZWN0aW9ucyk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJwb3dlcjogMioqXCIgKyBwb3dlcik7XG4gICAgLy8gVmVyaWZ5IExhc3QgY29udHJpYnV0aW9uXG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJDb21wdXRpbmcgaW5pdGlhbCBjb250cmlidXRpb24gaGFzaFwiKTtcbiAgICBjb25zdCBpbml0aWFsQ29udHJpYnV0aW9uID0ge1xuICAgICAgICB0YXVHMTogY3VydmUuRzEuZyxcbiAgICAgICAgdGF1RzI6IGN1cnZlLkcyLmcsXG4gICAgICAgIGFscGhhRzE6IGN1cnZlLkcxLmcsXG4gICAgICAgIGJldGFHMTogY3VydmUuRzEuZyxcbiAgICAgICAgYmV0YUcyOiBjdXJ2ZS5HMi5nLFxuICAgICAgICBuZXh0Q2hhbGxlbmdlOiB1dGlscy5jYWxjdWxhdGVGaXJzdENoYWxsZW5nZUhhc2goY3VydmUsIGNlcmVtb255UG93ZXIsIGxvZ2dlciksXG4gICAgICAgIHJlc3BvbnNlSGFzaDogQmxha2UyYig2NCkuZGlnZXN0KClcbiAgICB9O1xuXG4gICAgaWYgKGNvbnRycy5sZW5ndGggPT0gMCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJUaGlzIGZpbGUgaGFzIG5vIGNvbnRyaWJ1dGlvbiEgSXQgY2Fubm90IGJlIHVzZWQgaW4gcHJvZHVjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBwcmV2Q29udHI7XG4gICAgaWYgKGNvbnRycy5sZW5ndGg+MSkge1xuICAgICAgICBwcmV2Q29udHIgPSBjb250cnNbY29udHJzLmxlbmd0aC0yXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2Q29udHIgPSBpbml0aWFsQ29udHJpYnV0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjdXJDb250ciA9IGNvbnRyc1tjb250cnMubGVuZ3RoLTFdO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlZhbGlkYXRpbmcgY29udHJpYnV0aW9uICNcIitjb250cnNbY29udHJzLmxlbmd0aC0xXS5pZCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdmVyaWZ5Q29udHJpYnV0aW9uKGN1cnZlLCBjdXJDb250ciwgcHJldkNvbnRyLCBsb2dnZXIpO1xuICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG5cblxuICAgIGNvbnN0IG5leHRDb250cmlidXRpb25IYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBuZXh0Q29udHJpYnV0aW9uSGFzaGVyLnVwZGF0ZShjdXJDb250ci5yZXNwb25zZUhhc2gpO1xuXG4gICAgLy8gVmVyaWZ5IHBvd2VycyBhbmQgY29tcHV0ZSBuZXh0Q2hhbGxlbmdlSGFzaFxuXG4gICAgLy8gYXdhaXQgdGVzdCgpO1xuXG4gICAgLy8gVmVyaWZ5IFNlY3Rpb24gdGF1KkcxXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiVmVyaWZ5aW5nIHBvd2VycyBpbiB0YXUqRzEgc2VjdGlvblwiKTtcbiAgICBjb25zdCByVGF1MSA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDIsIFwiRzFcIiwgXCJ0YXVHMVwiLCAoMiAqKiBwb3dlcikqMi0xLCBbMCwgMV0sIGxvZ2dlcik7XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIHJUYXUxLlIxLCByVGF1MS5SMiwgY3VydmUuRzIuZywgY3VyQ29udHIudGF1RzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJ0YXVHMSBzZWN0aW9uLiBQb3dlcnMgZG8gbm90IG1hdGNoXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzEuZXEoY3VydmUuRzEuZywgclRhdTEuc2luZ3VsYXJQb2ludHNbMF0pKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkZpcnN0IGVsZW1lbnQgb2YgdGF1KkcxIHNlY3Rpb24gbXVzdCBiZSB0aGUgZ2VuZXJhdG9yXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzEuZXEoY3VyQ29udHIudGF1RzEsIHJUYXUxLnNpbmd1bGFyUG9pbnRzWzFdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJTZWNvbmQgZWxlbWVudCBvZiB0YXUqRzEgc2VjdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgb25lIGluIHRoZSBjb250cmlidXRpb24gc2VjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGF3YWl0IHRlc3QoKTtcblxuICAgIC8vIFZlcmlmeSBTZWN0aW9uIHRhdSpHMlxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlZlcmlmeWluZyBwb3dlcnMgaW4gdGF1KkcyIHNlY3Rpb25cIik7XG4gICAgY29uc3QgclRhdTIgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigzLCBcIkcyXCIsIFwidGF1RzJcIiwgMiAqKiBwb3dlciwgWzAsIDFdLCAgbG9nZ2VyKTtcbiAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgY3VydmUuRzEuZywgY3VyQ29udHIudGF1RzEsIHJUYXUyLlIxLCByVGF1Mi5SMik7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcInRhdUcyIHNlY3Rpb24uIFBvd2VycyBkbyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMi5lcShjdXJ2ZS5HMi5nLCByVGF1Mi5zaW5ndWxhclBvaW50c1swXSkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiRmlyc3QgZWxlbWVudCBvZiB0YXUqRzIgc2VjdGlvbiBtdXN0IGJlIHRoZSBnZW5lcmF0b3JcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMi5lcShjdXJDb250ci50YXVHMiwgclRhdTIuc2luZ3VsYXJQb2ludHNbMV0pKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIlNlY29uZCBlbGVtZW50IG9mIHRhdSpHMiBzZWN0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgaW4gdGhlIGNvbnRyaWJ1dGlvbiBzZWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IFNlY3Rpb24gYWxwaGEqdGF1KkcxXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiVmVyaWZ5aW5nIHBvd2VycyBpbiBhbHBoYSp0YXUqRzEgc2VjdGlvblwiKTtcbiAgICBjb25zdCByQWxwaGFUYXVHMSA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDQsIFwiRzFcIiwgXCJhbHBoYXRhdUcxXCIsIDIgKiogcG93ZXIsIFswXSwgbG9nZ2VyKTtcbiAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgckFscGhhVGF1RzEuUjEsIHJBbHBoYVRhdUcxLlIyLCBjdXJ2ZS5HMi5nLCBjdXJDb250ci50YXVHMik7XG4gICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcImFscGhhVGF1RzEgc2VjdGlvbi4gUG93ZXJzIGRvIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnZlLkcxLmVxKGN1ckNvbnRyLmFscGhhRzEsIHJBbHBoYVRhdUcxLnNpbmd1bGFyUG9pbnRzWzBdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJGaXJzdCBlbGVtZW50IG9mIGFscGhhKnRhdSpHMSBzZWN0aW9uIChhbHBoYSpHMSkgZG9lcyBub3QgbWF0Y2ggdGhlIG9uZSBpbiB0aGUgY29udHJpYnV0aW9uIHNlY3Rpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgU2VjdGlvbiBiZXRhKnRhdSpHMVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlZlcmlmeWluZyBwb3dlcnMgaW4gYmV0YSp0YXUqRzEgc2VjdGlvblwiKTtcbiAgICBjb25zdCByQmV0YVRhdUcxID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNSwgXCJHMVwiLCBcImJldGF0YXVHMVwiLCAyICoqIHBvd2VyLCBbMF0sIGxvZ2dlcik7XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIHJCZXRhVGF1RzEuUjEsIHJCZXRhVGF1RzEuUjIsIGN1cnZlLkcyLmcsIGN1ckNvbnRyLnRhdUcyKTtcbiAgICBpZiAoc3IgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiYmV0YVRhdUcxIHNlY3Rpb24uIFBvd2VycyBkbyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcShjdXJDb250ci5iZXRhRzEsIHJCZXRhVGF1RzEuc2luZ3VsYXJQb2ludHNbMF0pKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkZpcnN0IGVsZW1lbnQgb2YgYmV0YSp0YXUqRzEgc2VjdGlvbiAoYmV0YSpHMSkgZG9lcyBub3QgbWF0Y2ggdGhlIG9uZSBpbiB0aGUgY29udHJpYnV0aW9uIHNlY3Rpb25cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL1ZlcmlmeSBCZXRhIEcyXG4gICAgY29uc3QgYmV0YUcyID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb25CZXRhRzIobG9nZ2VyKTtcbiAgICBpZiAoIWN1cnZlLkcyLmVxKGN1ckNvbnRyLmJldGFHMiwgYmV0YUcyKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJiZXRhRzIgZWxlbWVudCBpbiBiZXRhRzIgc2VjdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgb25lIGluIHRoZSBjb250cmlidXRpb24gc2VjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuXG4gICAgY29uc3QgbmV4dENvbnRyaWJ1dGlvbkhhc2ggPSBuZXh0Q29udHJpYnV0aW9uSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgLy8gQ2hlY2sgdGhlIG5leHRDaGFsbGVuZ2VIYXNoXG4gICAgaWYgKHBvd2VyID09IGNlcmVtb255UG93ZXIpIHtcbiAgICAgICAgaWYgKCFtaXNjLmhhc2hJc0VxdWFsKG5leHRDb250cmlidXRpb25IYXNoLGN1ckNvbnRyLm5leHRDaGFsbGVuZ2UpKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJIYXNoIG9mIHRoZSB2YWx1ZXMgZG9lcyBub3QgbWF0Y2ggdGhlIG5leHQgY2hhbGxlbmdlIG9mIHRoZSBsYXN0IGNvbnRyaWJ1dG9yIGluIHRoZSBjb250cmlidXRpb25zIHNlY3Rpb25cIik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gobmV4dENvbnRyaWJ1dGlvbkhhc2gsIFwiTmV4dCBjaGFsbGVuZ2UgaGFzaDogXCIpKTtcblxuICAgIC8vIFZlcmlmeSBQcmV2aW91cyBjb250cmlidXRpb25zXG5cbiAgICBwcmludENvbnRyaWJ1dGlvbihjdXJDb250ciwgcHJldkNvbnRyKTtcbiAgICBmb3IgKGxldCBpID0gY29udHJzLmxlbmd0aC0yOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY3VyQ29udHIgPSBjb250cnNbaV07XG4gICAgICAgIGNvbnN0IHByZXZDb250ciA9ICAoaT4wKSA/IGNvbnRyc1tpLTFdIDogaW5pdGlhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdmVyaWZ5Q29udHJpYnV0aW9uKGN1cnZlLCBjdXJDb250ciwgcHJldkNvbnRyLCBsb2dnZXIpO1xuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwcmludENvbnRyaWJ1dGlvbihjdXJDb250ciwgcHJldkNvbnRyLCBsb2dnZXIpO1xuICAgIH1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuXG4gICAgaWYgKCghc2VjdGlvbnNbMTJdKSB8fCAoIXNlY3Rpb25zWzEzXSkgfHwgKCFzZWN0aW9uc1sxNF0pIHx8ICghc2VjdGlvbnNbMTVdKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFwidGhpcyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gcGhhc2UyIHByZWNhbGN1bGF0ZWQgdmFsdWVzLiBQbGVhc2UgcnVuOiBcXG5cIiArXG4gICAgICAgICAgICBcIiAgIHNuYXJranMgXFxcInBvd2Vyc29mdGF1IHByZXBhcmVwaGFzZTJcXFwiIHRvIHByZXBhcmUgdGhpcyBmaWxlIHRvIGJlIHVzZWQgaW4gdGhlIHBoYXNlMiBjZXJlbW9ueS5cIlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIHJlcyA9IGF3YWl0IHZlcmlmeUxhZ3JhbmdlRXZhbHVhdGlvbnMoXCJHMVwiLCAyLCAxMiwgXCJ0YXVHMVwiLCBsb2dnZXIpO1xuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXMgPSBhd2FpdCB2ZXJpZnlMYWdyYW5nZUV2YWx1YXRpb25zKFwiRzJcIiwgMywgMTMsIFwidGF1RzJcIiwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmVzID0gYXdhaXQgdmVyaWZ5TGFncmFuZ2VFdmFsdWF0aW9ucyhcIkcxXCIsIDQsIDE0LCBcImFscGhhVGF1RzFcIiwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmVzID0gYXdhaXQgdmVyaWZ5TGFncmFuZ2VFdmFsdWF0aW9ucyhcIkcxXCIsIDUsIDE1LCBcImJldGFUYXVHMVwiLCBsb2dnZXIpO1xuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlBvd2VycyBvZiBUYXUgT2shXCIpO1xuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgICBmdW5jdGlvbiBwcmludENvbnRyaWJ1dGlvbihjdXJDb250ciwgcHJldkNvbnRyKSB7XG4gICAgICAgIGlmICghbG9nZ2VyKSByZXR1cm47XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDb250cmlidXRpb24gIyR7Y3VyQ29udHIuaWR9OiAke2N1ckNvbnRyLm5hbWUgfHxcIlwifWApO1xuXG4gICAgICAgIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjdXJDb250ci5uZXh0Q2hhbGxlbmdlLCBcIk5leHQgQ2hhbGxlbmdlOiBcIikpO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmZWICA9IG5ldyBVaW50OEFycmF5KGN1cnZlLkcxLkYubjgqMio2K2N1cnZlLkcyLkYubjgqMiozKTtcbiAgICAgICAgdXRpbHMudG9QdGF1UHViS2V5UnByKGJ1ZmZWLCAwLCBjdXJ2ZSwgY3VyQ29udHIua2V5LCBmYWxzZSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICAgICAgcmVzcG9uc2VIYXNoZXIuc2V0UGFydGlhbEhhc2goY3VyQ29udHIucGFydGlhbEhhc2gpO1xuICAgICAgICByZXNwb25zZUhhc2hlci51cGRhdGUoYnVmZlYpO1xuICAgICAgICBjb25zdCByZXNwb25zZUhhc2ggPSByZXNwb25zZUhhc2hlci5kaWdlc3QoKTtcblxuICAgICAgICBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gocmVzcG9uc2VIYXNoLCBcIlJlc3BvbnNlIEhhc2g6XCIpKTtcblxuICAgICAgICBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gocHJldkNvbnRyLm5leHRDaGFsbGVuZ2UsIFwiUmVzcG9uc2UgSGFzaDpcIikpO1xuXG4gICAgICAgIGlmIChjdXJDb250ci50eXBlID09IDEpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBCZWFjb24gZ2VuZXJhdG9yOiAke21pc2MuYnl0ZUFycmF5MmhleChjdXJDb250ci5iZWFjb25IYXNoKX1gKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBCZWFjb24gaXRlcmF0aW9ucyBFeHA6ICR7Y3VyQ29udHIubnVtSXRlcmF0aW9uc0V4cH1gKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb25CZXRhRzIobG9nZ2VyKSB7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZS5HMjtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3QgYnVmZlV2ID0gbmV3IFVpbnQ4QXJyYXkoc0cpO1xuXG4gICAgICAgIGlmICghc2VjdGlvbnNbNl0pICB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJGaWxlIGhhcyBubyBCZXRhRzIgc2VjdGlvblwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgaGFzIG5vIEJldGFHMiBzZWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWN0aW9uc1s2XS5sZW5ndGg+MSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRmlsZSBoYXMgbm8gQmV0YUcyIHNlY3Rpb25cIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGhhcyBtb3JlIHRoYW4gb25lIEdldGFHMiBzZWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZkLnBvcyA9IHNlY3Rpb25zWzZdWzBdLnA7XG5cbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoc0cpO1xuICAgICAgICBjb25zdCBQID0gRy5mcm9tUnByTEVNKGJ1ZmYpO1xuXG4gICAgICAgIEcudG9ScHJVbmNvbXByZXNzZWQoYnVmZlV2LCAwLCBQKTtcbiAgICAgICAgbmV4dENvbnRyaWJ1dGlvbkhhc2hlci51cGRhdGUoYnVmZlV2KTtcblxuICAgICAgICByZXR1cm4gUDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbihpZFNlY3Rpb24sIGdyb3VwTmFtZSwgc2VjdGlvbk5hbWUsIG5Qb2ludHMsIHNpbmd1bGFyUG9pbnRJbmRleGVzLCBsb2dnZXIpIHtcbiAgICAgICAgY29uc3QgTUFYX0NIVU5LX1NJWkUgPSAxPDwxNjtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgaWRTZWN0aW9uKTtcblxuICAgICAgICBjb25zdCBzaW5ndWxhclBvaW50cyA9IFtdO1xuXG4gICAgICAgIGxldCBSMSA9IEcuemVybztcbiAgICAgICAgbGV0IFIyID0gRy56ZXJvO1xuXG4gICAgICAgIGxldCBsYXN0QmFzZSA9IEcuemVybztcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSArPSBNQVhfQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBwb2ludHMgcmVsYXRpb25zOiAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9IGApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKG5Qb2ludHMgLSBpLCBNQVhfQ0hVTktfU0laRSk7XG4gICAgICAgICAgICBjb25zdCBiYXNlcyA9IGF3YWl0IGZkLnJlYWQobipzRyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VzVSA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYmFzZXMpO1xuICAgICAgICAgICAgbmV4dENvbnRyaWJ1dGlvbkhhc2hlci51cGRhdGUoYmFzZXNVKTtcblxuICAgICAgICAgICAgY29uc3Qgc2NhbGFycyA9IG1pc2MuZ2V0UmFuZG9tQnl0ZXMoNCoobi0xKSk7XG5cbiAgICAgICAgICAgIGlmIChpPjApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEJhc2UgPSBHLmZyb21ScHJMRU0oYmFzZXMsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBtaXNjLnJlYWRVSW50MzJCRShtaXNjLmdldFJhbmRvbUJ5dGVzKDQpLCAwKTtcblxuICAgICAgICAgICAgICAgIFIxID0gRy5hZGQoUjEsIEcudGltZXNTY2FsYXIobGFzdEJhc2UsIHIpKTtcbiAgICAgICAgICAgICAgICBSMiA9IEcuYWRkKFIyLCBHLnRpbWVzU2NhbGFyKGZpcnN0QmFzZSwgcikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByMSA9IGF3YWl0IEcubXVsdGlFeHBBZmZpbmUoYmFzZXMuc2xpY2UoMCwgKG4tMSkqc0cpLCBzY2FsYXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHIyID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShiYXNlcy5zbGljZShzRyksIHNjYWxhcnMpO1xuXG4gICAgICAgICAgICBSMSA9IEcuYWRkKFIxLCByMSk7XG4gICAgICAgICAgICBSMiA9IEcuYWRkKFIyLCByMik7XG5cbiAgICAgICAgICAgIGxhc3RCYXNlID0gRy5mcm9tUnByTEVNKCBiYXNlcywgKG4tMSkqc0cpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8c2luZ3VsYXJQb2ludEluZGV4ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcCA9IHNpbmd1bGFyUG9pbnRJbmRleGVzW2pdO1xuICAgICAgICAgICAgICAgIGlmICgoc3AgPj1pKSAmJiAoc3AgPCBpK24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFAgPSBHLmZyb21ScHJMRU0oYmFzZXMsIChzcC1pKSpzRyk7XG4gICAgICAgICAgICAgICAgICAgIHNpbmd1bGFyUG9pbnRzLnB1c2goUCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgUjE6IFIxLFxuICAgICAgICAgICAgUjI6IFIyLFxuICAgICAgICAgICAgc2luZ3VsYXJQb2ludHM6IHNpbmd1bGFyUG9pbnRzXG4gICAgICAgIH07XG5cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlMYWdyYW5nZUV2YWx1YXRpb25zKGdOYW1lLCB0YXVTZWN0aW9uLCBsYWdyYW5nZVNlY3Rpb24sIHNlY3Rpb25OYW1lLCBsb2dnZXIpIHtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYFZlcmlmeWluZyBwaGFzZTIgY2FsY3VsYXRlZCB2YWx1ZXMgJHtzZWN0aW9uTmFtZX0uLi5gKTtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dOYW1lXTtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMjtcblxuICAgICAgICBjb25zdCBzZWVkPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gPSBtaXNjLnJlYWRVSW50MzJCRShtaXNjLmdldFJhbmRvbUJ5dGVzKDQpLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHA9MDsgcDw9IHBvd2VyOyBwICsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB2ZXJpZnlQb3dlcihwKTtcbiAgICAgICAgICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGF1U2VjdGlvbiA9PSAyKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB2ZXJpZnlQb3dlcihwb3dlcisxKTtcbiAgICAgICAgICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlQb3dlcihwKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYFBvd2VyICR7cH0uLi5gKTtcbiAgICAgICAgICAgIGNvbnN0IG44ciA9IGN1cnZlLkZyLm44O1xuICAgICAgICAgICAgY29uc3QgblBvaW50cyA9IDIgKiogcDtcbiAgICAgICAgICAgIGxldCBidWZmX3IgPSBuZXcgVWludDMyQXJyYXkoblBvaW50cyk7XG4gICAgICAgICAgICBsZXQgYnVmZkc7XG5cbiAgICAgICAgICAgIGxldCBybmcgPSBuZXcgQ2hhQ2hhKHNlZWQpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYENyZWF0aW5nIHJhbmRvbSBudW1iZXJzIFBvd2VycyR7cH0uLi5gKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoKHAgPT0gcG93ZXIrMSkmJihpID09IG5Qb2ludHMtMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZl9yW2ldID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZmX3JbaV0gPSBybmcubmV4dFUzMigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnVmZl9yID0gbmV3IFVpbnQ4QXJyYXkoYnVmZl9yLmJ1ZmZlciwgYnVmZl9yLmJ5dGVPZmZzZXQsIGJ1ZmZfci5ieXRlTGVuZ3RoKTtcblxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGByZWFkaW5nIHBvaW50cyBQb3dlcnMke3B9Li4uYCk7XG4gICAgICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIHRhdVNlY3Rpb24pO1xuICAgICAgICAgICAgYnVmZkcgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0cpO1xuICAgICAgICAgICAgaWYgKHAgPT0gcG93ZXIrMSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkLnJlYWRUb0J1ZmZlcihidWZmRywgMCwgKG5Qb2ludHMtMSkqc0cpO1xuICAgICAgICAgICAgICAgIGJ1ZmZHLnNldChjdXJ2ZS5HMS56ZXJvQWZmaW5lLCAoblBvaW50cy0xKSpzRyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkLnJlYWRUb0J1ZmZlcihidWZmRywgMCwgblBvaW50cypzRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQsIHRydWUpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNUYXUgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJ1ZmZHLCBidWZmX3IsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIl9cIiArIHApO1xuXG4gICAgICAgICAgICBidWZmX3IgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMgKiBuOHIpO1xuXG4gICAgICAgICAgICBybmcgPSBuZXcgQ2hhQ2hhKHNlZWQpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmNCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICAgICAgY29uc3QgYnVmZjRWID0gbmV3IERhdGFWaWV3KGJ1ZmY0LmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgcmFuZG9tIG51bWJlcnMgUG93ZXJzJHtwfS4uLmApO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICgoaSAhPSBuUG9pbnRzLTEpIHx8IChwICE9IHBvd2VyKzEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmY0Vi5zZXRVaW50MzIoMCwgcm5nLm5leHRVMzIoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZfci5zZXQoYnVmZjQsIGkqbjhyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgYmF0Y2hUb01vbnRnb21lcnkgJHtwfS4uLmApO1xuICAgICAgICAgICAgYnVmZl9yID0gYXdhaXQgY3VydmUuRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZl9yKTtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgZmZ0ICR7cH0uLi5gKTtcbiAgICAgICAgICAgIGJ1ZmZfciA9IGF3YWl0IGN1cnZlLkZyLmZmdChidWZmX3IpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBiYXRjaEZyb21Nb250Z29tZXJ5ICR7cH0uLi5gKTtcbiAgICAgICAgICAgIGJ1ZmZfciA9IGF3YWl0IGN1cnZlLkZyLmJhdGNoRnJvbU1vbnRnb21lcnkoYnVmZl9yKTtcblxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGByZWFkaW5nIHBvaW50cyBMYWdyYW5nZSR7cH0uLi5gKTtcbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgbGFncmFuZ2VTZWN0aW9uKTtcbiAgICAgICAgICAgIGZkLnBvcyArPSBzRyooKDIgKiogcCktMSk7XG4gICAgICAgICAgICBhd2FpdCBmZC5yZWFkVG9CdWZmZXIoYnVmZkcsIDAsIG5Qb2ludHMqc0cpO1xuICAgICAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkLCB0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzTGFncmFuZ2UgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJ1ZmZHLCBidWZmX3IsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIl9cIiArIHAgKyBcIl90cmFuc2Zvcm1lZFwiKTtcblxuICAgICAgICAgICAgaWYgKCFHLmVxKHJlc1RhdSwgcmVzTGFncmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUGhhc2UyIGNhY2x1dGF0aW9uIGRvZXMgbm90IG1hdGNoIHdpdGggcG93ZXJzIG9mIHRhdVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5cbi8qXG4gICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IHNlY3Rpb24gaW4gdGhlIGZkVG8gZmlsZSB3aXRoIGlkIGlkU2VjdGlvbi5cbiAgICBJdCBtdWx0aXBsaWVzIHRoZSBwb29pbnRzIGluIGZkRnJvbSBieSBmaXJzdCwgZmlyc3QqaW5jLCBmaXJzdCppbmNeMiwgLi4uLlxuICAgIG5Qb2ludCBUaW1lcy5cbiAgICBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ld0NoYWxsZW5nZUhhc2hlciB3aXRoIHRoZSBuZXcgcG9pbnRzXG4qL1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlLZXlUb1NlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgaWRTZWN0aW9uLCBjdXJ2ZSwgZ3JvdXBOYW1lLCBmaXJzdCwgaW5jLCBzZWN0aW9uTmFtZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgTUFYX0NIVU5LX1NJWkUgPSAxIDw8IDE2O1xuICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgY29uc3QgblBvaW50cyA9IHNlY3Rpb25zW2lkU2VjdGlvbl1bMF0uc2l6ZSAvIHNHO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLGlkU2VjdGlvbiApO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZE5ldywgaWRTZWN0aW9uKTtcblxuICAgIGxldCB0ID0gZmlyc3Q7XG4gICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBBcHBseWluZyBrZXk6ICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oblBvaW50cyAtIGksIE1BWF9DSFVOS19TSVpFKTtcbiAgICAgICAgbGV0IGJ1ZmY7XG4gICAgICAgIGJ1ZmYgPSBhd2FpdCBmZE9sZC5yZWFkKG4qc0cpO1xuICAgICAgICBidWZmID0gYXdhaXQgRy5iYXRjaEFwcGx5S2V5KGJ1ZmYsIHQsIGluYyk7XG4gICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuICAgICAgICB0ID0gY3VydmUuRnIubXVsKHQsIGN1cnZlLkZyLmV4cChpbmMsIG4pKTtcbiAgICB9XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkTmV3KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmRPbGQpO1xufVxuXG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkT2xkLCBmZE5ldywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBncm91cE5hbWUsIG5Qb2ludHMsIGZpcnN0LCBpbmMsIGZvcm1hdE91dCwgc2VjdGlvbk5hbWUsIGxvZ2dlcikge1xuICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5mbG9vcigoMTw8MjApIC8gc0cpOyAgIC8vIDEyOE1iIGNodW5rc1xuICAgIGxldCB0ID0gZmlyc3Q7XG4gICAgZm9yIChsZXQgaT0wIDsgaTxuUG9pbnRzIDsgaSs9IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEFwcGx5aW5nIGtleSAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgIGNvbnN0IG49IE1hdGgubWluKG5Qb2ludHMtaSwgY2h1bmtTaXplICk7XG4gICAgICAgIGNvbnN0IGJ1ZmZJblUgPSBhd2FpdCBmZE9sZC5yZWFkKG4gKiBzRyk7XG4gICAgICAgIGNvbnN0IGJ1ZmZJbkxFTSA9IGF3YWl0IEcuYmF0Y2hVdG9MRU0oYnVmZkluVSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZPdXRMRU0gPSBhd2FpdCBHLmJhdGNoQXBwbHlLZXkoYnVmZkluTEVNLCB0LCBpbmMpO1xuICAgICAgICBsZXQgYnVmZk91dDtcbiAgICAgICAgaWYgKGZvcm1hdE91dCA9PSBcIkNPTVBSRVNTRURcIikge1xuICAgICAgICAgICAgYnVmZk91dCA9IGF3YWl0IEcuYmF0Y2hMRU10b0MoYnVmZk91dExFTSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmT3V0ID0gYXdhaXQgRy5iYXRjaExFTXRvVShidWZmT3V0TEVNKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZUhhc2hlcikgcmVzcG9uc2VIYXNoZXIudXBkYXRlKGJ1ZmZPdXQpO1xuICAgICAgICBhd2FpdCBmZE5ldy53cml0ZShidWZmT3V0KTtcbiAgICAgICAgdCA9IGN1cnZlLkZyLm11bCh0LCBjdXJ2ZS5Gci5leHAoaW5jLCBuKSk7XG4gICAgfVxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBGb3JtYXQgb2YgdGhlIG91dHB1dFxuLy8gICAgICBIYXNoIG9mIHRoZSBsYXN0IGNvbnRyaWJ1dGlvbiAgNjQgQnl0ZXNcbi8vICAgICAgMl5OKjItMSBUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBUYXVHMiBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBBbHBoYVRhdUcxIFBvaW50cyAoY29tcHJlc3NlZClcbi8vICAgICAgMl5OIEJldGFUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIFB1YmxpYyBLZXlcbi8vICAgICAgICAgIEJldGFHMiAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnMgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSpzKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnQgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSp0KmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzEqdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnUqYmV0YSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnNwKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnRwKmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzIqdXAqYmV0YSAoY29tcHJlc3NlZClcblxuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgeyBhcHBseUtleVRvQ2hhbGxlbmdlU2VjdGlvbiB9IGZyb20gXCIuL21wY19hcHBseWtleS5qc1wiO1xuaW1wb3J0ICogYXMga2V5UGFpciBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNoYWxsZW5nZUNvbnRyaWJ1dGUoY3VydmUsIGNoYWxsZW5nZUZpbGVuYW1lLCByZXNwb25lc0ZpbGVOYW1lLCBlbnRyb3B5LCBsb2dnZXIpIHtcbiAgICBhd2FpdCBCbGFrZTJiLnJlYWR5KCk7XG5cbiAgICBjb25zdCBmZEZyb20gPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3RpbmcoY2hhbGxlbmdlRmlsZW5hbWUpO1xuXG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5GMS5uNjQqOCoyO1xuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkYyLm42NCo4KjI7XG4gICAgY29uc3QgZG9tYWluU2l6ZSA9IChmZEZyb20udG90YWxTaXplICsgc0cxIC0gNjQgLSBzRzIpIC8gKDQqc0cxICsgc0cyKTtcbiAgICBsZXQgZSA9IGRvbWFpblNpemU7XG4gICAgbGV0IHBvd2VyID0gMDtcbiAgICB3aGlsZSAoZT4xKSB7XG4gICAgICAgIGUgPSBlIC8yO1xuICAgICAgICBwb3dlciArPSAxO1xuICAgIH1cblxuICAgIGlmICgyICoqIHBvd2VyICE9IGRvbWFpblNpemUpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZmlsZSBzaXplXCIpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIlBvd2VyIHRvIHRhdSBzaXplOiBcIitwb3dlcik7XG5cbiAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLmdldFJhbmRvbVJuZyhlbnRyb3B5KTtcblxuICAgIGNvbnN0IGZkVG8gPSBhd2FpdCBmYXN0RmlsZS5jcmVhdGVPdmVycmlkZShyZXNwb25lc0ZpbGVOYW1lKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgaGFzaFxuICAgIGNvbnN0IGNoYWxsZW5nZUhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIGZvciAobGV0IGk9MDsgaTxmZEZyb20udG90YWxTaXplOyBpKz0gZmRGcm9tLnBhZ2VTaXplKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSGFzaGluZyBjaGFsbGVuZ2UgJHtpfS8ke2ZkRnJvbS50b3RhbFNpemV9YCk7XG4gICAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbihmZEZyb20udG90YWxTaXplIC0gaSwgZmRGcm9tLnBhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKHMpO1xuICAgICAgICBjaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGJ1ZmYpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltZWRIYXNoID0gYXdhaXQgZmRGcm9tLnJlYWQoNjQsIDApO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjbGFpbWVkSGFzaCwgXCJDbGFpbWVkIFByZXZpb3VzIFJlc3BvbnNlIEhhc2g6IFwiKSk7XG5cbiAgICBjb25zdCBjaGFsbGVuZ2VIYXNoID0gY2hhbGxlbmdlSGFzaGVyLmRpZ2VzdCgpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjaGFsbGVuZ2VIYXNoLCBcIkN1cnJlbnQgQ2hhbGxlbmdlIEhhc2g6IFwiKSk7XG5cbiAgICBjb25zdCBrZXkgPSBrZXlQYWlyLmNyZWF0ZVBUYXVLZXkoY3VydmUsIGNoYWxsZW5nZUhhc2gsIHJuZyk7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIFtcInRhdVwiLCBcImFscGhhXCIsIFwiYmV0YVwiXS5mb3JFYWNoKCAoaykgPT4ge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGsgKyBcIi5nMV9zOiBcIiArIGN1cnZlLkcxLnRvU3RyaW5nKGtleVtrXS5nMV9zLCAxNikpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGsgKyBcIi5nMV9zeDogXCIgKyBjdXJ2ZS5HMS50b1N0cmluZyhrZXlba10uZzFfc3gsIDE2KSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoayArIFwiLmcyX3NwOiBcIiArIGN1cnZlLkcyLnRvU3RyaW5nKGtleVtrXS5nMl9zcCwgMTYpKTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhrICsgXCIuZzJfc3B4OiBcIiArIGN1cnZlLkcyLnRvU3RyaW5nKGtleVtrXS5nMl9zcHgsIDE2KSk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoXCJcIik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlSGFzaGVyID0gQmxha2UyYig2NCk7XG5cbiAgICBhd2FpdCBmZFRvLndyaXRlKGNoYWxsZW5nZUhhc2gpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShjaGFsbGVuZ2VIYXNoKTtcblxuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBcIkcxXCIsICgyICoqIHBvd2VyKSoyLTEsIGN1cnZlLkZyLm9uZSAgICAsIGtleS50YXUucHJ2S2V5LCBcIkNPTVBSRVNTRURcIiwgXCJ0YXVHMVwiICAgICAsIGxvZ2dlciApO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBcIkcyXCIsICgyICoqIHBvd2VyKSAgICAsIGN1cnZlLkZyLm9uZSAgICAsIGtleS50YXUucHJ2S2V5LCBcIkNPTVBSRVNTRURcIiwgXCJ0YXVHMlwiICAgICAsIGxvZ2dlciApO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBcIkcxXCIsICgyICoqIHBvd2VyKSAgICAsIGtleS5hbHBoYS5wcnZLZXksIGtleS50YXUucHJ2S2V5LCBcIkNPTVBSRVNTRURcIiwgXCJhbHBoYVRhdUcxXCIsIGxvZ2dlciApO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBcIkcxXCIsICgyICoqIHBvd2VyKSAgICAsIGtleS5iZXRhLnBydktleSAsIGtleS50YXUucHJ2S2V5LCBcIkNPTVBSRVNTRURcIiwgXCJiZXRhVGF1RzFcIiAsIGxvZ2dlciApO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgcmVzcG9uc2VIYXNoZXIsIGN1cnZlLCBcIkcyXCIsIDEgICAgICAgICAgICAgLCBrZXkuYmV0YS5wcnZLZXkgLCBrZXkudGF1LnBydktleSwgXCJDT01QUkVTU0VEXCIsIFwiYmV0YVRhdUcyXCIgLCBsb2dnZXIgKTtcblxuICAgIC8vIFdyaXRlIGFuZCBoYXNoIGtleVxuICAgIGNvbnN0IGJ1ZmZLZXkgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5GMS5uOCoyKjYrY3VydmUuRjIubjgqMiozKTtcbiAgICB1dGlscy50b1B0YXVQdWJLZXlScHIoYnVmZktleSwgMCwgY3VydmUsIGtleSwgZmFsc2UpO1xuICAgIGF3YWl0IGZkVG8ud3JpdGUoYnVmZktleSk7XG4gICAgcmVzcG9uc2VIYXNoZXIudXBkYXRlKGJ1ZmZLZXkpO1xuICAgIGNvbnN0IHJlc3BvbnNlSGFzaCA9IHJlc3BvbnNlSGFzaGVyLmRpZ2VzdCgpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChyZXNwb25zZUhhc2gsIFwiQ29udHJpYnV0aW9uIFJlc3BvbnNlIEhhc2g6IFwiKSk7XG5cbiAgICBhd2FpdCBmZFRvLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRGcm9tLmNsb3NlKCk7XG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBiZWFjb24ob2xkUHRhdUZpbGVuYW1lLCBuZXdQVGF1RmlsZW5hbWUsIG5hbWUsICBiZWFjb25IYXNoU3RyLG51bUl0ZXJhdGlvbnNFeHAsIGxvZ2dlcikge1xuICAgIGNvbnN0IGJlYWNvbkhhc2ggPSBtaXNjLmhleDJCeXRlQXJyYXkoYmVhY29uSGFzaFN0cik7XG4gICAgaWYgKCAgIChiZWFjb25IYXNoLmJ5dGVMZW5ndGggPT0gMClcbiAgICAgICAgfHwgKGJlYWNvbkhhc2guYnl0ZUxlbmd0aCoyICE9YmVhY29uSGFzaFN0ci5sZW5ndGgpKVxuICAgIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBCZWFjb24gSGFzaC4gKEl0IG11c3QgYmUgYSB2YWxpZCBoZXhhZGVjaW1hbCBzZXF1ZW5jZSlcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJlYWNvbkhhc2gubGVuZ3RoPj0yNTYpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiTWF4aW11bSBsZW5naHQgb2YgYmVhY29uIGhhc2ggaXMgMjU1IGJ5dGVzXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbnVtSXRlcmF0aW9uc0V4cCA9IHBhcnNlSW50KG51bUl0ZXJhdGlvbnNFeHApO1xuICAgIGlmICgobnVtSXRlcmF0aW9uc0V4cDwxMCl8fChudW1JdGVyYXRpb25zRXhwPjYzKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bUl0ZXJhdGlvbnNFeHAuIChNdXN0IGJlIGJldHdlZW4gMTAgYW5kIDYzKVwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuXG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKG9sZFB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXIsIGNlcmVtb255UG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcbiAgICBpZiAocG93ZXIgIT0gY2VyZW1vbnlQb3dlcikge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJUaGlzIGZpbGUgaGFzIGJlZW4gcmVkdWNlZC4gWW91IGNhbm5vdCBjb250cmlidXRlIGludG8gYSByZWR1Y2VkIGZpbGUuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzZWN0aW9uc1sxMl0pIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLndhcm4oXCJDb250cmlidXRpbmcgaW50byBhIGZpbGUgdGhhdCBoYXMgcGhhc2UyIGNhbGN1bGF0ZWQuIFlvdSB3aWxsIGhhdmUgdG8gcHJlcGFyZSBwaGFzZTIgYWdhaW4uXCIpO1xuICAgIH1cbiAgICBjb25zdCBjb250cmlidXRpb25zID0gYXdhaXQgdXRpbHMucmVhZENvbnRyaWJ1dGlvbnMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG4gICAgY29uc3QgY3VyQ29udHJpYnV0aW9uID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiAxLCAvLyBCZWFjb25cbiAgICAgICAgbnVtSXRlcmF0aW9uc0V4cDogbnVtSXRlcmF0aW9uc0V4cCxcbiAgICAgICAgYmVhY29uSGFzaDogYmVhY29uSGFzaFxuICAgIH07XG5cbiAgICBsZXQgbGFzdENoYWxsZW5nZUhhc2g7XG5cbiAgICBpZiAoY29udHJpYnV0aW9ucy5sZW5ndGg+MCkge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IGNvbnRyaWJ1dGlvbnNbY29udHJpYnV0aW9ucy5sZW5ndGgtMV0ubmV4dENoYWxsZW5nZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXN0Q2hhbGxlbmdlSGFzaCA9IHV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaChjdXJ2ZSwgcG93ZXIsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgY3VyQ29udHJpYnV0aW9uLmtleSA9IGF3YWl0IHV0aWxzLmtleUZyb21CZWFjb24oY3VydmUsIGxhc3RDaGFsbGVuZ2VIYXNoLCBiZWFjb25IYXNoLCBudW1JdGVyYXRpb25zRXhwKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSGFzaGVyID0gbmV3IEJsYWtlMmIoNjQpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShsYXN0Q2hhbGxlbmdlSGFzaCk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKG5ld1BUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIDcpO1xuICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHBvd2VyKTtcblxuICAgIGNvbnN0IHN0YXJ0U2VjdGlvbnMgPSBbXTtcblxuICAgIGxldCBmaXJzdFBvaW50cztcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDIsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAqIDIgLTEsIGN1cnZlLkZyLmUoMSksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJ0YXVHMVwiLCBsb2dnZXIgKTtcbiAgICBjdXJDb250cmlidXRpb24udGF1RzEgPSBmaXJzdFBvaW50c1sxXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDMsIFwiRzJcIiwgICgyICoqIHBvd2VyKSAsIGN1cnZlLkZyLmUoMSksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJ0YXVHMlwiLCBsb2dnZXIgKTtcbiAgICBjdXJDb250cmlidXRpb24udGF1RzIgPSBmaXJzdFBvaW50c1sxXTtcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDQsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAsIGN1ckNvbnRyaWJ1dGlvbi5rZXkuYWxwaGEucHJ2S2V5LCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwiYWxwaGFUYXVHMVwiLCBsb2dnZXIgKTtcbiAgICBjdXJDb250cmlidXRpb24uYWxwaGFHMSA9IGZpcnN0UG9pbnRzWzBdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNSwgXCJHMVwiLCAgKDIgKiogcG93ZXIpICwgY3VyQ29udHJpYnV0aW9uLmtleS5iZXRhLnBydktleSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcImJldGFUYXVHMVwiLCBsb2dnZXIgKTtcbiAgICBjdXJDb250cmlidXRpb24uYmV0YUcxID0gZmlyc3RQb2ludHNbMF07XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbig2LCBcIkcyXCIsICAxLCBjdXJDb250cmlidXRpb24ua2V5LmJldGEucHJ2S2V5LCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwiYmV0YVRhdUcyXCIsIGxvZ2dlciApO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5iZXRhRzIgPSBmaXJzdFBvaW50c1swXTtcblxuICAgIGN1ckNvbnRyaWJ1dGlvbi5wYXJ0aWFsSGFzaCA9IHJlc3BvbnNlSGFzaGVyLmdldFBhcnRpYWxIYXNoKCk7XG5cbiAgICBjb25zdCBidWZmS2V5ID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRjEubjgqMio2K2N1cnZlLkYyLm44KjIqMyk7XG5cbiAgICB1dGlscy50b1B0YXVQdWJLZXlScHIoYnVmZktleSwgMCwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5rZXksIGZhbHNlKTtcblxuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShuZXcgVWludDhBcnJheShidWZmS2V5KSk7XG4gICAgY29uc3QgaGFzaFJlc3BvbnNlID0gcmVzcG9uc2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goaGFzaFJlc3BvbnNlLCBcIkNvbnRyaWJ1dGlvbiBSZXNwb25zZSBIYXNoIGltcG9ydGVkOiBcIikpO1xuXG4gICAgY29uc3QgbmV4dENoYWxsZW5nZUhhc2hlciA9IG5ldyBCbGFrZTJiKDY0KTtcbiAgICBuZXh0Q2hhbGxlbmdlSGFzaGVyLnVwZGF0ZShoYXNoUmVzcG9uc2UpO1xuXG4gICAgYXdhaXQgaGFzaFNlY3Rpb24oZmROZXcsIFwiRzFcIiwgMiwgKDIgKiogcG93ZXIpICogMiAtMSwgXCJ0YXVHMVwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcyXCIsIDMsICgyICoqIHBvd2VyKSAgICAgICAsIFwidGF1RzJcIiwgbG9nZ2VyKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMVwiLCA0LCAoMiAqKiBwb3dlcikgICAgICAgLCBcImFscGhhVGF1RzFcIiwgbG9nZ2VyKTtcbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMVwiLCA1LCAoMiAqKiBwb3dlcikgICAgICAgLCBcImJldGFUYXVHMVwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcyXCIsIDYsIDEgICAgICAgICAgICAgICAgICAsIFwiYmV0YUcyXCIsIGxvZ2dlcik7XG5cbiAgICBjdXJDb250cmlidXRpb24ubmV4dENoYWxsZW5nZSA9IG5leHRDaGFsbGVuZ2VIYXNoZXIuZGlnZXN0KCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY3VyQ29udHJpYnV0aW9uLm5leHRDaGFsbGVuZ2UsIFwiTmV4dCBDaGFsbGVuZ2UgSGFzaDogXCIpKTtcblxuICAgIGNvbnRyaWJ1dGlvbnMucHVzaChjdXJDb250cmlidXRpb24pO1xuXG4gICAgYXdhaXQgdXRpbHMud3JpdGVDb250cmlidXRpb25zKGZkTmV3LCBjdXJ2ZSwgY29udHJpYnV0aW9ucyk7XG5cbiAgICBhd2FpdCBmZE9sZC5jbG9zZSgpO1xuICAgIGF3YWl0IGZkTmV3LmNsb3NlKCk7XG5cbiAgICByZXR1cm4gaGFzaFJlc3BvbnNlO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NlY3Rpb24oc2VjdGlvbklkLCBncm91cE5hbWUsIE5Qb2ludHMsIGZpcnN0LCBpbmMsIHNlY3Rpb25OYW1lLCBsb2dnZXIpIHtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGZkT2xkLnBvcyA9IHNlY3Rpb25zW3NlY3Rpb25JZF1bMF0ucDtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24oZmROZXcsIHNlY3Rpb25JZCk7XG5cbiAgICAgICAgc3RhcnRTZWN0aW9uc1tzZWN0aW9uSWRdID0gZmROZXcucG9zO1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBjaHVua1NpemUgPSBNYXRoLmZsb29yKCgxPDwyMCkgLyBzRyk7ICAgLy8gMTI4TWIgY2h1bmtzXG4gICAgICAgIGxldCB0ID0gZmlyc3Q7XG4gICAgICAgIGZvciAobGV0IGk9MCA7IGk8TlBvaW50cyA7IGkrPSBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgYXBwbHlpbmcga2V5JHtzZWN0aW9uTmFtZX06ICR7aX0vJHtOUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbj0gTWF0aC5taW4oTlBvaW50cy1pLCBjaHVua1NpemUgKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZJbiA9IGF3YWl0IGZkT2xkLnJlYWQobiAqIHNHKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZPdXRMRU0gPSBhd2FpdCBHLmJhdGNoQXBwbHlLZXkoYnVmZkluLCB0LCBpbmMpO1xuXG4gICAgICAgICAgICAvKiBDb2RlIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSB0aGUgMl5tLTIgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAoc2VjdGlvbk5hbWU9PSBcInRhdUcxXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieiA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgICAgICAgICAgICAgICBidWZmT3V0TEVNLnNldChieiwgNjQqKCgyICoqIHBvd2VyKSAtIDEgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlV3JpdGUgPSBmZE5ldy53cml0ZShidWZmT3V0TEVNKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZPdXRDID0gYXdhaXQgRy5iYXRjaExFTXRvQyhidWZmT3V0TEVNKTtcblxuICAgICAgICAgICAgcmVzcG9uc2VIYXNoZXIudXBkYXRlKGJ1ZmZPdXRDKTtcbiAgICAgICAgICAgIGF3YWl0IHByb21pc2VXcml0ZTtcbiAgICAgICAgICAgIGlmIChpPT0wKSAgIC8vIFJldHVybiB0aGUgMiBmaXJzdCBwb2ludHMuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPE1hdGgubWluKDIsIE5Qb2ludHMpOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKEcuZnJvbVJwckxFTShidWZmT3V0TEVNLCBqKnNHKSk7XG4gICAgICAgICAgICB0ID0gY3VydmUuRnIubXVsKHQsIGN1cnZlLkZyLmV4cChpbmMsIG4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRXcml0ZVNlY3Rpb24oZmROZXcpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBoYXNoU2VjdGlvbihmZFRvLCBncm91cE5hbWUsIHNlY3Rpb25JZCwgblBvaW50cywgc2VjdGlvbk5hbWUsIGxvZ2dlcikge1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc0cpO1xuXG4gICAgICAgIGNvbnN0IG9sZFBvcyA9IGZkVG8ucG9zO1xuICAgICAgICBmZFRvLnBvcyA9IHN0YXJ0U2VjdGlvbnNbc2VjdGlvbklkXTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkgKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYEhhc2hpbmcgJHtzZWN0aW9uTmFtZX06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKG5Qb2ludHMtaSwgblBvaW50c0NodW5rKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkxFTSA9IGF3YWl0IGZkVG8ucmVhZChuICogc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmVSA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYnVmZkxFTSk7XG5cbiAgICAgICAgICAgIG5leHRDaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGJ1ZmZVKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZkVG8ucG9zID0gb2xkUG9zO1xuICAgIH1cbn1cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLy8gRm9ybWF0IG9mIHRoZSBvdXRwdXRcbi8vICAgICAgSGFzaCBvZiB0aGUgbGFzdCBjb250cmlidXRpb24gIDY0IEJ5dGVzXG4vLyAgICAgIDJeTioyLTEgVGF1RzEgUG9pbnRzICh1bmNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBUYXVHMiBQb2ludHMgKHVuY29tcHJlc3NlZClcbi8vICAgICAgMl5OIEFscGhhVGF1RzEgUG9pbnRzICh1bmNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBCZXRhVGF1RzEgUG9pbnRzICh1bmNvbXByZXNzZWQpXG5cbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBrZXlQYWlyIGZyb20gXCIuL2tleXBhaXIuanNcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgbWlzYyBmcm9tIFwiLi9taXNjLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNvbnRyaWJ1dGUob2xkUHRhdUZpbGVuYW1lLCBuZXdQVGF1RmlsZW5hbWUsIG5hbWUsIGVudHJvcHksIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShvbGRQdGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxKTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyLCBjZXJlbW9ueVBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkT2xkLCBzZWN0aW9ucyk7XG4gICAgaWYgKHBvd2VyICE9IGNlcmVtb255UG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiVGhpcyBmaWxlIGhhcyBiZWVuIHJlZHVjZWQuIFlvdSBjYW5ub3QgY29udHJpYnV0ZSBpbnRvIGEgcmVkdWNlZCBmaWxlLlwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmaWxlIGhhcyBiZWVuIHJlZHVjZWQuIFlvdSBjYW5ub3QgY29udHJpYnV0ZSBpbnRvIGEgcmVkdWNlZCBmaWxlLlwiKTtcbiAgICB9XG4gICAgaWYgKHNlY3Rpb25zWzEyXSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIud2FybihcIldBUk5JTkc6IENvbnRyaWJ1dGluZyBpbnRvIGEgZmlsZSB0aGF0IGhhcyBwaGFzZTIgY2FsY3VsYXRlZC4gWW91IHdpbGwgaGF2ZSB0byBwcmVwYXJlIHBoYXNlMiBhZ2Fpbi5cIik7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBhd2FpdCB1dGlscy5yZWFkQ29udHJpYnV0aW9ucyhmZE9sZCwgY3VydmUsIHNlY3Rpb25zKTtcbiAgICBjb25zdCBjdXJDb250cmlidXRpb24gPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHR5cGU6IDAsIC8vIEJlYWNvblxuICAgIH07XG5cbiAgICBsZXQgbGFzdENoYWxsZW5nZUhhc2g7XG5cbiAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLmdldFJhbmRvbVJuZyhlbnRyb3B5KTtcblxuICAgIGlmIChjb250cmlidXRpb25zLmxlbmd0aD4wKSB7XG4gICAgICAgIGxhc3RDaGFsbGVuZ2VIYXNoID0gY29udHJpYnV0aW9uc1tjb250cmlidXRpb25zLmxlbmd0aC0xXS5uZXh0Q2hhbGxlbmdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxhc3RDaGFsbGVuZ2VIYXNoID0gdXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoKGN1cnZlLCBwb3dlciwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHJhbmRvbSBrZXlcblxuXG4gICAgY3VyQ29udHJpYnV0aW9uLmtleSA9IGtleVBhaXIuY3JlYXRlUFRhdUtleShjdXJ2ZSwgbGFzdENoYWxsZW5nZUhhc2gsIHJuZyk7XG5cblxuICAgIGNvbnN0IHJlc3BvbnNlSGFzaGVyID0gbmV3IEJsYWtlMmIoNjQpO1xuICAgIHJlc3BvbnNlSGFzaGVyLnVwZGF0ZShsYXN0Q2hhbGxlbmdlSGFzaCk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKG5ld1BUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIDcpO1xuICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHBvd2VyKTtcblxuICAgIGNvbnN0IHN0YXJ0U2VjdGlvbnMgPSBbXTtcblxuICAgIGxldCBmaXJzdFBvaW50cztcbiAgICBmaXJzdFBvaW50cyA9IGF3YWl0IHByb2Nlc3NTZWN0aW9uKDIsIFwiRzFcIiwgICgyICoqIHBvd2VyKSAqIDIgLTEsIGN1cnZlLkZyLmUoMSksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJ0YXVHMVwiICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLnRhdUcxID0gZmlyc3RQb2ludHNbMV07XG4gICAgZmlyc3RQb2ludHMgPSBhd2FpdCBwcm9jZXNzU2VjdGlvbigzLCBcIkcyXCIsICAoMiAqKiBwb3dlcikgLCBjdXJ2ZS5Gci5lKDEpLCBjdXJDb250cmlidXRpb24ua2V5LnRhdS5wcnZLZXksIFwidGF1RzJcIiApO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi50YXVHMiA9IGZpcnN0UG9pbnRzWzFdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNCwgXCJHMVwiLCAgKDIgKiogcG93ZXIpICwgY3VyQ29udHJpYnV0aW9uLmtleS5hbHBoYS5wcnZLZXksIGN1ckNvbnRyaWJ1dGlvbi5rZXkudGF1LnBydktleSwgXCJhbHBoYVRhdUcxXCIgKTtcbiAgICBjdXJDb250cmlidXRpb24uYWxwaGFHMSA9IGZpcnN0UG9pbnRzWzBdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNSwgXCJHMVwiLCAgKDIgKiogcG93ZXIpICwgY3VyQ29udHJpYnV0aW9uLmtleS5iZXRhLnBydktleSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcImJldGFUYXVHMVwiICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmJldGFHMSA9IGZpcnN0UG9pbnRzWzBdO1xuICAgIGZpcnN0UG9pbnRzID0gYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNiwgXCJHMlwiLCAgMSwgY3VyQ29udHJpYnV0aW9uLmtleS5iZXRhLnBydktleSwgY3VyQ29udHJpYnV0aW9uLmtleS50YXUucHJ2S2V5LCBcImJldGFUYXVHMlwiICk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmJldGFHMiA9IGZpcnN0UG9pbnRzWzBdO1xuXG4gICAgY3VyQ29udHJpYnV0aW9uLnBhcnRpYWxIYXNoID0gcmVzcG9uc2VIYXNoZXIuZ2V0UGFydGlhbEhhc2goKTtcblxuICAgIGNvbnN0IGJ1ZmZLZXkgPSBuZXcgVWludDhBcnJheShjdXJ2ZS5GMS5uOCoyKjYrY3VydmUuRjIubjgqMiozKTtcblxuICAgIHV0aWxzLnRvUHRhdVB1YktleVJwcihidWZmS2V5LCAwLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLmtleSwgZmFsc2UpO1xuXG4gICAgcmVzcG9uc2VIYXNoZXIudXBkYXRlKG5ldyBVaW50OEFycmF5KGJ1ZmZLZXkpKTtcbiAgICBjb25zdCBoYXNoUmVzcG9uc2UgPSByZXNwb25zZUhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChoYXNoUmVzcG9uc2UsIFwiQ29udHJpYnV0aW9uIFJlc3BvbnNlIEhhc2ggaW1wb3J0ZWQ6IFwiKSk7XG5cbiAgICBjb25zdCBuZXh0Q2hhbGxlbmdlSGFzaGVyID0gbmV3IEJsYWtlMmIoNjQpO1xuICAgIG5leHRDaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGhhc2hSZXNwb25zZSk7XG5cbiAgICBhd2FpdCBoYXNoU2VjdGlvbihmZE5ldywgXCJHMVwiLCAyLCAoMiAqKiBwb3dlcikgKiAyIC0xLCBcInRhdUcxXCIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcyXCIsIDMsICgyICoqIHBvd2VyKSAgICAgICAsIFwidGF1RzJcIik7XG4gICAgYXdhaXQgaGFzaFNlY3Rpb24oZmROZXcsIFwiRzFcIiwgNCwgKDIgKiogcG93ZXIpICAgICAgICwgXCJhbHBoYVRhdUcxXCIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcxXCIsIDUsICgyICoqIHBvd2VyKSAgICAgICAsIFwiYmV0YVRhdUcxXCIpO1xuICAgIGF3YWl0IGhhc2hTZWN0aW9uKGZkTmV3LCBcIkcyXCIsIDYsIDEgICAgICAgICAgICAgICAgICAsIFwiYmV0YUcyXCIpO1xuXG4gICAgY3VyQ29udHJpYnV0aW9uLm5leHRDaGFsbGVuZ2UgPSBuZXh0Q2hhbGxlbmdlSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGN1ckNvbnRyaWJ1dGlvbi5uZXh0Q2hhbGxlbmdlLCBcIk5leHQgQ2hhbGxlbmdlIEhhc2g6IFwiKSk7XG5cbiAgICBjb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHV0aWxzLndyaXRlQ29udHJpYnV0aW9ucyhmZE5ldywgY3VydmUsIGNvbnRyaWJ1dGlvbnMpO1xuXG4gICAgYXdhaXQgZmRPbGQuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE5ldy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIGhhc2hSZXNwb25zZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uKHNlY3Rpb25JZCwgZ3JvdXBOYW1lLCBOUG9pbnRzLCBmaXJzdCwgaW5jLCBzZWN0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgZmRPbGQucG9zID0gc2VjdGlvbnNbc2VjdGlvbklkXVswXS5wO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZE5ldywgc2VjdGlvbklkKTtcblxuICAgICAgICBzdGFydFNlY3Rpb25zW3NlY3Rpb25JZF0gPSBmZE5ldy5wb3M7XG5cbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG4gICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IE1hdGguZmxvb3IoKDE8PDIwKSAvIHNHKTsgICAvLyAxMjhNYiBjaHVua3NcbiAgICAgICAgbGV0IHQgPSBmaXJzdDtcbiAgICAgICAgZm9yIChsZXQgaT0wIDsgaTxOUG9pbnRzIDsgaSs9IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBwcm9jZXNzaW5nOiAke3NlY3Rpb25OYW1lfTogJHtpfS8ke05Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuPSBNYXRoLm1pbihOUG9pbnRzLWksIGNodW5rU2l6ZSApO1xuICAgICAgICAgICAgY29uc3QgYnVmZkluID0gYXdhaXQgZmRPbGQucmVhZChuICogc0cpO1xuICAgICAgICAgICAgY29uc3QgYnVmZk91dExFTSA9IGF3YWl0IEcuYmF0Y2hBcHBseUtleShidWZmSW4sIHQsIGluYyk7XG5cbiAgICAgICAgICAgIC8qIENvZGUgdG8gdGVzdCB0aGUgY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZlIHRoZSAyXm0tMiBjb21wb25lbnRcbiAgICAgICAgICAgIGlmIChzZWN0aW9uTmFtZT09IFwidGF1RzFcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ6ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgICAgICAgICAgIGJ1ZmZPdXRMRU0uc2V0KGJ6LCA2NCooKDIgKiogcG93ZXIpIC0gMSApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VXcml0ZSA9IGZkTmV3LndyaXRlKGJ1ZmZPdXRMRU0pO1xuICAgICAgICAgICAgY29uc3QgYnVmZk91dEMgPSBhd2FpdCBHLmJhdGNoTEVNdG9DKGJ1ZmZPdXRMRU0pO1xuXG4gICAgICAgICAgICByZXNwb25zZUhhc2hlci51cGRhdGUoYnVmZk91dEMpO1xuICAgICAgICAgICAgYXdhaXQgcHJvbWlzZVdyaXRlO1xuICAgICAgICAgICAgaWYgKGk9PTApICAgLy8gUmV0dXJuIHRoZSAyIGZpcnN0IHBvaW50cy5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8TWF0aC5taW4oMiwgTlBvaW50cyk7IGorKylcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goRy5mcm9tUnByTEVNKGJ1ZmZPdXRMRU0sIGoqc0cpKTtcbiAgICAgICAgICAgIHQgPSBjdXJ2ZS5Gci5tdWwodCwgY3VydmUuRnIuZXhwKGluYywgbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZE5ldyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGhhc2hTZWN0aW9uKGZkVG8sIGdyb3VwTmFtZSwgc2VjdGlvbklkLCBuUG9pbnRzLCBzZWN0aW9uTmFtZSkge1xuXG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzQ2h1bmsgPSBNYXRoLmZsb29yKCgxPDwyNCkvc0cpO1xuXG4gICAgICAgIGNvbnN0IG9sZFBvcyA9IGZkVG8ucG9zO1xuICAgICAgICBmZFRvLnBvcyA9IHN0YXJ0U2VjdGlvbnNbc2VjdGlvbklkXTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IG5Qb2ludHM7IGkgKz0gblBvaW50c0NodW5rKSB7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikmJmkpIGxvZ2dlci5kZWJ1ZyhgSGFzaGluZyAke3NlY3Rpb25OYW1lfTogYCArIGkpO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKG5Qb2ludHMtaSwgblBvaW50c0NodW5rKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZkxFTSA9IGF3YWl0IGZkVG8ucmVhZChuICogc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmVSA9IGF3YWl0IEcuYmF0Y2hMRU10b1UoYnVmZkxFTSk7XG5cbiAgICAgICAgICAgIG5leHRDaGFsbGVuZ2VIYXNoZXIudXBkYXRlKGJ1ZmZVKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZkVG8ucG9zID0gb2xkUG9zO1xuICAgIH1cblxuXG59XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCB7QmlnQnVmZmVyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVQaGFzZTIob2xkUHRhdUZpbGVuYW1lLCBuZXdQVGF1RmlsZW5hbWUsIGxvZ2dlcikge1xuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKG9sZFB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcblxuICAgIGNvbnN0IGZkTmV3ID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUobmV3UFRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSwgMTEpO1xuICAgIGF3YWl0IHV0aWxzLndyaXRlUFRhdUhlYWRlcihmZE5ldywgY3VydmUsIHBvd2VyKTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAyKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMyk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDQpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA1KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDcpO1xuXG4gICAgYXdhaXQgcHJvY2Vzc1NlY3Rpb24oMiwgMTIsIFwiRzFcIiwgXCJ0YXVHMVwiICk7XG4gICAgYXdhaXQgcHJvY2Vzc1NlY3Rpb24oMywgMTMsIFwiRzJcIiwgXCJ0YXVHMlwiICk7XG4gICAgYXdhaXQgcHJvY2Vzc1NlY3Rpb24oNCwgMTQsIFwiRzFcIiwgXCJhbHBoYVRhdUcxXCIgKTtcbiAgICBhd2FpdCBwcm9jZXNzU2VjdGlvbig1LCAxNSwgXCJHMVwiLCBcImJldGFUYXVHMVwiICk7XG5cbiAgICBhd2FpdCBmZE9sZC5jbG9zZSgpO1xuICAgIGF3YWl0IGZkTmV3LmNsb3NlKCk7XG5cbiAgICAvLyBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsobmV3UFRhdUZpbGVuYW1lKyBcIi50bXBcIik7XG5cbiAgICByZXR1cm47XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbihvbGRTZWN0aW9uSWQsIG5ld1NlY3Rpb25JZCwgR3N0ciwgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiU3RhcnRpbmcgc2VjdGlvbjogXCIrc2VjdGlvbk5hbWUpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZE5ldywgbmV3U2VjdGlvbklkKTtcblxuICAgICAgICBmb3IgKGxldCBwPTA7IHA8PXBvd2VyOyBwKyspIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uUG93ZXIocCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkU2VjdGlvbklkID09IDIpIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uUG93ZXIocG93ZXIrMSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkTmV3KTtcblxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTZWN0aW9uUG93ZXIocCkge1xuICAgICAgICAgICAgY29uc3QgblBvaW50cyA9IDIgKiogcDtcbiAgICAgICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtHc3RyXTtcbiAgICAgICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgICAgICBjb25zdCBzR2luID0gRy5GLm44KjI7XG4gICAgICAgICAgICBjb25zdCBzR21pZCA9IEcuRi5uOCozO1xuXG4gICAgICAgICAgICBsZXQgYnVmZjtcbiAgICAgICAgICAgIGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0dpbik7XG5cbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgb2xkU2VjdGlvbklkKTtcbiAgICAgICAgICAgIGlmICgob2xkU2VjdGlvbklkID09IDIpJiYocD09cG93ZXIrMSkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE9sZC5yZWFkVG9CdWZmZXIoYnVmZiwgMCwoblBvaW50cy0xKSpzR2luICk7XG4gICAgICAgICAgICAgICAgYnVmZi5zZXQoY3VydmUuRzEuemVyb0FmZmluZSwgKG5Qb2ludHMtMSkqc0dpbiApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE9sZC5yZWFkVG9CdWZmZXIoYnVmZiwgMCxuUG9pbnRzKnNHaW4gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZE9sZCwgdHJ1ZSk7XG5cblxuICAgICAgICAgICAgYnVmZiA9IGF3YWl0IEcubGFncmFuZ2VFdmFsdWF0aW9ucyhidWZmLCBcImFmZmluZVwiLCBcImFmZmluZVwiLCBsb2dnZXIsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuXG4vKlxuICAgICAgICAgICAgaWYgKHAgPD0gY3VydmUuRnIucykge1xuICAgICAgICAgICAgICAgIGJ1ZmYgPSBhd2FpdCBHLmlmZnQoYnVmZiwgXCJhZmZpbmVcIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmROZXcud3JpdGUoYnVmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gY3VydmUuRnIucysxKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxNID0gMTw8Y3VydmUuRnIucztcbiAgICAgICAgICAgICAgICBsZXQgdDAgPSBuZXcgQmlnQnVmZmVyKCBzbWFsbE0gKiBzR21pZCApO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IG5ldyBCaWdCdWZmZXIoIHNtYWxsTSAqIHNHbWlkICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaGlmdF90b19zbWFsbF9tID0gRnIuZXhwKEZyLnNoaWZ0LCBzbWFsbE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uZV9vdmVyX2Rlbm9tID0gRnIuaW52KEZyLnN1YihzaGlmdF90b19zbWFsbF9tLCBGci5vbmUpKTtcblxuICAgICAgICAgICAgICAgIGxldCBzSW52QWNjID0gRnIub25lO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxzbWFsbE07IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aSA9ICBidWZmLnNsaWNlKGkqc0dpbiwgKGkrMSkqc0dpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtaSA9IGJ1ZmYuc2xpY2UoKGkrc21hbGxNKSpzR2luLCAoaStzbWFsbE0rMSkqc0dpbik7XG5cbiAgICAgICAgICAgICAgICAgICAgdDAuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgRy50aW1lc0ZyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcuc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLnRpbWVzRnIodGkgLCBzaGlmdF90b19zbWFsbF9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVfb3Zlcl9kZW5vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqc0dtaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdDEuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgRy50aW1lc0ZyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcuc3ViKCB0bWksIHRpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGci5tdWwoc0ludkFjYywgb25lX292ZXJfZGVub20pXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSpzR21pZFxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgc0ludkFjYyA9IEZyLm11bChzSW52QWNjLCBGci5zaGlmdEludik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQwID0gYXdhaXQgRy5pZmZ0KHQwLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIiB0MFwiKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZSh0MCk7XG4gICAgICAgICAgICAgICAgdDAgPSBudWxsO1xuICAgICAgICAgICAgICAgIHQxID0gYXdhaXQgRy5pZmZ0KHQxLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlciwgc2VjdGlvbk5hbWUgKyBcIiB0MFwiKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmZE5ldy53cml0ZSh0MSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUG93ZXIgdG9vIGJpZ1wiKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3dlciB0byBiaWdcIik7XG4gICAgICAgICAgICB9XG4qL1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3Bvd2Vyc29mdGF1X3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHRydW5jYXRlKHB0YXVGaWxlbmFtZSwgdGVtcGxhdGUsIGxvZ2dlcikge1xuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXIsIGNlcmVtb255UG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcblxuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44KjI7XG5cbiAgICBmb3IgKGxldCBwPTE7IHA8cG93ZXI7IHArKykge1xuICAgICAgICBhd2FpdCBnZW5lcmF0ZVRydW5jYXRlKHApO1xuICAgIH1cblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVHJ1bmNhdGUocCkge1xuXG4gICAgICAgIGxldCBzUCA9IHAudG9TdHJpbmcoKTtcbiAgICAgICAgd2hpbGUgKHNQLmxlbmd0aDwyKSBzUCA9IFwiMFwiICsgc1A7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiV3JpdGluZyBQb3dlcjogXCIrc1ApO1xuXG4gICAgICAgIGNvbnN0IGZkTmV3ID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUodGVtcGxhdGUgKyBzUCArIFwiLnB0YXVcIiwgXCJwdGF1XCIsIDEsIDExKTtcbiAgICAgICAgYXdhaXQgdXRpbHMud3JpdGVQVGF1SGVhZGVyKGZkTmV3LCBjdXJ2ZSwgcCwgY2VyZW1vbnlQb3dlcik7XG5cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDIsICgoMiAqKiBwKSoyLTEpICogc0cxICk7IC8vIHRhZ0cxXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAzLCAoMiAqKiBwKSAqIHNHMik7IC8vIHRhdUcyXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA0LCAoMiAqKiBwKSAqIHNHMSk7IC8vIGFsZmFUYXVHMVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSwgKDIgKiogcCkgKiBzRzEpOyAvLyBiZXRhVGF1RzFcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYsICBzRzIpOyAvLyBiZXRhVGF1RzJcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDcpOyAvLyBjb250cmlidXRpb25zXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxMiwgKCgyICoqIChwKzEpKSoyIC0xKSAqIHNHMSk7IC8vIExfdGF1RzFcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDEzLCAoKDIgKiogcCkqMiAtMSkgKiBzRzIpOyAvLyBMX3RhdUcyXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxNCwgKCgyICoqIHApKjIgLTEpICogc0cxKTsgLy8gTF9hbGZhVGF1RzFcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDE1LCAoKDIgKiogcCkqMiAtMSkgKiBzRzEpOyAvLyBMX2JldGFUYXVHMVxuXG4gICAgICAgIGF3YWl0IGZkTmV3LmNsb3NlKCk7XG4gICAgfVxuXG5cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IHtCaWdCdWZmZXJ9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gY29udmVydChvbGRQdGF1RmlsZW5hbWUsIG5ld1BUYXVGaWxlbmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCB7ZmQ6IGZkT2xkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUob2xkUHRhdUZpbGVuYW1lLCBcInB0YXVcIiwgMSk7XG4gICAgY29uc3Qge2N1cnZlLCBwb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZE9sZCwgc2VjdGlvbnMpO1xuXG4gICAgY29uc3QgZmROZXcgPSBhd2FpdCBiaW5GaWxlVXRpbHMuY3JlYXRlQmluRmlsZShuZXdQVGF1RmlsZW5hbWUsIFwicHRhdVwiLCAxLCAxMSk7XG4gICAgYXdhaXQgdXRpbHMud3JpdGVQVGF1SGVhZGVyKGZkTmV3LCBjdXJ2ZSwgcG93ZXIpO1xuXG4gICAgLy8gY29uc3QgZmRUbXAgPSBhd2FpdCBmYXN0RmlsZS5jcmVhdGVPdmVycmlkZShuZXdQVGF1RmlsZW5hbWUrIFwiLnRtcFwiKTtcblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAyKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMyk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDQpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA1KTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDcpO1xuXG4gICAgYXdhaXQgcHJvY2Vzc1NlY3Rpb24oMiwgMTIsIFwiRzFcIiwgXCJ0YXVHMVwiICk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDEzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgMTQpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAxNSk7XG5cbiAgICBhd2FpdCBmZE9sZC5jbG9zZSgpO1xuICAgIGF3YWl0IGZkTmV3LmNsb3NlKCk7XG5cbiAgICAvLyBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsobmV3UFRhdUZpbGVuYW1lKyBcIi50bXBcIik7XG5cbiAgICByZXR1cm47XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvbihvbGRTZWN0aW9uSWQsIG5ld1NlY3Rpb25JZCwgR3N0ciwgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiU3RhcnRpbmcgc2VjdGlvbjogXCIrc2VjdGlvbk5hbWUpO1xuXG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZE5ldywgbmV3U2VjdGlvbklkKTtcblxuICAgICAgICBjb25zdCBzaXplID0gc2VjdGlvbnNbbmV3U2VjdGlvbklkXVswXS5zaXplO1xuICAgICAgICBjb25zdCBjaHVua1NpemUgPSBmZE9sZC5wYWdlU2l6ZTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBuZXdTZWN0aW9uSWQpO1xuICAgICAgICBmb3IgKGxldCBwPTA7IHA8c2l6ZTsgcCs9Y2h1bmtTaXplKSB7XG4gICAgICAgICAgICBjb25zdCBsID0gTWF0aC5taW4oc2l6ZSAtcCwgY2h1bmtTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZE9sZC5yZWFkKGwpO1xuICAgICAgICAgICAgYXdhaXQgZmROZXcud3JpdGUoYnVmZik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkT2xkKTtcblxuICAgICAgICBpZiAob2xkU2VjdGlvbklkID09IDIpIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NTZWN0aW9uUG93ZXIocG93ZXIrMSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkTmV3KTtcblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2VjdGlvblBvd2VyKHApIHtcbiAgICAgICAgICAgIGNvbnN0IG5Qb2ludHMgPSAyICoqIHA7XG4gICAgICAgICAgICBjb25zdCBHID0gY3VydmVbR3N0cl07XG4gICAgICAgICAgICBjb25zdCBzR2luID0gRy5GLm44KjI7XG5cbiAgICAgICAgICAgIGxldCBidWZmO1xuICAgICAgICAgICAgYnVmZiA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzR2luKTtcblxuICAgICAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBvbGRTZWN0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKChvbGRTZWN0aW9uSWQgPT0gMikmJihwPT1wb3dlcisxKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkT2xkLnJlYWRUb0J1ZmZlcihidWZmLCAwLChuUG9pbnRzLTEpKnNHaW4gKTtcbiAgICAgICAgICAgICAgICBidWZmLnNldChjdXJ2ZS5HMS56ZXJvQWZmaW5lLCAoblBvaW50cy0xKSpzR2luICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkT2xkLnJlYWRUb0J1ZmZlcihidWZmLCAwLG5Qb2ludHMqc0dpbiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkT2xkLCB0cnVlKTtcblxuICAgICAgICAgICAgYnVmZiA9IGF3YWl0IEcubGFncmFuZ2VFdmFsdWF0aW9ucyhidWZmLCBcImFmZmluZVwiLCBcImFmZmluZVwiLCBsb2dnZXIsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKGJ1ZmYpO1xuXG4vKlxuICAgICAgICAgICAgaWYgKHAgPD0gY3VydmUuRnIucykge1xuICAgICAgICAgICAgICAgIGJ1ZmYgPSBhd2FpdCBHLmlmZnQoYnVmZiwgXCJhZmZpbmVcIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmROZXcud3JpdGUoYnVmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gY3VydmUuRnIucysxKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxNID0gMTw8Y3VydmUuRnIucztcbiAgICAgICAgICAgICAgICBsZXQgdDAgPSBuZXcgQmlnQnVmZmVyKCBzbWFsbE0gKiBzR21pZCApO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IG5ldyBCaWdCdWZmZXIoIHNtYWxsTSAqIHNHbWlkICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaGlmdF90b19zbWFsbF9tID0gRnIuZXhwKEZyLnNoaWZ0LCBzbWFsbE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uZV9vdmVyX2Rlbm9tID0gRnIuaW52KEZyLnN1YihzaGlmdF90b19zbWFsbF9tLCBGci5vbmUpKTtcblxuICAgICAgICAgICAgICAgIGxldCBzSW52QWNjID0gRnIub25lO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxzbWFsbE07IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSUxMDAwMCkgbG9nZ2VyLmRlYnVnKGBzZWN0aW9uTmFtZSBwcmVwYXJlIEwgY2FsYzogJHtzZWN0aW9uTmFtZX0sICR7aX0vJHtzbWFsbE19YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpID0gIGJ1ZmYuc2xpY2UoaSpzR2luLCAoaSsxKSpzR2luKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1pID0gYnVmZi5zbGljZSgoaStzbWFsbE0pKnNHaW4sIChpK3NtYWxsTSsxKSpzR2luKTtcblxuICAgICAgICAgICAgICAgICAgICB0MC5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBHLnRpbWVzRnIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRy5zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcudGltZXNGcih0aSAsIHNoaWZ0X3RvX3NtYWxsX20pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bWlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZV9vdmVyX2Rlbm9tXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSpzR21pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0MS5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBHLnRpbWVzRnIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRy5zdWIoIHRtaSwgdGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyLm11bChzSW52QWNjLCBvbmVfb3Zlcl9kZW5vbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBpKnNHbWlkXG4gICAgICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgICAgICBzSW52QWNjID0gRnIubXVsKHNJbnZBY2MsIEZyLnNoaWZ0SW52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdDAgPSBhd2FpdCBHLmlmZnQodDAsIFwiamFjb2JpYW5cIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSArIFwiIHQwXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKHQwKTtcbiAgICAgICAgICAgICAgICB0MCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdDEgPSBhd2FpdCBHLmlmZnQodDEsIFwiamFjb2JpYW5cIiwgXCJhZmZpbmVcIiwgbG9nZ2VyLCBzZWN0aW9uTmFtZSArIFwiIHQxXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkTmV3LndyaXRlKHQxKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJQb3dlciB0b28gYmlnXCIpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvd2VyIHRvIGJpZ1wiKTtcbiAgICAgICAgICAgIH1cbiovXG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgeyBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkIH0gZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBleHBvcnRKc29uKHBUYXVGaWxlbmFtZSwgdmVyYm9zZSkge1xuICAgIGNvbnN0IHtmZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHBUYXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEpO1xuXG4gICAgY29uc3Qge2N1cnZlLCBwb3dlcn0gPSBhd2FpdCB1dGlscy5yZWFkUFRhdUhlYWRlcihmZCwgc2VjdGlvbnMpO1xuXG4gICAgY29uc3QgcFRhdSA9IHt9O1xuICAgIHBUYXUucSA9IGN1cnZlLnE7XG4gICAgcFRhdS5wb3dlciA9IHBvd2VyO1xuICAgIHBUYXUuY29udHJpYnV0aW9ucyA9IGF3YWl0IHV0aWxzLnJlYWRDb250cmlidXRpb25zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuXG4gICAgcFRhdS50YXVHMSA9IGF3YWl0IGV4cG9ydFNlY3Rpb24oMiwgXCJHMVwiLCAoMiAqKiBwb3dlcikqMiAtMSwgXCJ0YXVHMVwiKTtcbiAgICBwVGF1LnRhdUcyID0gYXdhaXQgZXhwb3J0U2VjdGlvbigzLCBcIkcyXCIsICgyICoqIHBvd2VyKSwgXCJ0YXVHMlwiKTtcbiAgICBwVGF1LmFscGhhVGF1RzEgPSBhd2FpdCBleHBvcnRTZWN0aW9uKDQsIFwiRzFcIiwgKDIgKiogcG93ZXIpLCBcImFscGhhVGF1RzFcIik7XG4gICAgcFRhdS5iZXRhVGF1RzEgPSBhd2FpdCBleHBvcnRTZWN0aW9uKDUsIFwiRzFcIiwgKDIgKiogcG93ZXIpLCBcImJldGFUYXVHMVwiKTtcbiAgICBwVGF1LmJldGFHMiA9IGF3YWl0IGV4cG9ydFNlY3Rpb24oNiwgXCJHMlwiLCAxLCBcImJldGFHMlwiKTtcblxuICAgIHBUYXUubFRhdUcxID0gYXdhaXQgZXhwb3J0TGFncmFuZ2UoMTIsIFwiRzFcIiwgXCJsVGF1RzFcIik7XG4gICAgcFRhdS5sVGF1RzIgPSBhd2FpdCBleHBvcnRMYWdyYW5nZSgxMywgXCJHMlwiLCBcImxUYXVHMlwiKTtcbiAgICBwVGF1LmxBbHBoYVRhdUcxID0gYXdhaXQgZXhwb3J0TGFncmFuZ2UoMTQsIFwiRzFcIiwgXCJsQWxwaGFUYXVHMlwiKTtcbiAgICBwVGF1LmxCZXRhVGF1RzEgPSBhd2FpdCBleHBvcnRMYWdyYW5nZSgxNSwgXCJHMVwiLCBcImxCZXRhVGF1RzJcIik7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeUJpZ0ludHNXaXRoRmllbGQoY3VydmUuRnIsIHBUYXUpO1xuXG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNlY3Rpb24oc2VjdGlvbklkLCBncm91cE5hbWUsIG5Qb2ludHMsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIHNlY3Rpb25JZCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgblBvaW50czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKHZlcmJvc2UpJiZpJiYoaSUxMDAwMCA9PSAwKSkgY29uc29sZS5sb2coYCR7c2VjdGlvbk5hbWV9OiBgICsgaSk7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChzRyk7XG4gICAgICAgICAgICByZXMucHVzaChHLmZyb21ScHJMRU0oYnVmZiwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5lbmRSZWFkU2VjdGlvbihmZCk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBleHBvcnRMYWdyYW5nZShzZWN0aW9uSWQsIGdyb3VwTmFtZSwgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG5cbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgc2VjdGlvbklkKTtcbiAgICAgICAgZm9yIChsZXQgcD0wOyBwPD1wb3dlcjsgcCsrKSB7XG4gICAgICAgICAgICBpZiAodmVyYm9zZSkgY29uc29sZS5sb2coYCR7c2VjdGlvbk5hbWV9OiBQb3dlcjogJHtwfWApO1xuICAgICAgICAgICAgcmVzW3BdID0gW107XG4gICAgICAgICAgICBjb25zdCBuUG9pbnRzID0gKDIgKiogcCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCh2ZXJib3NlKSYmaSYmKGklMTAwMDAgPT0gMCkpIGNvbnNvbGUubG9nKGAke3NlY3Rpb25OYW1lfTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoc0cpO1xuICAgICAgICAgICAgICAgIHJlc1twXS5wdXNoKEcuZnJvbVJwckxFTShidWZmLCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cblxufVxuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBuZXdBY2N1bXVsYXRvcn0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfbmV3LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZXhwb3J0Q2hhbGxlbmdlfSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9leHBvcnRfY2hhbGxlbmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW1wb3J0UmVzcG9uc2V9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2ltcG9ydC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZlcmlmeX0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdmVyaWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY2hhbGxlbmdlQ29udHJpYnV0ZX0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfY2hhbGxlbmdlX2NvbnRyaWJ1dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBiZWFjb259IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2JlYWNvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNvbnRyaWJ1dGV9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2NvbnRyaWJ1dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVwYXJlUGhhc2UyfSBmcm9tIFwiLi9wb3dlcnNvZnRhdV9wcmVwYXJlcGhhc2UyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJ1bmNhdGV9IGZyb20gXCIuL3Bvd2Vyc29mdGF1X3RydW5jYXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY29udmVydH0gZnJvbSBcIi4vcG93ZXJzb2Z0YXVfY29udmVydC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEpzb259IGZyb20gXCIuL3Bvd2Vyc29mdGF1X2V4cG9ydF9qc29uLmpzXCI7XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByMWNzUHJpbnQocjFjcywgc3ltcywgbG9nZ2VyKSB7XG4gICAgZm9yIChsZXQgaT0wOyBpPHIxY3MuY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJpbnRDb3N0cmFpbnQocjFjcy5jb25zdHJhaW50c1tpXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByaW50Q29zdHJhaW50KGMpIHtcbiAgICAgICAgY29uc3QgbGMyc3RyID0gKGxjKSA9PiB7XG4gICAgICAgICAgICBsZXQgUyA9IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobGMpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKCAoaykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gc3ltcy52YXJJZHgyTmFtZVtrXTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBcIm9uZVwiKSBuYW1lID0gXCIxXCI7XG5cbiAgICAgICAgICAgICAgICBsZXQgdnMgPSByMWNzLmN1cnZlLkZyLnRvU3RyaW5nKGxjW2tdKTtcbiAgICAgICAgICAgICAgICBpZiAodnMgPT0gXCIxXCIpIHZzID0gXCJcIjsgIC8vIERvIG5vdCBzaG93IG9uZXNcbiAgICAgICAgICAgICAgICBpZiAodnMgPT0gXCItMVwiKSB2cyA9IFwiLVwiOyAgLy8gRG8gbm90IHNob3cgb25lc1xuICAgICAgICAgICAgICAgIGlmICgoUyE9XCJcIikmJih2c1swXSE9XCItXCIpKSB2cyA9IFwiK1wiK3ZzO1xuICAgICAgICAgICAgICAgIGlmIChTIT1cIlwiKSB2cyA9IFwiIFwiK3ZzO1xuICAgICAgICAgICAgICAgIFM9IFMgKyB2cyAgICsgbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFM7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IFMgPSBgWyAke2xjMnN0cihjWzBdKX0gXSAqIFsgJHtsYzJzdHIoY1sxXSl9IF0gLSBbICR7bGMyc3RyKGNbMl0pfSBdID0gMGA7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFMpO1xuICAgIH1cblxufVxuIiwiXG4vKiBnbG9iYWwgQmlnSW50ICovXG5jb25zdCBoZXhMZW4gPSBbIDAsIDEsIDIsIDIsIDMsIDMsIDMsIDMsIDQgLDQgLDQgLDQgLDQgLDQgLDQgLDRdO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVN0cmluZyhzLCByYWRpeCkge1xuICAgIGlmICgoIXJhZGl4KXx8KHJhZGl4PT0xMCkpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChzKTtcbiAgICB9IGVsc2UgaWYgKHJhZGl4PT0xNikge1xuICAgICAgICBpZiAocy5zbGljZSgwLDIpID09IFwiMHhcIikge1xuICAgICAgICAgICAgcmV0dXJuIEJpZ0ludChzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCaWdJbnQoXCIweFwiK3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZSA9IGZyb21TdHJpbmc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQXJyYXkoYSwgcmFkaXgpIHtcbiAgICBsZXQgYWNjID1CaWdJbnQoMCk7XG4gICAgcmFkaXggPSBCaWdJbnQocmFkaXgpO1xuICAgIGZvciAobGV0IGk9MDsgaTxhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyA9IGFjYypyYWRpeCArIEJpZ0ludChhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpdExlbmd0aChhKSB7XG4gICAgY29uc3QgYVMgPWEudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiAoYVMubGVuZ3RoLTEpKjQgK2hleExlbltwYXJzZUludChhU1swXSwgMTYpXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVnYXRpdmUoYSkge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPCBCaWdJbnQoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1plcm8oYSkge1xuICAgIHJldHVybiAhYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWZ0TGVmdChhLCBuKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSA8PCBCaWdJbnQobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlmdFJpZ2h0KGEsIG4pIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID4+IEJpZ0ludChuKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNobCA9IHNoaWZ0TGVmdDtcbmV4cG9ydCBjb25zdCBzaHIgPSBzaGlmdFJpZ2h0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNPZGQoYSkge1xuICAgIHJldHVybiAoQmlnSW50KGEpICYgQmlnSW50KDEpKSA9PSBCaWdJbnQoMSk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIG5hZihuKSB7XG4gICAgbGV0IEUgPSBCaWdJbnQobik7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgd2hpbGUgKEUpIHtcbiAgICAgICAgaWYgKEUgJiBCaWdJbnQoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHogPSAyIC0gTnVtYmVyKEUgJSBCaWdJbnQoNCkpO1xuICAgICAgICAgICAgcmVzLnB1c2goIHogKTtcbiAgICAgICAgICAgIEUgPSBFIC0gQmlnSW50KHopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgfVxuICAgICAgICBFID0gRSA+PiBCaWdJbnQoMSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGJpdHMobikge1xuICAgIGxldCBFID0gQmlnSW50KG4pO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIHdoaWxlIChFKSB7XG4gICAgICAgIGlmIChFICYgQmlnSW50KDEpKSB7XG4gICAgICAgICAgICByZXMucHVzaCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgIH1cbiAgICAgICAgRSA9IEUgPj4gQmlnSW50KDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIocykge1xuICAgIGlmIChzPkJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bWJlciB0b28gYmlnXCIpO1xuICAgIH1cbiAgICByZXR1cm4gTnVtYmVyKHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheShzLCByYWRpeCkge1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGxldCByZW0gPSBCaWdJbnQocyk7XG4gICAgcmFkaXggPSBCaWdJbnQocmFkaXgpO1xuICAgIHdoaWxlIChyZW0pIHtcbiAgICAgICAgcmVzLnVuc2hpZnQoIE51bWJlcihyZW0gJSByYWRpeCkpO1xuICAgICAgICByZW0gPSByZW0gLyByYWRpeDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICsgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIC0gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnKGEpIHtcbiAgICByZXR1cm4gLUJpZ0ludChhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG11bChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAqIEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZShhKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAqIEJpZ0ludChhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvdyhhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAqKiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHAoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgKiogQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWJzKGEpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID49IDAgPyBCaWdJbnQoYSkgOiAtQmlnSW50KGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2KGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIC8gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9kKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICUgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXEoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPT0gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpICE9IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGx0KGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIDwgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3QoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXEoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgPD0gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VxKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpID49IEJpZ0ludChiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhbmQoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgJiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3IoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgfCBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBieG9yKGEsIGIpIHtcbiAgICByZXR1cm4gQmlnSW50KGEpIF4gQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZChhLCBiKSB7XG4gICAgcmV0dXJuIEJpZ0ludChhKSAmJiBCaWdJbnQoYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb3IoYSwgYikge1xuICAgIHJldHVybiBCaWdJbnQoYSkgfHwgQmlnSW50KGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG5vdChhKSB7XG4gICAgcmV0dXJuICFCaWdJbnQoYSk7XG59XG5cbi8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBMaXR0bGUgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gdG9ScHJMRShidWZmLCBvLCBlLCBuOCkge1xuICAgIGNvbnN0IHMgPSBcIjAwMDAwMDBcIiArIGUudG9TdHJpbmcoMTYpO1xuICAgIGNvbnN0IHYgPSBuZXcgVWludDMyQXJyYXkoYnVmZi5idWZmZXIsIG8sIG44LzQpO1xuICAgIGNvbnN0IGwgPSAoKChzLmxlbmd0aC03KSo0IC0gMSkgPj4gNSkrMTsgICAgLy8gTnVtYmVyIG9mIDMyYml0IHdvcmRzO1xuICAgIGZvciAobGV0IGk9MDsgaTxsOyBpKyspIHZbaV0gPSBwYXJzZUludChzLnN1YnN0cmluZyhzLmxlbmd0aC04KmktOCwgcy5sZW5ndGgtOCppKSwgMTYpO1xuICAgIGZvciAobGV0IGk9bDsgaTx2Lmxlbmd0aDsgaSsrKSB2W2ldID0gMDtcbiAgICBmb3IgKGxldCBpPXYubGVuZ3RoKjQ7IGk8bjg7IGkrKykgYnVmZltpXSA9IHRvTnVtYmVyKGJhbmQoc2hpZnRSaWdodChlLCBpKjgpLCAweEZGKSk7XG59XG5cbi8vIFJldHVybnMgYSBidWZmZXIgd2l0aCBCaWcgRW5kaWFuIFJlcHJlc2VudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gdG9ScHJCRShidWZmLCBvLCBlLCBuOCkge1xuICAgIGNvbnN0IHMgPSBcIjAwMDAwMDBcIiArIGUudG9TdHJpbmcoMTYpO1xuICAgIGNvbnN0IHYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCArIG8sIG44KTtcbiAgICBjb25zdCBsID0gKCgocy5sZW5ndGgtNykqNCAtIDEpID4+IDUpKzE7ICAgIC8vIE51bWJlciBvZiAzMmJpdCB3b3JkcztcbiAgICBmb3IgKGxldCBpPTA7IGk8bDsgaSsrKSB2LnNldFVpbnQzMihuOC1pKjQgLTQsIHBhcnNlSW50KHMuc3Vic3RyaW5nKHMubGVuZ3RoLTgqaS04LCBzLmxlbmd0aC04KmkpLCAxNiksIGZhbHNlKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bjgvNC1sOyBpKyspIHZbaV0gPSAwO1xufVxuXG4vLyBQYXNlcyBhIGJ1ZmZlciB3aXRoIExpdHRsZSBFbmRpYW4gUmVwcmVzZW50YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUnByTEUoYnVmZiwgbywgbjgpIHtcbiAgICBuOCA9IG44IHx8IGJ1ZmYuYnl0ZUxlbmd0aDtcbiAgICBvID0gbyB8fCAwO1xuICAgIGNvbnN0IHYgPSBuZXcgVWludDMyQXJyYXkoYnVmZi5idWZmZXIsIG8sIG44LzQpO1xuICAgIGNvbnN0IGEgPSBuZXcgQXJyYXkobjgvNCk7XG4gICAgdi5mb3JFYWNoKCAoY2gsaSkgPT4gYVthLmxlbmd0aC1pLTFdID0gY2gudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsXCIwXCIpICk7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcoYS5qb2luKFwiXCIpLCAxNik7XG59XG5cbi8vIFBhc2VzIGEgYnVmZmVyIHdpdGggQmlnIEVuZGlhbiBSZXByZXNlbnRhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21ScHJCRShidWZmLCBvLCBuOCkge1xuICAgIG44ID0gbjggfHwgYnVmZi5ieXRlTGVuZ3RoO1xuICAgIG8gPSBvIHx8IDA7XG4gICAgY29uc3QgdiA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0ICsgbywgbjgpO1xuICAgIGNvbnN0IGEgPSBuZXcgQXJyYXkobjgvNCk7XG4gICAgZm9yIChsZXQgaT0wOyBpPG44LzQ7IGkrKykge1xuICAgICAgICBhW2ldID0gdi5nZXRVaW50MzIoaSo0LCBmYWxzZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb21TdHJpbmcoYS5qb2luKFwiXCIpLCAxNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyhhLCByYWRpeCkge1xuICAgIHJldHVybiBhLnRvU3RyaW5nKHJhZGl4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTEVCdWZmKGEpIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoTWF0aC5mbG9vcigoYml0TGVuZ3RoKGEpIC0gMSkgLyA4KSArMSk7XG4gICAgdG9ScHJMRShidWZmLCAwLCBhLCBidWZmLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiBidWZmO1xufVxuXG5leHBvcnQgY29uc3QgemVybyA9IGUoMCk7XG5leHBvcnQgY29uc3Qgb25lID0gZSgxKTtcblxuXG5cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBraW1zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIG11bFNjYWxhcihGLCBiYXNlLCBlKSB7XG4gICAgbGV0IHJlcztcblxuICAgIGlmIChTY2FsYXIuaXNaZXJvKGUpKSByZXR1cm4gRi56ZXJvO1xuXG4gICAgY29uc3QgbiA9IFNjYWxhci5uYWYoZSk7XG5cbiAgICBpZiAobltuLmxlbmd0aC0xXSA9PSAxKSB7XG4gICAgICAgIHJlcyA9IGJhc2U7XG4gICAgfSBlbHNlIGlmIChuW24ubGVuZ3RoLTFdID09IC0xKSB7XG4gICAgICAgIHJlcyA9IEYubmVnKGJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmxhdWQgTkFGXCIpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9bi5sZW5ndGgtMjsgaT49MDsgaS0tKSB7XG5cbiAgICAgICAgcmVzID0gRi5kb3VibGUocmVzKTtcblxuICAgICAgICBpZiAobltpXSA9PSAxKSB7XG4gICAgICAgICAgICByZXMgPSBGLmFkZChyZXMsIGJhc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKG5baV0gPT0gLTEpIHtcbiAgICAgICAgICAgIHJlcyA9IEYuc3ViKHJlcywgYmFzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbi8qXG5leHBvcnRzLm11bFNjYWxhciA9IChGLCBiYXNlLCBlKSA9PntcbiAgICBsZXQgcmVzID0gRi56ZXJvO1xuICAgIGxldCByZW0gPSBiaWdJbnQoZSk7XG4gICAgbGV0IGV4cCA9IGJhc2U7XG5cbiAgICB3aGlsZSAoISByZW0uZXEoYmlnSW50Lnplcm8pKSB7XG4gICAgICAgIGlmIChyZW0uYW5kKGJpZ0ludC5vbmUpLmVxKGJpZ0ludC5vbmUpKSB7XG4gICAgICAgICAgICByZXMgPSBGLmFkZChyZXMsIGV4cCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwID0gRi5kb3VibGUoZXhwKTtcbiAgICAgICAgcmVtID0gcmVtLnNoaWZ0UmlnaHQoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG4qL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBleHAoRiwgYmFzZSwgZSkge1xuXG4gICAgaWYgKFNjYWxhci5pc1plcm8oZSkpIHJldHVybiBGLm9uZTtcblxuICAgIGNvbnN0IG4gPSBTY2FsYXIuYml0cyhlKTtcblxuICAgIGlmIChuLmxlbmd0aD09MCkgcmV0dXJuIEYub25lO1xuXG4gICAgbGV0IHJlcyA9IGJhc2U7XG5cbiAgICBmb3IgKGxldCBpPW4ubGVuZ3RoLTI7IGk+PTA7IGktLSkge1xuXG4gICAgICAgIHJlcyA9IEYuc3F1YXJlKHJlcyk7XG5cbiAgICAgICAgaWYgKG5baV0pIHtcbiAgICAgICAgICAgIHJlcyA9IEYubXVsKHJlcywgYmFzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbiIsImltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbi8vIENoZWNrIGhlcmU6IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTIvNjg1LnBkZlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFNxcnQgKEYpIHtcbiAgICBpZiAoKEYubSAlIDIpID09IDEpIHtcbiAgICAgICAgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgNCksIDEgKSkge1xuICAgICAgICAgICAgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgOCksIDEgKSkge1xuICAgICAgICAgICAgICAgIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDE2KSwgMSApKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFsZzdfbXVsbGVyKEYpO1xuICAgICAgICAgICAgICAgICAgICBhbGc1X3RvbmVsbGlTaGFua3MoRik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTY2FsYXIuZXEoU2NhbGFyLm1vZChGLnAsIDE2KSwgOSApKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZzRfa29uZyhGKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3aXRob3Qgc3FydFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgOCksIDUgKSkge1xuICAgICAgICAgICAgICAgIGFsZzNfYXRraW4oRik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdpdGhvdCBzcXJ0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShTY2FsYXIubW9kKEYucCwgNCksIDMgKSkge1xuICAgICAgICAgICAgYWxnMl9zaGFua3MoRik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwbTJtb2Q0ID0gU2NhbGFyLm1vZChTY2FsYXIucG93KEYucCwgRi5tLzIpLCA0KTtcbiAgICAgICAgaWYgKHBtMm1vZDQgPT0gMSkge1xuICAgICAgICAgICAgYWxnMTBfYWRqKEYpO1xuICAgICAgICB9IGVsc2UgaWYgKHBtMm1vZDQgPT0gMykge1xuICAgICAgICAgICAgYWxnOV9hZGooRik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGc4X2NvbXBsZXgoRik7XG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBhbGc1X3RvbmVsbGlTaGFua3MoRikge1xuICAgIEYuc3FydF9xID0gU2NhbGFyLnBvdyhGLnAsIEYubSk7XG5cbiAgICBGLnNxcnRfcyA9IDA7XG4gICAgRi5zcXJ0X3QgPSBTY2FsYXIuc3ViKEYuc3FydF9xLCAxKTtcblxuICAgIHdoaWxlICghU2NhbGFyLmlzT2RkKEYuc3FydF90KSkge1xuICAgICAgICBGLnNxcnRfcyA9IEYuc3FydF9zICsgMTtcbiAgICAgICAgRi5zcXJ0X3QgPSBTY2FsYXIuZGl2KEYuc3FydF90LCAyKTtcbiAgICB9XG5cbiAgICBsZXQgYzAgPSBGLm9uZTtcblxuICAgIHdoaWxlIChGLmVxKGMwLCBGLm9uZSkpIHtcbiAgICAgICAgY29uc3QgYyA9IEYucmFuZG9tKCk7XG4gICAgICAgIEYuc3FydF96ID0gRi5wb3coYywgRi5zcXJ0X3QpO1xuICAgICAgICBjMCA9IEYucG93KEYuc3FydF96LCAyICoqIChGLnNxcnRfcy0xKSApO1xuICAgIH1cblxuICAgIEYuc3FydF90bTFkMiA9IFNjYWxhci5kaXYoU2NhbGFyLnN1YihGLnNxcnRfdCwgMSksMik7XG5cbiAgICBGLnNxcnQgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIGNvbnN0IEY9dGhpcztcbiAgICAgICAgaWYgKEYuaXNaZXJvKGEpKSByZXR1cm4gRi56ZXJvO1xuICAgICAgICBsZXQgdyA9IEYucG93KGEsIEYuc3FydF90bTFkMik7XG4gICAgICAgIGNvbnN0IGEwID0gRi5wb3coIEYubXVsKEYuc3F1YXJlKHcpLCBhKSwgMiAqKiAoRi5zcXJ0X3MtMSkgKTtcbiAgICAgICAgaWYgKEYuZXEoYTAsIEYubmVnb25lKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgbGV0IHYgPSBGLnNxcnRfcztcbiAgICAgICAgbGV0IHggPSBGLm11bChhLCB3KTtcbiAgICAgICAgbGV0IGIgPSBGLm11bCh4LCB3KTtcbiAgICAgICAgbGV0IHogPSBGLnNxcnRfejtcbiAgICAgICAgd2hpbGUgKCFGLmVxKGIsIEYub25lKSkge1xuICAgICAgICAgICAgbGV0IGIyayA9IEYuc3F1YXJlKGIpO1xuICAgICAgICAgICAgbGV0IGs9MTtcbiAgICAgICAgICAgIHdoaWxlICghRi5lcShiMmssIEYub25lKSkge1xuICAgICAgICAgICAgICAgIGIyayA9IEYuc3F1YXJlKGIyayk7XG4gICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3ID0gejtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTx2LWstMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdyA9IEYuc3F1YXJlKHcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeiA9IEYuc3F1YXJlKHcpO1xuICAgICAgICAgICAgYiA9IEYubXVsKGIsIHopO1xuICAgICAgICAgICAgeCA9IEYubXVsKHgsIHcpO1xuICAgICAgICAgICAgdiA9IGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEYuZ2VxKHgsIEYuemVybykgPyB4IDogRi5uZWcoeCk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnNF9rb25nKEYpIHtcbiAgICBGLnNxcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3FydCBhbGcgNCBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWxnM19hdGtpbihGKSB7XG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNxcnQgYWxnIDMgbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzJfc2hhbmtzKEYpIHtcblxuICAgIEYuc3FydF9xID0gU2NhbGFyLnBvdyhGLnAsIEYubSk7XG4gICAgRi5zcXJ0X2UxID0gU2NhbGFyLmRpdiggU2NhbGFyLnN1YihGLnNxcnRfcSwgMykgLCA0KTtcblxuICAgIEYuc3FydCA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNaZXJvKGEpKSByZXR1cm4gdGhpcy56ZXJvO1xuXG4gICAgICAgIC8vIFRlc3QgdGhhdCBoYXZlIHNvbHV0aW9uXG4gICAgICAgIGNvbnN0IGExID0gdGhpcy5wb3coYSwgdGhpcy5zcXJ0X2UxKTtcblxuICAgICAgICBjb25zdCBhMCA9IHRoaXMubXVsKHRoaXMuc3F1YXJlKGExKSwgYSk7XG5cbiAgICAgICAgaWYgKCB0aGlzLmVxKGEwLCB0aGlzLm5lZ29uZSkgKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB4ID0gdGhpcy5tdWwoYTEsIGEpO1xuXG4gICAgICAgIHJldHVybiBGLmdlcSh4LCBGLnplcm8pID8geCA6IEYubmVnKHgpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFsZzEwX2FkaihGKSB7XG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNxcnQgYWxnIDEwIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbGc5X2FkaihGKSB7XG4gICAgRi5zcXJ0X3EgPSBTY2FsYXIucG93KEYucCwgRi5tLzIpO1xuICAgIEYuc3FydF9lMzQgPSBTY2FsYXIuZGl2KCBTY2FsYXIuc3ViKEYuc3FydF9xLCAzKSAsIDQpO1xuICAgIEYuc3FydF9lMTIgPSBTY2FsYXIuZGl2KCBTY2FsYXIuc3ViKEYuc3FydF9xLCAxKSAsIDIpO1xuXG4gICAgRi5mcm9iZW5pdXMgPSBmdW5jdGlvbihuLCB4KSB7XG4gICAgICAgIGlmICgobiUyKSA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gRi5jb25qdWdhdGUoeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBGLnNxcnQgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIGNvbnN0IEYgPSB0aGlzO1xuICAgICAgICBjb25zdCBhMSA9IEYucG93KGEsIEYuc3FydF9lMzQpO1xuICAgICAgICBjb25zdCBhbGZhID0gRi5tdWwoRi5zcXVhcmUoYTEpLCBhKTtcbiAgICAgICAgY29uc3QgYTAgPSBGLm11bChGLmZyb2Jlbml1cygxLCBhbGZhKSwgYWxmYSk7XG4gICAgICAgIGlmIChGLmVxKGEwLCBGLm5lZ29uZSkpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCB4MCA9IEYubXVsKGExLCBhKTtcbiAgICAgICAgbGV0IHg7XG4gICAgICAgIGlmIChGLmVxKGFsZmEsIEYubmVnb25lKSkge1xuICAgICAgICAgICAgeCA9IEYubXVsKHgwLCBbRi5GLnplcm8sIEYuRi5vbmVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBGLnBvdyhGLmFkZChGLm9uZSwgYWxmYSksIEYuc3FydF9lMTIpO1xuICAgICAgICAgICAgeCA9IEYubXVsKGIsIHgwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRi5nZXEoeCwgRi56ZXJvKSA/IHggOiBGLm5lZyh4KTtcbiAgICB9O1xufVxuXG5cbmZ1bmN0aW9uIGFsZzhfY29tcGxleChGKSB7XG4gICAgRi5zcXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNxcnQgYWxnIDggbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH07XG59XG4iLCJcblxuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuXG5cbmZ1bmN0aW9uIHF1YXJ0ZXJSb3VuZChzdCwgYSwgYiwgYywgZCkge1xuXG4gICAgc3RbYV0gPSAoc3RbYV0gKyBzdFtiXSkgPj4+IDA7XG4gICAgc3RbZF0gPSAoc3RbZF0gXiBzdFthXSkgPj4+IDA7XG4gICAgc3RbZF0gPSAoKHN0W2RdIDw8IDE2KSB8ICgoc3RbZF0+Pj4xNikgJiAweEZGRkYpKSA+Pj4gMDtcblxuICAgIHN0W2NdID0gKHN0W2NdICsgc3RbZF0pID4+PiAwO1xuICAgIHN0W2JdID0gKHN0W2JdIF4gc3RbY10pID4+PiAwO1xuICAgIHN0W2JdID0gKChzdFtiXSA8PCAxMikgfCAoKHN0W2JdPj4+MjApICYgMHhGRkYpKSA+Pj4gMDtcblxuICAgIHN0W2FdID0gKHN0W2FdICsgc3RbYl0pID4+PiAwO1xuICAgIHN0W2RdID0gKHN0W2RdIF4gc3RbYV0pID4+PiAwO1xuICAgIHN0W2RdID0gKChzdFtkXSA8PCA4KSB8ICgoc3RbZF0+Pj4yNCkgJiAweEZGKSkgPj4+IDA7XG5cbiAgICBzdFtjXSA9IChzdFtjXSArIHN0W2RdKSA+Pj4gMDtcbiAgICBzdFtiXSA9IChzdFtiXSBeIHN0W2NdKSA+Pj4gMDtcbiAgICBzdFtiXSA9ICgoc3RbYl0gPDwgNykgfCAoKHN0W2JdPj4+MjUpICYgMHg3RikpID4+PiAwO1xufVxuXG5mdW5jdGlvbiBkb3VibGVSb3VuZChzdCkge1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMCwgNCwgOCwxMik7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAxLCA1LCA5LDEzKTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDIsIDYsMTAsMTQpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMywgNywxMSwxNSk7XG5cbiAgICBxdWFydGVyUm91bmQoc3QsIDAsIDUsMTAsMTUpO1xuICAgIHF1YXJ0ZXJSb3VuZChzdCwgMSwgNiwxMSwxMik7XG4gICAgcXVhcnRlclJvdW5kKHN0LCAyLCA3LCA4LDEzKTtcbiAgICBxdWFydGVyUm91bmQoc3QsIDMsIDQsIDksMTQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFDaGEge1xuXG4gICAgY29uc3RydWN0b3Ioc2VlZCkge1xuICAgICAgICBzZWVkID0gc2VlZCB8fCBbMCwwLDAsMCwwLDAsMCwwXTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFtcbiAgICAgICAgICAgIDB4NjE3MDc4NjUsXG4gICAgICAgICAgICAweDMzMjA2NDZFLFxuICAgICAgICAgICAgMHg3OTYyMkQzMixcbiAgICAgICAgICAgIDB4NkIyMDY1NzQsXG4gICAgICAgICAgICBzZWVkWzBdLFxuICAgICAgICAgICAgc2VlZFsxXSxcbiAgICAgICAgICAgIHNlZWRbMl0sXG4gICAgICAgICAgICBzZWVkWzNdLFxuICAgICAgICAgICAgc2VlZFs0XSxcbiAgICAgICAgICAgIHNlZWRbNV0sXG4gICAgICAgICAgICBzZWVkWzZdLFxuICAgICAgICAgICAgc2VlZFs3XSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5pZHggPSAxNjtcbiAgICAgICAgdGhpcy5idWZmID0gbmV3IEFycmF5KDE2KTtcbiAgICB9XG5cbiAgICBuZXh0VTMyKCkge1xuICAgICAgICBpZiAodGhpcy5pZHggPT0gMTYpIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZbdGhpcy5pZHgrK107XG4gICAgfVxuXG4gICAgbmV4dFU2NCgpIHtcbiAgICAgICAgcmV0dXJuIFNjYWxhci5hZGQoU2NhbGFyLm11bCh0aGlzLm5leHRVMzIoKSwgMHgxMDAwMDAwMDApLCB0aGlzLm5leHRVMzIoKSk7XG4gICAgfVxuXG4gICAgbmV4dEJvb2woKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5uZXh0VTMyKCkgJiAxKSA9PSAxO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgLy8gQ29weSB0aGUgc3RhdGVcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDE2OyBpKyspIHRoaXMuYnVmZltpXSA9IHRoaXMuc3RhdGVbaV07XG5cbiAgICAgICAgLy8gQXBwbHkgdGhlIHJvdW5kc1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8MTA7IGkrKykgZG91YmxlUm91bmQodGhpcy5idWZmKTtcblxuICAgICAgICAvLyBBZGQgdG8gdGhlIGluaXRpYWxcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDE2OyBpKyspIHRoaXMuYnVmZltpXSA9ICh0aGlzLmJ1ZmZbaV0gKyB0aGlzLnN0YXRlW2ldKSA+Pj4gMDtcblxuICAgICAgICB0aGlzLmlkeCA9IDA7XG5cbiAgICAgICAgdGhpcy5zdGF0ZVsxMl0gPSAodGhpcy5zdGF0ZVsxMl0gKyAxKSA+Pj4gMDtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbMTJdICE9IDApIHJldHVybjtcbiAgICAgICAgdGhpcy5zdGF0ZVsxM10gPSAodGhpcy5zdGF0ZVsxM10gKyAxKSA+Pj4gMDtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbMTNdICE9IDApIHJldHVybjtcbiAgICAgICAgdGhpcy5zdGF0ZVsxNF0gPSAodGhpcy5zdGF0ZVsxNF0gKyAxKSA+Pj4gMDtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbMTRdICE9IDApIHJldHVybjtcbiAgICAgICAgdGhpcy5zdGF0ZVsxNV0gPSAodGhpcy5zdGF0ZVsxNV0gKyAxKSA+Pj4gMDtcbiAgICB9XG59XG4iLCJpbXBvcnQgQ2hhQ2hhIGZyb20gXCIuL2NoYWNoYS5qc1wiO1xuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21CeXRlcyhuKSB7XG4gICAgbGV0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgaWYgKHByb2Nlc3MuYnJvd3NlcikgeyAvLyBCcm93c2VyXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHsgLy8gU3VwcG9ydGVkXG4gICAgICAgICAgICBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpO1xuICAgICAgICB9IGVsc2UgeyAvLyBmYWxsYmFja1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG47IGkrKykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKE1hdGgucmFuZG9tKCkqNDI5NDk2NzI5Nik+Pj4wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgeyAvLyBOb2RlSlNcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tU2VlZCgpIHtcbiAgICBjb25zdCBhcnIgPSBnZXRSYW5kb21CeXRlcygzMik7XG4gICAgY29uc3QgYXJyViA9IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyKTtcbiAgICBjb25zdCBzZWVkID0gW107XG4gICAgZm9yIChsZXQgaT0wOyBpPDg7IGkrKykge1xuICAgICAgICBzZWVkLnB1c2goYXJyVltpXSk7XG4gICAgfVxuICAgIHJldHVybiBzZWVkO1xufVxuXG5sZXQgdGhyZWFkUm5nID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRocmVhZFJuZygpIHtcbiAgICBpZiAodGhyZWFkUm5nKSByZXR1cm4gdGhyZWFkUm5nO1xuICAgIHRocmVhZFJuZyA9IG5ldyBDaGFDaGEoZ2V0UmFuZG9tU2VlZCgpKTtcbiAgICByZXR1cm4gdGhyZWFkUm5nO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLypcbiAgICBUaGlzIGxpYnJhcnkgZG9lcyBvcGVyYXRpb25zIG9uIHBvbHlub21pYWxzIHdpdGggY29lZmZpY2llbnRzIGluIGEgZmllbGQgRi5cblxuICAgIEEgcG9seW5vbWlhbCBQKHgpID0gcDAgKyBwMSAqIHggKyBwMiAqIHheMiArIC4uLiArIHBuICogeF5uICBpcyByZXByZXNlbnRlZFxuICAgIGJ5IHRoZSBhcnJheSBbIHAwLCBwMSwgcDIsIC4uLiAsIHBuIF0uXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRkZUIHtcbiAgICBjb25zdHJ1Y3RvciAoRywgRiwgb3BNdWxHRikge1xuICAgICAgICB0aGlzLkYgPSBGO1xuICAgICAgICB0aGlzLkcgPSBHO1xuICAgICAgICB0aGlzLm9wTXVsR0YgPSBvcE11bEdGO1xuXG4gICAgICAgIGxldCByZW0gPSBGLnNxcnRfdCB8fCBGLnQ7XG4gICAgICAgIGxldCBzID0gRi5zcXJ0X3MgfHwgRi5zO1xuXG4gICAgICAgIGxldCBucXIgPSBGLm9uZTtcbiAgICAgICAgd2hpbGUgKEYuZXEoRi5wb3cobnFyLCBGLmhhbGYpLCBGLm9uZSkpIG5xciA9IEYuYWRkKG5xciwgRi5vbmUpO1xuXG4gICAgICAgIHRoaXMudyA9IG5ldyBBcnJheShzKzEpO1xuICAgICAgICB0aGlzLndpID0gbmV3IEFycmF5KHMrMSk7XG4gICAgICAgIHRoaXMud1tzXSA9IHRoaXMuRi5wb3cobnFyLCByZW0pO1xuICAgICAgICB0aGlzLndpW3NdID0gdGhpcy5GLmludih0aGlzLndbc10pO1xuXG4gICAgICAgIGxldCBuPXMtMTtcbiAgICAgICAgd2hpbGUgKG4+PTApIHtcbiAgICAgICAgICAgIHRoaXMud1tuXSA9IHRoaXMuRi5zcXVhcmUodGhpcy53W24rMV0pO1xuICAgICAgICAgICAgdGhpcy53aVtuXSA9IHRoaXMuRi5zcXVhcmUodGhpcy53aVtuKzFdKTtcbiAgICAgICAgICAgIG4tLTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5yb290cyA9IFtdO1xuICAgICAgICAvKlxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8MTY7IGkrKykge1xuICAgICAgICAgICAgbGV0IHIgPSB0aGlzLkYub25lO1xuICAgICAgICAgICAgbiA9IDEgPDwgaTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzaSA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgICAgICByb290c2lbal0gPSByO1xuICAgICAgICAgICAgICAgIHIgPSB0aGlzLkYubXVsKHIsIHRoaXMud1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm9vdHMucHVzaChyb290c2kpO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgIHRoaXMuX3NldFJvb3RzKE1hdGgubWluKHMsIDE1KSk7XG4gICAgfVxuXG4gICAgX3NldFJvb3RzKG4pIHtcbiAgICAgICAgZm9yIChsZXQgaT1uOyAoaT49MCkgJiYgKCF0aGlzLnJvb3RzW2ldKTsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgciA9IHRoaXMuRi5vbmU7XG4gICAgICAgICAgICBjb25zdCBucm9vdHMgPSAxIDw8IGk7XG4gICAgICAgICAgICBjb25zdCByb290c2kgPSBuZXcgQXJyYXkobnJvb3RzKTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxucm9vdHM7IGorKykge1xuICAgICAgICAgICAgICAgIHJvb3RzaVtqXSA9IHI7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMuRi5tdWwociwgdGhpcy53W2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb290c1tpXSA9IHJvb3RzaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZmdChwKSB7XG4gICAgICAgIGlmIChwLmxlbmd0aCA8PSAxKSByZXR1cm4gcDtcbiAgICAgICAgY29uc3QgYml0cyA9IGxvZzIocC5sZW5ndGgtMSkrMTtcbiAgICAgICAgdGhpcy5fc2V0Um9vdHMoYml0cyk7XG5cbiAgICAgICAgY29uc3QgbSA9IDEgPDwgYml0cztcbiAgICAgICAgaWYgKHAubGVuZ3RoICE9IG0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiAyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IF9fZmZ0KHRoaXMsIHAsIGJpdHMsIDAsIDEpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmZnQocCkge1xuXG4gICAgICAgIGlmIChwLmxlbmd0aCA8PSAxKSByZXR1cm4gcDtcbiAgICAgICAgY29uc3QgYml0cyA9IGxvZzIocC5sZW5ndGgtMSkrMTtcbiAgICAgICAgdGhpcy5fc2V0Um9vdHMoYml0cyk7XG4gICAgICAgIGNvbnN0IG0gPSAxIDw8IGJpdHM7XG4gICAgICAgIGlmIChwLmxlbmd0aCAhPSBtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSAgX19mZnQodGhpcywgcCwgYml0cywgMCwgMSk7XG4gICAgICAgIGNvbnN0IHR3b2ludm0gPSB0aGlzLkYuaW52KCB0aGlzLkYubXVsU2NhbGFyKHRoaXMuRi5vbmUsIG0pICk7XG4gICAgICAgIGNvbnN0IHJlc24gPSBuZXcgQXJyYXkobSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgICAgIHJlc25baV0gPSB0aGlzLm9wTXVsR0YocmVzWyhtLWkpJW1dLCB0d29pbnZtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNuO1xuICAgIH1cblxuXG59XG5cbmZ1bmN0aW9uIGxvZzIoIFYgKVxue1xuICAgIHJldHVybiggKCAoIFYgJiAweEZGRkYwMDAwICkgIT09IDAgPyAoIFYgJj0gMHhGRkZGMDAwMCwgMTYgKSA6IDAgKSB8ICggKCBWICYgMHhGRjAwRkYwMCApICE9PSAwID8gKCBWICY9IDB4RkYwMEZGMDAsIDggKSA6IDAgKSB8ICggKCBWICYgMHhGMEYwRjBGMCApICE9PSAwID8gKCBWICY9IDB4RjBGMEYwRjAsIDQgKSA6IDAgKSB8ICggKCBWICYgMHhDQ0NDQ0NDQyApICE9PSAwID8gKCBWICY9IDB4Q0NDQ0NDQ0MsIDIgKSA6IDAgKSB8ICggKCBWICYgMHhBQUFBQUFBQSApICE9PSAwICkgKTtcbn1cblxuXG5mdW5jdGlvbiBfX2ZmdChQRiwgcGFsbCwgYml0cywgb2Zmc2V0LCBzdGVwKSB7XG5cbiAgICBjb25zdCBuID0gMSA8PCBiaXRzO1xuICAgIGlmIChuPT0xKSB7XG4gICAgICAgIHJldHVybiBbIHBhbGxbb2Zmc2V0XSBdO1xuICAgIH0gZWxzZSBpZiAobj09Mikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgUEYuRy5hZGQocGFsbFtvZmZzZXRdLCBwYWxsW29mZnNldCArIHN0ZXBdKSxcbiAgICAgICAgICAgIFBGLkcuc3ViKHBhbGxbb2Zmc2V0XSwgcGFsbFtvZmZzZXQgKyBzdGVwXSldO1xuICAgIH1cblxuICAgIGNvbnN0IG5kaXYyID0gbiA+PiAxO1xuICAgIGNvbnN0IHAxID0gX19mZnQoUEYsIHBhbGwsIGJpdHMtMSwgb2Zmc2V0LCBzdGVwKjIpO1xuICAgIGNvbnN0IHAyID0gX19mZnQoUEYsIHBhbGwsIGJpdHMtMSwgb2Zmc2V0K3N0ZXAsIHN0ZXAqMik7XG5cbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmRpdjI7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSBQRi5HLmFkZChwMVtpXSwgUEYub3BNdWxHRihwMltpXSwgUEYucm9vdHNbYml0c11baV0pKTtcbiAgICAgICAgb3V0W2krbmRpdjJdID0gUEYuRy5zdWIocDFbaV0sIFBGLm9wTXVsR0YocDJbaV0sIFBGLnJvb3RzW2JpdHNdW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn1cblxuIiwiLyogZ2xvYmFsIEJpZ0ludCAqL1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0ICogYXMgZnV0aWxzIGZyb20gXCIuL2Z1dGlscy5qc1wiO1xuaW1wb3J0IGJ1aWxkU3FydCBmcm9tIFwiLi9mc3FydC5qc1wiO1xuaW1wb3J0IHtnZXRSYW5kb21CeXRlc30gZnJvbSBcIi4vcmFuZG9tLmpzXCI7XG5pbXBvcnQgRkZGVCBmcm9tIFwiLi9mZnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWnFGaWVsZCB7XG4gICAgY29uc3RydWN0b3IocCkge1xuICAgICAgICB0aGlzLnR5cGU9XCJGMVwiO1xuICAgICAgICB0aGlzLm9uZSA9IEJpZ0ludCgxKTtcbiAgICAgICAgdGhpcy56ZXJvID0gQmlnSW50KDApO1xuICAgICAgICB0aGlzLnAgPSBCaWdJbnQocCk7XG4gICAgICAgIHRoaXMubSA9IDE7XG4gICAgICAgIHRoaXMubmVnb25lID0gdGhpcy5wLXRoaXMub25lO1xuICAgICAgICB0aGlzLnR3byA9IEJpZ0ludCgyKTtcbiAgICAgICAgdGhpcy5oYWxmID0gdGhpcy5wID4+IHRoaXMub25lO1xuICAgICAgICB0aGlzLmJpdExlbmd0aCA9IFNjYWxhci5iaXRMZW5ndGgodGhpcy5wKTtcbiAgICAgICAgdGhpcy5tYXNrID0gKHRoaXMub25lIDw8IEJpZ0ludCh0aGlzLmJpdExlbmd0aCkpIC0gdGhpcy5vbmU7XG5cbiAgICAgICAgdGhpcy5uNjQgPSBNYXRoLmZsb29yKCh0aGlzLmJpdExlbmd0aCAtIDEpIC8gNjQpKzE7XG4gICAgICAgIHRoaXMubjMyID0gdGhpcy5uNjQqMjtcbiAgICAgICAgdGhpcy5uOCA9IHRoaXMubjY0Kjg7XG4gICAgICAgIHRoaXMuUiA9IHRoaXMuZSh0aGlzLm9uZSA8PCBCaWdJbnQodGhpcy5uNjQqNjQpKTtcbiAgICAgICAgdGhpcy5SaSA9IHRoaXMuaW52KHRoaXMuUik7XG5cbiAgICAgICAgY29uc3QgZSA9IHRoaXMubmVnb25lID4+IHRoaXMub25lO1xuICAgICAgICB0aGlzLm5xciA9IHRoaXMudHdvO1xuICAgICAgICBsZXQgciA9IHRoaXMucG93KHRoaXMubnFyLCBlKTtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmVxKHIsIHRoaXMubmVnb25lKSkge1xuICAgICAgICAgICAgdGhpcy5ucXIgPSB0aGlzLm5xciArIHRoaXMub25lO1xuICAgICAgICAgICAgciA9IHRoaXMucG93KHRoaXMubnFyLCBlKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5zID0gMDtcbiAgICAgICAgdGhpcy50ID0gdGhpcy5uZWdvbmU7XG5cbiAgICAgICAgd2hpbGUgKCh0aGlzLnQgJiB0aGlzLm9uZSkgPT0gdGhpcy56ZXJvKSB7XG4gICAgICAgICAgICB0aGlzLnMgPSB0aGlzLnMgKyAxO1xuICAgICAgICAgICAgdGhpcy50ID0gdGhpcy50ID4+IHRoaXMub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ucXJfdG9fdCA9IHRoaXMucG93KHRoaXMubnFyLCB0aGlzLnQpO1xuXG4gICAgICAgIGJ1aWxkU3FydCh0aGlzKTtcblxuICAgICAgICB0aGlzLkZGVCA9IG5ldyBGRkZUKHRoaXMsIHRoaXMsIHRoaXMubXVsLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuZmZ0ID0gdGhpcy5GRlQuZmZ0LmJpbmQodGhpcy5GRlQpO1xuICAgICAgICB0aGlzLmlmZnQgPSB0aGlzLkZGVC5pZmZ0LmJpbmQodGhpcy5GRlQpO1xuICAgICAgICB0aGlzLncgPSB0aGlzLkZGVC53O1xuICAgICAgICB0aGlzLndpID0gdGhpcy5GRlQud2k7IFxuICAgIFxuICAgICAgICB0aGlzLnNoaWZ0ID0gdGhpcy5zcXVhcmUodGhpcy5ucXIpO1xuICAgICAgICB0aGlzLmsgPSB0aGlzLmV4cCh0aGlzLm5xciwgMioqdGhpcy5zKTtcbiAgICB9XG5cbiAgICBlKGEsYikge1xuICAgICAgICBsZXQgcmVzO1xuICAgICAgICBpZiAoIWIpIHtcbiAgICAgICAgICAgIHJlcyA9IEJpZ0ludChhKTtcbiAgICAgICAgfSBlbHNlIGlmIChiPT0xNikge1xuICAgICAgICAgICAgcmVzID0gQmlnSW50KFwiMHhcIithKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzIDwgMCkge1xuICAgICAgICAgICAgbGV0IG5yZXMgPSAtcmVzO1xuICAgICAgICAgICAgaWYgKG5yZXMgPj0gdGhpcy5wKSBucmVzID0gbnJlcyAlIHRoaXMucDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnAgLSBucmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChyZXM+PSB0aGlzLnApID8gcmVzJXRoaXMucCA6IHJlcztcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgYWRkKGEsIGIpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYSArIGI7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBzdWIoYSwgYikge1xuICAgICAgICByZXR1cm4gKGEgPj0gYikgPyBhLWIgOiB0aGlzLnAtYithO1xuICAgIH1cblxuICAgIG5lZyhhKSB7XG4gICAgICAgIHJldHVybiBhID8gdGhpcy5wLWEgOiBhO1xuICAgIH1cblxuICAgIG11bChhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSpiKSV0aGlzLnA7XG4gICAgfVxuXG4gICAgbXVsU2NhbGFyKGJhc2UsIHMpIHtcbiAgICAgICAgcmV0dXJuIChiYXNlICogdGhpcy5lKHMpKSAlIHRoaXMucDtcbiAgICB9XG5cbiAgICBzcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gKGEqYSkgJSB0aGlzLnA7XG4gICAgfVxuXG4gICAgZXEoYSwgYikge1xuICAgICAgICByZXR1cm4gYT09YjtcbiAgICB9XG5cbiAgICBuZXEoYSwgYikge1xuICAgICAgICByZXR1cm4gYSE9YjtcbiAgICB9XG5cbiAgICBsdChhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA8IGJiO1xuICAgIH1cblxuICAgIGd0KGEsIGIpIHtcbiAgICAgICAgY29uc3QgYWEgPSAoYSA+IHRoaXMuaGFsZikgPyBhIC0gdGhpcy5wIDogYTtcbiAgICAgICAgY29uc3QgYmIgPSAoYiA+IHRoaXMuaGFsZikgPyBiIC0gdGhpcy5wIDogYjtcbiAgICAgICAgcmV0dXJuIGFhID4gYmI7XG4gICAgfVxuXG4gICAgbGVxKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYWEgPSAoYSA+IHRoaXMuaGFsZikgPyBhIC0gdGhpcy5wIDogYTtcbiAgICAgICAgY29uc3QgYmIgPSAoYiA+IHRoaXMuaGFsZikgPyBiIC0gdGhpcy5wIDogYjtcbiAgICAgICAgcmV0dXJuIGFhIDw9IGJiO1xuICAgIH1cblxuICAgIGdlcShhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFhID0gKGEgPiB0aGlzLmhhbGYpID8gYSAtIHRoaXMucCA6IGE7XG4gICAgICAgIGNvbnN0IGJiID0gKGIgPiB0aGlzLmhhbGYpID8gYiAtIHRoaXMucCA6IGI7XG4gICAgICAgIHJldHVybiBhYSA+PSBiYjtcbiAgICB9XG5cbiAgICBkaXYoYSwgYikge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWwoYSwgdGhpcy5pbnYoYikpO1xuICAgIH1cblxuICAgIGlkaXYoYSwgYikge1xuICAgICAgICBpZiAoIWIpIHRocm93IG5ldyBFcnJvcihcIkRpdmlzaW9uIGJ5IHplcm9cIik7XG4gICAgICAgIHJldHVybiBhIC8gYjtcbiAgICB9XG5cbiAgICBpbnYoYSkge1xuICAgICAgICBpZiAoIWEpIHRocm93IG5ldyBFcnJvcihcIkRpdmlzaW9uIGJ5IHplcm9cIik7XG5cbiAgICAgICAgbGV0IHQgPSB0aGlzLnplcm87XG4gICAgICAgIGxldCByID0gdGhpcy5wO1xuICAgICAgICBsZXQgbmV3dCA9IHRoaXMub25lO1xuICAgICAgICBsZXQgbmV3ciA9IGEgJSB0aGlzLnA7XG4gICAgICAgIHdoaWxlIChuZXdyKSB7XG4gICAgICAgICAgICBsZXQgcSA9IHIvbmV3cjtcbiAgICAgICAgICAgIFt0LCBuZXd0XSA9IFtuZXd0LCB0LXEqbmV3dF07XG4gICAgICAgICAgICBbciwgbmV3cl0gPSBbbmV3ciwgci1xKm5ld3JdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0PHRoaXMuemVybykgdCArPSB0aGlzLnA7XG4gICAgICAgIHJldHVybiB0O1xuICAgIH1cblxuICAgIG1vZChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhICUgYjtcbiAgICB9XG5cbiAgICBwb3coYiwgZSkge1xuICAgICAgICByZXR1cm4gZnV0aWxzLmV4cCh0aGlzLCBiLCBlKTtcbiAgICB9XG5cbiAgICBleHAoYiwgZSkge1xuICAgICAgICByZXR1cm4gZnV0aWxzLmV4cCh0aGlzLCBiLCBlKTtcbiAgICB9XG5cbiAgICBiYW5kKGEsIGIpIHtcbiAgICAgICAgY29uc3QgcmVzID0gICgoYSAmIGIpICYgdGhpcy5tYXNrKTtcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIGJvcihhLCBiKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICAoKGEgfCBiKSAmIHRoaXMubWFzayk7XG4gICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICB9XG5cbiAgICBieG9yKGEsIGIpIHtcbiAgICAgICAgY29uc3QgcmVzID0gICgoYSBeIGIpICYgdGhpcy5tYXNrKTtcbiAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgIH1cblxuICAgIGJub3QoYSkge1xuICAgICAgICBjb25zdCByZXMgPSBhIF4gdGhpcy5tYXNrO1xuICAgICAgICByZXR1cm4gcmVzID49IHRoaXMucCA/IHJlcy10aGlzLnAgOiByZXM7XG4gICAgfVxuXG4gICAgc2hsKGEsIGIpIHtcbiAgICAgICAgaWYgKE51bWJlcihiKSA8IHRoaXMuYml0TGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSAoYSA8PCBiKSAmIHRoaXMubWFzaztcbiAgICAgICAgICAgIHJldHVybiByZXMgPj0gdGhpcy5wID8gcmVzLXRoaXMucCA6IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5iID0gdGhpcy5wIC0gYjtcbiAgICAgICAgICAgIGlmIChOdW1iZXIobmIpIDwgdGhpcy5iaXRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSA+PiBuYjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuemVybztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNocihhLCBiKSB7XG4gICAgICAgIGlmIChOdW1iZXIoYikgPCB0aGlzLmJpdExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5iID0gdGhpcy5wIC0gYjtcbiAgICAgICAgICAgIGlmIChOdW1iZXIobmIpIDwgdGhpcy5iaXRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSAoYSA8PCBuYikgJiB0aGlzLm1hc2s7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcyA+PSB0aGlzLnAgPyByZXMtdGhpcy5wIDogcmVzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxhbmQoYSwgYikge1xuICAgICAgICByZXR1cm4gKGEgJiYgYikgPyB0aGlzLm9uZSA6IHRoaXMuemVybztcbiAgICB9XG5cbiAgICBsb3IoYSwgYikge1xuICAgICAgICByZXR1cm4gKGEgfHwgYikgPyB0aGlzLm9uZSA6IHRoaXMuemVybztcbiAgICB9XG5cbiAgICBsbm90KGEpIHtcbiAgICAgICAgcmV0dXJuIChhKSA/IHRoaXMuemVybyA6IHRoaXMub25lO1xuICAgIH1cblxuICAgIHNxcnRfb2xkKG4pIHtcblxuICAgICAgICBpZiAobiA9PSB0aGlzLnplcm8pIHJldHVybiB0aGlzLnplcm87XG5cbiAgICAgICAgLy8gVGVzdCB0aGF0IGhhdmUgc29sdXRpb25cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5wb3cobiwgdGhpcy5uZWdvbmUgPj4gdGhpcy5vbmUpO1xuICAgICAgICBpZiAoIHJlcyAhPSB0aGlzLm9uZSApIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBtID0gdGhpcy5zO1xuICAgICAgICBsZXQgYyA9IHRoaXMubnFyX3RvX3Q7XG4gICAgICAgIGxldCB0ID0gdGhpcy5wb3cobiwgdGhpcy50KTtcbiAgICAgICAgbGV0IHIgPSB0aGlzLnBvdyhuLCB0aGlzLmFkZCh0aGlzLnQsIHRoaXMub25lKSA+PiB0aGlzLm9uZSApO1xuXG4gICAgICAgIHdoaWxlICggdCAhPSB0aGlzLm9uZSApIHtcbiAgICAgICAgICAgIGxldCBzcSA9IHRoaXMuc3F1YXJlKHQpO1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgd2hpbGUgKHNxICE9IHRoaXMub25lICkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBzcSA9IHRoaXMuc3F1YXJlKHNxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYiA9IGMgXiBtLWktMVxuICAgICAgICAgICAgbGV0IGIgPSBjO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPCBtLWktMTsgaiArKykgYiA9IHRoaXMuc3F1YXJlKGIpO1xuXG4gICAgICAgICAgICBtID0gaTtcbiAgICAgICAgICAgIGMgPSB0aGlzLnNxdWFyZShiKTtcbiAgICAgICAgICAgIHQgPSB0aGlzLm11bCh0LCBjKTtcbiAgICAgICAgICAgIHIgPSB0aGlzLm11bChyLCBiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyID4gKHRoaXMucCA+PiB0aGlzLm9uZSkpIHtcbiAgICAgICAgICAgIHIgPSB0aGlzLm5lZyhyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZShhLCBiKSB7XG4gICAgICAgIGEgPSBCaWdJbnQoYSxiKTtcbiAgICAgICAgaWYgKGEgPCAwKSB7XG4gICAgICAgICAgICBsZXQgbmEgPSAtYTtcbiAgICAgICAgICAgIGlmIChuYSA+PSB0aGlzLnApIG5hID0gbmEgJSB0aGlzLnA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wIC0gbmE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKGE+PSB0aGlzLnApID8gYSV0aGlzLnAgOiBhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmFuZG9tKCkge1xuICAgICAgICBjb25zdCBuQnl0ZXMgPSAodGhpcy5iaXRMZW5ndGgqMiAvIDgpO1xuICAgICAgICBsZXQgcmVzID10aGlzLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuQnl0ZXM7IGkrKykge1xuICAgICAgICAgICAgcmVzID0gKHJlcyA8PCBCaWdJbnQoOCkpICsgQmlnSW50KGdldFJhbmRvbUJ5dGVzKDEpWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzICUgdGhpcy5wO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIGJhc2UpIHtcbiAgICAgICAgYmFzZSA9IGJhc2UgfHwgMTA7XG4gICAgICAgIGxldCB2cztcbiAgICAgICAgaWYgKChhID4gdGhpcy5oYWxmKSYmKGJhc2UgPT0gMTApKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5wLWE7XG4gICAgICAgICAgICB2cyA9IFwiLVwiK3YudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2cyA9IGEudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZzO1xuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIHJldHVybiBhID09IHRoaXMuemVybztcbiAgICB9XG5cbiAgICBmcm9tUm5nKHJuZykge1xuICAgICAgICBsZXQgdjtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdj10aGlzLnplcm87XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uNjQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHYgKz0gcm5nLm5leHRVNjQoKSA8PCBCaWdJbnQoNjQgKmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdiAmPSB0aGlzLm1hc2s7XG4gICAgICAgIH0gd2hpbGUgKHYgPj0gdGhpcy5wKTtcbiAgICAgICAgdiA9ICh2ICogdGhpcy5SaSkgJSB0aGlzLnA7ICAgLy8gQ29udmVydCBmcm9tIG1vbnRnb21lcnlcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuXG4gICAgZmZ0KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuRkZULmZmdChhKTtcbiAgICB9XG5cbiAgICBpZmZ0KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuRkZULmlmZnQoYSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIGJ1ZmZlciB3aXRoIExpdHRsZSBFbmRpYW4gUmVwcmVzZW50YXRpb25cbiAgICB0b1JwckxFKGJ1ZmYsIG8sIGUpIHtcbiAgICAgICAgU2NhbGFyLnRvUnByTEUoYnVmZiwgbywgZSwgdGhpcy5uNjQqOCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gUmVwcmVzZW50YXRpb25cbiAgICB0b1JwckJFKGJ1ZmYsIG8sIGUpIHtcbiAgICAgICAgU2NhbGFyLnRvUnByQkUoYnVmZiwgbywgZSwgdGhpcy5uNjQqOCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gTW9udGdvbWVyeSBSZXByZXNlbnRhdGlvblxuICAgIHRvUnByQkVNKGJ1ZmYsIG8sIGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9ScHJCRShidWZmLCBvLCB0aGlzLm11bCh0aGlzLlIsIGUpKTtcbiAgICB9XG5cbiAgICB0b1JwckxFTShidWZmLCBvLCBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUnByTEUoYnVmZiwgbywgdGhpcy5tdWwodGhpcy5SLCBlKSk7XG4gICAgfVxuXG5cbiAgICAvLyBQYXNlcyBhIGJ1ZmZlciB3aXRoIExpdHRsZSBFbmRpYW4gUmVwcmVzZW50YXRpb25cbiAgICBmcm9tUnByTEUoYnVmZiwgbykge1xuICAgICAgICByZXR1cm4gU2NhbGFyLmZyb21ScHJMRShidWZmLCBvLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICAvLyBQYXNlcyBhIGJ1ZmZlciB3aXRoIEJpZyBFbmRpYW4gUmVwcmVzZW50YXRpb25cbiAgICBmcm9tUnByQkUoYnVmZiwgbykge1xuICAgICAgICByZXR1cm4gU2NhbGFyLmZyb21ScHJCRShidWZmLCBvLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBmcm9tUnByTEVNKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKHRoaXMuZnJvbVJwckxFKGJ1ZmYsIG8pLCB0aGlzLlJpKTtcbiAgICB9XG5cbiAgICBmcm9tUnByQkVNKGJ1ZmYsIG8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKHRoaXMuZnJvbVJwckJFKGJ1ZmYsIG8pLCB0aGlzLlJpKTtcbiAgICB9XG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbn0iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmV4cG9ydHMuYmlnSW50MkJ5dGVzTEUgPSBmdW5jdGlvbiBiaWdJbnQyQnl0ZXNMRShfYSwgbGVuKSB7XG4gICAgY29uc3QgYiA9IEFycmF5KGxlbik7XG4gICAgbGV0IHYgPSBCaWdJbnQoX2EpO1xuICAgIGZvciAobGV0IGk9MDsgaTxsZW47IGkrKykge1xuICAgICAgICBiW2ldID0gTnVtYmVyKHYgJiAweEZGbik7XG4gICAgICAgIHYgPSB2ID4+IDhuO1xuICAgIH1cbiAgICByZXR1cm4gYjtcbn07XG5cbmV4cG9ydHMuYmlnSW50MlUzMkxFID0gZnVuY3Rpb24gYmlnSW50MkJ5dGVzTEUoX2EsIGxlbikge1xuICAgIGNvbnN0IGIgPSBBcnJheShsZW4pO1xuICAgIGxldCB2ID0gQmlnSW50KF9hKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bGVuOyBpKyspIHtcbiAgICAgICAgYltpXSA9IE51bWJlcih2ICYgMHhGRkZGRkZGRm4pO1xuICAgICAgICB2ID0gdiA+PiAzMm47XG4gICAgfVxuICAgIHJldHVybiBiO1xufTtcblxuZXhwb3J0cy5pc09jYW1OdW0gPSBmdW5jdGlvbihhKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGEubGVuZ3RoICE9IDMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIGFbMF0gIT09IFwibnVtYmVyXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIGFbMV0gIT09IFwibnVtYmVyXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYVsyXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkSW50KG1vZHVsZSwgbjY0LCBfcHJlZml4KSB7XG5cbiAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4IHx8IFwiaW50XCI7XG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge307XG5cbiAgICBjb25zdCBuMzIgPSBuNjQqMjtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRDb3B5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9jb3B5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuNjQ7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgICAgIGkqOCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqOFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfemVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG42NDsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICAgICAgaSo4LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE9uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfb25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIiksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8bjY0OyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgICAgICBpKjgsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc1plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q29tcENvZGUobikge1xuICAgICAgICAgICAgaWYgKG49PTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIGMucmV0KGMuaTY0X2VxeihcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIikpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYy5pZihcbiAgICAgICAgICAgICAgICBjLmk2NF9lcXooXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpLCBuKjggKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2V0Q29tcENvZGUobi0xKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoZ2V0Q29tcENvZGUobjY0LTEpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMucmV0KGMuaTMyX2NvbnN0KDApKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZXFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmdW5jdGlvbiBnZXRDb21wQ29kZShuKSB7XG4gICAgICAgICAgICBpZiAobj09MCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAgYy5yZXQoYy5pNjRfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHlcIikpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYy5pZihcbiAgICAgICAgICAgICAgICBjLmk2NF9lcShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHhcIiksIG4qOCApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweVwiKSwgbio4IClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGdldENvbXBDb2RlKG4tMSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGdldENvbXBDb2RlKG42NC0xKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnJldChjLmkzMl9jb25zdCgwKSkpO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEd0ZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZ3RlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q29tcENvZGUobikge1xuICAgICAgICAgICAgaWYgKG49PTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIGMucmV0KGMuaTY0X2dlX3UoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB4XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChjLmdldExvY2FsKFwicHlcIikpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYy5pZihcbiAgICAgICAgICAgICAgICBjLmk2NF9sdF91KFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSwgbio4ICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQoYy5nZXRMb2NhbChcInB5XCIpLCBuKjggKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X2d0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweFwiKSwgbio4ICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKGMuZ2V0TG9jYWwoXCJweVwiKSwgbio4IClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wQ29kZShuLTEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShnZXRDb21wQ29kZShuNjQtMSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5yZXQoYy5pMzJfY29uc3QoMCkpKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYWRkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTY0XCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieFwiKSksXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInlcIikpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbCggXCJjXCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieFwiKSwgNCppKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2xvYWQzMl91KGMuZ2V0TG9jYWwoXCJ5XCIpLCA0KmkpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91IChjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBpKjQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIilcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTMyX3dyYXBfaTY0KGMuaTY0X3Nocl91IChjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKSkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWIoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3ViXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjXCIsIFwiaTY0XCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXG4gICAgICAgICAgICBcImNcIixcbiAgICAgICAgICAgIGMuaTY0X3N1YihcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieFwiKSksXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInlcIikpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MTsgaTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoIFwiY1wiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInhcIiksIDQqaSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmdldExvY2FsKFwieVwiKSwgNCppKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfcyAoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgaSo0LFxuICAgICAgICAgICAgICAgIGMuaTY0X2FuZCggYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRlwiKSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaTMyX3dyYXBfaTY0ICggYy5pNjRfc2hyX3MgKGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZE11bCgpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9tdWxcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxXCIsIFwiaTY0XCIpO1xuXG5cbiAgICAgICAgZm9yIChsZXQgaT0wO2k8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ4XCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBsb2FkWCA9IFtdO1xuICAgICAgICBjb25zdCBsb2FkWSA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBtdWxpaihpLCBqKSB7XG4gICAgICAgICAgICBsZXQgWCxZO1xuICAgICAgICAgICAgaWYgKCFsb2FkWFtpXSkge1xuICAgICAgICAgICAgICAgIFggPSBjLnRlZUxvY2FsKFwieFwiK2ksIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaSo0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBYID0gYy5nZXRMb2NhbChcInhcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9hZFlbal0pIHtcbiAgICAgICAgICAgICAgICBZID0gYy50ZWVMb2NhbChcInlcIitqLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInlcIiksIGoqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRZW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWSA9IGMuZ2V0TG9jYWwoXCJ5XCIraik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjLmk2NF9tdWwoIFgsIFkgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjMCA9IFwiYzBcIjtcbiAgICAgICAgbGV0IGMxID0gXCJjMVwiO1xuXG4gICAgICAgIGZvciAobGV0IGs9MDsgazxuMzIqMi0xOyBrKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMCwgay1uMzIrMSk7IChpPD1rKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgICAgIGsqNCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgW2MwLCBjMV0gPSBbYzEsIGMwXTtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgbjMyKjQqMi00LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmUoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBfb2xkXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFfb2xkXCIsIFwiaTY0XCIpO1xuXG5cbiAgICAgICAgZm9yIChsZXQgaT0wO2k8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ4XCIraSwgXCJpNjRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGxvYWRYID0gW107XG4gICAgICAgIGZ1bmN0aW9uIG11bGlqKGksIGopIHtcbiAgICAgICAgICAgIGxldCBYLFk7XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2ldKSB7XG4gICAgICAgICAgICAgICAgWCA9IGMudGVlTG9jYWwoXCJ4XCIraSwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBpKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFggPSBjLmdldExvY2FsKFwieFwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2FkWFtqXSkge1xuICAgICAgICAgICAgICAgIFkgPSBjLnRlZUxvY2FsKFwieFwiK2osIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaio0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbal0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBZID0gYy5nZXRMb2NhbChcInhcIitqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggWCwgWSApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGMwID0gXCJjMFwiO1xuICAgICAgICBsZXQgYzEgPSBcImMxXCI7XG4gICAgICAgIGxldCBjMF9vbGQgPSBcImMwX29sZFwiO1xuICAgICAgICBsZXQgYzFfb2xkID0gXCJjMV9vbGRcIjtcblxuICAgICAgICBmb3IgKGxldCBrPTA7IGs8bjMyKjItMTsgaysrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCwgYy5pNjRfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsIGMuaTY0X2NvbnN0KDApKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMCwgay1uMzIrMSk7IChpPCgoaysxKT4+MSkgKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgYnkgMlxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoayUyID09IDApIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGs+PjEsIGs+PjEpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvbGQgY2FycnlcblxuICAgICAgICAgICAgaWYgKGs+MCkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxX29sZClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgayo0LFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBjMF9vbGQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBjMV9vbGQsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICBuMzIqNCoyLTQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVPbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYnVpbGRNdWwxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9fbXVsMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImk2NFwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInB4XCIpLCAwLCAwKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwieVwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MTsgaTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoIFwiY1wiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInB4XCIpLCA0KmksIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInlcIilcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UgKGMuZ2V0TG9jYWwoXCJjXCIpLCBjLmk2NF9jb25zdCgzMikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICBpKjQsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYnVpbGRBZGQxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9fYWRkMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInB4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJweFwiLCBjLmdldExvY2FsKFwieFwiKSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInB4XCIpLCAwLCAwKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwieVwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFxuICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIGMuaTY0X2VxeihjLmdldExvY2FsKFwiY1wiKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwicHhcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoNClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInB4XCIpLCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZERpdigpIHtcbiAgICAgICAgX2J1aWxkTXVsMSgpO1xuICAgICAgICBfYnVpbGRBZGQxKCk7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZGl2XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY2NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJlWFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImVZXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic3lcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzeFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImVjXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBDYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFJhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgQyA9IGMuZ2V0TG9jYWwoXCJjY1wiKTtcbiAgICAgICAgY29uc3QgUiA9IGMuZ2V0TG9jYWwoXCJyclwiKTtcbiAgICAgICAgY29uc3QgcHIxID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuICAgICAgICBjb25zdCBSMSA9IGMuaTMyX2NvbnN0KHByMSk7XG4gICAgICAgIGNvbnN0IFIyID0gYy5pMzJfY29uc3QocHIxK244KTtcblxuICAgICAgICAvLyBJYyBjIGlzIDAgdGhlbiBzdG9yZSBpdCBpbiBhbiBhdXhpbGlhcnkgYnVmZmVyXG4gICAgICAgIGYuYWRkQ29kZShjLmlmKFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcImNcIiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiY2NcIiwgYy5nZXRMb2NhbChcImNcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImNjXCIsIENhdXgpXG4gICAgICAgICkpO1xuXG4gICAgICAgIC8vIEljIHIgaXMgMCB0aGVuIHN0b3JlIGl0IGluIGFuIGF1eGlsaWFyeSBidWZmZXJcbiAgICAgICAgZi5hZGRDb2RlKGMuaWYoXG4gICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJyclwiLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicnJcIiwgUmF1eClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgLy8gQ29weVxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInhcIiksIFIpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJ5XCIpLCBZKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBDKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBSMSkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJlWFwiLCBjLmkzMl9jb25zdChuOC0xKSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcImVZXCIsIGMuaTMyX2NvbnN0KG44LTEpKSk7XG5cbiAgICAgICAgLy8gd2hpbGUgKGVZPjMpJiYoWVtlWV09PTApIGV5LS07XG4gICAgICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBjLmkzMl9vcihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChZICwgYy5nZXRMb2NhbChcImVZXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVZXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiZVlcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJlWVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJzeVwiLFxuICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKCBZLCBjLmdldExvY2FsKFwiZVlcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRm9yY2UgYSBkaXZpZGUgYnkgMCBpZiBxdW90aWVuIGlzIDBcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmk2NF9lcShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN5XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5kcm9wKGMuaTY0X2Rpdl91KGMuaTY0X2NvbnN0KDApLCBjLmk2NF9jb25zdCgwKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuXG4gICAgICAgICAgICAvLyB3aGlsZSAoZVg+NykmJihZW2VYXT09MCkgZXgtLTtcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoUiAsIGMuZ2V0TG9jYWwoXCJlWFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVYXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJlWFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImVYXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwic3hcIixcbiAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoIFIsIGMuZ2V0TG9jYWwoXCJlWFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg3KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcInN4XCIsXG4gICAgICAgICAgICAgICAgYy5pNjRfZGl2X3UoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN5XCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJlY1wiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVYXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImVZXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgLy8gV2hpbGUgZ3JlYXRlciB0aGFuIDMyIGJpdHMgb3IgZWMgaXMgbmVnLCBzaHIgYW5kIGluYyBleHBcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2VxeihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzeFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGMDAwMDAwMDBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZWNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcInN4XCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImVjXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTY0X2VxeihjLmdldExvY2FsKFwic3hcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5jYWxsKHByZWZpeCArIFwiX2d0ZVwiLCBSLCBZKSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInN4XCIsIGMuaTY0X2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImVjXCIsIGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fbXVsMVwiLCBZLCBjLmdldExvY2FsKFwic3hcIiksIFIyKSxcbiAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgUixcbiAgICAgICAgICAgICAgICBjLmkzMl9zdWIoUjIsIGMuZ2V0TG9jYWwoXCJlY1wiKSksXG4gICAgICAgICAgICAgICAgUlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfX2FkZDFcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoQywgYy5nZXRMb2NhbChcImVjXCIpKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3hcIilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEludmVyc2VNb2QoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaW52ZXJzZU1vZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicG1cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZXd0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInFxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuZXdyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic3dwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNpZ250XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwic2lnbm5ld3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzaWdueFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgYXV4MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBhdXgzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IGF1eDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgYXV4NSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBhdXg2ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IG11bEJ1ZmYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgqMikpO1xuICAgICAgICBjb25zdCBhdXg3ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInRcIiwgYXV4MSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfemVyb1wiLCBhdXgxKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzaWdudFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInJcIiwgYXV4MiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicG1cIiksIGF1eDIpXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5ld3RcIiwgYXV4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfb25lXCIsIGF1eDMpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNpZ25uZXd0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibmV3clwiLCBhdXg0KSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJweFwiKSwgYXV4NClcbiAgICAgICAgKTtcblxuXG5cblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInFxXCIsIGF1eDUpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJxclwiLCBhdXg2KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwieFwiLCBhdXg3KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIm5ld3JcIikgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9kaXZcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuZ2V0TG9jYWwoXCJuZXdyXCIpLCBjLmdldExvY2FsKFwicXFcIiksIGMuZ2V0TG9jYWwoXCJxclwiKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInFxXCIpLCBjLmdldExvY2FsKFwibmV3dFwiKSwgbXVsQnVmZiksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNpZ250XCIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzaWdubmV3dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZ3RlXCIsIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ0XCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmRyb3AoYy5jYWxsKHByZWZpeCArIFwiX3N1YlwiLCBtdWxCdWZmLCBjLmdldExvY2FsKFwidFwiKSwgYy5nZXRMb2NhbChcInhcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwic2lnbnhcIiwgYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBtdWxCdWZmLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2lnbm5ld3RcIiksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfYWRkXCIsIG11bEJ1ZmYsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjLmlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9ndGVcIiwgYy5nZXRMb2NhbChcInRcIiksIG11bEJ1ZmYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJ0XCIpLCBtdWxCdWZmLCBjLmdldExvY2FsKFwieFwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJzaWdueFwiLCBjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kcm9wKGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgbXVsQnVmZiwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJ4XCIpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInNpZ254XCIsIGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInN3cFwiLCBjLmdldExvY2FsKFwidFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwidFwiLCBjLmdldExvY2FsKFwibmV3dFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibmV3dFwiLCBjLmdldExvY2FsKFwieFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwieFwiLCBjLmdldExvY2FsKFwic3dwXCIpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInNpZ250XCIsIGMuZ2V0TG9jYWwoXCJzaWdubmV3dFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic2lnbm5ld3RcIiwgYy5nZXRMb2NhbChcInNpZ254XCIpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInN3cFwiLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiclwiLCBjLmdldExvY2FsKFwibmV3clwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibmV3clwiLCBjLmdldExvY2FsKFwicXJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInFyXCIsIGMuZ2V0TG9jYWwoXCJzd3BcIikpLFxuXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5pZihcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzaWdudFwiKSxcbiAgICAgICAgICAgIGMuZHJvcChjLmNhbGwocHJlZml4ICsgXCJfc3ViXCIsIGMuZ2V0TG9jYWwoXCJwbVwiKSwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInRcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSlcbiAgICAgICAgKSk7XG4gICAgfVxuXG5cbiAgICBidWlsZENvcHkoKTtcbiAgICBidWlsZFplcm8oKTtcbiAgICBidWlsZElzWmVybygpO1xuICAgIGJ1aWxkT25lKCk7XG4gICAgYnVpbGRFcSgpO1xuICAgIGJ1aWxkR3RlKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZFN1YigpO1xuICAgIGJ1aWxkTXVsKCk7XG4gICAgYnVpbGRTcXVhcmUoKTtcbiAgICBidWlsZFNxdWFyZU9sZCgpO1xuICAgIGJ1aWxkRGl2KCk7XG4gICAgYnVpbGRJbnZlcnNlTW9kKCk7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX29uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2VxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZ3RlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfbXVsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlT2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZGl2XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfaW52ZXJzZU1vZFwiKTtcblxuICAgIHJldHVybiBwcmVmaXg7XG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVGltZXNTY2FsYXIobW9kdWxlLCBmbk5hbWUsIGVsZW1lbnRMZW4sIG9wQUIsIG9wQUEsIG9wQ29weSwgb3BJbml0KSB7XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgZi5hZGRQYXJhbShcImJhc2VcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuZ3RoXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJiXCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhlbGVtZW50TGVuKSk7XG5cbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuaWYoXG4gICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcInNjYWxhckxlbmd0aFwiKSksXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wSW5pdCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgXVxuICAgICAgICApXG4gICAgKTtcbiAgICBmLmFkZENvZGUoYy5jYWxsKG9wQ29weSwgYy5nZXRMb2NhbChcImJhc2VcIiksIGF1eCkpO1xuICAgIGYuYWRkQ29kZShjLmNhbGwob3BJbml0LCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiaVwiLCBjLmdldExvY2FsKFwic2NhbGFyTGVuZ3RoXCIpKSk7XG4gICAgZi5hZGRDb2RlKGMuYmxvY2soYy5sb29wKFxuICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG5cbiAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiYlwiLFxuICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICAuLi5pbm5lckxvb3AoKSxcbiAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXogKCBjLmdldExvY2FsKFwiaVwiKSApKSxcbiAgICAgICAgYy5icigwKVxuICAgICkpKTtcblxuXG4gICAgZnVuY3Rpb24gaW5uZXJMb29wKCkge1xuICAgICAgICBjb25zdCBjb2RlID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgICAgIGNvZGUucHVzaChcbiAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BBQSwgYy5nZXRMb2NhbChcInJcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICAuLi5jLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KCBjLmdldExvY2FsKFwiYlwiKSwgYy5pMzJfY29uc3QoMHg4MCA+PiBpKSksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg4MCA+PiBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BBQiwgYy5nZXRMb2NhbChcInJcIiksYXV4LCBjLmdldExvY2FsKFwiclwiKSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuXG59O1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQmF0Y2hJbnZlcnNlO1xuXG5mdW5jdGlvbiBidWlsZEJhdGNoSW52ZXJzZShtb2R1bGUsIHByZWZpeCkge1xuXG5cbiAgICBjb25zdCBuOCA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0ubjY0Kjg7XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9iYXRjaEludmVyc2VcIik7XG4gICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiaW5TdGVwXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJvdXRTdGVwXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdEF1eFwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRJblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRPdXRcIixcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG5cbiAgICAvLyBBbGxvYyBXb3JraW5nIHNwYWNlIGZvciBhY2N1bXVsYXRlZCB1bWx0aXBsaWNhdGlvbnNcbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9sb2FkKCBjLmkzMl9jb25zdCgwKSApKSxcbiAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgLy8gYXV4WzBdID0gYTtcbiAgICAgICAgYy5jYWxsKHByZWZpeCtcIl9vbmVcIiwgYy5nZXRMb2NhbChcIml0QXV4XCIpKSxcbiAgICAgICAgLy8gZm9yIChpPTA7aTxuO2krKykgYXV4W2ldID0gYXV4W2ktMV0qaW5baV1cbiAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5nZXRMb2NhbChcInBJblwiKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuXG4gICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCtcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcIml0SW5cIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4K1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRJblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJblwiKSwgYy5nZXRMb2NhbChcImluU3RlcFwiKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSxcblxuICAgICAgICAvLyBwb2ludCB0byB0aGUgbGFzdFxuICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0SW5cIiksIGMuZ2V0TG9jYWwoXCJpblN0ZXBcIikpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcIml0QXV4XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAvLyBpdE91dCA9IHBPdXQgKyAobi0xKSpzdGVwT3V0ICAgLy8gUG9pbnQgdG8gdGhlIGxhc3RcbiAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgIFwiaXRPdXRcIixcbiAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib3V0U3RlcFwiKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICksXG5cbiAgICAgICAgLy8gYXV4W24tMV0gPSAxL2F1eFtuLTFdXG4gICAgICAgIGMuY2FsbChwcmVmaXgrXCJfaW52ZXJzZVwiLCBjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSApLFxuXG4gICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXooIGMuZ2V0TG9jYWwoXCJpXCIpKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXgrXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJpdEluXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX3plcm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdE91dFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRBdXhcIiksIGMuaTMyX2NvbnN0KG44KSksIEFVWCksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEluXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4K1wiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgQVVYLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0T3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmdldExvY2FsKFwiaW5TdGVwXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5nZXRMb2NhbChcIm91dFN0ZXBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0QXV4XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSlcblxuICAgICk7XG5cblxuICAgIC8vIFJlY292ZXIgT2xkIG1lbW9yeVxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKVxuICAgICAgICApXG4gICAgKTtcblxufVxuIiwiXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRCYXRjaENvbnZlcnRpb247XG5cbmZ1bmN0aW9uIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgZm5OYW1lLCBpbnRlcm5hbEZuTmFtZSwgc2l6ZUluLCBzaXplT3V0LCByZXZlcnNlKSB7XG4gICAgaWYgKHR5cGVvZiByZXZlcnNlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIFNldCB0aGUgcmV2ZXJzZSBpbiBhIHdheSB0aGF0IGFsbG93cyB0byB1c2UgdGhlIHNhbWUgYnVmZmVyIGFzIGluL291dC5cbiAgICAgICAgaWYgKHNpemVJbiA8IHNpemVPdXQpIHtcbiAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0SW5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0T3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEluXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChzaXplSW4pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3Qoc2l6ZU91dClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludGVybmFsRm5OYW1lLCBjLmdldExvY2FsKFwiaXRJblwiKSwgYy5nZXRMb2NhbChcIml0T3V0XCIpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRJblwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChzaXplT3V0KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludGVybmFsRm5OYW1lLCBjLmdldExvY2FsKFwiaXRJblwiKSwgYy5nZXRMb2NhbChcIml0T3V0XCIpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJblwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChzaXplT3V0KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZEJhdGNoQ29udmVydGlvbjtcblxuZnVuY3Rpb24gYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBmbk5hbWUsIGludGVybmFsRm5OYW1lLCBzaXplSW4sIHNpemVPdXQsIHJldmVyc2UpIHtcbiAgICBpZiAodHlwZW9mIHJldmVyc2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gU2V0IHRoZSByZXZlcnNlIGluIGEgd2F5IHRoYXQgYWxsb3dzIHRvIHVzZSB0aGUgc2FtZSBidWZmZXIgYXMgaW4vb3V0LlxuICAgICAgICBpZiAoc2l6ZUluIDwgc2l6ZU91dCkge1xuICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXZlcnNlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgZi5hZGRQYXJhbShcInBJbjFcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBJbjJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInBPdXRcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIml0SW4xXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpdEluMlwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaXRPdXRcIiwgXCJpMzJcIik7XG5cbiAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4xXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEluMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3Qoc2l6ZUluKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJbjJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHNpemVJbilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChzaXplT3V0KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEgKCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcIm5cIikgKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50ZXJuYWxGbk5hbWUsIGMuZ2V0TG9jYWwoXCJpdEluMVwiKSwgYy5nZXRMb2NhbChcIml0SW4yXCIpLCBjLmdldExvY2FsKFwiaXRPdXRcIikpLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4xXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRJbjFcIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjJcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJpdEluMlwiKSwgYy5pMzJfY29uc3Qoc2l6ZUluKSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcIml0T3V0XCIpLCBjLmkzMl9jb25zdChzaXplT3V0KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJbjFcIiwgYy5nZXRMb2NhbChcInBJbjFcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4yXCIsIGMuZ2V0TG9jYWwoXCJwSW4yXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdE91dFwiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludGVybmFsRm5OYW1lLCBjLmdldExvY2FsKFwiaXRJbjFcIiksIGMuZ2V0TG9jYWwoXCJpdEluMlwiKSwgYy5nZXRMb2NhbChcIml0T3V0XCIpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluMVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0SW4xXCIpLCBjLmkzMl9jb25zdChzaXplSW4pKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW4yXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJbjJcIiksIGMuaTMyX2NvbnN0KHNpemVJbikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3Qoc2l6ZU91dCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gTWFueSBvZiB0aGVzZSB1dGlsaXRpZXMgYXJlIGZyb20gdGhlIGBiaWctaW50ZWdlcmAgbGlicmFyeSxcbi8vIGJ1dCBhZGp1c3RlZCB0byBvbmx5IHdvcmsgd2l0aCBuYXRpdmUgQmlnSW50IHR5cGVcbi8vIFJlZiBodHRwczovL2dpdGh1Yi5jb20vcGV0ZXJvbHNvbi9CaWdJbnRlZ2VyLmpzL2Jsb2IvZTVkMjE1NGQzYzQxNzA2OWM1MWU3MTE2YmFmYzNiOTFkMGI5ZmU0MS9CaWdJbnRlZ2VyLmpzXG4vLyBPcmlnaW5hbGx5IGxpY2Vuc2VkIFRoZSBVbmxpY2Vuc2VcblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPT09IGIgPyAwIDogYSA+IGIgPyAxIDogLTE7XG59XG5cbmZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgcmV0dXJuIG4gKiBuO1xufVxuXG5mdW5jdGlvbiBpc09kZChuKSB7XG4gICAgcmV0dXJuIG4gJSAybiAhPT0gMG47XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihuKSB7XG4gICAgcmV0dXJuIG4gJSAybiA9PT0gMG47XG59XG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmUobikge1xuICAgIHJldHVybiBuIDwgMG47XG59XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmUobikge1xuICAgIHJldHVybiBuID4gMG47XG59XG5cbmZ1bmN0aW9uIGJpdExlbmd0aChuKSB7XG4gICAgaWYgKGlzTmVnYXRpdmUobikpIHtcbiAgICAgICAgcmV0dXJuIG4udG9TdHJpbmcoMikubGVuZ3RoIC0gMTsgLy8gZGlzY2FyZCB0aGUgLSBzaWduXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG4udG9TdHJpbmcoMikubGVuZ3RoO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWJzKG4pIHtcbiAgICByZXR1cm4gbiA8IDBuID8gLW4gOiBuO1xufVxuXG5mdW5jdGlvbiBpc1VuaXQobikge1xuICAgIHJldHVybiBhYnMobikgPT09IDFuO1xufVxuXG5mdW5jdGlvbiBtb2RJbnYoYSwgbikge1xuICAgIHZhciB0ID0gMG4sIG5ld1QgPSAxbiwgciA9IG4sIG5ld1IgPSBhYnMoYSksIHEsIGxhc3RULCBsYXN0UjtcbiAgICB3aGlsZSAobmV3UiAhPT0gMG4pIHtcbiAgICAgICAgcSA9IHIgLyBuZXdSO1xuICAgICAgICBsYXN0VCA9IHQ7XG4gICAgICAgIGxhc3RSID0gcjtcbiAgICAgICAgdCA9IG5ld1Q7XG4gICAgICAgIHIgPSBuZXdSO1xuICAgICAgICBuZXdUID0gbGFzdFQgLSAocSAqIG5ld1QpO1xuICAgICAgICBuZXdSID0gbGFzdFIgLSAocSAqIG5ld1IpO1xuICAgIH1cbiAgICBpZiAoIWlzVW5pdChyKSkgdGhyb3cgbmV3IEVycm9yKGEudG9TdHJpbmcoKSArIFwiIGFuZCBcIiArIG4udG9TdHJpbmcoKSArIFwiIGFyZSBub3QgY28tcHJpbWVcIik7XG4gICAgaWYgKGNvbXBhcmUodCwgMG4pID09PSAtMSkge1xuICAgICAgICB0ID0gdCArIG47XG4gICAgfVxuICAgIGlmIChpc05lZ2F0aXZlKGEpKSB7XG4gICAgICAgIHJldHVybiAtdDtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59XG5cbmZ1bmN0aW9uIG1vZFBvdyhuLCBleHAsIG1vZCkge1xuICAgIGlmIChtb2QgPT09IDBuKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdGFrZSBtb2RQb3cgd2l0aCBtb2R1bHVzIDBcIik7XG4gICAgdmFyIHIgPSAxbixcbiAgICAgICAgYmFzZSA9IG4gJSBtb2Q7XG4gICAgaWYgKGlzTmVnYXRpdmUoZXhwKSkge1xuICAgICAgICBleHAgPSBleHAgKiAtMW47XG4gICAgICAgIGJhc2UgPSBtb2RJbnYoYmFzZSwgbW9kKTtcbiAgICB9XG4gICAgd2hpbGUgKGlzUG9zaXRpdmUoZXhwKSkge1xuICAgICAgICBpZiAoYmFzZSA9PT0gMG4pIHJldHVybiAwbjtcbiAgICAgICAgaWYgKGlzT2RkKGV4cCkpIHIgPSByICogYmFzZSAlIG1vZDtcbiAgICAgICAgZXhwID0gZXhwIC8gMm47XG4gICAgICAgIGJhc2UgPSBzcXVhcmUoYmFzZSkgJSBtb2Q7XG4gICAgfVxuICAgIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQWJzKGEsIGIpIHtcbiAgICBhID0gYSA+PSAwbiA/IGEgOiAtYTtcbiAgICBiID0gYiA+PSAwbiA/IGIgOiAtYjtcbiAgICByZXR1cm4gYSA9PT0gYiA/IDAgOiBhID4gYiA/IDEgOiAtMTtcbn1cblxuZnVuY3Rpb24gaXNEaXZpc2libGVCeShhLCBuKSB7XG4gICAgaWYgKG4gPT09IDBuKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzVW5pdChuKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNvbXBhcmVBYnMobiwgMm4pID09PSAwKSByZXR1cm4gaXNFdmVuKGEpO1xuICAgIHJldHVybiBhICUgbiA9PT0gMG47XG59XG5cbmZ1bmN0aW9uIGlzQmFzaWNQcmltZSh2KSB7XG4gICAgdmFyIG4gPSBhYnModik7XG4gICAgaWYgKGlzVW5pdChuKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChuID09PSAybiB8fCBuID09PSAzbiB8fCBuID09PSA1bikgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzRXZlbihuKSB8fCBpc0RpdmlzaWJsZUJ5KG4sIDNuKSB8fCBpc0RpdmlzaWJsZUJ5KG4sIDVuKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChuIDwgNDluKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyB3ZSBkb24ndCBrbm93IGlmIGl0J3MgcHJpbWU6IGxldCB0aGUgb3RoZXIgZnVuY3Rpb25zIGZpZ3VyZSBpdCBvdXRcbn1cblxuZnVuY3Rpb24gcHJldihuKSB7XG4gICAgcmV0dXJuIG4gLSAxbjtcbn1cblxuZnVuY3Rpb24gbWlsbGVyUmFiaW5UZXN0KG4sIGEpIHtcbiAgICB2YXIgblByZXYgPSBwcmV2KG4pLFxuICAgICAgICBiID0gblByZXYsXG4gICAgICAgIHIgPSAwLFxuICAgICAgICBkLCBpLCB4O1xuICAgIHdoaWxlIChpc0V2ZW4oYikpIGIgPSBiIC8gMm4sIHIrKztcbiAgICBuZXh0OiBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobiA8IGFbaV0pIGNvbnRpbnVlO1xuICAgICAgICB4ID0gbW9kUG93KEJpZ0ludChhW2ldKSwgYiwgbik7XG4gICAgICAgIGlmIChpc1VuaXQoeCkgfHwgeCA9PT0gblByZXYpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGQgPSByIC0gMTsgZCAhPSAwOyBkLS0pIHtcbiAgICAgICAgICAgIHggPSBzcXVhcmUoeCkgJSBuO1xuICAgICAgICAgICAgaWYgKGlzVW5pdCh4KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHggPT09IG5QcmV2KSBjb250aW51ZSBuZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzUHJpbWUocCkge1xuICAgIHZhciBpc1ByaW1lID0gaXNCYXNpY1ByaW1lKHApO1xuICAgIGlmIChpc1ByaW1lICE9PSB1bmRlZmluZWQpIHJldHVybiBpc1ByaW1lO1xuICAgIHZhciBuID0gYWJzKHApO1xuICAgIHZhciBiaXRzID0gYml0TGVuZ3RoKG4pO1xuICAgIGlmIChiaXRzIDw9IDY0KVxuICAgICAgICByZXR1cm4gbWlsbGVyUmFiaW5UZXN0KG4sIFsyLCAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMsIDI5LCAzMSwgMzddKTtcbiAgICB2YXIgbG9nTiA9IE1hdGgubG9nKDIpICogTnVtYmVyKGJpdHMpO1xuICAgIHZhciB0ID0gTWF0aC5jZWlsKGxvZ04pO1xuICAgIGZvciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCB0OyBpKyspIHtcbiAgICAgICAgYS5wdXNoKEJpZ0ludChpICsgMikpO1xuICAgIH1cbiAgICByZXR1cm4gbWlsbGVyUmFiaW5UZXN0KG4sIGEpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5iaXRMZW5ndGggPSBiaXRMZW5ndGg7XG5tb2R1bGUuZXhwb3J0cy5pc09kZCA9IGlzT2RkO1xubW9kdWxlLmV4cG9ydHMuaXNOZWdhdGl2ZSA9IGlzTmVnYXRpdmU7XG5tb2R1bGUuZXhwb3J0cy5hYnMgPSBhYnM7XG5tb2R1bGUuZXhwb3J0cy5pc1VuaXQgPSBpc1VuaXQ7XG5tb2R1bGUuZXhwb3J0cy5jb21wYXJlID0gY29tcGFyZTtcbm1vZHVsZS5leHBvcnRzLm1vZEludiA9IG1vZEludjtcbm1vZHVsZS5leHBvcnRzLm1vZFBvdyA9IG1vZFBvdztcbm1vZHVsZS5leHBvcnRzLmlzUHJpbWUgPSBpc1ByaW1lO1xubW9kdWxlLmV4cG9ydHMuc3F1YXJlID0gc3F1YXJlO1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5jb25zdCBidWlsZEludCA9IHJlcXVpcmUoXCIuL2J1aWxkX2ludC5qc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBidWlsZEV4cCA9IHJlcXVpcmUoXCIuL2J1aWxkX3RpbWVzc2NhbGFyXCIpO1xuY29uc3QgYnVpbGRCYXRjaEludmVyc2UgPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaGludmVyc2VcIik7XG5jb25zdCBidWlsZEJhdGNoQ29udmVydGlvbiA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNoY29udmVydGlvblwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hPcCA9IHJlcXVpcmUoXCIuL2J1aWxkX2JhdGNob3BcIik7XG5jb25zdCB7IGJpdExlbmd0aCwgbW9kSW52LCBtb2RQb3csIGlzUHJpbWUsIGlzT2RkLCBzcXVhcmUgfSA9IHJlcXVpcmUoXCIuL2JpZ2ludC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEYxbShtb2R1bGUsIF9xLCBfcHJlZml4LCBfaW50UHJlZml4KSB7XG4gICAgY29uc3QgcSA9IEJpZ0ludChfcSk7XG4gICAgY29uc3QgbjY0ID0gTWF0aC5mbG9vcigoYml0TGVuZ3RoKHEgLSAxbikgLSAxKS82NCkgKzE7XG4gICAgY29uc3QgbjMyID0gbjY0KjI7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuICAgIGNvbnN0IHByZWZpeCA9IF9wcmVmaXggfHwgXCJmMW1cIjtcbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgaW50UHJlZml4ID0gYnVpbGRJbnQobW9kdWxlLCBuNjQsIF9pbnRQcmVmaXgpO1xuICAgIGNvbnN0IHBxID0gbW9kdWxlLmFsbG9jKG44LCB1dGlscy5iaWdJbnQyQnl0ZXNMRShxLCBuOCkpO1xuXG4gICAgY29uc3QgcFIyID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHNxdWFyZSgxbiA8PCBCaWdJbnQobjY0KjY0KSkgJSBxLCBuOCkpO1xuICAgIGNvbnN0IHBPbmUgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoKDFuIDw8IEJpZ0ludChuNjQqNjQpKSAlIHEsIG44KSk7XG4gICAgY29uc3QgcFplcm8gPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoMG4sIG44KSk7XG4gICAgY29uc3QgX21pbnVzT25lID0gcSAtIDFuO1xuICAgIGNvbnN0IF9lID0gX21pbnVzT25lID4+IDFuOyAvLyBlID0gKHAtMSkvMlxuICAgIGNvbnN0IHBlID0gbW9kdWxlLmFsbG9jKG44LCB1dGlscy5iaWdJbnQyQnl0ZXNMRShfZSwgbjgpKTtcblxuICAgIGNvbnN0IF9lUGx1c09uZSA9IF9lICsgMW47IC8vIGUgPSAocC0xKS8yXG4gICAgY29uc3QgcGVQbHVzT25lID0gbW9kdWxlLmFsbG9jKG44LCB1dGlscy5iaWdJbnQyQnl0ZXNMRShfZVBsdXNPbmUsIG44KSk7XG5cbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBwcTogcHEsXG4gICAgICAgIHBSMjogcFIyLFxuICAgICAgICBuNjQ6IG42NCxcbiAgICAgICAgcTogcSxcbiAgICAgICAgcE9uZTogcE9uZSxcbiAgICAgICAgcFplcm86IHBaZXJvLFxuICAgICAgICBwZVBsdXNPbmU6IHBlUGx1c09uZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBidWlsZE9uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfb25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGludFByZWZpeCArIFwiX2NvcHlcIiwgYy5pMzJfY29uc3QocE9uZSksIGMuZ2V0TG9jYWwoXCJwclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9hZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXgrXCJfYWRkXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCAgYy5nZXRMb2NhbChcInlcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4K1wiX2d0ZVwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpICApLFxuICAgICAgICAgICAgICAgICAgICBjLmRyb3AoYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3N1YlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCtcIl9zdWJcIiwgYy5nZXRMb2NhbChcInhcIiksICBjLmdldExvY2FsKFwieVwiKSwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX2FkZFwiLCBjLmdldExvY2FsKFwiclwiKSwgIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTmVnKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9uZWdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zdWJcIiwgYy5pMzJfY29uc3QocFplcm8pLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInJcIikpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZElzTmVnYXRpdmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzTmVnYXRpdmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInhcIiksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfZ3RlXCIsIEFVWCwgYy5pMzJfY29uc3QocGVQbHVzT25lKSApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTaWduKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zaWduXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZiAoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGludFByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwieFwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfZ3RlXCIsIEFVWCwgYy5pMzJfY29uc3QocGVQbHVzT25lKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoLTEpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRNUmVkdWN0KCkge1xuICAgICAgICBjb25zdCBjYXJyaWVzID0gbW9kdWxlLmFsbG9jKG4zMipuMzIqOCk7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbVJlZHVjdFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibnAzMlwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImNcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtXCIsIFwiaTY0XCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgbnAzMiA9IE51bWJlcigweDEwMDAwMDAwMG4gLSBtb2RJbnYocSwgMHgxMDAwMDAwMDBuKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJucDMyXCIsIGMuaTY0X2NvbnN0KG5wMzIpKSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG4zMjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcImNcIiwgYy5pNjRfY29uc3QoMCkpKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwibVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInRcIiksIGkqNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5wMzJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdChcIjB4RkZGRkZGRkZcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxuMzI7IGorKykge1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZDMyX3UoYy5nZXRMb2NhbChcInRcIiksIChpK2opKjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShjLmdldExvY2FsKFwiY1wiKSwgYy5pNjRfY29uc3QoMzIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkMzJfdShjLmkzMl9jb25zdChwcSksIGoqNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGkraikqNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoY2FycmllcyksXG4gICAgICAgICAgICAgICAgICAgIGkqNCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoYy5nZXRMb2NhbChcImNcIiksIGMuaTY0X2NvbnN0KDMyKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCtcIl9hZGRcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChjYXJyaWVzKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuMzIqNClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX211bFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwXCIsIFwiaTY0XCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzFcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJucDMyXCIsIFwiaTY0XCIpO1xuXG5cbiAgICAgICAgZm9yIChsZXQgaT0wO2k8bjMyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJ4XCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwieVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcIm1cIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJxXCIraSwgXCJpNjRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IG5wMzIgPSBOdW1iZXIoMHgxMDAwMDAwMDBuIC0gbW9kSW52KHEsIDB4MTAwMDAwMDAwbikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwibnAzMlwiLCBjLmk2NF9jb25zdChucDMyKSkpO1xuXG5cbiAgICAgICAgY29uc3QgbG9hZFggPSBbXTtcbiAgICAgICAgY29uc3QgbG9hZFkgPSBbXTtcbiAgICAgICAgY29uc3QgbG9hZFEgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gbXVsaWooaSwgaikge1xuICAgICAgICAgICAgbGV0IFgsWTtcbiAgICAgICAgICAgIGlmICghbG9hZFhbaV0pIHtcbiAgICAgICAgICAgICAgICBYID0gYy50ZWVMb2NhbChcInhcIitpLCBjLmk2NF9sb2FkMzJfdSggYy5nZXRMb2NhbChcInhcIiksIGkqNCkpO1xuICAgICAgICAgICAgICAgIGxvYWRYW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgWCA9IGMuZ2V0TG9jYWwoXCJ4XCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvYWRZW2pdKSB7XG4gICAgICAgICAgICAgICAgWSA9IGMudGVlTG9jYWwoXCJ5XCIraiwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ5XCIpLCBqKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWVtqXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFkgPSBjLmdldExvY2FsKFwieVwiK2opO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBYLCBZICk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtdWxxbShpLCBqKSB7XG4gICAgICAgICAgICBsZXQgUSxNO1xuICAgICAgICAgICAgaWYgKCFsb2FkUVtpXSkge1xuICAgICAgICAgICAgICAgIFEgPSBjLnRlZUxvY2FsKFwicVwiK2ksIGMuaTY0X2xvYWQzMl91KGMuaTMyX2NvbnN0KDApLCBwcStpKjQgKSk7XG4gICAgICAgICAgICAgICAgbG9hZFFbaV0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBRID0gYy5nZXRMb2NhbChcInFcIitpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE0gPSBjLmdldExvY2FsKFwibVwiK2opO1xuXG4gICAgICAgICAgICByZXR1cm4gYy5pNjRfbXVsKCBRLCBNICk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBjMCA9IFwiYzBcIjtcbiAgICAgICAgbGV0IGMxID0gXCJjMVwiO1xuXG4gICAgICAgIGZvciAobGV0IGs9MDsgazxuMzIqMi0xOyBrKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMCwgay1uMzIrMSk7IChpPD1rKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBmb3IgKGxldCBpPU1hdGgubWF4KDEsIGstbjMyKzEpOyAoaTw9aykmJihpPG4zMik7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGo9IGstaTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVscW0oaSxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoazxuMzIpIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1cIitrLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibnAzMlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoXCIweEZGRkZGRkZGXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHFtKDAsaylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmIChrPj1uMzIpIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChrLW4zMikqNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW2MwLCBjMV0gPSBbYzEsIGMwXTtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTY0X3N0b3JlMzIoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJcIiksXG4gICAgICAgICAgICAgICAgbjMyKjQtNCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfd3JhcF9pNjQoYy5nZXRMb2NhbChjMSkpLFxuICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXgrXCJfZ3RlXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSkgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYzBcIiwgXCJpNjRcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJjMVwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMwX29sZFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImMxX29sZFwiLCBcImk2NFwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5wMzJcIiwgXCJpNjRcIik7XG5cblxuICAgICAgICBmb3IgKGxldCBpPTA7aTxuMzI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRMb2NhbChcInhcIitpLCBcImk2NFwiKTtcbiAgICAgICAgICAgIGYuYWRkTG9jYWwoXCJtXCIraSwgXCJpNjRcIik7XG4gICAgICAgICAgICBmLmFkZExvY2FsKFwicVwiK2ksIFwiaTY0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBucDMyID0gTnVtYmVyKDB4MTAwMDAwMDAwbiAtIG1vZEludihxLCAweDEwMDAwMDAwMG4pKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcIm5wMzJcIiwgYy5pNjRfY29uc3QobnAzMikpKTtcblxuXG4gICAgICAgIGNvbnN0IGxvYWRYID0gW107XG4gICAgICAgIGNvbnN0IGxvYWRRID0gW107XG4gICAgICAgIGZ1bmN0aW9uIG11bGlqKGksIGopIHtcbiAgICAgICAgICAgIGxldCBYLFk7XG4gICAgICAgICAgICBpZiAoIWxvYWRYW2ldKSB7XG4gICAgICAgICAgICAgICAgWCA9IGMudGVlTG9jYWwoXCJ4XCIraSwgYy5pNjRfbG9hZDMyX3UoIGMuZ2V0TG9jYWwoXCJ4XCIpLCBpKjQpKTtcbiAgICAgICAgICAgICAgICBsb2FkWFtpXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFggPSBjLmdldExvY2FsKFwieFwiK2kpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2FkWFtqXSkge1xuICAgICAgICAgICAgICAgIFkgPSBjLnRlZUxvY2FsKFwieFwiK2osIGMuaTY0X2xvYWQzMl91KCBjLmdldExvY2FsKFwieFwiKSwgaio0KSk7XG4gICAgICAgICAgICAgICAgbG9hZFhbal0gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBZID0gYy5nZXRMb2NhbChcInhcIitqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggWCwgWSApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbXVscW0oaSwgaikge1xuICAgICAgICAgICAgbGV0IFEsTTtcbiAgICAgICAgICAgIGlmICghbG9hZFFbaV0pIHtcbiAgICAgICAgICAgICAgICBRID0gYy50ZWVMb2NhbChcInFcIitpLCBjLmk2NF9sb2FkMzJfdShjLmkzMl9jb25zdCgwKSwgcHEraSo0ICkpO1xuICAgICAgICAgICAgICAgIGxvYWRRW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUSA9IGMuZ2V0TG9jYWwoXCJxXCIraSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBNID0gYy5nZXRMb2NhbChcIm1cIitqKTtcblxuICAgICAgICAgICAgcmV0dXJuIGMuaTY0X211bCggUSwgTSApO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgYzAgPSBcImMwXCI7XG4gICAgICAgIGxldCBjMSA9IFwiYzFcIjtcbiAgICAgICAgbGV0IGMwX29sZCA9IFwiYzBfb2xkXCI7XG4gICAgICAgIGxldCBjMV9vbGQgPSBcImMxX29sZFwiO1xuXG4gICAgICAgIGZvciAobGV0IGs9MDsgazxuMzIqMi0xOyBrKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLCBjLmk2NF9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSwgYy5pNjRfY29uc3QoMCkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9TWF0aC5tYXgoMCwgay1uMzIrMSk7IChpPCgoaysxKT4+MSkgKSYmKGk8bjMyKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgaj0gay1pO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxpaihpLGopXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgYnkgMlxuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgIGMuaTY0X3NobChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoayUyID09IDApIHtcbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bGlqKGs+PjEsIGs+PjEpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvbGQgY2FycnlcblxuICAgICAgICAgICAgaWYgKGs+MCkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChjMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgweEZGRkZGRkZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwX29sZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxX29sZClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgZm9yIChsZXQgaT1NYXRoLm1heCgxLCBrLW4zMisxKTsgKGk8PWspJiYoaTxuMzIpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqPSBrLWk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHFtKGksailcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoYzEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfc2hyX3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9jb25zdCgzMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGs8bjMyKSB7XG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtXCIrayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmk2NF9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMHhGRkZGRkZGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5wMzJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KFwiMHhGRkZGRkZGRlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDB4RkZGRkZGRkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxxbSgwLGspXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKGMxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pNjRfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGs+PW4zMikge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUzMihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGstbjMyKSo0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgYzBfb2xkLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKGMxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgYzFfb2xkLFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoYzBfb2xkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTY0X2NvbnN0KDMyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmk2NF9zdG9yZTMyKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyXCIpLFxuICAgICAgICAgICAgICAgIG4zMio0LTQsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChjMF9vbGQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl93cmFwX2k2NChjLmdldExvY2FsKGMxX29sZCkpLFxuICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXgrXCJfZ3RlXCIsIGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChwcSkgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZHJvcChjLmNhbGwoaW50UHJlZml4K1wiX3N1YlwiLCBjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QocHEpLCBjLmdldExvY2FsKFwiclwiKSkpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3F1YXJlT2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zcXVhcmVPbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRvTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXgrXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwUjIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvbU1vbnRnb21lcnkoKSB7XG5cbiAgICAgICAgY29uc3QgcEF1eDIgPSBtb2R1bGUuYWxsb2MobjgqMik7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGludFByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KHBBdXgyKSApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChpbnRQcmVmaXggKyBcIl96ZXJvXCIsIGMuaTMyX2NvbnN0KHBBdXgyICsgbjgpICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCtcIl9tUmVkdWN0XCIsIGMuaTMyX2NvbnN0KHBBdXgyKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEludmVyc2UoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2ludmVyc2VcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwiclwiKSkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGludFByZWZpeCArIFwiX2ludmVyc2VNb2RcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInJcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIHZhcmlvdXMgdmFsdXNlIG5lZWRlZCBmb3Igc3FydFxuXG5cbiAgICBsZXQgX25xciA9IDJuO1xuICAgIGlmIChpc1ByaW1lKHEpKSB7XG4gICAgICAgIHdoaWxlIChtb2RQb3coX25xciwgX2UsIHEpICE9PSBfbWludXNPbmUpIF9ucXIgPSBfbnFyICsgMW47XG4gICAgfVxuXG4gICAgbGV0IHMyID0gMDtcbiAgICBsZXQgX3QgPSBfbWludXNPbmU7XG5cbiAgICB3aGlsZSAoKCFpc09kZChfdCkpJiYoX3QgIT09IDBuKSkge1xuICAgICAgICBzMisrO1xuICAgICAgICBfdCA9IF90ID4+IDFuO1xuICAgIH1cbiAgICBjb25zdCBwdCA9IG1vZHVsZS5hbGxvYyhuOCwgdXRpbHMuYmlnSW50MkJ5dGVzTEUoX3QsIG44KSk7XG5cbiAgICBjb25zdCBfbnFyVG9UID0gbW9kUG93KF9ucXIsIF90LCBxKTtcbiAgICBjb25zdCBwTnFyVG9UID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKChfbnFyVG9UIDw8IEJpZ0ludChuNjQqNjQpKSAlIHEsIG44KSk7XG5cbiAgICBjb25zdCBfdFBsdXNPbmVPdmVyMiA9IChfdCArIDFuKSA+PiAxbjtcbiAgICBjb25zdCBwdFBsdXNPbmVPdmVyMiA9IG1vZHVsZS5hbGxvYyhuOCwgdXRpbHMuYmlnSW50MkJ5dGVzTEUoX3RQbHVzT25lT3ZlcjIsIG44KSk7XG5cbiAgICBmdW5jdGlvbiBidWlsZFNxcnQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3NxcnRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IE9ORSA9IGMuaTMyX2NvbnN0KHBPbmUpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTUSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBJZiAobj09MCkgcmV0dXJuIDBcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwiblwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJyXCIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtXCIsIGMuaTMyX2NvbnN0KHMyKSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmkzMl9jb25zdChwTnFyVG9UKSwgQyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdChwdCksIGMuaTMyX2NvbnN0KG44KSwgVCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdChwdFBsdXNPbmVPdmVyMiksIGMuaTMyX2NvbnN0KG44KSwgUiksXG5cbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5jYWxsKHByZWZpeCArIFwiX2VxXCIsIFQsIE9ORSkpLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBULCBTUSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuY2FsbChwcmVmaXggKyBcIl9lcVwiLCBTUSwgT05FKSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgU1EsIFNRKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBDLCBCKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9zdWIoYy5pMzJfc3ViKCBjLmdldExvY2FsKFwibVwiKSwgYy5nZXRMb2NhbChcImlcIikpLCBjLmkzMl9jb25zdCgxKSkgKSxcbiAgICAgICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXooYy5nZXRMb2NhbChcImpcIikpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBCLCBCKSxcbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfc3ViKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwibVwiLCBjLmdldExvY2FsKFwiaVwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3NxdWFyZVwiLCBCLCBDKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIFQsIEMsIFQpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgUiwgQiwgUiksXG5cbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNOZWdhdGl2ZVwiLCBSKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnXCIsIFIsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBSLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1NxdWFyZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNTcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBPTkUgPSBjLmkzMl9jb25zdChwT25lKTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJuXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgxKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGMuZ2V0TG9jYWwoXCJuXCIpLCBjLmkzMl9jb25zdChwZSksIGMuaTMyX2NvbnN0KG44KSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9lcVwiLCBBVVgsIE9ORSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTG9hZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbG9hZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInNjYWxhckxlblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgcEF1eCA9IG1vZHVsZS5hbGxvYyhuOCk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KHBBdXgpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmdldExvY2FsKFwic2NhbGFyXCIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZ3RfdShjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcInNjYWxhckxlblwiKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgUiksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgUiwgYy5pMzJfY29uc3QocFIyKSwgUilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInBcIiksIFIsIEFVWCksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBjLmdldExvY2FsKFwiclwiKSwgQVVYLCBjLmdldExvY2FsKFwiclwiKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJsXCIsIGMuaTMyX3JlbV91KCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgIGMuaWYoYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJsXCIpKSwgYy5yZXQoW10pKSxcbiAgICAgICAgICAgIGMuY2FsbChpbnRQcmVmaXggKyBcIl96ZXJvXCIsIEFVWCksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmdldExvY2FsKFwibFwiKSkpLFxuXG4gICAgICAgICAgICAgICAgYy5pMzJfc3RvcmU4KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgcEF1eCxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgUiksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBSLCBjLmkzMl9jb25zdChwUjIpLCBSKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgQVVYLCBSLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBjLmdldExvY2FsKFwiclwiKSwgQVVYLCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUaW1lc1NjYWxhcigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdGltZXNTY2FsYXJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9sb2FkXCIsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYy5nZXRMb2NhbChcInhcIiksIEFVWCwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNPbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzT25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMucmV0KGMuY2FsbChpbnRQcmVmaXggKyBcIl9lcVwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocE9uZSkpKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGludFByZWZpeCArIFwiX2NvcHlcIiwgcHJlZml4K1wiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGludFByZWZpeCArIFwiX3plcm9cIiwgcHJlZml4K1wiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGludFByZWZpeCArIFwiX2lzWmVyb1wiLCBwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihpbnRQcmVmaXggKyBcIl9lcVwiLCBwcmVmaXgrXCJfZXFcIik7XG5cbiAgICBidWlsZElzT25lKCk7XG4gICAgYnVpbGRBZGQoKTtcbiAgICBidWlsZFN1YigpO1xuICAgIGJ1aWxkTmVnKCk7XG4gICAgYnVpbGRNUmVkdWN0KCk7XG4gICAgYnVpbGRNdWwoKTtcbiAgICBidWlsZFNxdWFyZSgpO1xuICAgIGJ1aWxkU3F1YXJlT2xkKCk7XG4gICAgYnVpbGRUb01vbnRnb21lcnkoKTtcbiAgICBidWlsZEZyb21Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRJc05lZ2F0aXZlKCk7XG4gICAgYnVpbGRTaWduKCk7XG4gICAgYnVpbGRJbnZlcnNlKCk7XG4gICAgYnVpbGRPbmUoKTtcbiAgICBidWlsZExvYWQoKTtcbiAgICBidWlsZFRpbWVzU2NhbGFyKCk7XG4gICAgYnVpbGRCYXRjaEludmVyc2UobW9kdWxlLCBwcmVmaXgpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hUb01vbnRnb21lcnlcIiwgcHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIsIG44LCBuOCk7XG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaEZyb21Nb250Z29tZXJ5XCIsIHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsIG44LCBuOCk7XG4gICAgYnVpbGRCYXRjaENvbnZlcnRpb24obW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaE5lZ1wiLCBwcmVmaXggKyBcIl9uZWdcIiwgbjgsIG44KTtcbiAgICBidWlsZEJhdGNoT3AobW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaEFkZFwiLCBwcmVmaXggKyBcIl9hZGRcIiwgbjgsIG44KTtcbiAgICBidWlsZEJhdGNoT3AobW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaFN1YlwiLCBwcmVmaXggKyBcIl9zdWJcIiwgbjgsIG44KTtcbiAgICBidWlsZEJhdGNoT3AobW9kdWxlLCBwcmVmaXggKyBcIl9iYXRjaE11bFwiLCBwcmVmaXggKyBcIl9tdWxcIiwgbjgsIG44KTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc05lZ2F0aXZlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc09uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc2lnblwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbVJlZHVjdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxdWFyZU9sZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW52ZXJzZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfb25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9sb2FkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90aW1lc1NjYWxhclwiKTtcbiAgICBidWlsZEV4cChcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl9leHBcIixcbiAgICAgICAgbjgsXG4gICAgICAgIHByZWZpeCArIFwiX211bFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zcXVhcmVcIixcbiAgICAgICAgaW50UHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9vbmVcIixcbiAgICApO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9leHBcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoSW52ZXJzZVwiKTtcbiAgICBpZiAoaXNQcmltZShxKSkge1xuICAgICAgICBidWlsZFNxcnQoKTtcbiAgICAgICAgYnVpbGRJc1NxdWFyZSgpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3FydFwiKTtcbiAgICAgICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzU3F1YXJlXCIpO1xuICAgIH1cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hUb01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoRnJvbU1vbnRnb21lcnlcIik7XG4gICAgLy8gY29uc29sZS5sb2cobW9kdWxlLmZ1bmN0aW9uSWR4QnlOYW1lKTtcblxuICAgIHJldHVybiBwcmVmaXg7XG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5jb25zdCBidWlsZEYxbSA9cmVxdWlyZShcIi4vYnVpbGRfZjFtLmpzXCIpO1xuY29uc3QgeyBiaXRMZW5ndGggfSA9IHJlcXVpcmUoXCIuL2JpZ2ludC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEYxKG1vZHVsZSwgX3EsIF9wcmVmaXgsIF9mMW1QcmVmaXgsIF9pbnRQcmVmaXgpIHtcblxuICAgIGNvbnN0IHEgPSBCaWdJbnQoX3EpO1xuICAgIGNvbnN0IG42NCA9IE1hdGguZmxvb3IoKGJpdExlbmd0aChxIC0gMW4pIC0gMSkvNjQpICsxO1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG5cbiAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4IHx8IFwiZjFcIjtcbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIG42NDogbjY0XG4gICAgfTtcblxuICAgIGNvbnN0IGludFByZWZpeCA9IF9pbnRQcmVmaXggfHwgXCJpbnRcIjtcbiAgICBjb25zdCBmMW1QcmVmaXggPSBidWlsZEYxbShtb2R1bGUsIHEsIF9mMW1QcmVmaXgsIGludFByZWZpeCk7XG5cblxuICAgIGNvbnN0IHBSMiA9ICAgICBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLnBSMjtcbiAgICBjb25zdCBwcSA9ICAgICBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLnBxO1xuICAgIGNvbnN0IHBlUGx1c09uZSA9IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ucGVQbHVzT25lO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwoKSB7XG4gICAgICAgIGNvbnN0IHBBdXgxID0gbW9kdWxlLmFsbG9jKG44KTtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfbXVsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QocEF1eDEpKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBBdXgxKSwgYy5pMzJfY29uc3QocFIyKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFNxdWFyZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5nZXRMb2NhbChcInhcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEludmVyc2UoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2ludmVyc2VcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGludFByZWZpeCArIFwiX2ludmVyc2VNb2RcIiwgYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KHBxKSwgYy5nZXRMb2NhbChcInJcIikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzTmVnYXRpdmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzTmVnYXRpdmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoaW50UHJlZml4ICsgXCJfZ3RlXCIsIGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChwZVBsdXNPbmUpIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGJ1aWxkTXVsKCk7XG4gICAgYnVpbGRTcXVhcmUoKTtcbiAgICBidWlsZEludmVyc2UoKTtcbiAgICBidWlsZElzTmVnYXRpdmUoKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfYWRkXCIsIHByZWZpeCArIFwiX2FkZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfc3ViXCIsIHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfbmVnXCIsIHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2ludmVyc2VcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzTmVnYXRpdmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgcHJlZml4K1wiX2NvcHlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX3plcm9cIiwgcHJlZml4K1wiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGYxbVByZWZpeCArIFwiX29uZVwiLCBwcmVmaXgrXCJfb25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmMW1QcmVmaXggKyBcIl9pc1plcm9cIiwgcHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjFtUHJlZml4ICsgXCJfZXFcIiwgcHJlZml4K1wiX2VxXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5jb25zdCBidWlsZEV4cCA9IHJlcXVpcmUoXCIuL2J1aWxkX3RpbWVzc2NhbGFyXCIpO1xuY29uc3QgYnVpbGRCYXRjaEludmVyc2UgPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaGludmVyc2VcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRjJtKG1vZHVsZSwgbXVsTm9uUmVzaWR1ZUZuLCBwcmVmaXgsIGYxbVByZWZpeCkge1xuXG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcblxuICAgIGNvbnN0IGYxbjggPSBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLm42NCo4O1xuICAgIGNvbnN0IHEgPSBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLnE7XG5cbiAgICBtb2R1bGUubW9kdWxlc1twcmVmaXhdID0ge1xuICAgICAgICBuNjQ6IG1vZHVsZS5tb2R1bGVzW2YxbVByZWZpeF0ubjY0KjJcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2FkZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgeDAsIHkwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MSwgeTEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRpbWVzU2NhbGFyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl90aW1lc1NjYWxhclwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RpbWVzU2NhbGFyXCIsIHgwLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RpbWVzU2NhbGFyXCIsIHgxLCBjLmdldExvY2FsKFwic2NhbGFyXCIpLCBjLmdldExvY2FsKFwic2NhbGFyTGVuXCIpLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTdWIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3N1YlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDAsIHkwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MSwgeTEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE5lZygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbmVnXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29uanVnYXRlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9jb25qdWdhdGVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MSwgcjEpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc05lZ2F0aXZlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc05lZ2F0aXZlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgxKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwoZjFtUHJlZml4K1wiX2lzTmVnYXRpdmVcIiwgeDApKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuY2FsbChmMW1QcmVmaXgrXCJfaXNOZWdhdGl2ZVwiLCB4MSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWwoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX211bFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ5XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgRCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB5MCwgQSksICAgICAgICAgICAgIC8vIEEgPSB4MCp5MFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCB4MSwgeTEsIEIpLCAgICAgICAgICAgICAvLyBCID0geDEqeTFcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCB4MCwgeDEsIEMpLCAgICAgICAgICAgICAvLyBDID0geDAgKyB4MVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCB5MCwgeTEsIEQpLCAgICAgICAgICAgICAvLyBEID0geTAgKyB5MVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBDLCBELCBDKSwgICAgICAgICAgICAgICAvLyBDID0gKHgwICsgeDEpKih5MCArIHkxKSA9IHgwKnkwK3gwKnkxK3gxKnkwK3gxKnkxXG5cbiAgICAgICAgICAgIC8vICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIEIsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlKSwgcjApLCAgLy8gcjAgPSBuciooeDEqeTEpXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCBCLCByMCksICAvLyByMCA9IG5yKih4MSp5MSlcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQSwgcjAsIHIwKSwgICAgICAgICAgICAgLy8gcjAgPSB4MCp5MCArIG5yKih4MSp5MSlcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQSwgQiwgcjEpLCAgICAgICAgICAgICAvLyByMSA9IHgwKnkwK3gxKnkxXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3ViXCIsIEMsIHIxLCByMSkgICAgICAgICAgICAgIC8vIHIxID0geDAqeTAreDAqeTEreDEqeTAreDEqeTEgLSB4MCp5MCt4MSp5MSA9IHgwKnkxK3gxKnkwXG4gICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bDEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX211bDFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5ID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB5LCByMCksICAgICAgICAgICAgIC8vIEEgPSB4MCp5XG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHgxLCB5LCByMSksICAgICAgICAgICAgIC8vIEIgPSB4MSp5XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBjb25zdCBBQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFQQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFQTkIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBBQlBOQUIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gQUIgPSB4MCp5MVxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCB4MCwgeDEsIEFCKSxcblxuICAgICAgICAgICAgLy8gQVBCID0geDAreTFcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgxLCBBUEIpLFxuXG4gICAgICAgICAgICAvLyBBUEJOMCA9IHgwICsgbnIqeDFcbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHgxLCBBUE5CKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIEFQTkIsIEFQTkIpLFxuXG4gICAgICAgICAgICAvLyBBQlBOQUIgPSBhYiArIG5yKmFiXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCBBQiwgQUJQTkFCKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQUJQTkFCLCBBQiwgQUJQTkFCKSxcblxuICAgICAgICAgICAgLy8gcjAgPSBBUEIgKiBBUE5CIC0gQUJQTkFCXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIEFQQiwgQVBOQiwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCByMCwgQUJQTkFCLCByMCksXG5cbiAgICAgICAgICAgIC8vIHIxID0gQUIgKyBBQlxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBQiwgQUIsIHIxKSxcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb01vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RvTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RvTW9udGdvbWVyeVwiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90b01vbnRnb21lcnlcIiwgeDEsIHIxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvbU1vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIiwgeDEsIHIxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29weSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfY29weVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MSwgcjEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRaZXJvKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl96ZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE9uZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfb25lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9vbmVcIiwgeDApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2VxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZXFcIiwgeDAsIHkwKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2VxXCIsIHgxLCB5MSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNaZXJvXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgxKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaW52ZXJzZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zcXVhcmVcIiwgeDAsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3F1YXJlXCIsIHgxLCB0MSksXG4gICAgICAgICAgICAvLyBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB0MSwgYy5pMzJfY29uc3QocE5vblJlc2lkdWUpLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCB0MSwgdDIpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB0MCwgdDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaW52ZXJzZVwiLCB0MiwgdDMpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MCwgdDMsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgxLCB0MywgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgcjEsIHIxKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU2lnbigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc2lnblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIgLCBjLmNhbGwoIGYxbVByZWZpeCArIFwiX3NpZ25cIiwgeDEpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5nZXRMb2NhbChcInNcIikpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5jYWxsKCBmMW1QcmVmaXggKyBcIl9zaWduXCIsIHgwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc09uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9pc09uZVwiLCB4MCksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2lzWmVyb1wiLCB4MSksXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLy8gQ2hlY2sgaGVyZTogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMi82ODUucGRmXG4gICAgLy8gQWxnIDlhZGpcbiAgICBmdW5jdGlvbiBidWlsZFNxcnQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfc3FydFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIC8vIEJpZ0ludCBjYW4ndCB0YWtlIGB1bmRlZmluZWRgIHNvIHdlIHVzZSBgfHwgMGBcbiAgICAgICAgY29uc3QgZTM0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKChCaWdJbnQocSB8fCAwKSAtIDNuKSAvIDRuLCBmMW44ICkpKTtcbiAgICAgICAgLy8gQmlnSW50IGNhbid0IHRha2UgYHVuZGVmaW5lZGAgc28gd2UgdXNlIGB8fCAwYFxuICAgICAgICBjb25zdCBlMTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoKEJpZ0ludChxIHx8IDApIC0gMW4pIC8gMm4sIGYxbjggKSkpO1xuXG4gICAgICAgIGNvbnN0IGEgPSBjLmdldExvY2FsKFwiYVwiKTtcbiAgICAgICAgY29uc3QgYTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IGFscGhhID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBhMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgcG4xID0gbW9kdWxlLmFsbG9jKGYxbjgqMik7XG4gICAgICAgIGNvbnN0IG4xID0gYy5pMzJfY29uc3QocG4xKTtcbiAgICAgICAgY29uc3QgbjFhID0gYy5pMzJfY29uc3QocG4xKTtcbiAgICAgICAgY29uc3QgbjFiID0gYy5pMzJfY29uc3QocG4xK2YxbjgpO1xuICAgICAgICBjb25zdCB4MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgYiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9vbmVcIiwgbjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ1wiLCBuMSwgbjEpLFxuXG4gICAgICAgICAgICAvLyBjb25zdCBhMSA9IEYucG93KGEsIEYuc3FydF9lMzQpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2V4cFwiLCBhLCBlMzQsIGMuaTMyX2NvbnN0KGYxbjgpLCBhMSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGExID0gRi5wb3coYSwgRi5zcXJ0X2UzNCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfc3F1YXJlXCIsIGExLCBhbHBoYSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGEsIGFscGhhLCBhbHBoYSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGEwID0gRi5tdWwoRi5mcm9iZW5pdXMoMSwgYWxmYSksIGFsZmEpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBhbHBoYSwgYTApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBhMCwgYWxwaGEsIGEwKSxcblxuICAgICAgICAgICAgLy8gaWYgKEYuZXEoYTAsIEYubmVnb25lKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjLmlmKGMuY2FsbChwcmVmaXggKyBcIl9lcVwiLGEwLG4xKSwgYy51bnJlYWNoYWJsZSgpICksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IHgwID0gRi5tdWwoYTEsIGEpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBhMSwgYSwgeDApLFxuXG4gICAgICAgICAgICAvLyBpZiAoRi5lcShhbGZhLCBGLm5lZ29uZSkpIHtcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2VxXCIsIGFscGhhLCBuMSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAvLyB4ID0gRi5tdWwoeDAsIFtGLkYuemVybywgRi5GLm9uZV0pO1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZjFtUHJlZml4ICsgXCJfemVyb1wiLCBuMWEpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZjFtUHJlZml4ICsgXCJfb25lXCIsIG4xYiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgbjEsIHgwLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBiID0gRi5wb3coRi5hZGQoRi5vbmUsIGFsZmEpLCBGLnNxcnRfZTEyKTtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBiKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBiLCBhbHBoYSwgYiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9leHBcIiwgYiwgZTEyLCBjLmkzMl9jb25zdChmMW44KSwgYiksXG5cbiAgICAgICAgICAgICAgICAgICAgLy8geCA9IEYubXVsKGIsIHgwKTtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX211bFwiLCBiLCB4MCwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSXNTcXVhcmUoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfaXNTcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICAvLyBCaWdJbnQgY2FuJ3QgdGFrZSBgdW5kZWZpbmVkYCBzbyB3ZSB1c2UgYHx8IDBgXG4gICAgICAgIGNvbnN0IGUzNCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSgoQmlnSW50KHEgfHwgMCkgLSAzbikgLyA0biwgZjFuOCApKSk7XG5cbiAgICAgICAgY29uc3QgYSA9IGMuZ2V0TG9jYWwoXCJhXCIpO1xuICAgICAgICBjb25zdCBhMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KjIpKTtcbiAgICAgICAgY29uc3QgYWxwaGEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCoyKSk7XG4gICAgICAgIGNvbnN0IGEwID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgqMikpO1xuICAgICAgICBjb25zdCBwbjEgPSBtb2R1bGUuYWxsb2MoZjFuOCoyKTtcbiAgICAgICAgY29uc3QgbjEgPSBjLmkzMl9jb25zdChwbjEpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX29uZVwiLCBuMSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnXCIsIG4xLCBuMSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGExID0gRi5wb3coYSwgRi5zcXJ0X2UzNCk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZXhwXCIsIGEsIGUzNCwgYy5pMzJfY29uc3QoZjFuOCksIGExKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTEgPSBGLnBvdyhhLCBGLnNxcnRfZTM0KTtcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9zcXVhcmVcIiwgYTEsIGFscGhhKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9tdWxcIiwgYSwgYWxwaGEsIGFscGhhKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYTAgPSBGLm11bChGLmZyb2Jlbml1cygxLCBhbGZhKSwgYWxmYSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfY29uanVnYXRlXCIsIGFscGhhLCBhMCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsXCIsIGEwLCBhbHBoYSwgYTApLFxuXG4gICAgICAgICAgICAvLyBpZiAoRi5lcShhMCwgRi5uZWdvbmUpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9lcVwiLFxuICAgICAgICAgICAgICAgICAgICBhMCxcbiAgICAgICAgICAgICAgICAgICAgbjFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDApKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICBidWlsZElzWmVybygpO1xuICAgIGJ1aWxkSXNPbmUoKTtcbiAgICBidWlsZFplcm8oKTtcbiAgICBidWlsZE9uZSgpO1xuICAgIGJ1aWxkQ29weSgpO1xuICAgIGJ1aWxkTXVsKCk7XG4gICAgYnVpbGRNdWwxKCk7XG4gICAgYnVpbGRTcXVhcmUoKTtcbiAgICBidWlsZEFkZCgpO1xuICAgIGJ1aWxkU3ViKCk7XG4gICAgYnVpbGROZWcoKTtcbiAgICBidWlsZENvbmp1Z2F0ZSgpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkRXEoKTtcbiAgICBidWlsZEludmVyc2UoKTtcbiAgICBidWlsZFRpbWVzU2NhbGFyKCk7XG4gICAgYnVpbGRTaWduKCk7XG4gICAgYnVpbGRJc05lZ2F0aXZlKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pc09uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfb25lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX211bDFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc2lnblwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfY29uanVnYXRlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9lcVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW52ZXJzZVwiKTtcbiAgICBidWlsZEJhdGNoSW52ZXJzZShtb2R1bGUsIHByZWZpeCk7XG4gICAgYnVpbGRFeHAoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfZXhwXCIsXG4gICAgICAgIGYxbjgqMixcbiAgICAgICAgcHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgIHByZWZpeCArIFwiX3NxdWFyZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgIHByZWZpeCArIFwiX29uZVwiLFxuICAgICk7XG4gICAgYnVpbGRTcXJ0KCk7XG4gICAgYnVpbGRJc1NxdWFyZSgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2V4cFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoSW52ZXJzZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3FydFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNTcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzTmVnYXRpdmVcIik7XG5cblxuICAgIHJldHVybiBwcmVmaXg7XG59O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdhc21zbmFyayAoV2ViIEFzc2VtYmx5IHprU25hcmsgUHJvdmVyKS5cblxuICAgIHdhc21zbmFyayBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHdhc21zbmFyayBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCB3YXNtc25hcmsuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuY29uc3QgYnVpbGRFeHAgPSByZXF1aXJlKFwiLi9idWlsZF90aW1lc3NjYWxhclwiKTtcbmNvbnN0IGJ1aWxkQmF0Y2hJbnZlcnNlID0gcmVxdWlyZShcIi4vYnVpbGRfYmF0Y2hpbnZlcnNlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRjNtKG1vZHVsZSwgbXVsTm9uUmVzaWR1ZUZuLCBwcmVmaXgsIGYxbVByZWZpeCkge1xuXG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcblxuICAgIGNvbnN0IGYxbjggPSBtb2R1bGUubW9kdWxlc1tmMW1QcmVmaXhdLm42NCo4O1xuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIG42NDogbW9kdWxlLm1vZHVsZXNbZjFtUHJlZml4XS5uNjQqM1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBidWlsZEFkZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYWRkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCB5MCA9IGMuZ2V0TG9jYWwoXCJ5XCIpO1xuICAgICAgICBjb25zdCB5MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieVwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MCwgeTAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIHgxLCB5MSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgeDIsIHkyLCByMiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUaW1lc1NjYWxhcigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfdGltZXNTY2FsYXJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwic2NhbGFyTGVuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdGltZXNTY2FsYXJcIiwgeDAsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdGltZXNTY2FsYXJcIiwgeDEsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdGltZXNTY2FsYXJcIiwgeDIsIGMuZ2V0TG9jYWwoXCJzY2FsYXJcIiksIGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5cIiksIHIyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zdWJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHkwID0gYy5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ5XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3ViXCIsIHgwLCB5MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDEsIHkxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCB4MiwgeTIsIHIyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE5lZygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbmVnXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX25lZ1wiLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9uZWdcIiwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbmVnXCIsIHgyLCByMiksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc05lZ2F0aXZlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc05lZ2F0aXZlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgxKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKGYxbVByZWZpeCtcIl9pc05lZ2F0aXZlXCIsIHgwKSksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuY2FsbChmMW1QcmVmaXgrXCJfaXNOZWdhdGl2ZVwiLCB4MSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMucmV0KGMuY2FsbChmMW1QcmVmaXgrXCJfaXNOZWdhdGl2ZVwiLCB4MikpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZE11bCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfbXVsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGNkID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGEgPSBjZC5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IGIgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwieFwiKSwgY2QuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgYyA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJ4XCIpLCBjZC5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IEEgPSBjZC5nZXRMb2NhbChcInlcIik7XG4gICAgICAgIGNvbnN0IEIgPSBjZC5pMzJfYWRkKGNkLmdldExvY2FsKFwieVwiKSwgY2QuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgQyA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJ5XCIpLCBjZC5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gY2QuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJyXCIpLCBjZC5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGNkLmkzMl9hZGQoY2QuZ2V0TG9jYWwoXCJyXCIpLCBjZC5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgY29uc3QgYUEgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYkIgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgY0MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYV9iID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFfQiA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBhX2MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQV9DID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGJfYyA9IGNkLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBCX0MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYUFfYkIgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYUFfY0MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYkJfY0MgPSBjZC5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgQVVYID0gY2QuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBhLCBBLCBhQSksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBiLCBCLCBiQiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBjLCBDLCBjQyksXG5cbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGEsIGIsIGFfYiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBBLCBCLCBBX0IpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYSwgYywgYV9jKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIEEsIEMsIEFfQyksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBiLCBjLCBiX2MpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgQiwgQywgQl9DKSxcblxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgYUEsIGJCLCBhQV9iQiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhQSwgY0MsIGFBX2NDKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGJCLCBjQywgYkJfY0MpLFxuXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBiX2MsIEJfQywgcjApLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgcjAsIGJCX2NDLCByMCksXG4gICAgICAgICAgICBjZC5jYWxsKG11bE5vblJlc2lkdWVGbiwgcjAsIHIwKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGFBLCByMCwgcjApLFxuXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBhX2IsIEFfQiwgcjEpLFxuICAgICAgICAgICAgY2QuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgcjEsIGFBX2JCLCByMSksXG4gICAgICAgICAgICBjZC5jYWxsKG11bE5vblJlc2lkdWVGbiwgY0MsIEFVWCksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCByMSwgQVVYLCByMSksXG5cbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGFfYywgQV9DLCByMiksXG4gICAgICAgICAgICBjZC5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCByMiwgYUFfY0MsIHIyKSxcbiAgICAgICAgICAgIGNkLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHIyLCBiQiwgcjIpLFxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcXVhcmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3NxdWFyZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQSA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgY29uc3QgczAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBhYiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgczIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBiYyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHMzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgczQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEEsIHMwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgQSwgQiwgYWIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBhYiwgYWIsIHMxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBBLCBCLCBzMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMyLCBDLCBzMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHMyLCBzMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9tdWxcIiwgQiwgQywgYmMpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBiYywgYmMsIHMzKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3NxdWFyZVwiLCBDLCBzNCksXG5cbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHMzLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMwLCByMCwgcjApLFxuXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCBzNCwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMSwgcjEsIHIxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMCwgczQsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgczMsIHIyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIHMyLCByMiwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2FkZFwiLCBzMSwgcjIsIHIyKSxcbiAgICAgICAgKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb01vbnRnb21lcnkoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3RvTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl90b01vbnRnb21lcnlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfdG9Nb250Z29tZXJ5XCIsIHgxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3RvTW9udGdvbWVyeVwiLCB4MiwgcjIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGcm9tTW9udGdvbWVyeSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIiwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIiwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZnJvbU1vbnRnb21lcnlcIiwgeDIsIHIyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29weSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfY29weVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuICAgICAgICBjb25zdCByMCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2NvcHlcIiwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfY29weVwiLCB4MiwgcjIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfemVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl96ZXJvXCIsIHgwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9vbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDAgPSBjLmdldExvY2FsKFwieFwiKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfb25lXCIsIHgwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfemVyb1wiLCB4MSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3plcm9cIiwgeDIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2VxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcbiAgICAgICAgY29uc3QgeTAgPSBjLmdldExvY2FsKFwieVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KGYxbjgpKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInlcIiksIGMuaTMyX2NvbnN0KDIqZjFuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfZXFcIiwgeDAsIHkwKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9lcVwiLCB4MSwgeTEpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9lcVwiLCB4MiwgeTIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJc1plcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2lzWmVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2lzWmVyb1wiLCB4MCksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfaXNaZXJvXCIsIHgxKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pc1plcm9cIiwgeDIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbnZlcnNlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pbnZlcnNlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjFuOCkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMipmMW44KSk7XG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IHQ0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgdDUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCBjMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IGMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxbjgpKTtcbiAgICAgICAgY29uc3QgYzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFuOCkpO1xuICAgICAgICBjb25zdCB0NiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMW44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zcXVhcmVcIiwgeDAsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfc3F1YXJlXCIsIHgxLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3NxdWFyZVwiLCB4MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDAsIHgxLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB4MCwgeDIsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgxLCB4MiwgdDUpLFxuXG4gICAgICAgICAgICBjLmNhbGwobXVsTm9uUmVzaWR1ZUZuLCB0NSwgYzApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgdDAsIGMwLCBjMCksXG5cbiAgICAgICAgICAgIGMuY2FsbChtdWxOb25SZXNpZHVlRm4sIHQyLCBjMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX3N1YlwiLCBjMSwgdDMsIGMxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgdDEsIHQ0LCBjMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgyLCBjMSwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgeDEsIGMyLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9hZGRcIiwgdDYsIEFVWCwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKG11bE5vblJlc2lkdWVGbiwgdDYsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHgwLCBjMCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfYWRkXCIsIEFVWCwgdDYsIHQ2KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9pbnZlcnNlXCIsIHQ2LCB0NiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXgrXCJfbXVsXCIsIHQ2LCBjMCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9tdWxcIiwgdDYsIGMxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX211bFwiLCB0NiwgYzIsIHIyKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRTaWduKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9zaWduXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYxbjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic1wiICwgYy5jYWxsKCBmMW1QcmVmaXggKyBcIl9zaWduXCIsIHgyKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgIGMucmV0KGMuZ2V0TG9jYWwoXCJzXCIpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIgLCBjLmNhbGwoIGYxbVByZWZpeCArIFwiX3NpZ25cIiwgeDEpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5nZXRMb2NhbChcInNcIikpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5yZXQoYy5jYWxsKCBmMW1QcmVmaXggKyBcIl9zaWduXCIsIHgwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZElzT25lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pc09uZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMW44KjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnJldChcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9pc09uZVwiLCB4MCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIHgxKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIHgyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZElzWmVybygpO1xuICAgIGJ1aWxkSXNPbmUoKTtcbiAgICBidWlsZFplcm8oKTtcbiAgICBidWlsZE9uZSgpO1xuICAgIGJ1aWxkQ29weSgpO1xuICAgIGJ1aWxkTXVsKCk7XG4gICAgYnVpbGRTcXVhcmUoKTtcbiAgICBidWlsZEFkZCgpO1xuICAgIGJ1aWxkU3ViKCk7XG4gICAgYnVpbGROZWcoKTtcbiAgICBidWlsZFNpZ24oKTtcbiAgICBidWlsZFRvTW9udGdvbWVyeSgpO1xuICAgIGJ1aWxkRnJvbU1vbnRnb21lcnkoKTtcbiAgICBidWlsZEVxKCk7XG4gICAgYnVpbGRJbnZlcnNlKCk7XG4gICAgYnVpbGRUaW1lc1NjYWxhcigpO1xuICAgIGJ1aWxkSXNOZWdhdGl2ZSgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNPbmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX29uZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfY29weVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9zcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2FkZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9uZWdcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3NpZ25cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9pbnZlcnNlXCIpO1xuICAgIGJ1aWxkQmF0Y2hJbnZlcnNlKG1vZHVsZSwgcHJlZml4KTtcbiAgICBidWlsZEV4cChcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl9leHBcIixcbiAgICAgICAgZjFuOCozLFxuICAgICAgICBwcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgcHJlZml4ICsgXCJfc3F1YXJlXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgcHJlZml4ICsgXCJfb25lXCJcbiAgICApO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9leHBcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RpbWVzU2NhbGFyXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEludmVyc2VcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzTmVnYXRpdmVcIik7XG5cbiAgICByZXR1cm4gcHJlZml4O1xufTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFRpbWVzU2NhbGFyTkFGKG1vZHVsZSwgZm5OYW1lLCBlbGVtZW50TGVuLCBvcEFCLCBvcEFBLCBvcEFtQiwgb3BDb3B5LCBvcEluaXQpIHtcblxuICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICBmLmFkZFBhcmFtKFwiYmFzZVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwic2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJMZW5ndGhcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIm9sZDBcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcIm5iaXRzXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJsYXN0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJjdXJcIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcImNhcnJ5XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJwXCIsIFwiaTMyXCIpO1xuXG4gICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhlbGVtZW50TGVuKSk7XG5cbiAgICBmdW5jdGlvbiBnZXRCaXQoSURYKSB7XG4gICAgICAgIHJldHVybiBjLmkzMl9hbmQoXG4gICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic2NhbGFyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweEZGRkZGRkZDKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoXG4gICAgICAgICAgICAgICAgICAgIElEWCxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHgxRilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoQml0KGIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChiKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJwXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZi5hZGRDb2RlKFxuICAgICAgICBjLmlmKFxuICAgICAgICAgICAgYy5pMzJfZXF6KGMuZ2V0TG9jYWwoXCJzY2FsYXJMZW5ndGhcIikpLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEluaXQsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgYy5zZXRMb2NhbChcIm5iaXRzXCIsIGMuaTMyX3NobChjLmdldExvY2FsKFwic2NhbGFyTGVuZ3RoXCIpLCBjLmkzMl9jb25zdCgzKSkpLFxuICAgICAgICBjLnNldExvY2FsKFwib2xkMFwiLCBjLmkzMl9sb2FkKGMuaTMyX2NvbnN0KDApKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuZ2V0TG9jYWwoXCJvbGQwXCIpKSxcbiAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvbGQwXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMzIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuYml0c1wiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRkZGRkZGOClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMSkpLFxuXG4gICAgICAgIGMuc2V0TG9jYWwoXCJsYXN0XCIsZ2V0Qml0KGMuaTMyX2NvbnN0KDApKSksXG4gICAgICAgIGMuc2V0TG9jYWwoXCJjYXJyeVwiLGMuaTMyX2NvbnN0KDApKSxcblxuICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoMSwgYy5pMzJfZXEoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwibmJpdHNcIikpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImN1clwiLCBnZXRCaXQoYy5nZXRMb2NhbChcImlcIikpKSxcbiAgICAgICAgICAgIGMuaWYoIGMuZ2V0TG9jYWwoXCJsYXN0XCIpLFxuICAgICAgICAgICAgICAgIGMuaWYoIGMuZ2V0TG9jYWwoXCJjdXJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDI1NSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoYy5nZXRMb2NhbChcImNhcnJ5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMjU1KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKCBjLmdldExvY2FsKFwiY3VyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwibGFzdFwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImNhcnJ5XCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihjLmdldExvY2FsKFwiY2FycnlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcImxhc3RcIiwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJjYXJyeVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJsYXN0XCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwiY2FycnlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgKSksXG5cbiAgICAgICAgYy5pZiggYy5nZXRMb2NhbChcImxhc3RcIiksXG4gICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMjU1KSxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHVzaEJpdCgxKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5wdXNoQml0KDEpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKGMuZ2V0TG9jYWwoXCJjYXJyeVwiKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMCksXG4gICAgICAgICAgICAgICAgICAgIC4uLnB1c2hCaXQoMSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuXG4gICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoMSkpKSxcblxuICAgICAgICAvLyBwIGFscmVhZHkgcG9pbnRzIHRvIHRoZSBsYXN0IGJpdFxuXG4gICAgICAgIGMuY2FsbChvcENvcHksIGMuZ2V0TG9jYWwoXCJiYXNlXCIpLCBhdXgpLFxuXG4gICAgICAgIGMuY2FsbChvcEluaXQsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcblxuICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuXG4gICAgICAgICAgICBjLmNhbGwob3BBQSwgYy5nZXRMb2NhbChcInJcIiksIGMuZ2V0TG9jYWwoXCJyXCIpKSxcblxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiY3VyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjdXJcIiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoYy5nZXRMb2NhbChcImN1clwiKSwgYy5pMzJfY29uc3QoMSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwob3BBQiwgIGMuZ2V0TG9jYWwoXCJyXCIpLCBhdXgsIGMuZ2V0TG9jYWwoXCJyXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKG9wQW1CLCBjLmdldExvY2FsKFwiclwiKSwgYXV4LCBjLmdldExvY2FsKFwiclwiKSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSggYy5nZXRMb2NhbChcIm9sZDBcIiksIGMuZ2V0TG9jYWwoXCJwXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG5cbiAgICAgICAgKSksXG5cbiAgICAgICAgYy5pMzJfc3RvcmUoIGMuaTMyX2NvbnN0KDApLCBjLmdldExvY2FsKFwib2xkMFwiKSlcblxuICAgICk7XG5cbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRNdWx0aWV4cChtb2R1bGUsIHByZWZpeCwgZm5OYW1lLCBvcEFkZCwgbjhiKSB7XG5cbiAgICBjb25zdCBuNjRnID0gbW9kdWxlLm1vZHVsZXNbcHJlZml4XS5uNjQ7XG4gICAgY29uc3QgbjhnID0gbjY0Zyo4O1xuXG4gICAgZnVuY3Rpb24gYnVpbGRHZXRDaHVuaygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUgKyBcIl9nZXRDaHVua1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBTY2FsYXJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJTaXplXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBzY2FsYXJcbiAgICAgICAgZi5hZGRQYXJhbShcInN0YXJ0Qml0XCIsIFwiaTMyXCIpOyAgLy8gQml0IHRvIHN0YXJ0IGV4dHJhY3RcbiAgICAgICAgZi5hZGRQYXJhbShcImNodW5rU2l6ZVwiLCBcImkzMlwiKTsgIC8vIENodW5rIHNpemUgaW4gYml0c1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0c1RvRW5kXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibWFza1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImJpdHNUb0VuZFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg4KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic3RhcnRCaXRcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9ndF9zKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1RvRW5kXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcIm1hc2tcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzVG9FbmRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcIm1hc2tcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNjYWxhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN0YXJ0Qml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAwLCAgLy8gb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAwICAgLy8gYWxpZ24gdG8gYnl0ZS5cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN0YXJ0Qml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg3KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibWFza1wiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXV0aWV4cENodW5rKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSArIFwiX2NodW5rXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJhc2VzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFNjYWxhcnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJTaXplXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIHBvaW50c1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBwb2ludHNcbiAgICAgICAgZi5hZGRQYXJhbShcInN0YXJ0Qml0XCIsIFwiaTMyXCIpOyAgLy8gYml0IHdoZXJlIGl0IHN0YXJ0cyB0aGUgY2h1bmtcbiAgICAgICAgZi5hZGRQYXJhbShcImNodW5rU2l6ZVwiLCBcImkzMlwiKTsgIC8vIGJpdCB3aGVyZSBpdCBzdGFydHMgdGhlIGNodW5rXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5DaHVua3NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdFNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImVuZFNjYWxhclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0QmFzZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJqXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiblRhYmxlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFRhYmxlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicElkeFRhYmxlXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcIm5cIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgLy8gQWxsb2NhdGUgbWVtb3J5XG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJuVGFibGVcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwVGFibGVcIiwgYy5pMzJfbG9hZCggYy5pMzJfY29uc3QoMCkgKSksXG4gICAgICAgICAgICBjLmkzMl9zdG9yZShcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgwKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuVGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAvLyBSZXNldCBUYWJsZVxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuVGFibGVcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX3plcm9cIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICAvLyBEaXN0cmlidXRlIGVsZW1lbnRzXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRCYXNlXCIsIGMuZ2V0TG9jYWwoXCJwQmFzZXNcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0U2NhbGFyXCIsIGMuZ2V0TG9jYWwoXCJwU2NhbGFyc1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiZW5kU2NhbGFyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNjYWxhcnNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdFNjYWxhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJlbmRTY2FsYXJcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZm5OYW1lICsgXCJfZ2V0Q2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdFNjYWxhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInN0YXJ0Qml0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHhcIiksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwSWR4VGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcEFkZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicElkeFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEJhc2VcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJZHhUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRTY2FsYXJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdFNjYWxhclwiKSwgYy5nZXRMb2NhbChcInNjYWxhclNpemVcIikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRCYXNlXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRCYXNlXCIpLCBjLmkzMl9jb25zdChuOGIpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmbk5hbWUgKyBcIl9yZWR1Y2VUYWJsZVwiLCBjLmdldExvY2FsKFwicFRhYmxlXCIpLCBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBUYWJsZVwiKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRNdWx0aWV4cCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJhc2VzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFNjYWxhcnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJzY2FsYXJTaXplXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIHBvaW50c1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTsgIC8vIE51bWJlciBvZiBwb2ludHNcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY2h1bmtTaXplXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibkNodW5rc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0U2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZW5kU2NhbGFyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRCYXNlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRCaXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5UYWJsZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBUYWJsZVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBJZHhUYWJsZVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBjb25zdCBwVFNpemVzID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgIDE3LCAxNywgMTcsIDE3LCAgIDE3LCAxNywgMTcsIDE3LFxuICAgICAgICAgICAgMTcsIDE3LCAxNiwgMTYsICAgMTUsIDE0LCAxMywgMTMsXG4gICAgICAgICAgICAxMiwgMTEsIDEwLCAgOSwgICAgOCwgIDcsICA3LCAgNixcbiAgICAgICAgICAgIDUgLCAgNCwgIDMsICAyLCAgICAxLCAgMSwgIDEsICAxXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmdldExvY2FsKFwiblwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImNodW5rU2l6ZVwiLCBjLmkzMl9sb2FkOF91KCBjLmkzMl9jbHooYy5nZXRMb2NhbChcIm5cIikpLCAgcFRTaXplcyApKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJuQ2h1bmtzXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9kaXZfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICAvLyBBbGxvY2F0ZSBtZW1vcnlcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcIml0Qml0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9zdWIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibkNodW5rc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbHRfcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgLy8gRG91YmxlIG5DaHVuayB0aW1lc1xuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSkpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImNodW5rU2l6ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVcIiwgYy5nZXRMb2NhbChcInByXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmbk5hbWUgKyBcIl9jaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJhc2VzXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNjYWxhcnNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzY2FsYXJTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0Qml0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY2h1bmtTaXplXCIpLFxuICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpLFxuICAgICAgICAgICAgICAgICAgICBhdXgsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0Qml0XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRCaXRcIiksIGMuZ2V0TG9jYWwoXCJjaHVua1NpemVcIikpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlVGFibGUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lICsgXCJfcmVkdWNlVGFibGVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwVGFibGVcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpOyAgLy8gTnVtYmVyIG9mIGJpdHMgb2YgdGhlIHRhYmxlXG4gICAgICAgIGYuYWRkTG9jYWwoXCJoYWxmXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXQxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXQyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicEFjY1wiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXEoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICBjLnJldChbXSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiaGFsZlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3NobChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdDFcIiwgYy5nZXRMb2NhbChcInBUYWJsZVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiaXQyXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaGFsZlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicEFjY1wiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFjY1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXQxXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFjY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBY2NcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdDFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdDFcIiksIGMuaTMyX2NvbnN0KG44ZykpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXQyXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXQyXCIpLCBjLmkzMl9jb25zdChuOGcpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmbk5hbWUgKyBcIl9yZWR1Y2VUYWJsZVwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVGFibGVcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeihjLmdldExvY2FsKFwicFwiKSkpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9kb3VibGVcIiwgYy5nZXRMb2NhbChcInBBY2NcIiksIGMuZ2V0TG9jYWwoXCJwQWNjXCIpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicFwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcInBcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRcIiwgYy5nZXRMb2NhbChcInBUYWJsZVwiKSwgYy5nZXRMb2NhbChcInBBY2NcIiksIGMuZ2V0TG9jYWwoXCJwVGFibGVcIikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYnVpbGRHZXRDaHVuaygpO1xuICAgIGJ1aWxkUmVkdWNlVGFibGUoKTtcbiAgICBidWlsZE11dGlleHBDaHVuaygpO1xuICAgIGJ1aWxkTXVsdGlleHAoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmbk5hbWUpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmbk5hbWUgK1wiX2NodW5rXCIpO1xuXG5cbn07XG5cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IGJ1aWxkVGltZXNTY2FsYXJOQUYgPSByZXF1aXJlKFwiLi9idWlsZF90aW1lc3NjYWxhcm5hZlwiKTtcbi8vY29uc3QgYnVpbGRUaW1lc1NjYWxhciA9IHJlcXVpcmUoXCIuL2J1aWxkX3RpbWVzc2NhbGFyXCIpO1xuY29uc3QgYnVpbGRCYXRjaENvbnZlcnRpb24gPSByZXF1aXJlKFwiLi9idWlsZF9iYXRjaGNvbnZlcnRpb25cIik7XG5jb25zdCBidWlsZE11bHRpZXhwID0gcmVxdWlyZShcIi4vYnVpbGRfbXVsdGlleHBcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRDdXJ2ZShtb2R1bGUsIHByZWZpeCwgcHJlZml4RmllbGQsIHBCKSB7XG5cblxuICAgIGNvbnN0IG42NCA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeEZpZWxkXS5uNjQ7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuICAgIGlmIChtb2R1bGUubW9kdWxlc1twcmVmaXhdKSByZXR1cm4gcHJlZml4OyAgLy8gYWxyZWFkeSBidWlsZGVkXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0OiBuNjQqM1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBidWlsZElzWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfaXNaZXJvXCIsXG4gICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KjIpXG4gICAgICAgICAgICApXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZElzWmVyb0FmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9pc1plcm9cIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfaXNaZXJvXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29weSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwZFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuNjQqMzsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pNjRfc3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgaSo4LFxuICAgICAgICAgICAgICAgICAgICBjLmk2NF9sb2FkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSo4XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZENvcHlBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfY29weUFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicGRcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bjY0KjI7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuaTY0X3N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGRcIiksXG4gICAgICAgICAgICAgICAgICAgIGkqOCxcbiAgICAgICAgICAgICAgICAgICAgYy5pNjRfbG9hZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGkqOFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFplcm8oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfemVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX29uZVwiLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOCoyKVxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVyb0FmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl96ZXJvQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl96ZXJvXCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfemVyb1wiLFxuICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9lcVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MSA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MSA9IGMuZ2V0TG9jYWwoXCJ6MVwiKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmdldExvY2FsKFwicDJcIik7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejIgPSBjLmdldExvY2FsKFwiejJcIik7XG5cbiAgICAgICAgY29uc3QgWjFaMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMloyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoxX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldCggYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDJcIikpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAyXCIpKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHoxKSxcbiAgICAgICAgICAgICAgICBjLnJldChjLmNhbGwocHJlZml4ICsgXCJfZXFNaXhlZFwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwMVwiKSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MiksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKHByZWZpeCArIFwiX2VxTWl4ZWRcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicDJcIikpKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoxLCBaMVoxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB6MiwgWjJaMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeDEsIFoyWjIsIFUxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MiwgWjFaMSwgVTIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoxLCBaMVoxLCBaMV9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejIsIFoyWjIsIFoyX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MSwgWjJfY3ViZWQsIFMxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MiwgWjFfY3ViZWQsIFMyKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCBVMSwgVTIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIFMxLCBTMiksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXFNaXhlZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9lcU1peGVkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MSA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB6MSA9IGMuZ2V0TG9jYWwoXCJ6MVwiKTtcbiAgICAgICAgY29uc3QgeDIgPSBjLmdldExvY2FsKFwicDJcIik7XG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgpKTtcblxuICAgICAgICBjb25zdCBaMVoxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFUyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoxX2N1YmVkID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAyXCIpKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MSksXG4gICAgICAgICAgICAgICAgYy5yZXQoYy5jYWxsKHByZWZpeCArIFwiX2VxQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInAyXCIpKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejEsIFoxWjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgyLCBaMVoxLCBVMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejEsIFoxWjEsIFoxX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MiwgWjFfY3ViZWQsIFMyKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB4MSwgVTIpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHkxLCBTMiksXG4gICAgICAgICAgICAgICAgICAgIGMucmV0KGMuaTMyX2NvbnN0KDEpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZERvdWJsZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9kb3VibGVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgQiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgRSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBGID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgZWlnaHRDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzT25lXCIsIHopLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgeCwgQSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgeSwgQiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgQiwgQyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB4LCBCLCBEKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBELCBEKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBELCBBLCBEKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBELCBDLCBEKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBELCBELCBEKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEEsIEEsIEUpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEUsIEEsIEUpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEUsIEYpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeSwgeiwgRyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBELCBELCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgRiwgeDMsIHgzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEMsIEMsIGVpZ2h0QyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgZWlnaHRDLCBlaWdodEMsIGVpZ2h0QyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgZWlnaHRDLCBlaWdodEMsIGVpZ2h0QyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBELCB4MywgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkzLCBFLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTMsIGVpZ2h0QywgeTMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgRywgRywgejMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGREb3VibGVBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBjb25zdCBYWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBZWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBZWVlZID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgTSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBlaWdodFlZWVkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl90b0phY29iaWFuXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgLy8gWFggPSBYMV4yXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgeCwgWFgpLFxuXG4gICAgICAgICAgICAvLyBZWSA9IFkxXjJcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB5LCBZWSksXG5cbiAgICAgICAgICAgIC8vIFlZWVkgPSBZWV4yXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgWVksIFlZWVkpLFxuXG4gICAgICAgICAgICAvLyBTID0gMiooKFgxK1lZKV4yLVhYLVlZWVkpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeCwgWVksIFMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIFMsIFMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFMsIFhYLCBTKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBTLCBZWVlZLCBTKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBTLCBTLCBTKSxcblxuICAgICAgICAgICAgLy8gTSA9IDMqWFgrYSAgKEhlcmEgYT0wKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFhYLCBYWCwgTSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgTSwgWFgsIE0pLFxuXG4gICAgICAgICAgICAvLyBaMyA9IDIqWTFcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB5LCB5LCB6MyksXG5cbiAgICAgICAgICAgIC8vIFQgPSBNXjItMipTXG4gICAgICAgICAgICAvLyBYMyA9IFRcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCBNLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDMsIFMsIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MywgUywgeDMpLFxuXG4gICAgICAgICAgICAvLyBZMyA9IE0qKFMtVCktOCpZWVlZXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgWVlZWSwgWVlZWSwgZWlnaHRZWVlZKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBlaWdodFlZWVksIGVpZ2h0WVlZWSwgZWlnaHRZWVlZKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBlaWdodFlZWVksIGVpZ2h0WVlZWSwgZWlnaHRZWVlZKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBTLCB4MywgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkzLCBNLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTMsIGVpZ2h0WVlZWSwgeTMpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRFcUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9lcUFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5yZXQoYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9lcVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMlwiKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2VxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkVG9Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl90b01vbnRnb21lcnlcIixcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwMVwiKSxcbiAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICApKTtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPDM7IGkrKykge1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3RvTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KGkqbjgpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChpKm44KSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb01vbnRnb21lcnlBZmZpbmUoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5QWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX3RvTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInAxXCIpLFxuICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICkpO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8MjsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfdG9Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoaSpuOCkpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KGkqbjgpKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb21Nb250Z29tZXJ5KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG4gICAgICAgIGZvciAobGV0IGk9MTsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9mcm9tTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KGkqbjgpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChpKm44KSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb21Nb250Z29tZXJ5QWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2Zyb21Nb250Z29tZXJ5QWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2Zyb21Nb250Z29tZXJ5XCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicDFcIiksXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgKSk7XG4gICAgICAgIGZvciAobGV0IGk9MTsgaTwyOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoXG4gICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9mcm9tTW9udGdvbWVyeVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KGkqbjgpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChpKm44KSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRBZGQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJ6MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDEgPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejEgPSBjLmdldExvY2FsKFwiejFcIik7XG4gICAgICAgIGNvbnN0IHgyID0gYy5nZXRMb2NhbChcInAyXCIpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiejJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5pMzJfY29uc3QobjgqMikpKSk7XG4gICAgICAgIGNvbnN0IHoyID0gYy5nZXRMb2NhbChcInoyXCIpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBjb25zdCBaMVoxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFoyWjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjFfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMl9taW51c19TMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBJID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgciA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFMxX0oyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9cIiwgYy5nZXRMb2NhbChcInAyXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfaXNPbmVcIiwgejEpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2FkZE1peGVkXCIsIHgyLCB4MSwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MiksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfYWRkTWl4ZWRcIiwgeDEsIHgyLCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgejEsIFoxWjEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoyLCBaMloyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MSwgWjJaMiwgVTEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgyLCBaMVoxLCBVMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgejEsIFoxWjEsIFoxX2N1YmVkKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB6MiwgWjJaMiwgWjJfY3ViZWQpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkxLCBaMl9jdWJlZCwgUzEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkyLCBaMV9jdWJlZCwgUzIpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIFUxLCBVMiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgUzEsIFMyKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBVMiwgVTEsIEgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFMyLCBTMSwgUzJfbWludXNfUzEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEgsIEgsIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEksIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIEgsIEksIEopLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFMyX21pbnVzX1MxLCBTMl9taW51c19TMSwgciksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgVTEsIEksIFYpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBWLCBWLCBWMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCByMiwgSiwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHgzLCBWMiwgeDMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgUzEsIEosIFMxX0oyKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBTMV9KMiwgUzFfSjIsIFMxX0oyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFYsIHgzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTMsIHIsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB5MywgUzFfSjIsIHkzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHoxLCB6MiwgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHozLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgejMsIFoxWjEsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB6MywgWjJaMiwgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHozLCBILCB6MyksXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkTWl4ZWQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRNaXhlZFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInoxXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeDEgPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuc2V0TG9jYWwoXCJ6MVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCoyKSkpKTtcbiAgICAgICAgY29uc3QgejEgPSBjLmdldExvY2FsKFwiejFcIik7XG4gICAgICAgIGNvbnN0IHgyID0gYy5nZXRMb2NhbChcInAyXCIpO1xuICAgICAgICBjb25zdCB5MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGNvbnN0IFoxWjEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVTIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjFfY3ViZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgUzIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBISCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBTMl9taW51c195MSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBJID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgciA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBWID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHkxX0oyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weUFmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX29uZVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpICwgYy5pMzJfY29uc3QobjgqMikpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInAxXCIpLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9pc09uZVwiLCB6MSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfYWRkQWZmaW5lXCIsIHgxLCB4MiwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHoxLCBaMVoxKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MiwgWjFaMSwgVTIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHoxLCBaMVoxLCBaMV9jdWJlZCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeTIsIFoxX2N1YmVkLCBTMiksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeDEsIFUyKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9lcVwiLCB5MSwgUzIpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfZG91YmxlQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIFUyLCB4MSwgSCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgUzIsIHkxLCBTMl9taW51c195MSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgSCwgSEgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEhIICwgSEgsIEkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIEkgLCBJLCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBILCBJLCBKKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBTMl9taW51c195MSwgUzJfbWludXNfeTEsIHIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgxLCBJLCBWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCByLCByMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgViwgViwgVjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgcjIsIEosIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MywgVjIsIHgzKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkxLCBKLCB5MV9KMiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeTFfSjIsIHkxX0oyLCB5MV9KMiksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCBWLCB4MywgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHkzLCByLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeTMsIHkxX0oyLCB5MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCB6MSwgSCwgejMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIHozLCB6MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgejMsIFoxWjEsIHozKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB6MywgSEgsIHozKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQWRkQWZmaW5lKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiejFcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MSA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeTEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBmLmFkZENvZGUoYy5zZXRMb2NhbChcInoxXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKSkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuZ2V0TG9jYWwoXCJwMlwiKTtcbiAgICAgICAgY29uc3QgeTIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAyXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcblxuICAgICAgICBjb25zdCBIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEhIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHkyX21pbnVzX3kxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgSiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCByID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgVjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgeTFfSjIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInAxXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfb25lXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIikgLCBjLmkzMl9jb25zdChuOCoyKSkpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfY29weUFmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX29uZVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpICwgYy5pMzJfY29uc3QobjgqMikpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5yZXQoW10pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHgxLCB4MiksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfZXFcIiwgeTEsIHkyKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3N1YlwiLCB4MiwgeDEsIEgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkyLCB5MSwgeTJfbWludXNfeTEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIEgsIEhIKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBISCAsIEhILCBJKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2FkZFwiLCBJICwgSSwgSSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgSCwgSSwgSiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeTJfbWludXNfeTEsIHkyX21pbnVzX3kxLCByKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4MSwgSSwgViksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgciwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIFYsIFYsIFYyKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHIyLCBKLCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgeDMsIFYyLCB4MyksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MSwgSiwgeTFfSjIpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHkxX0oyLCB5MV9KMiwgeTFfSjIpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zdWJcIiwgViwgeDMsIHkzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5MywgciwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3ViXCIsIHkzLCB5MV9KMiwgeTMpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgSCwgSCwgejMpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTmVnKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB4LCB4MyksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgeSwgeTMpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB6LCB6MylcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTmVnQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ0FmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHgsIHgzKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX25lZ1wiLCB5LCB5MyksXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFN1YigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9zdWJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgqMykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9uZWdcIiwgYy5nZXRMb2NhbChcInAyXCIpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2FkZFwiLCBjLmdldExvY2FsKFwicDFcIiksIEFVWCwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFN1Yk1peGVkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1Yk1peGVkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KjMpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbmVnQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMlwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9hZGRNaXhlZFwiLCBjLmdldExvY2FsKFwicDFcIiksIEFVWCwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3ViQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YkFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCozKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX25lZ0FmZmluZVwiLCBjLmdldExvY2FsKFwicDJcIiksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfYWRkQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSwgQVVYLCBjLmdldExvY2FsKFwicHJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc2V0cyBaIHRvIE9uZVxuICAgIGZ1bmN0aW9uIGJ1aWxkTm9ybWFsaXplKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX25vcm1hbGl6ZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInAxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInAxXCIpO1xuICAgICAgICBjb25zdCB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgeiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KjIpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgpKTtcbiAgICAgICAgY29uc3QgejMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCoyKSk7XG5cblxuICAgICAgICBjb25zdCBaX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuICAgICAgICBjb25zdCBaMl9pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjNfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvXCIsIGMuZ2V0TG9jYWwoXCJwMVwiKSksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2ludmVyc2VcIiwgeiwgWl9pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgWl9pbnYsIFoyX2ludiksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBaX2ludiwgWjJfaW52LCBaM19pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeCwgWjJfaW52LCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB5LCBaM19pbnYsIHkzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfb25lXCIsIHozKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvLyBEb2VzIG5vdCBzZXQgWi5cbiAgICBmdW5jdGlvbiBidWlsZFRvQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjLmdldExvY2FsKFwicDFcIik7XG4gICAgICAgIGNvbnN0IHkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInAxXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuICAgICAgICBjb25zdCB6ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuICAgICAgICBjb25zdCB4MyA9IGMuZ2V0TG9jYWwoXCJwclwiKTtcbiAgICAgICAgY29uc3QgeTMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuXG5cbiAgICAgICAgY29uc3QgWl9pbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcbiAgICAgICAgY29uc3QgWjJfaW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IFozX2ludiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfemVyb1wiLCB4MyksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgeTMpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9pbnZlcnNlXCIsIHosIFpfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIFpfaW52LCBaMl9pbnYpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgWl9pbnYsIFoyX2ludiwgWjNfaW52KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbXVsXCIsIHgsIFoyX2ludiwgeDMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9tdWxcIiwgeSwgWjNfaW52LCB5MyksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRUb0phY29iaWFuKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX3RvSmFjb2JpYW5cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5nZXRMb2NhbChcInByXCIpO1xuICAgICAgICBjb25zdCB5MyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QobjgqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicDFcIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJwclwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9vbmVcIiwgejMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl9jb3B5XCIsIHksIHkzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB4LCB4MylcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRCYXRjaFRvQWZmaW5lKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVG9BZmZpbmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBBdXhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRBdXhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdE91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicEF1eFwiLCBjLmkzMl9sb2FkKCBjLmkzMl9jb25zdCgwKSApKSxcbiAgICAgICAgICAgIGMuaTMyX3N0b3JlKFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QobjgpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2JhdGNoSW52ZXJzZVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCoyKSksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgqMyksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBdXhcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRJblwiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEF1eFwiLCBjLmdldExvY2FsKFwicEF1eFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmdldExvY2FsKFwiblwiKSApKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwiaXRBdXhcIikpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmkzMl9jb25zdChuOCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQrXCJfc3F1YXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0QXV4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdEF1eFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0SW5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0T3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCtcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRBdXhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KG44KSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdEluXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRJblwiKSwgYy5pMzJfY29uc3QobjgqMykpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRPdXRcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5pMzJfY29uc3QobjgqMikpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaXRBdXhcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEF1eFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgYy5pMzJfc3RvcmUoXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMCksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBdXhcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJpdmF0ZSBhbmQgZG9lcyBub3QgYWxsb3cgdG8gT1ZFUkxBUCBidWZmZXJzLlxuICAgIGZ1bmN0aW9uIGJ1aWxkUmV2ZXJzZUJ5dGVzKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0T3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRJblwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJpdE91dFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiaXRJblwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSW5cIilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2x0X3MoIGMuZ2V0TG9jYWwoXCJpdE91dFwiKSwgYy5nZXRMb2NhbChcInBPdXRcIikgKSksXG4gICAgICAgICAgICAgICAgYy5pMzJfc3RvcmU4KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoYy5nZXRMb2NhbChcIml0SW5cIikpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0T3V0XCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaXRPdXRcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0SW5cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdEluXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRMRU10b0MoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfTEVNdG9DXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicE91dFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHRtcCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4NDApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9mcm9tTW9udGdvbWVyeVwiLCBjLmdldExvY2FsKFwicEluXCIpLCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgdG1wLCBjLmkzMl9jb25zdChuOCksIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NpZ25cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwSW5cIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgtMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaTMyX3N0b3JlOChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDgwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZExFTXRvVSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9MRU10b1VcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcFRtcCA9IG1vZHVsZS5hbGxvYyhuOCoyKTtcbiAgICAgICAgY29uc3QgdG1wID0gYy5pMzJfY29uc3QocFRtcCk7XG4gICAgICAgIGNvbnN0IHRtcFggPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWSA9IGMuaTMyX2NvbnN0KHBUbXAgKyBuOCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIikpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmkzMl9zdG9yZTgoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicE91dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4NDApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMucmV0KFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeUFmZmluZVwiLCBjLmdldExvY2FsKFwicEluXCIpLCB0bXApLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiLCB0bXBYLCBjLmkzMl9jb25zdChuOCksIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIHRtcFksIGMuaTMyX2NvbnN0KG44KSwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFV0b0xFTSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9VdG9MRU1cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcFRtcCA9IG1vZHVsZS5hbGxvYyhuOCoyKTtcbiAgICAgICAgY29uc3QgdG1wID0gYy5pMzJfY29uc3QocFRtcCk7XG4gICAgICAgIGNvbnN0IHRtcFggPSBjLmkzMl9jb25zdChwVG1wKTtcbiAgICAgICAgY29uc3QgdG1wWSA9IGMuaTMyX2NvbnN0KHBUbXAgKyBuOCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9hbmQoYy5pMzJfbG9hZDhfdShjLmdldExvY2FsKFwicEluXCIpKSwgYy5pMzJfY29uc3QoMHg0MCkpLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlQnl0ZXNcIiwgYy5nZXRMb2NhbChcInBJblwiKSwgYy5pMzJfY29uc3QobjgpLCB0bXBYKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fcmV2ZXJzZUJ5dGVzXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCkpLCBjLmkzMl9jb25zdChuOCksIHRtcFkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3RvTW9udGdvbWVyeUFmZmluZVwiLCB0bXAsICBjLmdldExvY2FsKFwicE91dFwiKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEN0b0xFTSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9DdG9MRU1cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZmlyc3RCeXRlXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiZ3JlYXRlc3RcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBwVG1wID0gbW9kdWxlLmFsbG9jKG44KjIpO1xuICAgICAgICBjb25zdCB0bXBYID0gYy5pMzJfY29uc3QocFRtcCk7XG4gICAgICAgIGNvbnN0IHRtcFkgPSBjLmkzMl9jb25zdChwVG1wICsgbjgpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJmaXJzdEJ5dGVcIiwgYy5pMzJfbG9hZDhfdShjLmdldExvY2FsKFwicEluXCIpKSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImZpcnN0Qnl0ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHg0MClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBPdXRcIikpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLnJldChbXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImdyZWF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZmlyc3RCeXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweDgwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcInBJblwiKSwgdG1wWSksXG4gICAgICAgICAgICBjLmkzMl9zdG9yZTgodG1wWSwgYy5pMzJfYW5kKGMuZ2V0TG9jYWwoXCJmaXJzdEJ5dGVcIiksIGMuaTMyX2NvbnN0KDB4M0YpKSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX3JldmVyc2VCeXRlc1wiLCB0bXBZLCBjLmkzMl9jb25zdChuOCksIHRtcFgpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfdG9Nb250Z29tZXJ5XCIsIHRtcFgsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpKSxcblxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfc3F1YXJlXCIsIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCB0bXBZKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCBjLmdldExvY2FsKFwicE91dFwiKSwgdG1wWSwgIHRtcFkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfYWRkXCIsIHRtcFksIGMuaTMyX2NvbnN0KHBCKSwgIHRtcFkpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXJ0XCIsIHRtcFksIHRtcFkpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfbmVnXCIsIHRtcFksIHRtcFgpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zaWduXCIsIHRtcFkpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgtMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJncmVhdGVzdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgdG1wWSwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCBjLmkzMl9jb25zdChuOCkpKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImdyZWF0ZXN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9uZWdcIiwgdG1wWSwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwT3V0XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeEZpZWxkICsgXCJfY29weVwiLCB0bXBZLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBPdXRcIiksIGMuaTMyX2NvbnN0KG44KSkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW5DdXJ2ZUFmZmluZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEluXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInBJblwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEluXCIpLCBjLmkzMl9jb25zdChuOCkpO1xuXG4gICAgICAgIGNvbnN0IHkyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG4gICAgICAgIGNvbnN0IHgzYiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3NxdWFyZVwiLCB5LCB5MiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9zcXVhcmVcIiwgeCwgeDNiKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX211bFwiLCB4LCB4M2IsIHgzYiksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl9hZGRcIiwgeDNiLCBjLmkzMl9jb25zdChwQiksIHgzYiksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX2VxXCIsIHkyLCB4M2IpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkN1cnZlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCArIFwiX2luQ3VydmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOCoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX3RvQWZmaW5lXCIsIGMuZ2V0TG9jYWwoXCJwSW5cIiksIGF1eCksXG5cbiAgICAgICAgICAgIGMucmV0KFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9pbkN1cnZlQWZmaW5lXCIsIGF1eCksXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYnVpbGRJc1plcm9BZmZpbmUoKTtcbiAgICBidWlsZElzWmVybygpO1xuICAgIGJ1aWxkWmVyb0FmZmluZSgpO1xuICAgIGJ1aWxkWmVybygpO1xuICAgIGJ1aWxkQ29weUFmZmluZSgpO1xuICAgIGJ1aWxkQ29weSgpO1xuICAgIGJ1aWxkVG9KYWNvYmlhbigpO1xuICAgIGJ1aWxkRXFBZmZpbmUoKTtcbiAgICBidWlsZEVxTWl4ZWQoKTtcbiAgICBidWlsZEVxKCk7XG4gICAgYnVpbGREb3VibGVBZmZpbmUoKTtcbiAgICBidWlsZERvdWJsZSgpO1xuICAgIGJ1aWxkQWRkQWZmaW5lKCk7XG4gICAgYnVpbGRBZGRNaXhlZCgpO1xuICAgIGJ1aWxkQWRkKCk7XG4gICAgYnVpbGROZWdBZmZpbmUoKTtcbiAgICBidWlsZE5lZygpO1xuICAgIGJ1aWxkU3ViQWZmaW5lKCk7XG4gICAgYnVpbGRTdWJNaXhlZCgpO1xuICAgIGJ1aWxkU3ViKCk7XG4gICAgYnVpbGRGcm9tTW9udGdvbWVyeUFmZmluZSgpO1xuICAgIGJ1aWxkRnJvbU1vbnRnb21lcnkoKTtcbiAgICBidWlsZFRvTW9udGdvbWVyeUFmZmluZSgpO1xuICAgIGJ1aWxkVG9Nb250Z29tZXJ5KCk7XG4gICAgYnVpbGRUb0FmZmluZSgpO1xuICAgIGJ1aWxkSW5DdXJ2ZUFmZmluZSgpO1xuICAgIGJ1aWxkSW5DdXJ2ZSgpO1xuXG4gICAgYnVpbGRCYXRjaFRvQWZmaW5lKCk7XG5cbiAgICBidWlsZE5vcm1hbGl6ZSgpO1xuXG5cbiAgICBidWlsZFJldmVyc2VCeXRlcygpO1xuXG4gICAgYnVpbGRMRU10b1UoKTtcbiAgICBidWlsZExFTXRvQygpO1xuICAgIGJ1aWxkVXRvTEVNKCk7XG4gICAgYnVpbGRDdG9MRU0oKTtcblxuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hMRU10b1VcIiwgcHJlZml4ICsgXCJfTEVNdG9VXCIsIG44KjIsIG44KjIpO1xuICAgIGJ1aWxkQmF0Y2hDb252ZXJ0aW9uKG1vZHVsZSwgcHJlZml4ICsgXCJfYmF0Y2hMRU10b0NcIiwgcHJlZml4ICsgXCJfTEVNdG9DXCIsIG44KjIsIG44KTtcbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoVXRvTEVNXCIsIHByZWZpeCArIFwiX1V0b0xFTVwiLCBuOCoyLCBuOCoyKTtcbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoQ3RvTEVNXCIsIHByZWZpeCArIFwiX0N0b0xFTVwiLCBuOCwgbjgqMiwgdHJ1ZSk7XG5cbiAgICBidWlsZEJhdGNoQ29udmVydGlvbihtb2R1bGUsIHByZWZpeCArIFwiX2JhdGNoVG9KYWNvYmlhblwiLCBwcmVmaXggKyBcIl90b0phY29iaWFuXCIsIG44KjIsIG44KjMsIHRydWUpO1xuXG4gICAgYnVpbGRNdWx0aWV4cChtb2R1bGUsIHByZWZpeCwgcHJlZml4ICsgXCJfbXVsdGlleHBcIiwgcHJlZml4ICsgXCJfYWRkXCIsIG44KjMpO1xuICAgIGJ1aWxkTXVsdGlleHAobW9kdWxlLCBwcmVmaXgsIHByZWZpeCArIFwiX211bHRpZXhwQWZmaW5lXCIsIHByZWZpeCArIFwiX2FkZE1peGVkXCIsIG44KjIpO1xuXG4gICAgLypcbiAgICBidWlsZFRpbWVzU2NhbGFyKFxuICAgICAgICBtb2R1bGUsXG4gICAgICAgIHByZWZpeCArIFwiX3RpbWVzU2NhbGFyT2xkXCIsXG4gICAgICAgIG44KjMsXG4gICAgICAgIHByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9kb3VibGVcIixcbiAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICBwcmVmaXggKyBcIl96ZXJvXCIsXG4gICAgKTtcbiAgICAqL1xuICAgIGJ1aWxkVGltZXNTY2FsYXJOQUYoXG4gICAgICAgIG1vZHVsZSxcbiAgICAgICAgcHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIixcbiAgICAgICAgbjgqMyxcbiAgICAgICAgcHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgIHByZWZpeCArIFwiX2RvdWJsZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgcHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICBwcmVmaXggKyBcIl96ZXJvXCJcbiAgICApO1xuXG4gICAgYnVpbGRUaW1lc1NjYWxhck5BRihcbiAgICAgICAgbW9kdWxlLFxuICAgICAgICBwcmVmaXggKyBcIl90aW1lc1NjYWxhckFmZmluZVwiLFxuICAgICAgICBuOCoyLFxuICAgICAgICBwcmVmaXggKyBcIl9hZGRNaXhlZFwiLFxuICAgICAgICBwcmVmaXggKyBcIl9kb3VibGVcIixcbiAgICAgICAgcHJlZml4ICsgXCJfc3ViTWl4ZWRcIixcbiAgICAgICAgcHJlZml4ICsgXCJfY29weUFmZmluZVwiLFxuICAgICAgICBwcmVmaXggKyBcIl96ZXJvXCJcbiAgICApO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2lzWmVyb1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaXNaZXJvQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2VxXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9lcU1peGVkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9lcUFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9jb3B5QWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9BZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZG91YmxlXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9kb3VibGVBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9hZGRNaXhlZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYWRkQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX25lZ1wiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfbmVnQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YlwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfc3ViTWl4ZWRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3N1YkFmZmluZVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9mcm9tTW9udGdvbWVyeVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfZnJvbU1vbnRnb21lcnlBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdG9Nb250Z29tZXJ5XCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b01vbnRnb21lcnlBZmZpbmVcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3RpbWVzU2NhbGFyQWZmaW5lXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX25vcm1hbGl6ZVwiKTtcblxuICAgIC8vIENvbnZlcnRpb24gZnVuY3Rpb25zXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX0xFTXRvVVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfTEVNdG9DXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9VdG9MRU1cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX0N0b0xFTVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaExFTXRvVVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfYmF0Y2hMRU10b0NcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2JhdGNoVXRvTEVNXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEN0b0xFTVwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl90b0FmZmluZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfdG9KYWNvYmlhblwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaFRvQWZmaW5lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaFRvSmFjb2JpYW5cIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW5DdXJ2ZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfaW5DdXJ2ZUFmZmluZVwiKTtcblxuICAgIC8qXG4gICAgYnVpbGRHMU11bFNjYWxhcihtb2R1bGUsIHpxKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oXCJnMU11bFNjYWxhclwiKTtcbiAgICAqL1xuXG4gICAgcmV0dXJuIHByZWZpeDtcbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IHsgaXNPZGQsIG1vZEludiwgbW9kUG93IH0gPSByZXF1aXJlKFwiLi9iaWdpbnQuanNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRkZUKG1vZHVsZSwgcHJlZml4LCBnUHJlZml4LCBmUHJlZml4LCBvcEd0aW1lc0YpIHtcblxuICAgIGNvbnN0IG42NGYgPSBtb2R1bGUubW9kdWxlc1tmUHJlZml4XS5uNjQ7XG4gICAgY29uc3QgbjhmID0gbjY0Zio4O1xuXG4gICAgY29uc3QgbjY0ZyA9IG1vZHVsZS5tb2R1bGVzW2dQcmVmaXhdLm42NDtcbiAgICBjb25zdCBuOGcgPSBuNjRnKjg7XG5cbiAgICBjb25zdCBxID0gbW9kdWxlLm1vZHVsZXNbZlByZWZpeF0ucTtcblxuICAgIGxldCByZW0gPSBxIC0gMW47XG4gICAgbGV0IG1heEJpdHMgPSAwO1xuICAgIHdoaWxlICghaXNPZGQocmVtKSkge1xuICAgICAgICBtYXhCaXRzICsrO1xuICAgICAgICByZW0gPSByZW0gPj4gMW47XG4gICAgfVxuXG4gICAgbGV0IG5yID0gMm47XG5cbiAgICB3aGlsZSAoIG1vZFBvdyhuciwgcSA+PiAxbiwgcSkgPT09IDFuICkgbnIgPSBuciArIDFuO1xuXG4gICAgLy8gY29uc29sZS5sb2cobnIpO1xuXG4gICAgY29uc3QgdyA9IG5ldyBBcnJheShtYXhCaXRzKzEpO1xuICAgIHdbbWF4Qml0c10gPSBtb2RQb3cobnIsIHJlbSwgcSk7XG5cbiAgICBsZXQgbj1tYXhCaXRzLTE7XG4gICAgd2hpbGUgKG4+PTApIHtcbiAgICAgICAgd1tuXSA9IG1vZFBvdyh3W24rMV0sIDJuLCBxKTtcbiAgICAgICAgbi0tO1xuICAgIH1cblxuICAgIGNvbnN0IGJ5dGVzID0gW107XG4gICAgY29uc3QgUiA9ICgxbiA8PCBCaWdJbnQobjhmKjgpKSAlIHE7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8dy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBtID0gd1tpXSAqIFIgJSBxO1xuICAgICAgICBieXRlcy5wdXNoKC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKG0sIG44ZikpO1xuICAgIH1cblxuICAgIGNvbnN0IFJPT1RzID0gbW9kdWxlLmFsbG9jKGJ5dGVzKTtcblxuICAgIGNvbnN0IGkyID0gbmV3IEFycmF5KG1heEJpdHMrMSk7XG4gICAgaTJbMF0gPSAxbjtcblxuICAgIGZvciAobGV0IGk9MTsgaTw9bWF4Qml0czsgaSsrKSB7XG4gICAgICAgIGkyW2ldID0gaTJbaS0xXSAqIDJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ5dGVzaTIgPVtdO1xuICAgIGZvciAobGV0IGk9MDsgaTw9bWF4Qml0czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG0gPSBtb2RJbnYoaTJbaV0sIHEpICogUiAlIHE7XG4gICAgICAgIGJ5dGVzaTIucHVzaCguLi51dGlscy5iaWdJbnQyQnl0ZXNMRShtLCBuOGYpKTtcbiAgICB9XG5cbiAgICBjb25zdCBJTlYyID0gbW9kdWxlLmFsbG9jKGJ5dGVzaTIpO1xuXG4gICAgY29uc3Qgc2hpZnQgPSBtb2RQb3cobnIsIDJuLCBxKTtcbiAgICBjb25zdCBieXRlc1NoaWZ0VG9TbWFsbE0gPVtdO1xuICAgIGNvbnN0IGJ5dGVzU0NvbnN0ID1bXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8PW1heEJpdHM7IGkrKykge1xuICAgICAgICBjb25zdCBzaGlmdFRvU21hbGxNID0gbW9kUG93KHNoaWZ0LCAybiAqKiBCaWdJbnQoaSksIHEpO1xuICAgICAgICBjb25zdCBzQ29uc3QgPSBtb2RJbnYocSArIDFuIC0gc2hpZnRUb1NtYWxsTSwgcSk7XG4gICAgICAgIGJ5dGVzU2hpZnRUb1NtYWxsTS5wdXNoKC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHNoaWZ0VG9TbWFsbE0gKiBSICUgcSwgbjhmKSk7XG4gICAgICAgIGJ5dGVzU0NvbnN0LnB1c2goLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoc0NvbnN0ICogUiAlIHEsIG44ZikpO1xuICAgIH1cblxuICAgIGNvbnN0IFNISUZUX1RPX00gPSBtb2R1bGUuYWxsb2MoIGJ5dGVzU2hpZnRUb1NtYWxsTSAgKTtcbiAgICBjb25zdCBTQ09OU1QgPSBtb2R1bGUuYWxsb2MoIGJ5dGVzU0NvbnN0ICApO1xuXG4gICAgZnVuY3Rpb24gcmV2KHgpIHtcbiAgICAgICAgbGV0IHI9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHggJiAoMSA8PCBpKSkge1xuICAgICAgICAgICAgICAgIHIgPSByIHwgKDB4ODAgPj4gaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgY29uc3QgcnRhYmxlID0gQXJyYXkoMjU2KTtcbiAgICBmb3IgKGxldCBpPTA7IGk8MjU2OyBpKyspIHtcbiAgICAgICAgcnRhYmxlW2ldID0gcmV2KGkpO1xuICAgIH1cblxuICAgIGNvbnN0IFJFVlRBQkxFID0gbW9kdWxlLmFsbG9jKHJ0YWJsZSk7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTG9nMigpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfX2xvZzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJiaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYXV4XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImF1eFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGYuYWRkQ29kZShjLnNldExvY2FsKFwiYml0c1wiLCBjLmkzMl9jb25zdCgwKSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcImF1eFwiKSlcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJhdXhcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImF1eFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYml0c1wiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5icigwKVxuICAgICAgICApKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaWYoXG4gICAgICAgICAgICBjLmkzMl9uZShcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnVucmVhY2hhYmxlKClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuaWYoXG4gICAgICAgICAgICBjLmkzMl9ndF91KFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG1heEJpdHMpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy51bnJlYWNoYWJsZSgpXG4gICAgICAgICkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmdldExvY2FsKFwiYml0c1wiKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGRlQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcblxuICAgICAgICBmLmFkZExvY2FsKFwiYml0c1wiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IE9uZSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwiYml0c1wiLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgXCJfX2xvZzJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKGZQcmVmaXggKyBcIl9vbmVcIiwgT25lKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXgrXCJfcmF3ZmZ0XCIsXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDApLFxuICAgICAgICAgICAgICAgIE9uZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJRkZUKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9pZmZ0XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBJbnYyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImJpdHNcIixcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCArIFwiX19sb2cyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJwSW52MlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoSU5WMiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIHByZWZpeCtcIl9yYXdmZnRcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBJbnYyXCIpXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUmF3RkZUKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9yYXdmZnRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImJpdHNcIiwgXCJpMzJcIik7IC8vIDIgcG93ZXJcbiAgICAgICAgZi5hZGRQYXJhbShcInJldmVyc2VcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJtdWxGYWN0b3JcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgZi5hZGRMb2NhbChcInNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJrXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwialwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm1cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtZGl2MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwd21cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19yZXZlcnNlUGVybXV0YXRpb25cIiwgYy5nZXRMb2NhbChcInB4XCIpLCBjLmdldExvY2FsKFwiYml0c1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiblwiLCBjLmkzMl9zaGwoYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwic1wiLCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9ndF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwibVwiLCBjLmkzMl9zaGwoYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJzXCIpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInB3bVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChST09UcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwia1wiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwia1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfb25lXCIsIFcpLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJtZGl2MlwiLCBjLmkzMl9zaHJfdShjLmdldExvY2FsKFwibVwiKSwgYy5pMzJfY29uc3QoMSkpICksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJtZGl2MlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwia1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwialwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm1kaXYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZlByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB3bVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJqXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwia1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImtcIiksIGMuZ2V0TG9jYWwoXCJtXCIpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJzXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwic1wiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBwcmVmaXggKyBcIl9fZmZ0RmluYWxcIixcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdHNcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInJldmVyc2VcIiksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEludmVyc2UoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19mZnRGaW5hbFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiYml0c1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJldmVyc2VcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJtdWxGYWN0b3JcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibmRpdjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwSW52MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtYXNrXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5nZXRMb2NhbChcInJldmVyc2VcIikpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZlByZWZpeCArIFwiX2lzT25lXCIsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIikpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnJldChbXSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiblwiLCBjLmkzMl9zaGwoIGMuaTMyX2NvbnN0KDEpLCBjLmdldExvY2FsKFwiYml0c1wiKSkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwibWFza1wiLCBjLmkzMl9zdWIoIGMuZ2V0TG9jYWwoXCJuXCIpICwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJuZGl2MlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfdShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5kaXYyXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicmV2ZXJzZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGdQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLCBUKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDJcIikgLCBjLmdldExvY2FsKFwiaWR4MVwiKSApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChnUHJlZml4ICsgXCJfY29weVwiLCBUICwgYy5nZXRMb2NhbChcImlkeDJcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDFcIiksIFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YgLCBjLmdldExvY2FsKFwiaWR4MlwiKSAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJpZHgxXCIpICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiAsIFQgLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpLCBjLmdldExvY2FsKFwiaWR4MlwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZlByZWZpeCArIFwiX2lzT25lXCIsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgKEl0IHNob3VsZCBub3QgYmUgaGVyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKG9wR3RpbWVzRiAsIGMuZ2V0TG9jYWwoXCJpZHgxXCIpICwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSwgYy5nZXRMb2NhbChcImlkeDFcIikgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGICwgYy5nZXRMb2NhbChcImlkeDJcIikgLCBjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpLCBjLmdldExvY2FsKFwiaWR4MlwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcblxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmUHJlZml4ICsgXCJfaXNPbmVcIiwgYy5nZXRMb2NhbChcIm11bEZhY3RvclwiKSksXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIChJdCBzaG91bGQgbm90IGJlIGhlcmUpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuY2FsbChvcEd0aW1lc0YsIGMuZ2V0TG9jYWwoXCJweFwiKSAsIGMuZ2V0TG9jYWwoXCJtdWxGYWN0b3JcIiksIGMuZ2V0TG9jYWwoXCJweFwiKSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5kaXYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwob3BHdGltZXNGLCBjLmdldExvY2FsKFwiaWR4MlwiKSxjLmdldExvY2FsKFwibXVsRmFjdG9yXCIpLCBjLmdldExvY2FsKFwiaWR4MlwiKSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRSZXZlcnNlUGVybXV0YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX19yZXZlcnNlUGVybXV0YXRpb25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJweFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuXCIsIGMuaTMyX3NobCggYy5pMzJfY29uc3QoMSksIGMuZ2V0TG9jYWwoXCJiaXRzXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJyaVwiLCBjLmNhbGwocHJlZml4ICsgXCJfX3JldlwiLCBjLmdldExvY2FsKFwiaVwiKSwgYy5nZXRMb2NhbChcImJpdHNcIikpKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicmlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2x0X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJyaVwiKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZ1ByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImlkeDFcIiksIFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGdQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJpZHgyXCIpICwgYy5nZXRMb2NhbChcImlkeDFcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGdQcmVmaXggKyBcIl9jb3B5XCIsIFQgLCBjLmdldExvY2FsKFwiaWR4MlwiKSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG5cbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUmV2KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9fcmV2XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaTMyX3JvdGwoXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZDhfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgweEZGKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZUQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMjQpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMHhGRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWVEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc2hsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3Nocl91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVlRBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCg4KVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9zaHJfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMjQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDB4RkYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZUQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiYml0c1wiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGRlRKb2luKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRKb2luXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmYxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImZpcnN0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiaW5jXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoIGZQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJmaXJzdFwiKSwgVyksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgVFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBULFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGZQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImluY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZGVEpvaW5FeHQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5FeHRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ0b3RhbEJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU2hpZnRUb01cIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBTaGlmdFRvTVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoU0hJRlRfVE9fTSksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ0b3RhbEJpdHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGYpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG5cbiAgICAgICAgICAgIGMuY2FsbCggZlByZWZpeCArIFwiX2NvcHlcIiwgYy5nZXRMb2NhbChcImZpcnN0XCIpLCBXKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU2hpZnRUb01cIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVyxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpbmNcIiksXG4gICAgICAgICAgICAgICAgICAgIFdcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGRlRKb2luRXh0SW52KCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRKb2luRXh0SW52XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmYxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImZpcnN0XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiaW5jXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwidG90YWxCaXRzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFNoaWZ0VG9NXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFNDb25zdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhmKSk7XG4gICAgICAgIGNvbnN0IFUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjhnKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFNoaWZ0VG9NXCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTSElGVF9UT19NKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRvdGFsQml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicFNDb25zdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoU0NPTlNUKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInRvdGFsQml0c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cblxuICAgICAgICAgICAgYy5jYWxsKCBmUHJlZml4ICsgXCJfY29weVwiLCBjLmdldExvY2FsKFwiZmlyc3RcIiksIFcpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgxXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwiaWR4MlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIiksXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIFVcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBnUHJlZml4ICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBVLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNDb25zdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDJcIilcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNoaWZ0VG9NXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBTQ29uc3RcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZlByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaW5jXCIpLFxuICAgICAgICAgICAgICAgICAgICBXXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQnVmZjJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmlyc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJpbmNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ0b3RhbEJpdHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgxXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU2hpZnRUb01cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwU0NvbnN0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgVyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGYpKTtcbiAgICAgICAgY29uc3QgVSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOGcpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU2hpZnRUb01cIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KFNISUZUX1RPX00pLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwU0NvbnN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChTQ09OU1QpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwidG90YWxCaXRzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoIGZQcmVmaXggKyBcIl9jb3B5XCIsIGMuZ2V0TG9jYWwoXCJmaXJzdFwiKSwgVyksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZjJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicFNoaWZ0VG9NXCIpLFxuICAgICAgICAgICAgICAgICAgICBVXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9zdWJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwU0NvbnN0XCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MVwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpbmNcIiksXG4gICAgICAgICAgICAgICAgICAgIFdcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRGRlRNaXgoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdE1peFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBCdWZmXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcImV4cFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIm5Hcm91cHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuUGVyR3JvdXBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicGFpck9mZnNldFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpZHgyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwd21cIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBXID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZikpO1xuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuUGVyR3JvdXBcIiwgYy5pMzJfc2hsKGMuaTMyX2NvbnN0KDEpLCBjLmdldExvY2FsKFwiZXhwXCIpKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiblBlckdyb3VwRGl2MlwiLCBjLmkzMl9zaHJfdShjLmdldExvY2FsKFwiblBlckdyb3VwXCIpLCBjLmkzMl9jb25zdCgxKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIm5Hcm91cHNcIiwgYy5pMzJfc2hyX3UoYy5nZXRMb2NhbChcIm5cIiksIGMuZ2V0TG9jYWwoXCJleHBcIikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwYWlyT2Zmc2V0XCIsIGMuaTMyX211bChjLmdldExvY2FsKFwiblBlckdyb3VwRGl2MlwiKSwgYy5pMzJfY29uc3QobjhnKSkpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInB3bVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoUk9PVHMpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiZXhwXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhmKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibkdyb3Vwc1wiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoIGZQcmVmaXggKyBcIl9vbmVcIiwgVyksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcImpcIiwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJqXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuUGVyR3JvdXBEaXYyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWR4MVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQnVmZlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblBlckdyb3VwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZHgyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBhaXJPZmZzZXRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcEd0aW1lc0YsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICAgICBUXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX2NvcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9hZGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFUsXG4gICAgICAgICAgICAgICAgICAgICAgICBULFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ1ByZWZpeCArIFwiX3N1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgVSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBmUHJlZml4ICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBXLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInB3bVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFcsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJqXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwialwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLy8gUmV2ZXJzZSBhbGwgYW5kIG11bHRpcGx5IGJ5IGZhY3RvclxuICAgIGZ1bmN0aW9uIGJ1aWxkRkZURmluYWwoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4K1wiX2ZmdEZpbmFsXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJ1ZmZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiZmFjdG9yXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaWR4MVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlkeDJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibmRpdjJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44ZykpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJuZGl2MlwiLCBjLmkzMl9zaHJfdShjLmdldExvY2FsKFwiblwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5pMzJfYW5kKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEJ1ZmZcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5kaXYyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImZhY3RvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuZGl2MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOGcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibmRpdjJcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDFcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcImlkeDJcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBCdWZmXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjhnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaWR4MlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImZhY3RvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgVFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIG9wR3RpbWVzRixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlkeDFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJmYWN0b3JcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgyXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGdQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgIFQsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpZHgxXCIpLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZFJldigpO1xuICAgIGJ1aWxkUmV2ZXJzZVBlcm11dGF0aW9uKCk7XG4gICAgYnVpbGRGaW5hbEludmVyc2UoKTtcbiAgICBidWlsZFJhd0ZGVCgpO1xuICAgIGJ1aWxkTG9nMigpO1xuICAgIGJ1aWxkRkZUKCk7XG4gICAgYnVpbGRJRkZUKCk7XG4gICAgYnVpbGRGRlRKb2luKCk7XG4gICAgYnVpbGRGRlRKb2luRXh0KCk7XG4gICAgYnVpbGRGRlRKb2luRXh0SW52KCk7XG4gICAgYnVpbGRGRlRNaXgoKTtcbiAgICBidWlsZEZGVEZpbmFsKCk7XG4gICAgYnVpbGRQcmVwYXJlTGFncmFuZ2VFdmFsdWF0aW9uKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2lmZnRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9yYXdmZnRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRKb2luXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXgrXCJfZmZ0Sm9pbkV4dFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX2ZmdEpvaW5FeHRJbnZcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRNaXhcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCtcIl9mZnRGaW5hbFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4K1wiX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb25cIik7XG5cbn07XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRQb2wobW9kdWxlLCBwcmVmaXgsIHByZWZpeEZpZWxkKSB7XG5cbiAgICBjb25zdCBuNjQgPSBtb2R1bGUubW9kdWxlc1twcmVmaXhGaWVsZF0ubjY0O1xuICAgIGNvbnN0IG44ID0gbjY0Kjg7XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkWmVybygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfemVyb1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInB4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImxhc3RwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuZ2V0TG9jYWwoXCJweFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdHBcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJweFwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RwXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcInBcIikpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZENvbnN0cnVjdExDKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCtcIl9jb25zdHJ1Y3RMQ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwb2x5bm9taWFsc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBzaWduYWxzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblNpZ25hbHNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcmVzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImpcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwcFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicGRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJuY29lZnNcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5nZXRMb2NhbChcInBwb2x5bm9taWFsc1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicHNcIiwgYy5nZXRMb2NhbChcInBzaWduYWxzXCIpKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblNpZ25hbHNcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwibmNvZWZzXCIsIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcInBwXCIpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBwXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHBcIiksIGMuaTMyX2NvbnN0KDQpKSksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5jb2Vmc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByZXNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKGMuZ2V0TG9jYWwoXCJwcFwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcFwiKSwgYy5pMzJfY29uc3QoNCkpKSxcblxuXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfbXVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXhcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBkXCIpXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcInBwXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHBcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwialwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImpcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICAgICApKSxcblxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwc1wiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBzXCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcblxuICAgIH1cblxuICAgIGJ1aWxkWmVybygpO1xuICAgIGJ1aWxkQ29uc3RydWN0TEMoKTtcblxuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3plcm9cIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2NvbnN0cnVjdExDXCIpO1xuXG4gICAgcmV0dXJuIHByZWZpeDtcblxuXG5cblxufTtcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFFBUChtb2R1bGUsIHByZWZpeCwgcHJlZml4RmllbGQpIHtcblxuICAgIGNvbnN0IG42NCA9IG1vZHVsZS5tb2R1bGVzW3ByZWZpeEZpZWxkXS5uNjQ7XG4gICAgY29uc3QgbjggPSBuNjQqODtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRCdWlsZEFCQygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYnVpbGRBQkNcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJuQ29lZnNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwV2l0bmVzc1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm9mZnNldE91dFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5PdXRcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJvZmZzZXRXaXRuZXNzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwibldpdG5lc3NcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0YVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0YlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImxhc3RcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJtXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiY1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJwT3V0XCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgYXV4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKG44KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBTZXQgb3V0cHV0IGEgYW5kIGIgdG8gMFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmdldExvY2FsKFwicEFcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmdldExvY2FsKFwicEJcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm5PdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdGFcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwibGFzdFwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4RmllbGQgKyBcIl96ZXJvXCIsIGMuZ2V0TG9jYWwoXCJpdGFcIikpLFxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXhGaWVsZCArIFwiX3plcm9cIiwgYy5nZXRMb2NhbChcIml0YlwiKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG5cblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0XCIsIGMuZ2V0TG9jYWwoXCJwQ29lZnNcIikpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwQ29lZnNcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuQ29lZnNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChuOCsxMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmJyX2lmKFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJsYXN0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgICAgIFwic1wiLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkKGMuZ2V0TG9jYWwoXCJpdFwiKSwgOClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbHRfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwic1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwib2Zmc2V0V2l0bmVzc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9nZV91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldFdpdG5lc3NcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuV2l0bmVzc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJpdFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0XCIpLCBjLmkzMl9jb25zdChuOCsxMikpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuYnIoMSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcIm1cIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfbG9hZChjLmdldExvY2FsKFwiaXRcIikpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9lcShjLmdldExvY2FsKFwibVwiKSwgYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicE91dFwiLCBjLmdldExvY2FsKFwicEFcIikpLFxuICAgICAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoYy5nZXRMb2NhbChcIm1cIiksIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwT3V0XCIsIGMuZ2V0TG9jYWwoXCJwQlwiKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KzEyKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuYnIoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcbiAgICAgICAgICAgICAgICAgICAgXCJjXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQoYy5nZXRMb2NhbChcIml0XCIpLCA0KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9sdF91KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJjXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvZmZzZXRPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfZ2VfdShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJvZmZzZXRPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KzEyKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5icigxKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgICAgICBcInBPdXRcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBPdXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfc3ViKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIm9mZnNldE91dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBXaXRuZXNzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfbXVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX3N1YihjLmdldExvY2FsKFwic1wiKSwgYy5nZXRMb2NhbChcIm9mZnNldFdpdG5lc3NcIikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJpdFwiKSwgYy5pMzJfY29uc3QoMTIpKSxcbiAgICAgICAgICAgICAgICAgICAgYXV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfYWRkXCIsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICBhdXgsXG4gICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwT3V0XCIpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0XCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwiaXRcIiksIGMuaTMyX2NvbnN0KG44KzEyKSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuZ2V0TG9jYWwoXCJwQlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRcIiwgYy5nZXRMb2NhbChcInBDXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuT3V0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRiXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRcIilcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdGFcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdGJcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdFwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0XCIpLCBjLmkzMl9jb25zdChuOCkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKSxcblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSm9pbkFCQygpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfam9pbkFCQ1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIm5cIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0YVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0YlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0Y1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcIml0cFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImxhc3RcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRhXCIsIGMuZ2V0TG9jYWwoXCJwQVwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRiXCIsIGMuZ2V0TG9jYWwoXCJwQlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRjXCIsIGMuZ2V0TG9jYWwoXCJwQ1wiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaXRwXCIsIGMuZ2V0TG9jYWwoXCJwUFwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFxuICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInBBXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9tdWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuYmxvY2soYy5sb29wKFxuICAgICAgICAgICAgICAgIGMuYnJfaWYoXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0YVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJsYXN0XCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4RmllbGQgKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0YVwiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0YlwiKSxcbiAgICAgICAgICAgICAgICAgICAgYXV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeEZpZWxkICsgXCJfc3ViXCIsXG4gICAgICAgICAgICAgICAgICAgIGF1eCxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0Y1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcIml0cFwiKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdGFcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdGJcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGNcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdGNcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdHBcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJpdHBcIiksIGMuaTMyX2NvbnN0KG44KSkpLFxuICAgICAgICAgICAgICAgIGMuYnIoMClcbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRCYXRjaEFkZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrXCJfYmF0Y2hBZGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwYVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRhXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRiXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaXRyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwibGFzdFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGFcIiwgYy5nZXRMb2NhbChcInBhXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdGJcIiwgYy5nZXRMb2NhbChcInBiXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpdHJcIiwgYy5nZXRMb2NhbChcInByXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXG4gICAgICAgICAgICAgICAgXCJsYXN0XCIsXG4gICAgICAgICAgICAgICAgYy5pMzJfYWRkKFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicGFcIiksXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX211bChcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QobjgpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICAgICAgYy5icl9pZihcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXEoXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImxhc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhGaWVsZCArIFwiX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRhXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRiXCIpLFxuICAgICAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwiaXRyXCIpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YVwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0YlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0YlwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5zZXRMb2NhbChcIml0clwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIml0clwiKSwgYy5pMzJfY29uc3QobjgpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZEJ1aWxkQUJDKCk7XG4gICAgYnVpbGRKb2luQUJDKCk7XG4gICAgYnVpbGRCYXRjaEFkZCgpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX2J1aWxkQUJDXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9qb2luQUJDXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9iYXRjaEFkZFwiKTtcblxuICAgIHJldHVybiBwcmVmaXg7XG5cbn07XG5cbiIsIlxuXG4vKlxuICAgIENvcHlyaWdodCAyMDE5IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2FzbXNuYXJrIChXZWIgQXNzZW1ibHkgemtTbmFyayBQcm92ZXIpLlxuXG4gICAgd2FzbXNuYXJrIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgd2FzbXNuYXJrIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHdhc21zbmFyay4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRBcHBseUtleShtb2R1bGUsIGZuTmFtZSwgZ1ByZWZpeCwgZnJQcmVmaXgsIHNpemVHSW4sIHNpemVHT3V0LCBzaXplRiwgb3BHdGltZXNGKSB7XG5cbiAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgZi5hZGRQYXJhbShcInBJblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwiblwiLCBcImkzMlwiKTtcbiAgICBmLmFkZFBhcmFtKFwicEZpcnN0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwSW5jXCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkUGFyYW0oXCJwT3V0XCIsIFwiaTMyXCIpO1xuICAgIGYuYWRkTG9jYWwoXCJwT2xkRnJlZVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcbiAgICBmLmFkZExvY2FsKFwicEZyb21cIiwgXCJpMzJcIik7XG4gICAgZi5hZGRMb2NhbChcInBUb1wiLCBcImkzMlwiKTtcblxuICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICBjb25zdCB0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHNpemVGKSk7XG5cbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuc2V0TG9jYWwoXCJwRnJvbVwiLCBjLmdldExvY2FsKFwicEluXCIpKSxcbiAgICAgICAgYy5zZXRMb2NhbChcInBUb1wiLCBjLmdldExvY2FsKFwicE91dFwiKSksXG4gICAgKTtcblxuICAgIC8vIHQgPSBmaXJzdFxuICAgIGYuYWRkQ29kZShcbiAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgZnJQcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICBjLmdldExvY2FsKFwicEZpcnN0XCIpLFxuICAgICAgICAgICAgdFxuICAgICAgICApXG4gICAgKTtcbiAgICBmLmFkZENvZGUoXG4gICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KDApKSxcbiAgICAgICAgYy5ibG9jayhjLmxvb3AoXG4gICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxICggYy5nZXRMb2NhbChcImlcIiksIGMuZ2V0TG9jYWwoXCJuXCIpICkpLFxuXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgb3BHdGltZXNGLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwRnJvbVwiKSxcbiAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwVG9cIilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicEZyb21cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwRnJvbVwiKSwgYy5pMzJfY29uc3Qoc2l6ZUdJbikpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwVG9cIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwVG9cIiksIGMuaTMyX2NvbnN0KHNpemVHT3V0KSkpLFxuXG4gICAgICAgICAgICAvLyB0ID0gdCogaW5jXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZnJQcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwSW5jXCIpLFxuICAgICAgICAgICAgICAgIHRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICkpXG4gICAgKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihmbk5hbWUpO1xuXG59O1xuIiwiY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5cbmNvbnN0IGJ1aWxkRjFtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjFtLmpzXCIpO1xuY29uc3QgYnVpbGRGMSA9cmVxdWlyZShcIi4uL2J1aWxkX2YxLmpzXCIpO1xuY29uc3QgYnVpbGRGMm0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMm0uanNcIik7XG5jb25zdCBidWlsZEYzbSA9cmVxdWlyZShcIi4uL2J1aWxkX2YzbS5qc1wiKTtcbmNvbnN0IGJ1aWxkQ3VydmUgPXJlcXVpcmUoXCIuLi9idWlsZF9jdXJ2ZV9qYWNvYmlhbl9hMC5qc1wiKTtcbmNvbnN0IGJ1aWxkRkZUID0gcmVxdWlyZShcIi4uL2J1aWxkX2ZmdFwiKTtcbmNvbnN0IGJ1aWxkUG9sID0gcmVxdWlyZShcIi4uL2J1aWxkX3BvbFwiKTtcbmNvbnN0IGJ1aWxkUUFQID0gcmVxdWlyZShcIi4uL2J1aWxkX3FhcFwiKTtcbmNvbnN0IGJ1aWxkQXBwbHlLZXkgPSByZXF1aXJlKFwiLi4vYnVpbGRfYXBwbHlrZXlcIik7XG5jb25zdCB7IGJpdExlbmd0aCwgbW9kSW52LCBpc09kZCwgaXNOZWdhdGl2ZSB9ID0gcmVxdWlyZShcIi4uL2JpZ2ludC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEJOMTI4KG1vZHVsZSwgX3ByZWZpeCkge1xuXG4gICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeCB8fCBcImJuMTI4XCI7XG5cbiAgICBpZiAobW9kdWxlLm1vZHVsZXNbcHJlZml4XSkgcmV0dXJuIHByZWZpeDsgIC8vIGFscmVhZHkgYnVpbGRlZFxuXG4gICAgY29uc3QgcSA9IDIxODg4MjQyODcxODM5Mjc1MjIyMjQ2NDA1NzQ1MjU3Mjc1MDg4Njk2MzExMTU3Mjk3ODIzNjYyNjg5MDM3ODk0NjQ1MjI2MjA4NTgzbjtcbiAgICBjb25zdCByID0gMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTduO1xuXG5cbiAgICBjb25zdCBuNjQgPSBNYXRoLmZsb29yKChiaXRMZW5ndGgocSAtIDFuKSAtIDEpLzY0KSArMTtcbiAgICBjb25zdCBuOCA9IG42NCo4O1xuICAgIGNvbnN0IGZyc2l6ZSA9IG44O1xuICAgIGNvbnN0IGYxc2l6ZSA9IG44O1xuICAgIGNvbnN0IGYyc2l6ZSA9IGYxc2l6ZSAqIDI7XG4gICAgY29uc3QgZnRzaXplID0gZjFzaXplICogMTI7XG5cbiAgICBjb25zdCBwciA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSggciwgZnJzaXplICkpO1xuXG4gICAgY29uc3QgZjFtUHJlZml4ID0gYnVpbGRGMW0obW9kdWxlLCBxLCBcImYxbVwiKTtcbiAgICBidWlsZEYxKG1vZHVsZSwgciwgXCJmclwiLCBcImZybVwiKTtcblxuICAgIGNvbnN0IHBHMWIgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgzbiksIGYxc2l6ZSApKTtcbiAgICBjb25zdCBnMW1QcmVmaXggPSBidWlsZEN1cnZlKG1vZHVsZSwgXCJnMW1cIiwgXCJmMW1cIiwgcEcxYik7XG5cbiAgICBidWlsZEZGVChtb2R1bGUsIFwiZnJtXCIsIFwiZnJtXCIsIFwiZnJtXCIsIFwiZnJtX211bFwiKTtcblxuICAgIGJ1aWxkUG9sKG1vZHVsZSwgXCJwb2xcIiwgXCJmcm1cIik7XG4gICAgYnVpbGRRQVAobW9kdWxlLCBcInFhcFwiLCBcImZybVwiKTtcblxuICAgIGNvbnN0IGYybVByZWZpeCA9IGJ1aWxkRjJtKG1vZHVsZSwgXCJmMW1fbmVnXCIsIFwiZjJtXCIsIFwiZjFtXCIpO1xuICAgIGNvbnN0IHBHMmIgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDE5NDg1ODc0NzUxNzU5MzU0NzcxMDI0MjM5MjYxMDIxNzIwNTA1NzkwNjE4NDY5MzAxNzIxMDY1NTY0NjMxMjk2NDUyNDU3NDc4MzczbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDI2NjkyOTc5MTExOTk5MTE2MTI0NjkwNzM4NzEzNzI4Mzg0MjU0NTA3Njk2NTMzMjkwMDI4ODU2OTM3ODUxMDkxMDMwNzYzNjY5MG4pLCBmMXNpemUgKVxuICAgIF0pO1xuICAgIGNvbnN0IGcybVByZWZpeCA9IGJ1aWxkQ3VydmUobW9kdWxlLCBcImcybVwiLCBcImYybVwiLCBwRzJiKTtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRHVGltZXNGcihmbk5hbWUsIG9wTXVsKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZm5OYW1lKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBHXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEZyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MobjgpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXCJmcm1fZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInBGclwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBvcE11bCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEdcIiksXG4gICAgICAgICAgICAgICAgQVVYLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44KSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZm5OYW1lKTtcbiAgICB9XG4gICAgYnVpbGRHVGltZXNGcihcImcxbV90aW1lc0ZyXCIsIFwiZzFtX3RpbWVzU2NhbGFyXCIpO1xuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJnMW1cIiwgXCJnMW1cIiwgXCJmcm1cIiwgXCJnMW1fdGltZXNGclwiKTtcblxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMm1fdGltZXNGclwiLCBcImcybV90aW1lc1NjYWxhclwiKTtcbiAgICBidWlsZEZGVChtb2R1bGUsIFwiZzJtXCIsIFwiZzJtXCIsIFwiZnJtXCIsIFwiZzJtX3RpbWVzRnJcIik7XG5cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzFtX3RpbWVzRnJBZmZpbmVcIiwgXCJnMW1fdGltZXNTY2FsYXJBZmZpbmVcIik7XG4gICAgYnVpbGRHVGltZXNGcihcImcybV90aW1lc0ZyQWZmaW5lXCIsIFwiZzJtX3RpbWVzU2NhbGFyQWZmaW5lXCIpO1xuXG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZnJtX2JhdGNoQXBwbHlLZXlcIiwgXCJmbXJcIiwgXCJmcm1cIiwgbjgsIG44LCBuOCwgXCJmcm1fbXVsXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5XCIsIFwiZzFtXCIsIFwiZnJtXCIsIG44KjMsIG44KjMsIG44LCBcImcxbV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcxbV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMW1cIiwgXCJmcm1cIiwgbjgqMiwgbjgqMywgbjgsIFwiZzFtX3RpbWVzRnJBZmZpbmVcIik7XG4gICAgYnVpbGRBcHBseUtleShtb2R1bGUsIFwiZzJtX2JhdGNoQXBwbHlLZXlcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjgqMiozLCBuOCozKjIsIG44LCBcImcybV90aW1lc0ZyXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcybV9iYXRjaEFwcGx5S2V5TWl4ZWRcIiwgXCJnMm1cIiwgXCJmcm1cIiwgbjgqMioyLCBuOCozKjIsIG44LCBcImcybV90aW1lc0ZyQWZmaW5lXCIpO1xuXG4gICAgZnVuY3Rpb24gdG9Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChhKSAqICggMW4gPDwgQmlnSW50KGYxc2l6ZSo4KSkgJSBxO1xuICAgIH1cblxuICAgIGNvbnN0IEcxZ2VuID0gW1xuICAgICAgICAxbixcbiAgICAgICAgMm4sXG4gICAgICAgIDFuXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMWdlbiA9IG1vZHVsZS5hbGxvYyhcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMWdlblswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMWdlblsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMWdlblsyXSksIGYxc2l6ZSApLFxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcxemVybyA9IFtcbiAgICAgICAgMG4sXG4gICAgICAgIDFuLFxuICAgICAgICAwblxuICAgIF07XG5cbiAgICBjb25zdCBwRzF6ZXJvID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1swXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzJdKSwgZjFzaXplIClcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMmdlbiA9IFtcbiAgICAgICAgW1xuICAgICAgICAgICAgMTA4NTcwNDY5OTkwMjMwNTcxMzU5NDQ1NzA3NjIyMzI4Mjk0ODEzNzA3NTYzNTk1Nzg1MTgwODY5OTA1MTk5OTMyODU2NTU4NTI3ODFuLFxuICAgICAgICAgICAgMTE1NTk3MzIwMzI5ODYzODcxMDc5OTEwMDQwMjEzOTIyODU3ODM5MjU4MTI4NjE4MjExOTI1MzA5MTc0MDMxNTE0NTIzOTE4MDU2MzRuLFxuICAgICAgICBdLFtcbiAgICAgICAgICAgIDg0OTU2NTM5MjMxMjM0MzE0MTc2MDQ5NzMyNDc0ODkyNzI0Mzg0MTgxOTA1ODcyNjM2MDAxNDg3NzAyODA2NDkzMDY5NTgxMDE5MzBuLFxuICAgICAgICAgICAgNDA4MjM2Nzg3NTg2MzQzMzY4MTMzMjIwMzQwMzE0NTQzNTU2ODMxNjg1MTMyNzU5MzQwMTIwODEwNTc0MTA3NjIxNDEyMDA5MzUzMW4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXVxuICAgIF07XG5cbiAgICBjb25zdCBwRzJnZW4gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMF1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMV1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJnZW5bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBHMnplcm8gPSBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDBuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMW4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXSxbXG4gICAgICAgICAgICAwbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMnplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzBdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1swXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMV1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzFdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1syXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMl1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdCBwT25lVCA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMSksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMCksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDApLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwTm9uUmVzaWR1ZUY2ID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSg5KSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMSksIGYxc2l6ZSApLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcFR3b0ludiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoICBtb2RJbnYoMm4sIHEpKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCAwbiwgZjFzaXplIClcbiAgICBdKTtcblxuICAgIGNvbnN0IHBBbHRCbjEyOFR3aXN0ID0gcE5vblJlc2lkdWVGNjtcblxuICAgIGNvbnN0IHBUd2lzdENvZWZCID0gbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxOTQ4NTg3NDc1MTc1OTM1NDc3MTAyNDIzOTI2MTAyMTcyMDUwNTc5MDYxODQ2OTMwMTcyMTA2NTU2NDYzMTI5NjQ1MjQ1NzQ3ODM3M24pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgyNjY5Mjk3OTExMTk5OTExNjEyNDY5MDczODcxMzcyODM4NDI1NDUwNzY5NjUzMzI5MDAyODg1NjkzNzg1MTA5MTAzMDc2MzY2OTBuKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBidWlsZF9tdWxOUjYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsTlI2XCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKFxuICAgICAgICAgICAgICAgIGYybVByZWZpeCArIFwiX211bFwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJwclwiKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZF9tdWxOUjYoKTtcblxuICAgIGNvbnN0IGY2bVByZWZpeCA9IGJ1aWxkRjNtKG1vZHVsZSwgcHJlZml4K1wiX211bE5SNlwiLCBcImY2bVwiLCBcImYybVwiKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkX211bE5SMTIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4ICsgXCJfbXVsTlIxMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9tdWxcIixcbiAgICAgICAgICAgICAgICBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KG44KjQpKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjIpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QobjgqMikpLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44KjQpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgYnVpbGRfbXVsTlIxMigpO1xuXG4gICAgY29uc3QgZnRtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBwcmVmaXgrXCJfbXVsTlIxMlwiLCBcImZ0bVwiLCBmNm1QcmVmaXgpO1xuXG5cbiAgICBjb25zdCBhdGVMb29wQ291bnQgPSAyOTc5Mzk2ODIwMzE1NzA5MzI4OG47XG4gICAgY29uc3QgYXRlTG9vcEJpdEJ5dGVzID0gYml0cyhhdGVMb29wQ291bnQpO1xuICAgIGNvbnN0IHBBdGVMb29wQml0Qnl0ZXMgPSBtb2R1bGUuYWxsb2MoYXRlTG9vcEJpdEJ5dGVzKTtcbiAgICBjb25zdCBpc0xvb3BOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXRlQ29lZlNpemUgPSAzICogZjJzaXplO1xuICAgIGNvbnN0IGF0ZU5EYmxDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5sZW5ndGgtMTtcbiAgICBjb25zdCBhdGVOQWRkQ29lZnMgPSBhdGVMb29wQml0Qnl0ZXMucmVkdWNlKChhY2MsIGIpID0+ICBhY2MgKyAoIGIhPTAgPyAxIDogMCkgICAsMCk7XG4gICAgY29uc3QgYXRlTkNvZWZzID0gYXRlTkFkZENvZWZzICsgYXRlTkRibENvZWZzICsgMTtcbiAgICBjb25zdCBwcmVQU2l6ZSA9IDMqMipuODtcbiAgICBjb25zdCBwcmVRU2l6ZSA9IDMqbjgqMiArIGF0ZU5Db2VmcyphdGVDb2VmU2l6ZTtcbiAgICBjb25zdCBmaW5hbEV4cElzTmVnYXRpdmUgPSBmYWxzZTtcblxuXG4gICAgbW9kdWxlLm1vZHVsZXNbcHJlZml4XSA9IHtcbiAgICAgICAgbjY0OiBuNjQsXG4gICAgICAgIHBHMWdlbjogcEcxZ2VuLFxuICAgICAgICBwRzF6ZXJvOiBwRzF6ZXJvLFxuICAgICAgICBwRzFiOiBwRzFiLFxuICAgICAgICBwRzJnZW46IHBHMmdlbixcbiAgICAgICAgcEcyemVybzogcEcyemVybyxcbiAgICAgICAgcEcyYjogcEcyYixcbiAgICAgICAgcHE6IG1vZHVsZS5tb2R1bGVzW1wiZjFtXCJdLnBxLFxuICAgICAgICBwcjogcHIsXG4gICAgICAgIHBPbmVUOiBwT25lVCxcbiAgICAgICAgcHJlUFNpemU6IHByZVBTaXplLFxuICAgICAgICBwcmVRU2l6ZTogcHJlUVNpemUsXG4gICAgICAgIHI6IHIudG9TdHJpbmcoKSxcbiAgICAgICAgcTogcS50b1N0cmluZygpXG4gICAgfTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiUHJlUFNpemU6IFwiICtwcmVQU2l6ZSk7XG4gICAgLy8gY29uc29sZS5sb2coXCJQcmVRU2l6ZTogXCIgK3ByZVFTaXplKTtcblxuICAgIGNvbnN0IGZpbmFsRXhwWiA9IDQ5NjU2NjEzNjcxOTI4NDg4ODFuO1xuXG4gICAgZnVuY3Rpb24gbmFmKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDIgLSBOdW1iZXIoRSAlIDRuKTtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggeiApO1xuICAgICAgICAgICAgICAgIEUgPSBFIC0gQmlnSW50KHopO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCggMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRSA9IEUgPj4gMW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiaXRzKG4pIHtcbiAgICAgICAgbGV0IEUgPSBuO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKEUgPiAwbikge1xuICAgICAgICAgICAgaWYgKGlzT2RkKEUpKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDEgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEUgPSBFID4+IDFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBjLmdldExvY2FsKFwicFBcIiksIGMuZ2V0TG9jYWwoXCJwcHJlUFwiKSksICAvLyBUT0RPIFJlbW92ZSBpZiBhbHJlYWR5IGluIGFmZmluZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcEFkZFN0ZXAoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwQWRkU3RlcFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQ29lZlwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFgyICA9IGMuZ2V0TG9jYWwoXCJwUVwiKTtcbiAgICAgICAgY29uc3QgWTIgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgWDEgID0gYy5nZXRMb2NhbChcInBSXCIpO1xuICAgICAgICBjb25zdCBZMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgWjEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcblxuICAgICAgICBjb25zdCBFTExfMCAgPSBjLmdldExvY2FsKFwicENvZWZcIik7XG4gICAgICAgIGNvbnN0IEVMTF9WVyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBFTExfVlYgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcblxuICAgICAgICBjb25zdCBEID0gRUxMX1ZXO1xuICAgICAgICBjb25zdCBFID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBGID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBHID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBJID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBKID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gRCA9IFgxIC0gWDIqWjFcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWDIsIFoxLCBEKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgWDEsIEQsIEQpLFxuXG4gICAgICAgICAgICAvLyBFID0gWTEgLSBZMipaMVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBZMiwgWjEsIEUpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBZMSwgRSwgRSksXG5cbiAgICAgICAgICAgIC8vIEYgPSBEXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRCwgRiksXG5cbiAgICAgICAgICAgIC8vIEcgPSBFXjJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRSwgRyksXG5cbiAgICAgICAgICAgIC8vIEggPSBEKkZcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgRCwgRiwgSCksXG5cbiAgICAgICAgICAgIC8vIEkgPSBYMSAqIEZcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWDEsIEYsIEkpLFxuXG4gICAgICAgICAgICAvLyBKID0gSCArIFoxKkcgLSAoSStJKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBJLCBJLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBaMSwgRywgSiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEgsIEosIEopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBKLCBBVVgsIEopLFxuXG5cbiAgICAgICAgICAgIC8vIFgzIChYMSkgPSBEKkpcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgRCwgSiwgWDEpLFxuXG4gICAgICAgICAgICAvLyBZMyAoWTEpID0gRSooSS1KKS0oSCpZMSlcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgSCwgWTEsIFkxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgSSwgSiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgRSwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBBVVgsIFkxLCBZMSksXG5cbiAgICAgICAgICAgIC8vIFozIChaMSkgPSBaMSpIXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFoxLCBILCBaMSksXG5cbiAgICAgICAgICAgIC8vIGVsbF8wID0geGkgKiAoRSAqIFgyIC0gRCAqIFkyKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBELCBZMiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgRSwgWDIsIEVMTF8wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgRUxMXzAsIEFVWCwgRUxMXzApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBFTExfMCwgYy5pMzJfY29uc3QocEFsdEJuMTI4VHdpc3QpLCBFTExfMCksXG5cblxuICAgICAgICAgICAgLy8gZWxsX1ZWID0gLSBFIChsYXRlcjogKiB4UClcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9uZWdcIiwgRSwgRUxMX1ZWKSxcblxuICAgICAgICAgICAgLy8gZWxsX1ZXID0gRCAobGF0ZXI6ICogeVAgICAgKVxuICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZFxuXG4gICAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcERvdWJsZVN0ZXAoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwRGJsU3RlcFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicENvZWZcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBYMSAgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IFkxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBaMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEVMTF8wICA9IGMuZ2V0TG9jYWwoXCJwQ29lZlwiKTtcbiAgICAgICAgY29uc3QgRUxMX1ZXID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEVMTF9WViAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IEEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEUgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEUyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBBID0gWDEgKiBZMSAvIDJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWTEsIGMuaTMyX2NvbnN0KHBUd29JbnYpLCBBKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgWDEsIEEsIEEpLFxuXG4gICAgICAgICAgICAvLyBCID0gWTFeMlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBZMSwgQiksXG5cbiAgICAgICAgICAgIC8vIEMgPSBaMV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFoxLCBDKSxcblxuICAgICAgICAgICAgLy8gRCA9IDMgKiBDXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEMsIEMsIEQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBELCBDLCBEKSxcblxuICAgICAgICAgICAgLy8gRSA9IHR3aXN0X2IgKiBEXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBUd2lzdENvZWZCKSwgRCwgRSksXG5cbiAgICAgICAgICAgIC8vIEYgPSAzICogRVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBFLCBFLCBGKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRSwgRiwgRiksXG5cbiAgICAgICAgICAgIC8vIEcgPSAoQitGKS8yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEIsIEYsIEcpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBHLCBjLmkzMl9jb25zdChwVHdvSW52KSwgRyksXG5cbiAgICAgICAgICAgIC8vIEggPSAoWTErWjEpXjItKEIrQylcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgQiwgQywgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgWTEsIFoxLCBIKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgSCwgSCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIEgsIEFVWCwgSCksXG5cbiAgICAgICAgICAgIC8vIEkgPSBFLUJcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgRSwgQiwgSSksXG5cbiAgICAgICAgICAgIC8vIEogPSBYMV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFgxLCBKKSxcblxuICAgICAgICAgICAgLy8gRV9zcXVhcmVkID0gRV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEUsIEUyKSxcblxuICAgICAgICAgICAgLy8gWDMgKFgxKSA9IEEgKiAoQi1GKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBCLCBGLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBLCBBVVgsIFgxKSxcblxuICAgICAgICAgICAgLy8gWTMgKFkxKSA9IEdeMiAtIDMqRV4yXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEUyLCBFMiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgRTIsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgRywgWTEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBZMSwgQVVYLCBZMSksXG5cbiAgICAgICAgICAgIC8vIFozIChaMSkgPSBCICogSFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBCLCBILCBaMSksXG5cbiAgICAgICAgICAgIC8vIGVsbF8wID0geGkgKiBJXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBBbHRCbjEyOFR3aXN0KSwgSSwgRUxMXzApLFxuXG4gICAgICAgICAgICAvLyBlbGxfVlcgPSAtIEggKGxhdGVyOiAqIHlQKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBILCBFTExfVlcpLFxuXG4gICAgICAgICAgICAvLyBlbGxfVlYgPSAzKkogKGxhdGVyOiAqIHhQKVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBKLCBKLCBFTExfVlYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBKLCBFTExfVlYsIEVMTF9WViksXG5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bEJ5USgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXggKyBcIl9tdWxCeVFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwMVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInByXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IGMuZ2V0TG9jYWwoXCJwMVwiKTtcbiAgICAgICAgY29uc3QgeSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicDFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB6ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwMVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKjIpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHkzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHozID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoZjJzaXplKjIpKTtcblxuICAgICAgICBjb25zdCBNdWxCeVFYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoXCIyMTU3NTQ2MzYzODI4MDg0MzAxMDM5ODMyNDI2OTQzMDgyNjA5OTI2OTA0NDI3NDM0NzIxNjgyNzIxMjYxMzg2NzgzNjQzNTAyNzI2MVwiKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KFwiMTAzMDc2MDE1OTU4NzM3MDk3MDAxNTIyODQyNzM4MTYxMTIyNjQwNjkyMzAxMzA2MTY0MzY3NTU2MjUxOTQ4NTQ4MTU4NzU3MTM5NTRcIiksIGYxc2l6ZSApLFxuICAgICAgICBdKSk7XG5cbiAgICAgICAgY29uc3QgTXVsQnlRWSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KFwiMjgyMTU2NTE4MjE5NDUzNjg0NDU0ODE1OTU2MTY5MzUwMjY1OTM1OTYxNzE4NTI0NDEyMDM2NzA3ODA3OTU1NDE4NjQ4NDEyNjU1NFwiKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KFwiMzUwNTg0Mzc2NzkxMTU1NjM3ODY4NzAzMDMwOTk4NDI0ODg0NTU0MDI0MzUwOTg5OTI1OTY0MTAxMzY3ODA5MzAzMzEzMDkzMDQwM1wiKSwgZjFzaXplICksXG4gICAgICAgIF0pKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyBUaGUgZnJvYmVuaXVzTWFwKDEpIGluIHRoaXMgZmllbGQsIGlzIHRoZSBjb25qdWdhdGVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgeCwgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBNdWxCeVFYLCB4MywgeDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCB5LCB5MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIE11bEJ5UVksIHkzLCB5MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHosIHozKSxcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcGFyZUcyKCkge1xuICAgICAgICBidWlsZE11bEJ5USgpO1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcGFyZUcyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcHJlUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBDb2VmXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFFYID0gYy5nZXRMb2NhbChcInBRXCIpO1xuXG4gICAgICAgIGNvbnN0IHBSID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSozKTtcbiAgICAgICAgY29uc3QgUiA9IGMuaTMyX2NvbnN0KHBSKTtcbiAgICAgICAgY29uc3QgUlggPSBjLmkzMl9jb25zdChwUik7XG4gICAgICAgIGNvbnN0IFJZID0gYy5pMzJfY29uc3QocFIrZjJzaXplKTtcbiAgICAgICAgY29uc3QgUlogPSBjLmkzMl9jb25zdChwUisyKmYyc2l6ZSk7XG5cbiAgICAgICAgY29uc3QgY1FYID0gYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KDApKTtcbiAgICAgICAgY29uc3QgY1FZID0gYy5pMzJfYWRkKCBjLmdldExvY2FsKFwicHByZVFcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IHBRMSA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMyk7XG4gICAgICAgIGNvbnN0IFExID0gYy5pMzJfY29uc3QocFExKTtcblxuICAgICAgICBjb25zdCBwUTIgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBRMiA9IGMuaTMyX2NvbnN0KHBRMik7XG4gICAgICAgIGNvbnN0IFEyWSA9IGMuaTMyX2NvbnN0KHBRMiArIGYyc2l6ZSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX25vcm1hbGl6ZVwiLCBRWCwgY1FYKSwgIC8vIFRPRE8gUmVtb3ZlIGlmIGFscmVhZHkgaW4gYWZmaW5lXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29weVwiLCBjUVgsIFJYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIGNRWSwgUlkpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX29uZVwiLCBSWiksXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGF0ZUxvb3BCaXRCeXRlcy5sZW5ndGgtMikpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG5cbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfcHJlcERibFN0ZXBcIiwgUiwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwQXRlTG9vcEJpdEJ5dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX3ByZXBBZGRTdGVwXCIsIGNRWCwgUiwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXogKCBjLmdldExvY2FsKFwiaVwiKSApKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfbXVsQnlRXCIsIGNRWCwgUTEpLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX211bEJ5UVwiLCBRMSwgUTIpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzTG9vcE5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCBSWSwgUlkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9uZWdcIiwgUTJZLCBRMlkpLFxuXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfcHJlcEFkZFN0ZXBcIiwgUTEsIFIsIGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwQWRkU3RlcFwiLCBRMiwgUiwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZE11bEJ5MDI0T2xkKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX211bEJ5MDI0T2xkXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEVsbDBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRWxsVldcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRWxsVlZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUlwiLCBcImkzMlwiKTsgICAgICAgICAgICAvLyBSZXN1bHQgaW4gRjEyXG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCAgPSBjLmdldExvY2FsKFwicEVsbDBcIik7XG4gICAgICAgIGNvbnN0IHgyICA9IGMuZ2V0TG9jYWwoXCJwRWxsVlZcIik7XG4gICAgICAgIGNvbnN0IHg0ICA9IGMuZ2V0TG9jYWwoXCJwRWxsVldcIik7XG5cbiAgICAgICAgY29uc3QgejAgID0gYy5nZXRMb2NhbChcInBSXCIpO1xuXG4gICAgICAgIGNvbnN0IHBBVVgxMiA9IG1vZHVsZS5hbGxvYyhmdHNpemUpO1xuICAgICAgICBjb25zdCBBVVgxMiA9IGMuaTMyX2NvbnN0KHBBVVgxMik7XG4gICAgICAgIGNvbnN0IEFVWDEyXzAgPSBjLmkzMl9jb25zdChwQVVYMTIpO1xuICAgICAgICBjb25zdCBBVVgxMl8yID0gYy5pMzJfY29uc3QocEFVWDEyK2Yyc2l6ZSk7XG4gICAgICAgIGNvbnN0IEFVWDEyXzQgPSBjLmkzMl9jb25zdChwQVVYMTIrZjJzaXplKjIpO1xuICAgICAgICBjb25zdCBBVVgxMl82ID0gYy5pMzJfY29uc3QocEFVWDEyK2Yyc2l6ZSozKTtcbiAgICAgICAgY29uc3QgQVVYMTJfOCA9IGMuaTMyX2NvbnN0KHBBVVgxMitmMnNpemUqNCk7XG4gICAgICAgIGNvbnN0IEFVWDEyXzEwID0gYy5pMzJfY29uc3QocEFVWDEyK2Yyc2l6ZSo1KTtcblxuICAgICAgICBmLmFkZENvZGUoXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9jb3B5XCIsIHgwLCBBVVgxMl8wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl96ZXJvXCIsIEFVWDEyXzIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2NvcHlcIiwgeDIsIEFVWDEyXzQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3plcm9cIiwgQVVYMTJfNiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfY29weVwiLCB4NCwgQVVYMTJfOCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfemVyb1wiLCBBVVgxMl8xMCksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEFVWDEyLCB6MCwgejApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTXVsQnkwMjQoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fbXVsQnkwMjRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRWxsMFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWV1wiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBFbGxWVlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAgICAgICAgIC8vIFJlc3VsdCBpbiBGMTJcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwICA9IGMuZ2V0TG9jYWwoXCJwRWxsMFwiKTtcbiAgICAgICAgY29uc3QgeDIgID0gYy5nZXRMb2NhbChcInBFbGxWVlwiKTtcbiAgICAgICAgY29uc3QgeDQgID0gYy5nZXRMb2NhbChcInBFbGxWV1wiKTtcblxuICAgICAgICBjb25zdCB6MCAgPSBjLmdldExvY2FsKFwicFJcIik7XG4gICAgICAgIGNvbnN0IHoxICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDIqbjgpKTtcbiAgICAgICAgY29uc3QgejIgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoNCpuOCkpO1xuICAgICAgICBjb25zdCB6MyAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBSXCIpLCBjLmkzMl9jb25zdCg2Km44KSk7XG4gICAgICAgIGNvbnN0IHo0ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KDgqbjgpKTtcbiAgICAgICAgY29uc3QgejUgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoMTAqbjgpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBzMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgVDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IFQ0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBEMCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgRDIgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEQ0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBTMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgQVVYID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgLy8gRDAgPSB6MCAqIHgwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MCwgeDAsIEQwKSxcbiAgICAgICAgICAgIC8vIEQyID0gejIgKiB4MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejIsIHgyLCBEMiksXG4gICAgICAgICAgICAvLyBENCA9IHo0ICogeDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHo0LCB4NCwgRDQpLFxuICAgICAgICAgICAgLy8gdDIgPSB6MCArIHo0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB6MCwgejQsIHQyKSxcbiAgICAgICAgICAgIC8vIHQxID0gejAgKyB6MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgejAsIHoyLCB0MSksXG4gICAgICAgICAgICAvLyBzMCA9IHoxICsgejMgKyB6NTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgejEsIHozLCBzMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHMwLCB6NSwgczApLFxuXG5cbiAgICAgICAgICAgIC8vIEZvciB6LmFfLmFfID0gejAuXG4gICAgICAgICAgICAvLyBTMSA9IHoxICogeDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHoxLCB4MiwgUzEpLFxuICAgICAgICAgICAgLy8gVDMgPSBTMSArIEQ0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBTMSwgRDQsIFQzKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIFQzICsgRDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCBUMywgVDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUNCwgRDAsIHowKSxcbiAgICAgICAgICAgIC8vIHowID0gVDQ7XG5cbiAgICAgICAgICAgIC8vIEZvciB6LmFfLmJfID0gejFcbiAgICAgICAgICAgIC8vIFQzID0gejUgKiB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejUsIHg0LCBUMyksXG4gICAgICAgICAgICAvLyBTMSA9IFMxICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFMxLCBUMywgUzEpLFxuICAgICAgICAgICAgLy8gVDMgPSBUMyArIEQyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUMywgRDIsIFQzKSxcbiAgICAgICAgICAgIC8vIFQ0ID0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBjLmkzMl9jb25zdChwTm9uUmVzaWR1ZUY2KSwgVDMsIFQ0KSxcbiAgICAgICAgICAgIC8vIFQzID0gejEgKiB4MDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgejEsIHgwLCBUMyksXG4gICAgICAgICAgICAvLyBTMSA9IFMxICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFMxLCBUMywgUzEpLFxuICAgICAgICAgICAgLy8gVDQgPSBUNCArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUNCwgVDMsIHoxKSxcbiAgICAgICAgICAgIC8vIHoxID0gVDQ7XG5cblxuXG4gICAgICAgICAgICAvLyBGb3Igei5hXy5jXyA9IHoyXG4gICAgICAgICAgICAvLyB0MCA9IHgwICsgeDI7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MiwgdDApLFxuICAgICAgICAgICAgLy8gVDMgPSB0MSAqIHQwIC0gRDAgLSBEMjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQwLCBUMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEQwLCBEMiwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgVDMsIEFVWCwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSB6MyAqIHg0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MywgeDQsIFQ0KSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUNDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQ0LCBTMSksXG5cblxuICAgICAgICAgICAgLy8gRm9yIHouYl8uYV8gPSB6MyAoejMgbmVlZHMgejIpXG4gICAgICAgICAgICAvLyB0MCA9IHoyICsgejQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHoyLCB6NCwgdDApLFxuICAgICAgICAgICAgLy8gVDMgPSBUMyArIFQ0O1xuICAgICAgICAgICAgLy8gejIgPSBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgVDMsIFQ0LCB6MiksXG4gICAgICAgICAgICAvLyB0MSA9IHgyICsgeDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB4NCwgdDEpLFxuICAgICAgICAgICAgLy8gVDMgPSB0MCAqIHQxIC0gRDIgLSBENDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDEsIHQwLCBUMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEQyLCBENCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgVDMsIEFVWCwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBteV9GcDY6Om5vbl9yZXNpZHVlICogVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCBUMywgVDQpLFxuICAgICAgICAgICAgLy8gVDMgPSB6MyAqIHgwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6MywgeDAsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUNCA9IFQ0ICsgVDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFQ0LCBUMywgejMpLFxuICAgICAgICAgICAgLy8gejMgPSBUNDtcblxuICAgICAgICAgICAgLy8gRm9yIHouYl8uYl8gPSB6NFxuICAgICAgICAgICAgLy8gVDMgPSB6NSAqIHgyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6NSwgeDIsIFQzKSxcbiAgICAgICAgICAgIC8vIFMxID0gUzEgKyBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUzEsIFQzLCBTMSksXG4gICAgICAgICAgICAvLyBUNCA9IG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiBUMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIFQzLCBUNCksXG4gICAgICAgICAgICAvLyB0MCA9IHgwICsgeDQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4NCwgdDApLFxuICAgICAgICAgICAgLy8gVDMgPSB0MiAqIHQwIC0gRDAgLSBENDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDIsIHQwLCBUMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEQwLCBENCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgVDMsIEFVWCwgVDMpLFxuICAgICAgICAgICAgLy8gVDQgPSBUNCArIFQzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBUNCwgVDMsIHo0KSxcbiAgICAgICAgICAgIC8vIHo0ID0gVDQ7XG5cbiAgICAgICAgICAgIC8vIEZvciB6LmJfLmNfID0gejUuXG4gICAgICAgICAgICAvLyB0MCA9IHgwICsgeDIgKyB4NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHgyLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQwLCB4NCwgdDApLFxuICAgICAgICAgICAgLy8gVDMgPSBzMCAqIHQwIC0gUzE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHMwLCB0MCwgVDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBUMywgUzEsIHo1KSxcbiAgICAgICAgICAgIC8vIHo1ID0gVDM7XG5cbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTWlsbGVyTG9vcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX21pbGxlckxvb3BcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcHJlUFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcInBDb2VmXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwiaVwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHByZVBfUFggPSBjLmdldExvY2FsKFwicHByZVBcIik7XG4gICAgICAgIGNvbnN0IHByZVBfUFkgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBwcmVQXCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcblxuICAgICAgICBjb25zdCBFTExfMCAgPSBjLmdldExvY2FsKFwicENvZWZcIik7XG4gICAgICAgIGNvbnN0IEVMTF9WVyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBFTExfVlYgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcblxuXG4gICAgICAgIGNvbnN0IHBWVyA9IG1vZHVsZS5hbGxvYyhmMnNpemUpO1xuICAgICAgICBjb25zdCBWVyA9IGMuaTMyX2NvbnN0KHBWVyk7XG4gICAgICAgIGNvbnN0IHBWViA9IG1vZHVsZS5hbGxvYyhmMnNpemUpO1xuICAgICAgICBjb25zdCBWViA9IGMuaTMyX2NvbnN0KHBWVik7XG5cbiAgICAgICAgY29uc3QgRiA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX29uZVwiLCBGKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZCggYy5nZXRMb2NhbChcInBwcmVRXCIpLCBjLmkzMl9jb25zdChmMnNpemUqMykpKSxcblxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX3NxdWFyZVwiLCBGLCBGKSxcblxuICAgICAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WVyxwcmVQX1BZLCBWVyksXG4gICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZWLCBwcmVQX1BYLCBWViksXG4gICAgICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19tdWxCeTAyNFwiLCBFTExfMCwgVlcsIFZWLCBGKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwQXRlTG9vcEJpdEJ5dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLCBwcmVQX1BZLCBWVyksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX19tdWxCeTAyNFwiLCBFTExfMCwgVlcsIFZWLCBGKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzTG9vcE5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2ludmVyc2VcIiwgRiwgRiksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZXLCBwcmVQX1BZLCBWVyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsMVwiLCBFTExfVlYsIHByZVBfUFgsIFZWKSxcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fbXVsQnkwMjRcIiwgRUxMXzAsIFZXLCBWViwgRiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIEVMTF9WVywgcHJlUF9QWSwgVlcpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bDFcIiwgRUxMX1ZWLCBwcmVQX1BYLCBWViksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX211bEJ5MDI0XCIsIEVMTF8wLCBWVywgVlYsIEYpLFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuXG4gICAgICAgICk7XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRnJvYmVuaXVzTWFwKG4pIHtcbiAgICAgICAgY29uc3QgRjEyID0gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbODM3NjExODg2NTc2MzgyMTQ5NjU4Mzk3Mzg2NzYyNjM2NDA5MjU4OTkwNjA2NTg2ODI5ODc3NjkwOTYxNzkxNjAxODc2ODM0MDA4MG4sIDE2NDY5ODIzMzIzMDc3ODA4MjIzODg5MTM3MjQxMTc2NTM2Nzk5MDA5Mjg2NjQ2MTA4MTY5OTM1NjU5MzAxNjEzOTYxNzEyMTk4MzE2bl0sXG4gICAgICAgICAgICAgICAgWzIxODg4MjQyODcxODM5Mjc1MjIwMDQyNDQ1MjYwMTA5MTUzMTY3Mjc3NzA3NDE0NDcyMDYxNjQxNzE0NzU4NjM1NzY1MDIwNTU2NjE3biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxMTY5NzQyMzQ5NjM1ODE1NDMwNDgyNTc4MjkyMjU4NDcyNTMxMjkxMjM4MzQ0MTE1OTUwNTAzODc5NDAyNzEwNTc3ODk1NDE4NDMxOW4sIDMwMzg0NzM4OTEzNTA2NTg4NzQyMjc4MzQ1NDg3NzYwOTk0MTQ1NjM0OTE4ODkxOTcxOTI3MjM0NTA4Mzk1NDQzNzg2MDQwOTYwMW5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMDA0MjQ0NTI2MDEwOTE1MzE2NzI3NzcwNzQxNDQ3MjA2MTY0MTcxNDc1ODYzNTc2NTAyMDU1NjYxNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMzMyMTMwNDYzMDU5NDMzMjgwODI0MTgwOTA1NDk1ODM2MTIyMDMyMjQ3NzM3NTI5MTIwNjI2MTg4NDQwOTE4OTc2MDE4NTg0NDIzOW4sIDU3MjIyNjY5Mzc4OTY1MzI4ODU3ODAwNTE5NTg5NTgzNDgyMzExNDMzNzM3MDAxMDkzNzI5OTkzNzQ4MjAyMzUxMjEzNzQ0MTk4NjhuXSxcbiAgICAgICAgICAgICAgICBbMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODJuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzEzNTEyMTI0MDA2MDc1NDUzNzI1NjYyNDMxODc3NjMwOTEwOTk2MTA2NDA1MDkxNDI5NTI0ODg1Nzc5NDE5OTc4NjI2NDU3ODY4NTAzbiwgNTQxODQxOTU0ODc2MTQ2Njk5ODM1NzI2ODUwNDA4MDczODI4OTY4NzAyNDUxMTE4OTY1MzcyNzAyOTczNjI4MDY4MzUxNDAxMDI2N25dLFxuICAgICAgICAgICAgICAgIFsyMjAzOTYwNDg1MTQ4MTIxOTIxNDE4NjAzNzQyODI1NzYyMDIwOTc0Mjc5MjU4ODgwMjA1NjUxOTY2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxMDE5MDgxOTM3NTQ4MTEyMDkxNzQyMDYyMjgyMjY3MjU0OTc3NTc4MzkyNzcxNjEzODMxODYyMzg5NTAxMDc4ODg2NjI3MjAyNDI2NG4sIDIxNTg0Mzk1NDgyNzA0MjA5MzM0ODIzNjIyMjkwMzc5NjY1MTQ3MjM5OTYxOTY4Mzc4MTA0MzkwMzQzOTUzOTQwMjA3MzY1Nzk4OTgybl0sXG4gICAgICAgICAgICAgICAgWzIyMDM5NjA0ODUxNDgxMjE5MjE0MTg2MDM3NDI4MjU3NjIwMjA5NzQyNzkyNTg4ODAyMDU2NTE5NjduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzE4NTY2OTM4MjQxMjQ0OTQyNDE0MDA0NTk2NjkwMjk4OTEzODY4MzczODMzNzgyMDA2NjE3NDAwODA0NjI4NzA0ODg1MDQwMzY0MzQ0biwgMTYxNjU5NzU5MzM5NDI3NDIzMzY0NjYzNTM3ODYyOTg5MjY4NTc1NTI5Mzc0NTcxODg0NTA2NjMzMTQyMTc2NTk1MjM4NTE3ODg3MTVuXSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBGNiA9IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzIxNTc1NDYzNjM4MjgwODQzMDEwMzk4MzI0MjY5NDMwODI2MDk5MjY5MDQ0Mjc0MzQ3MjE2ODI3MjEyNjEzODY3ODM2NDM1MDI3MjYxbiwgMTAzMDc2MDE1OTU4NzM3MDk3MDAxNTIyODQyNzM4MTYxMTIyNjQwNjkyMzAxMzA2MTY0MzY3NTU2MjUxOTQ4NTQ4MTU4NzU3MTM5NTRuXSxcbiAgICAgICAgICAgICAgICBbMjE4ODgyNDI4NzE4MzkyNzUyMjAwNDI0NDUyNjAxMDkxNTMxNjcyNzc3MDc0MTQ0NzIwNjE2NDE3MTQ3NTg2MzU3NjUwMjA1NTY2MTZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzM3NzIwMDA4ODE5MTk4NTM3NzY0MzM2OTUxODY3MTM4NTgyMzkwMDkwNzM1OTM4MTcxOTU3NzE3NzMzODE5MTkzMTY0MTkzNDUyNjFuLCAyMjM2NTk1NDk1OTY3MjQ1MTg4MjgxNzAxMjQ4MjAzMTgxNzk1MTIxMDY4OTAyNjA1ODYxMjI3ODU1MjYxMTM3ODIwOTQ0MDA4OTI2bl0sXG4gICAgICAgICAgICAgICAgWzIyMDM5NjA0ODUxNDgxMjE5MjE0MTg2MDM3NDI4MjU3NjIwMjA5NzQyNzkyNTg4ODAyMDU2NTE5NjZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzE4NDI5MDIxMjIzNDc3ODUzNjU3NjYwNzkyMDM0MzY5ODY1ODM5MTE0NTA0NDQ2NDMxMjM0NzI2MzkyMDgwMDAyMTM3NTk4MDQ0NjQ0biwgOTM0NDA0NTc3OTk5ODMyMDMzMzgxMjQyMDIyMzIzNzk4MTAyOTUwNjAxMjEyNDA3NTUyNTY3OTIwODU4MTkwMjAwODQwNjQ4NTcwM25dLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMjU4MTkxMTM0NDQ2NzAwOTMzNTI2NzMxMTExNTQ2ODgwMzA5OTU1MTY2NTYwNTA3NjE5Njc0MDg2NzgwNTI1ODU2ODIzNDM0NjMzOG4sIDE5OTM3NzU2OTcxNzc1NjQ3OTg3OTk1OTMyMTY5OTI5MzQxOTk0MzE0NjQwNjUyOTY0OTQ5NDQ4MzEzMzc0NDcyNDAwNzE2NjYxMDMwbl0sXG4gICAgICAgICAgICAgICAgWzIyMDM5NjA0ODUxNDgxMjE5MjE0MTg2MDM3NDI4MjU3NjIwMjA5NzQyNzkyNTg4ODAyMDU2NTE5NjZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzUzMjQ0NzkyMDI0NDk5MDM1NDI3MjY3ODMzOTU1MDYyMTQ0ODE5MjgyNTc3NjI0MDA2NDMyNzk3ODAzNDMzNjg1NTcyOTcxMzU3MThuLCAxNjIwODkwMDM4MDczNzY5MzA4NDkxOTQ5NTEyNzMzNDM4Nzk4MTM5MzcyNjQxOTg1Njg4ODc5OTkxNzkxNDE4MDk4ODg0NDEyMzAzOW5dLFxuICAgICAgICAgICAgICAgIFsyMTg4ODI0Mjg3MTgzOTI3NTIyMDA0MjQ0NTI2MDEwOTE1MzE2NzI3NzcwNzQxNDQ3MjA2MTY0MTcxNDc1ODYzNTc2NTAyMDU1NjYxNm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTM5ODE4NTIzMjQ5MjIzNjIzNDQyNTIzMTEyMzQyODIyNTc1MDcyMTYzODc3ODk4MjA5ODM2NDIwNDA4ODkyNjc1MTk2OTQ3MjY1MjduLCA3NjI5ODI4MzkxMTY1MjA5MzcxNTc3Mzg0MTkzMjUwODIwMjAxNjg0MjU1MjQxNzczODA5MDc3MTQ2Nzg3MTM1OTAwODkxNjMzMDk3bl0sXG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19mcm9iZW5pdXNNYXBcIituKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgWCA9IChpPT0wKSA/IGMuZ2V0TG9jYWwoXCJ4XCIpIDogYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgWGMwID0gWDtcbiAgICAgICAgICAgIGNvbnN0IFhjMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUgKyBmMXNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFIgPSAoaT09MCkgPyBjLmdldExvY2FsKFwiclwiKSA6IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFJjMCA9IFI7XG4gICAgICAgICAgICBjb25zdCBSYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplICsgZjFzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gbXVsMihGMTJbTWF0aC5mbG9vcihpLzMpXVtuJTEyXSAsIEY2W2klM11bbiU2XSk7XG4gICAgICAgICAgICBjb25zdCBwQ29lZiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KGNvZWZbMF0pLCAzMiksXG4gICAgICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KGNvZWZbMV0pLCAzMiksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGlmIChuJTIgPT0gMSkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgWGMwLCBSYzApLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbmVnXCIsIFhjMSwgUmMxKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBSLCBjLmkzMl9jb25zdChwQ29lZiksIFIpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFgsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbXVsMihhLCBiKSB7XG4gICAgICAgICAgICBjb25zdCBhYzAgPSBCaWdJbnQoYVswXSk7XG4gICAgICAgICAgICBjb25zdCBhYzEgPSBCaWdJbnQoYVsxXSk7XG4gICAgICAgICAgICBjb25zdCBiYzAgPSBCaWdJbnQoYlswXSk7XG4gICAgICAgICAgICBjb25zdCBiYzEgPSBCaWdJbnQoYlsxXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXG4gICAgICAgICAgICAgICAgKGFjMCAqIGJjMCAtICggIGFjMSAqIGJjMSkgICkgJSBxLFxuICAgICAgICAgICAgICAgIChhYzAgKiBiYzEgKyAoICBhYzEgKiBiYzApICApICUgcSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZShyZXNbMF0pKSByZXNbMF0gPSByZXNbMF0gKyBxO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkZpcnN0Q2h1bmsoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19maW5hbEV4cG9uZW50aWF0aW9uRmlyc3RDaHVua1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgZWx0ID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IGVsdEMwID0gZWx0O1xuICAgICAgICBjb25zdCBlbHRDMSA9IGMuaTMyX2FkZChlbHQsIGMuaTMyX2NvbnN0KG44KjYpKTtcbiAgICAgICAgY29uc3QgciA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCBwQSA9IG1vZHVsZS5hbGxvYyhmdHNpemUpO1xuICAgICAgICBjb25zdCBBID0gYy5pMzJfY29uc3QocEEpO1xuICAgICAgICBjb25zdCBBYzAgPSBBO1xuICAgICAgICBjb25zdCBBYzEgPSBjLmkzMl9jb25zdChwQSArIG44KjYpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBEID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vIGNvbnN0IGFsdF9ibjEyOF9GcTEyIEEgPSBhbHRfYm4xMjhfRnExMihlbHQuYzAsLWVsdC5jMSk7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfY29weVwiLCBlbHRDMCwgQWMwKSxcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9uZWdcIiwgZWx0QzEsIEFjMSksXG5cbiAgICAgICAgICAgIC8vIGNvbnN0IGFsdF9ibjEyOF9GcTEyIEIgPSBlbHQuaW52ZXJzZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2ludmVyc2VcIiwgZWx0LCBCKSxcblxuICAgICAgICAgICAgLy8gY29uc3QgYWx0X2JuMTI4X0ZxMTIgQyA9IEEgKiBCO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBBLCBCLCBDKSxcbiAgICAgICAgICAgIC8vIGNvbnN0IGFsdF9ibjEyOF9GcTEyIEQgPSBDLkZyb2Jlbml1c19tYXAoMik7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDJcIiwgQywgRCksXG4gICAgICAgICAgICAvLyBjb25zdCBhbHRfYm4xMjhfRnExMiByZXN1bHQgPSBEICogQztcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgQywgRCwgciksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljU3F1YXJlKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHg0ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgzKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoNCpmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDUgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDUqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgcjQgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMyA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjIgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDMqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0KmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByNSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoNSpmMnNpemUpKTtcblxuICAgICAgICBjb25zdCB0MCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0bXAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vICAgIC8vIHQwICsgdDEqeSA9ICh6MCArIHoxKnkpXjIgPSBhXjJcbiAgICAgICAgICAgIC8vICAgIHRtcCA9IHowICogejE7XG4gICAgICAgICAgICAvLyAgICB0MCA9ICh6MCArIHoxKSAqICh6MCArIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB6MSkgLSB0bXAgLSBteV9GcDY6Om5vbl9yZXNpZHVlICogdG1wO1xuICAgICAgICAgICAgLy8gICAgdDEgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHgwLCB4MSwgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDEsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB0MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MCwgeDEsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDAsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQwLCBBVVgsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQxKSxcblxuICAgICAgICAgICAgLy8gIC8vIHQyICsgdDMqeSA9ICh6MiArIHozKnkpXjIgPSBiXjJcbiAgICAgICAgICAgIC8vICB0bXAgPSB6MiAqIHozO1xuICAgICAgICAgICAgLy8gIHQyID0gKHoyICsgejMpICogKHoyICsgbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHozKSAtIHRtcCAtIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB0bXA7XG4gICAgICAgICAgICAvLyAgdDMgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHgyLCB4MywgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDMsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgyLCB0MiwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MiwgeDMsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQyLCBBVVgsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQzKSxcblxuICAgICAgICAgICAgLy8gIC8vIHQ0ICsgdDUqeSA9ICh6NCArIHo1KnkpXjIgPSBjXjJcbiAgICAgICAgICAgIC8vICB0bXAgPSB6NCAqIHo1O1xuICAgICAgICAgICAgLy8gIHQ0ID0gKHo0ICsgejUpICogKHo0ICsgbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHo1KSAtIHRtcCAtIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB0bXA7XG4gICAgICAgICAgICAvLyAgdDUgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHg0LCB4NSwgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDUsIGMuaTMyX2NvbnN0KHBOb25SZXNpZHVlRjYpLCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4NCwgeDUsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDQsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgYy5pMzJfY29uc3QocE5vblJlc2lkdWVGNiksIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCBBVVgsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQ1KSxcblxuICAgICAgICAgICAgLy8gRm9yIEFcbiAgICAgICAgICAgIC8vIHowID0gMyAqIHQwIC0gMiAqIHowXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQwLCB4MCwgcjApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMCwgcjAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHIwLCByMCksXG4gICAgICAgICAgICAvLyB6MSA9IDMgKiB0MSArIDIgKiB6MVxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgeDEsIHIxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjEsIHIxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCByMSwgcjEpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQlxuICAgICAgICAgICAgLy8gejIgPSAzICogKHhpICogdDUpICsgMiAqIHoyXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQ1LCBjLmkzMl9jb25zdChwQWx0Qm4xMjhUd2lzdCksIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgeDIsIHIyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjIsIHIyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFVWCwgcjIsIHIyKSxcbiAgICAgICAgICAgIC8vIHozID0gMyAqIHQ0IC0gMiAqIHozXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ0LCB4MywgcjMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByMywgcjMsIHIzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHIzLCByMyksXG5cbiAgICAgICAgICAgIC8vIEZvciBDXG4gICAgICAgICAgICAvLyB6NCA9IDMgKiB0MiAtIDIgKiB6NFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgeDQsIHI0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjQsIHI0LCByNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQyLCByNCwgcjQpLFxuICAgICAgICAgICAgLy8gejUgPSAzICogdDMgKyAyICogejVcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHg1LCByNSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHI1LCByNSwgcjUpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgcjUsIHI1KSxcblxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRDeWNsb3RvbWljRXhwKGV4cG9uZW50LCBmbk5hbWUpIHtcbiAgICAgICAgY29uc3QgZXhwb25lbnROYWZCeXRlcyA9IG5hZihleHBvbmVudCkubWFwKCAoYikgPT4gKGI9PS0xID8gMHhGRjogYikgKTtcbiAgICAgICAgY29uc3QgcEV4cG9uZW50TmFmQnl0ZXMgPSBtb2R1bGUuYWxsb2MoZXhwb25lbnROYWZCeXRlcyk7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19jeWNsb3RvbWljRXhwX1wiK2ZuTmFtZSk7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImJpdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInhcIik7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYy5nZXRMb2NhbChcInJcIik7XG5cbiAgICAgICAgY29uc3QgaW52ZXJzZSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgeCwgaW52ZXJzZSksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIHJlcyksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTEpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlcywgaW52ZXJzZSwgcmVzKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChleHBvbmVudE5hZkJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgcmVzLCByZXMpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMudGVlTG9jYWwoXCJiaXRcIiwgYy5pMzJfbG9hZDhfcyhjLmdldExvY2FsKFwiaVwiKSwgcEV4cG9uZW50TmFmQnl0ZXMpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlcywgeCwgcmVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsRXhwb25lbnRpYXRpb25MYXN0Q2h1bmsoKSB7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY1NxdWFyZSgpO1xuICAgICAgICBidWlsZEN5Y2xvdG9taWNFeHAoZmluYWxFeHBaLCBcIncwXCIpO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9fZmluYWxFeHBvbmVudGlhdGlvbkxhc3RDaHVua1wiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgZWx0ID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCBBID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBCID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBDID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBEID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBFID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBGID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBHID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBIID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBJID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBKID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBLID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBMID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBNID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBOID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBPID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBQID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBRID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBSID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBTID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCBVID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuXG4gICAgICAgICAgICAvLyBBID0gZXhwX2J5X25lZ196KGVsdCkgIC8vID0gZWx0XigteilcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiLCBlbHQsIEEpLFxuICAgICAgICAgICAgZmluYWxFeHBJc05lZ2F0aXZlID8gW10gOiBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIEEsIEEpLFxuICAgICAgICAgICAgLy8gQiA9IEFeMiAgICAgICAgICAgICAgICAvLyA9IGVsdF4oLTIqeilcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiLCBBLCBCKSxcbiAgICAgICAgICAgIC8vIEMgPSBCXjIgICAgICAgICAgICAgICAgLy8gPSBlbHReKC00KnopXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgQiwgQyksXG4gICAgICAgICAgICAvLyBEID0gQyAqIEIgICAgICAgICAgICAgIC8vID0gZWx0XigtNip6KVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBDLCBCLCBEKSxcbiAgICAgICAgICAgIC8vIEUgPSBleHBfYnlfbmVnX3ooRCkgICAgLy8gPSBlbHReKDYqel4yKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIEQsIEUpLFxuICAgICAgICAgICAgZmluYWxFeHBJc05lZ2F0aXZlID8gW10gOiBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIEUsIEUpLFxuICAgICAgICAgICAgLy8gRiA9IEVeMiAgICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4yKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIsIEUsIEYpLFxuICAgICAgICAgICAgLy8gRyA9IGVweF9ieV9uZWdfeihGKSAgICAvLyA9IGVsdF4oLTEyKnpeMylcbiAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9fY3ljbG90b21pY0V4cF93MFwiLCBGLCBHKSxcbiAgICAgICAgICAgIGZpbmFsRXhwSXNOZWdhdGl2ZSA/IFtdIDogYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBHLCBHKSxcbiAgICAgICAgICAgIC8vIEggPSBjb25qKEQpICAgICAgICAgICAgLy8gPSBlbHReKDYqeilcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRCwgSCksXG4gICAgICAgICAgICAvLyBJID0gY29uaihHKSAgICAgICAgICAgIC8vID0gZWx0XigxMip6XjMpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIEcsIEkpLFxuICAgICAgICAgICAgLy8gSiA9IEkgKiBFICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgNip6XjIpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEksIEUsIEopLFxuICAgICAgICAgICAgLy8gSyA9IEogKiBIICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgNip6XjIgKyA2KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEosIEgsIEspLFxuICAgICAgICAgICAgLy8gTCA9IEsgKiBCICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgNip6XjIgKyA0KnopXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIEssIEIsIEwpLFxuICAgICAgICAgICAgLy8gTSA9IEsgKiBFICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgMTIqel4yICsgNip6KVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBLLCBFLCBNKSxcblxuICAgICAgICAgICAgLy8gTiA9IE0gKiBlbHQgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgMTIqel4yICsgNip6ICsgMSlcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgTSwgZWx0LCBOKSxcblxuICAgICAgICAgICAgLy8gTyA9IEwuRnJvYmVuaXVzX21hcCgxKSAvLyA9IGVsdF4ocSooMTIqel4zICsgNip6XjIgKyA0KnopKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19mcm9iZW5pdXNNYXAxXCIsIEwsIE8pLFxuICAgICAgICAgICAgLy8gUCA9IE8gKiBOICAgICAgICAgICAgICAvLyA9IGVsdF4ocSooMTIqel4zICsgNip6XjIgKyA0KnopICogKDEyKnpeMyArIDEyKnpeMiArIDYqeiArIDEpKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBPLCBOLCBQKSxcbiAgICAgICAgICAgIC8vIFEgPSBLLkZyb2Jlbml1c19tYXAoMikgLy8gPSBlbHReKHFeMiAqICgxMip6XjMgKyA2KnpeMiArIDYqeikpXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcDJcIiwgSywgUSksXG4gICAgICAgICAgICAvLyBSID0gUSAqIFAgICAgICAgICAgICAgIC8vID0gZWx0XihxXjIgKiAoMTIqel4zICsgNip6XjIgKyA2KnopICsgcSooMTIqel4zICsgNip6XjIgKyA0KnopICogKDEyKnpeMyArIDEyKnpeMiArIDYqeiArIDEpKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBRLCBQLCBSKSxcbiAgICAgICAgICAgIC8vIFMgPSBjb25qKGVsdCkgICAgICAgICAgLy8gPSBlbHReKC0xKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCBlbHQsIFMpLFxuICAgICAgICAgICAgLy8gVCA9IFMgKiBMICAgICAgICAgICAgICAvLyA9IGVsdF4oMTIqel4zICsgNip6XjIgKyA0KnogLSAxKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBTLCBMLCBUKSxcbiAgICAgICAgICAgIC8vIFUgPSBULkZyb2Jlbml1c19tYXAoMykgLy8gPSBlbHReKHFeMygxMip6XjMgKyA2KnpeMiArIDQqeiAtIDEpKVxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19mcm9iZW5pdXNNYXAzXCIsIFQsIFUpLFxuICAgICAgICAgICAgLy8gViA9IFUgKiBSICAgICAgICAgICAgICAvLyA9IGVsdF4ocV4zKDEyKnpeMyArIDYqel4yICsgNCp6IC0gMSkgKyBxXjIgKiAoMTIqel4zICsgNip6XjIgKyA2KnopICsgcSooMTIqel4zICsgNip6XjIgKyA0KnopICogKDEyKnpeMyArIDEyKnpeMiArIDYqeiArIDEpKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCBVLCBSLCByZXN1bHQpLFxuICAgICAgICAgICAgLy8gcmVzdWx0ID0gVlxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGaW5hbEV4cG9uZW50aWF0aW9uKCkge1xuICAgICAgICBidWlsZEZpbmFsRXhwb25lbnRpYXRpb25GaXJzdENodW5rKCk7XG4gICAgICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbkxhc3RDaHVuaygpO1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInhcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgZWx0ID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCBlbHRUb0ZpcnN0Q2h1bmsgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19maW5hbEV4cG9uZW50aWF0aW9uRmlyc3RDaHVua1wiLCBlbHQsIGVsdFRvRmlyc3RDaHVuayApLFxuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19maW5hbEV4cG9uZW50aWF0aW9uTGFzdENodW5rXCIsIGVsdFRvRmlyc3RDaHVuaywgcmVzdWx0IClcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbk9sZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBleHBvbmVudCA9IDU1MjQ4NDIzMzYxMzIyNDA5NjMxMjYxNzEyNjc4MzE3MzE0NzA5NzM4MjEwMzc2Mjk1NzY1NDE4ODg4MjczNDMxNDE5NjkxMDgzOTkwNzU0MTIxMzk3NDUwMjc2MTU0MDYyOTgxNzAwOTYwODU0ODY1NDY4MDM0MzYyNzcwMTE1MzgyOTQ0Njc0NzgxMDkwNzM3MzI1Njg0MTU1MTAwNjIwMTYzOTY3NzcyNjEzOTk0NjAyOTE5OTk2ODQxMjU5ODgwNDg4MjM5MTcwMjI3MzAxOTA4MzY1MzI3MjA0NzU2NjMxNjU4NDM2NTU1OTc3NjQ5MzAyNzQ5NTQ1ODIzODM3MzkwMjg3NTkzNzY1OTk0MzUwNDg3MzIyMDU1NDE2MTU1MDUyNTkyNjMwMjMwMzMzMTc0NzQ2MzUxNTY0NDcxMTg3NjY1MzE3NzEyOTU3ODMwMzE5MTA5NTkwMDkwOTE5MTYyNDgxNzgyNjU2NjY4ODI0MTgwNDQwODA4MTg5Mjc4NTcyNTk2NzkzMTcxNDA5NzcxNjcwOTUyNjA5MjI2MTI3ODA3MTk1MjU2MDE3MTExMTQ0NDA3MjA0OTIyOTEyMzU2NTA1NzQ4Mzc1MDE2MTQ2MDAyNDM1MzM0NjI4NDE2NzI4MjQ1Mjc1NjIxNzY2MjMzNTUyODgxMzUxOTEzOTgwODI5MTE3MDUzOTA3MjEyNTM4MTIzMDgxNTcyOTA3MTU0NDg2MTYwMjc1MDkzNjk2NDgyOTMxMzYwODEzNzMyNTQyNjM4MzczNTEyMjE3NTIyOTU0MTE1NTM3NjM0NjQzNjA5MzkzMDI4NzQwMjA4OTUxNzQyNjk3MzE3ODkxNzU2OTcxMzM4NDc0ODA4MTgyNzI1NTQ3MjU3NjkzNzQ3MTQ5NjE5NTc1MjcyNzE4ODI2MTQzNTYzMzI3MTIzODcxMDEzMTczNjA5NjI5OTc5ODE2ODg1MjkyNTU0MDU0OTM0MjMzMDc3NTI3OTg3NzAwNjc4NDM1NDgwMTQyMjI0OTcyMjU3Mzc4MzU2MTY4NTE3OTYxODgxNjQ4MDAzNzY5NTAwNTUxNTQyNjE2MjM2MjQzMTA3MjI0NTYzODMyNDc0NDQ4MG47XG5cbiAgICAgICAgY29uc3QgcEV4cG9uZW50ID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCBleHBvbmVudCwgMzUyICkpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2V4cFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocEV4cG9uZW50KSwgYy5pMzJfY29uc3QoMzUyKSwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuXG5cblxuICAgIGNvbnN0IHBQcmVQID0gbW9kdWxlLmFsbG9jKHByZVBTaXplKTtcbiAgICBjb25zdCBwUHJlUSA9IG1vZHVsZS5hbGxvYyhwcmVRU2l6ZSk7XG5cbiAgICBmdW5jdGlvbiBidWlsZFBhaXJpbmdFcXVhdGlvbihuUGFpcmluZ3MpIHtcblxuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcGFpcmluZ0VxXCIrblBhaXJpbmdzKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5QYWlyaW5nczsgaSsrKSB7XG4gICAgICAgICAgICBmLmFkZFBhcmFtKFwicF9cIitpLCBcImkzMlwiKTtcbiAgICAgICAgICAgIGYuYWRkUGFyYW0oXCJxX1wiK2ksIFwiaTMyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGYuYWRkUGFyYW0oXCJjXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IHJlc1QgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IGF1eFQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmdG1QcmVmaXggKyBcIl9vbmVcIiwgcmVzVCApKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBhaXJpbmdzOyBpKyspIHtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzFcIiwgYy5nZXRMb2NhbChcInBfXCIraSksIGMuaTMyX2NvbnN0KHBQcmVQKSApKTtcbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIsIGMuZ2V0TG9jYWwoXCJxX1wiK2kpLCBjLmkzMl9jb25zdChwUHJlUSkgKSk7XG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX21pbGxlckxvb3BcIiwgYy5pMzJfY29uc3QocFByZVApLCBjLmkzMl9jb25zdChwUHJlUSksIGF1eFQgKSk7XG5cbiAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlc1QsIGF1eFQsIHJlc1QgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIiwgcmVzVCwgcmVzVCApKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX2VxXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJjXCIpKSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFBhaXJpbmcoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3BhaXJpbmdcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCByZXNUID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcxXCIsIGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChwUHJlUCkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIsIGMuZ2V0TG9jYWwoXCJxXCIpLCBjLmkzMl9jb25zdChwUHJlUSkgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfbWlsbGVyTG9vcFwiLCBjLmkzMl9jb25zdChwUHJlUCksIGMuaTMyX2NvbnN0KHBQcmVRKSwgcmVzVCApKTtcbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIsIHJlc1QsIGMuZ2V0TG9jYWwoXCJyXCIpICkpO1xuICAgIH1cblxuXG4gICAgYnVpbGRQcmVwQWRkU3RlcCgpO1xuICAgIGJ1aWxkUHJlcERvdWJsZVN0ZXAoKTtcblxuICAgIGJ1aWxkUHJlcGFyZUcxKCk7XG4gICAgYnVpbGRQcmVwYXJlRzIoKTtcblxuICAgIGJ1aWxkTXVsQnkwMjQoKTtcbiAgICBidWlsZE11bEJ5MDI0T2xkKCk7XG4gICAgYnVpbGRNaWxsZXJMb29wKCk7XG5cblxuICAgIGZvciAobGV0IGk9MDsgaTwxMDsgaSsrKSB7XG4gICAgICAgIGJ1aWxkRnJvYmVuaXVzTWFwKGkpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX2Zyb2Jlbml1c01hcFwiK2kpO1xuICAgIH1cblxuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbk9sZCgpO1xuICAgIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbigpO1xuXG4gICAgZm9yIChsZXQgaT0xOyBpPD01OyBpKyspIHtcbiAgICAgICAgYnVpbGRQYWlyaW5nRXF1YXRpb24oaSk7XG4gICAgICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nRXFcIitpKTtcbiAgICB9XG5cbiAgICBidWlsZFBhaXJpbmcoKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9wYWlyaW5nXCIpO1xuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9taWxsZXJMb29wXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uT2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fbXVsQnkwMjRcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19tdWxCeTAyNE9sZFwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIpO1xuXG4gICAgLy8gY29uc29sZS5sb2cobW9kdWxlLmZ1bmN0aW9uSWR4QnlOYW1lKTtcblxufTtcblxuIiwiY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5cbmNvbnN0IGJ1aWxkRjFtID1yZXF1aXJlKFwiLi4vYnVpbGRfZjFtLmpzXCIpO1xuY29uc3QgYnVpbGRGMSA9cmVxdWlyZShcIi4uL2J1aWxkX2YxLmpzXCIpO1xuY29uc3QgYnVpbGRGMm0gPXJlcXVpcmUoXCIuLi9idWlsZF9mMm0uanNcIik7XG5jb25zdCBidWlsZEYzbSA9cmVxdWlyZShcIi4uL2J1aWxkX2YzbS5qc1wiKTtcbmNvbnN0IGJ1aWxkQ3VydmUgPXJlcXVpcmUoXCIuLi9idWlsZF9jdXJ2ZV9qYWNvYmlhbl9hMC5qc1wiKTtcbmNvbnN0IGJ1aWxkRkZUID0gcmVxdWlyZShcIi4uL2J1aWxkX2ZmdFwiKTtcbmNvbnN0IGJ1aWxkUG9sID0gcmVxdWlyZShcIi4uL2J1aWxkX3BvbFwiKTtcbmNvbnN0IGJ1aWxkUUFQID0gcmVxdWlyZShcIi4uL2J1aWxkX3FhcFwiKTtcbmNvbnN0IGJ1aWxkQXBwbHlLZXkgPSByZXF1aXJlKFwiLi4vYnVpbGRfYXBwbHlrZXlcIik7XG5jb25zdCB7IGJpdExlbmd0aCwgaXNPZGQsIGlzTmVnYXRpdmUgfSA9IHJlcXVpcmUoXCIuLi9iaWdpbnQuanNcIik7XG5cbi8vIERlZmluaXRpb24gaGVyZTogaHR0cHM6Ly9lbGVjdHJpY2NvaW4uY28vYmxvZy9uZXctc25hcmstY3VydmUvXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRCTFMxMjM4MShtb2R1bGUsIF9wcmVmaXgpIHtcblxuICAgIGNvbnN0IHByZWZpeCA9IF9wcmVmaXggfHwgXCJibHMxMjM4MVwiO1xuXG4gICAgaWYgKG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0pIHJldHVybiBwcmVmaXg7ICAvLyBhbHJlYWR5IGJ1aWxkZWRcblxuICAgIGNvbnN0IHEgPSAweDFhMDExMWVhMzk3ZmU2OWE0YjFiYTdiNjQzNGJhY2Q3NjQ3NzRiODRmMzg1MTJiZjY3MzBkMmEwZjZiMGY2MjQxZWFiZmZmZWIxNTNmZmZmYjlmZWZmZmZmZmZmYWFhYm47XG4gICAgY29uc3QgciA9IDB4NzNlZGE3NTMyOTlkN2Q0ODMzMzlkODA4MDlhMWQ4MDU1M2JkYTQwMmZmZmU1YmZlZmZmZmZmZmYwMDAwMDAwMW47XG5cbiAgICBjb25zdCBuNjRxID0gTWF0aC5mbG9vcigoYml0TGVuZ3RoKHEgLSAxbikgLSAxKS82NCkgKzE7XG4gICAgY29uc3QgbjhxID0gbjY0cSo4O1xuICAgIGNvbnN0IGYxc2l6ZSA9IG44cTtcbiAgICBjb25zdCBmMnNpemUgPSBmMXNpemUgKiAyO1xuICAgIGNvbnN0IGZ0c2l6ZSA9IGYxc2l6ZSAqIDEyO1xuXG4gICAgY29uc3QgbjY0ciA9IE1hdGguZmxvb3IoKGJpdExlbmd0aChyIC0gMW4pIC0gMSkvNjQpICsxO1xuICAgIGNvbnN0IG44ciA9IG42NHIqODtcbiAgICBjb25zdCBmcnNpemUgPSBuOHI7XG5cblxuICAgIGNvbnN0IHByID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCByLCBmcnNpemUgKSk7XG5cbiAgICBjb25zdCBmMW1QcmVmaXggPSBidWlsZEYxbShtb2R1bGUsIHEsIFwiZjFtXCIsIFwiaW50cVwiKTtcbiAgICBidWlsZEYxKG1vZHVsZSwgciwgXCJmclwiLCBcImZybVwiLCBcImludHJcIik7XG4gICAgY29uc3QgcEcxYiA9IG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDRuKSwgZjFzaXplICkpO1xuICAgIGNvbnN0IGcxbVByZWZpeCA9IGJ1aWxkQ3VydmUobW9kdWxlLCBcImcxbVwiLCBcImYxbVwiLCBwRzFiKTtcblxuICAgIGJ1aWxkRkZUKG1vZHVsZSwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1cIiwgXCJmcm1fbXVsXCIpO1xuXG4gICAgYnVpbGRQb2wobW9kdWxlLCBcInBvbFwiLCBcImZybVwiKTtcbiAgICBidWlsZFFBUChtb2R1bGUsIFwicWFwXCIsIFwiZnJtXCIpO1xuXG4gICAgY29uc3QgZjJtUHJlZml4ID0gYnVpbGRGMm0obW9kdWxlLCBcImYxbV9uZWdcIiwgXCJmMm1cIiwgXCJmMW1cIik7XG4gICAgY29uc3QgcEcyYiA9IG1vZHVsZS5hbGxvYyhbXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoNG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSg0biksIGYxc2l6ZSApXG4gICAgXSk7XG4gICAgY29uc3QgZzJtUHJlZml4ID0gYnVpbGRDdXJ2ZShtb2R1bGUsIFwiZzJtXCIsIFwiZjJtXCIsIHBHMmIpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEdUaW1lc0ZyKGZuTmFtZSwgb3BNdWwpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmbk5hbWUpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEdcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwRnJcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFVWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhuOHIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXCJmcm1fZnJvbU1vbnRnb21lcnlcIiwgYy5nZXRMb2NhbChcInBGclwiKSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBvcE11bCxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicEdcIiksXG4gICAgICAgICAgICAgICAgQVVYLFxuICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KG44ciksXG4gICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcInByXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZuTmFtZSk7XG4gICAgfVxuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMW1fdGltZXNGclwiLCBcImcxbV90aW1lc1NjYWxhclwiKTtcbiAgICBidWlsZEZGVChtb2R1bGUsIFwiZzFtXCIsIFwiZzFtXCIsIFwiZnJtXCIsIFwiZzFtX3RpbWVzRnJcIik7XG5cbiAgICBidWlsZEdUaW1lc0ZyKFwiZzJtX3RpbWVzRnJcIiwgXCJnMm1fdGltZXNTY2FsYXJcIik7XG4gICAgYnVpbGRGRlQobW9kdWxlLCBcImcybVwiLCBcImcybVwiLCBcImZybVwiLCBcImcybV90aW1lc0ZyXCIpO1xuXG4gICAgYnVpbGRHVGltZXNGcihcImcxbV90aW1lc0ZyQWZmaW5lXCIsIFwiZzFtX3RpbWVzU2NhbGFyQWZmaW5lXCIpO1xuICAgIGJ1aWxkR1RpbWVzRnIoXCJnMm1fdGltZXNGckFmZmluZVwiLCBcImcybV90aW1lc1NjYWxhckFmZmluZVwiKTtcblxuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImZybV9iYXRjaEFwcGx5S2V5XCIsIFwiZm1yXCIsIFwiZnJtXCIsIG44ciwgbjhyLCBuOHIsIFwiZnJtX211bFwiKTtcbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJnMW1fYmF0Y2hBcHBseUtleVwiLCBcImcxbVwiLCBcImZybVwiLCBuOHEqMywgbjhxKjMsIG44ciwgXCJnMW1fdGltZXNGclwiKTtcbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJnMW1fYmF0Y2hBcHBseUtleU1peGVkXCIsIFwiZzFtXCIsIFwiZnJtXCIsIG44cSoyLCBuOHEqMywgbjhyLCBcImcxbV90aW1lc0ZyQWZmaW5lXCIpO1xuICAgIGJ1aWxkQXBwbHlLZXkobW9kdWxlLCBcImcybV9iYXRjaEFwcGx5S2V5XCIsIFwiZzJtXCIsIFwiZnJtXCIsIG44cSoyKjMsIG44cSozKjIsIG44ciwgXCJnMm1fdGltZXNGclwiKTtcbiAgICBidWlsZEFwcGx5S2V5KG1vZHVsZSwgXCJnMm1fYmF0Y2hBcHBseUtleU1peGVkXCIsIFwiZzJtXCIsIFwiZnJtXCIsIG44cSoyKjIsIG44cSozKjIsIG44ciwgXCJnMm1fdGltZXNGckFmZmluZVwiKTtcblxuXG4gICAgZnVuY3Rpb24gdG9Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIEJpZ0ludChhKSAqICgxbiA8PCBCaWdJbnQoZjFzaXplKjgpKSAlIHE7XG4gICAgfVxuXG4gICAgY29uc3QgRzFnZW4gPSBbXG4gICAgICAgIDM2ODU0MTY3NTM3MTMzODcwMTY3ODEwODgzMTUxODMwNzc3NTc5NjE2MjA3OTU3ODI1NDY0MDk4OTQ1NzgzNzg2ODg2MDc1OTIzNzgzNzYzMTg4MzYwNTQ5NDc2NzYzNDU4MjE1NDgxMDQxODU0NjQ1MDduLFxuICAgICAgICAxMzM5NTA2NTQ0OTQ0NDc2NDczMDIwNDcxMzc5OTQxOTIxMjIxNTg0OTMzODc1OTM4MzQ5NjIwNDI2NTQzNzM2NDE2NTExNDIzOTU2MzMzNTA2NDcyNzI0NjU1MzUzMzY2NTM0OTkyMzkxNzU2NDQxNTY5bixcbiAgICAgICAgMW5cbiAgICBdO1xuXG4gICAgY29uc3QgcEcxZ2VuID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxZ2VuWzJdKSwgZjFzaXplICksXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzF6ZXJvID0gW1xuICAgICAgICAwbixcbiAgICAgICAgMW4sXG4gICAgICAgIDBuXG4gICAgXTtcblxuICAgIGNvbnN0IHBHMXplcm8gPSBtb2R1bGUuYWxsb2MoXG4gICAgICAgIFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzF6ZXJvWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcxemVyb1sxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMXplcm9bMl0pLCBmMXNpemUgKVxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0IEcyZ2VuID0gW1xuICAgICAgICBbXG4gICAgICAgICAgICAzNTI3MDEwNjk1ODc0NjY2MTgxODcxMzkxMTYwMTEwNjAxNDQ4OTAwMjk5NTI3OTI3NzUyNDAyMTk5MDg2NDQyMzk3OTM3ODU3MzU3MTUwMjY4NzMzNDc2MDAzNDM4NjUxNzU5NTI3NjE5MjYzMDMxNjBuLFxuICAgICAgICAgICAgMzA1OTE0NDM0NDI0NDIxMzcwOTk3MTI1OTgxNDc1Mzc4MTYzNjk4NjQ3MDMyNTQ3NjY0NzU1ODY1OTM3MzIwNjI5MTYzNTMyNDc2ODk1ODQzMjQzMzUwOTU2MzEwNDM0NzAxNzgzNzg4NTc2MzM2NTc1OG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMTk4NTE1MDYwMjI4NzI5MTkzNTU2ODA1NDUyMTE3NzE3MTYzODMwMDg2ODk3ODIxNTY1NTczMDg1OTM3ODY2NTA2NjM0NDcyNjM3MzgyMzcxODQyMzg2OTEwNDI2MzMzMzk4NDY0MTQ5NDM0MDM0NzkwNW4sXG4gICAgICAgICAgICA5Mjc1NTM2NjU0OTIzMzI0NTU3NDcyMDE5NjU3NzYwMzc4ODA3NTc3NDAxOTM0NTM1OTI5NzAwMjUwMjc5Nzg3OTM5NzY4NzcwMDI2NzU1NjQ5ODA5NDkyODk3Mjc5NTc1NjU1NzU0MzMzNDQyMTk1ODJuLFxuICAgICAgICBdLFtcbiAgICAgICAgICAgIDFuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF1cbiAgICBdO1xuXG4gICAgY29uc3QgcEcyZ2VuID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzBdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzBdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzFdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzFdWzFdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzJdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyZ2VuWzJdWzFdKSwgZjFzaXplICksXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgRzJ6ZXJvID0gW1xuICAgICAgICBbXG4gICAgICAgICAgICAwbixcbiAgICAgICAgICAgIDBuLFxuICAgICAgICBdLFtcbiAgICAgICAgICAgIDFuLFxuICAgICAgICAgICAgMG4sXG4gICAgICAgIF0sW1xuICAgICAgICAgICAgMG4sXG4gICAgICAgICAgICAwbixcbiAgICAgICAgXVxuICAgIF07XG5cbiAgICBjb25zdCBwRzJ6ZXJvID0gbW9kdWxlLmFsbG9jKFxuICAgICAgICBbXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1swXVswXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMF1bMV0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzFdWzBdKSwgZjFzaXplICksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KEcyemVyb1sxXVsxXSksIGYxc2l6ZSApLFxuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeShHMnplcm9bMl1bMF0pLCBmMXNpemUgKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoRzJ6ZXJvWzJdWzFdKSwgZjFzaXplICksXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgY29uc3QgcE9uZVQgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDFuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDBuKSwgZjFzaXplICksXG4gICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKCB0b01vbnRnb21lcnkoMG4pLCBmMXNpemUgKSxcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgwbiksIGYxc2l6ZSApLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcEJsczEyMzgxVHdpc3QgPSAgbW9kdWxlLmFsbG9jKFtcbiAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUoIHRvTW9udGdvbWVyeSgxbiksIGYxc2l6ZSApLFxuICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSggdG9Nb250Z29tZXJ5KDFuKSwgZjFzaXplICksXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBidWlsZF9tdWxOUjIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjJtUHJlZml4ICsgXCJfbXVsTlJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MGMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKSk7XG4gICAgICAgIGNvbnN0IHgwID0gYy5nZXRMb2NhbChcInhcIik7XG4gICAgICAgIGNvbnN0IHgxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdChmMXNpemUpKTtcbiAgICAgICAgY29uc3QgcjAgPSBjLmdldExvY2FsKFwicHJcIik7XG4gICAgICAgIGNvbnN0IHIxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwclwiKSwgYy5pMzJfY29uc3QoZjFzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9jb3B5XCIsIHgwLCB4MGMpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCtcIl9zdWJcIiwgeDAsIHgxLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4K1wiX2FkZFwiLCB4MGMsIHgxLCByMSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGJ1aWxkX211bE5SMigpO1xuXG4gICAgY29uc3QgZjZtUHJlZml4ID0gYnVpbGRGM20obW9kdWxlLCBmMm1QcmVmaXgrXCJfbXVsTlJcIiwgXCJmNm1cIiwgXCJmMm1cIik7XG5cbiAgICBmdW5jdGlvbiBidWlsZF9tdWxOUjYoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZjZtUHJlZml4ICsgXCJfbXVsTlJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBjMGNvcHkgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJ4XCIpLFxuICAgICAgICAgICAgICAgIGMwY29weVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9tdWxOUlwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QobjhxKjQpKSxcbiAgICAgICAgICAgICAgICBjLmdldExvY2FsKFwicHJcIilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmNhbGwoXG4gICAgICAgICAgICAgICAgZjJtUHJlZml4ICsgXCJfY29weVwiLFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QobjhxKjIpKSxcbiAgICAgICAgICAgICAgICBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInByXCIpLCBjLmkzMl9jb25zdChuOHEqNCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuY2FsbChcbiAgICAgICAgICAgICAgICBmMm1QcmVmaXggKyBcIl9jb3B5XCIsXG4gICAgICAgICAgICAgICAgYzBjb3B5LFxuICAgICAgICAgICAgICAgIGMuaTMyX2FkZChjLmdldExvY2FsKFwicHJcIiksIGMuaTMyX2NvbnN0KG44cSoyKSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZF9tdWxOUjYoKTtcblxuICAgIGNvbnN0IGZ0bVByZWZpeCA9IGJ1aWxkRjJtKG1vZHVsZSwgZjZtUHJlZml4K1wiX211bE5SXCIsIFwiZnRtXCIsIGY2bVByZWZpeCk7XG5cbiAgICBjb25zdCBhdGVMb29wQ291bnQgPSAweGQyMDEwMDAwMDAwMTAwMDBuO1xuICAgIGNvbnN0IGF0ZUxvb3BCaXRCeXRlcyA9IGJpdHMoYXRlTG9vcENvdW50KTtcbiAgICBjb25zdCBwQXRlTG9vcEJpdEJ5dGVzID0gbW9kdWxlLmFsbG9jKGF0ZUxvb3BCaXRCeXRlcyk7XG4gICAgY29uc3QgaXNMb29wTmVnYXRpdmUgPSB0cnVlO1xuXG4gICAgY29uc3QgYXRlQ29lZlNpemUgPSAzICogZjJzaXplO1xuICAgIGNvbnN0IGF0ZU5EYmxDb2VmcyA9IGF0ZUxvb3BCaXRCeXRlcy5sZW5ndGgtMTtcbiAgICBjb25zdCBhdGVOQWRkQ29lZnMgPSBhdGVMb29wQml0Qnl0ZXMucmVkdWNlKChhY2MsIGIpID0+ICBhY2MgKyAoIGIhPTAgPyAxIDogMCkgICAsMCk7XG4gICAgY29uc3QgYXRlTkNvZWZzID0gYXRlTkFkZENvZWZzICsgYXRlTkRibENvZWZzICsgMTtcbiAgICBjb25zdCBwcmVQU2l6ZSA9IDMqMipuOHE7XG4gICAgY29uc3QgcHJlUVNpemUgPSAzKm44cSoyICsgYXRlTkNvZWZzKmF0ZUNvZWZTaXplO1xuICAgIGNvbnN0IGZpbmFsRXhwSXNOZWdhdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCBmaW5hbEV4cFogPSAxNTEzMjM3NjIyMjk0MTY0Mjc1Mm47XG5cblxuICAgIG1vZHVsZS5tb2R1bGVzW3ByZWZpeF0gPSB7XG4gICAgICAgIG42NHE6IG42NHEsXG4gICAgICAgIG42NHI6IG42NHIsXG4gICAgICAgIG44cTogbjhxLFxuICAgICAgICBuOHI6IG44cixcbiAgICAgICAgcEcxZ2VuOiBwRzFnZW4sXG4gICAgICAgIHBHMXplcm86IHBHMXplcm8sXG4gICAgICAgIHBHMWI6IHBHMWIsXG4gICAgICAgIHBHMmdlbjogcEcyZ2VuLFxuICAgICAgICBwRzJ6ZXJvOiBwRzJ6ZXJvLFxuICAgICAgICBwRzJiOiBwRzJiLFxuICAgICAgICBwcTogbW9kdWxlLm1vZHVsZXNbXCJmMW1cIl0ucHEsXG4gICAgICAgIHByOiBwcixcbiAgICAgICAgcE9uZVQ6IHBPbmVULFxuICAgICAgICByOiByLFxuICAgICAgICBxOiBxLFxuICAgICAgICBwcmVQU2l6ZTogcHJlUFNpemUsXG4gICAgICAgIHByZVFTaXplOiBwcmVRU2l6ZVxuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIG5hZihuKSB7XG4gICAgICAgIGxldCBFID0gbjtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIHdoaWxlIChFID4gMG4pIHtcbiAgICAgICAgICAgIGlmIChpc09kZChFKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHogPSAyIC0gTnVtYmVyKEUgJSA0bik7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIHogKTtcbiAgICAgICAgICAgICAgICBFID0gRSAtIEJpZ0ludCh6KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goIDAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEUgPSBFID4+IDFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYml0cyhuKSB7XG4gICAgICAgIGxldCBFID0gbjtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIHdoaWxlIChFID4gMG4pIHtcbiAgICAgICAgICAgIGlmIChpc09kZChFKSkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCAxICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKCAwICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFID0gRSA+PiAxbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkUHJlcGFyZUcxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfcHJlcGFyZUcxXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwcHJlUFwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9ub3JtYWxpemVcIiwgYy5nZXRMb2NhbChcInBQXCIpLCBjLmdldExvY2FsKFwicHByZVBcIikpLCAgLy8gVE9ETyBSZW1vdmUgaWYgYWxyZWFkeSBpbiBhZmZpbmVcbiAgICAgICAgKTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwRG91YmxlU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBEYmxTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiUlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBSeCAgPSBjLmdldExvY2FsKFwiUlwiKTtcbiAgICAgICAgY29uc3QgUnkgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJSXCIpLCBjLmkzMl9jb25zdCgyKm44cSkpO1xuICAgICAgICBjb25zdCBSeiAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlJcIiksIGMuaTMyX2NvbnN0KDQqbjhxKSk7XG5cbiAgICAgICAgY29uc3QgdDAgID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHQzICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcbiAgICAgICAgY29uc3QgdDYgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCg0Km44cSkpO1xuXG5cbiAgICAgICAgY29uc3QgenNxdWFyZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgLy8gdG1wMCA9IHIueC5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUngsIHQwKSxcblxuICAgICAgICAgICAgLy8gdG1wMSA9IHIueS5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnksIHQxKSxcblxuICAgICAgICAgICAgLy8gdG1wMiA9IHRtcDEuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQxLCB0MiksXG5cbiAgICAgICAgICAgIC8vIHRtcDMgPSAodG1wMSArIHIueCkuc3F1YXJlKCkgLSB0bXAwIC0gdG1wMjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIFJ4LCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQzLCB0MyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQzLCB0MCwgdDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MywgdDIsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IHRtcDMgKyB0bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgdDMsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wNCA9IHRtcDAgKyB0bXAwICsgdG1wMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDAsIHQwLCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQ0LCB0MCwgdDQpLFxuXG4gICAgICAgICAgICAvLyB0bXA2ID0gci54ICsgdG1wNDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUngsIHQ0LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHRtcDUgPSB0bXA0LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0NCwgdDUpLFxuXG4gICAgICAgICAgICAvLyB6c3F1YXJlZCA9IHIuei5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnosIHpzcXVhcmVkKSxcblxuICAgICAgICAgICAgLy8gci54ID0gdG1wNSAtIHRtcDMgLSB0bXAzO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NSwgdDMsIFJ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUngsIHQzLCBSeCksXG5cbiAgICAgICAgICAgIC8vIHIueiA9IChyLnogKyByLnkpLnNxdWFyZSgpIC0gdG1wMSAtIHpzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBSeiwgUnksIFJ6KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnosIFJ6KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUnosIHQxLCBSeiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ6LCB6c3F1YXJlZCwgUnopLFxuXG4gICAgICAgICAgICAvLyByLnkgPSAodG1wMyAtIHIueCkgKiB0bXA0O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MywgUngsIFJ5KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgUnksIHQ0LCBSeSksXG5cbiAgICAgICAgICAgIC8vIHRtcDIgPSB0bXAyICsgdG1wMjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDIsIHQyLCB0MiksXG5cbiAgICAgICAgICAgIC8vIHRtcDIgPSB0bXAyICsgdG1wMjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDIsIHQyLCB0MiksXG5cbiAgICAgICAgICAgIC8vIHRtcDIgPSB0bXAyICsgdG1wMjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDIsIHQyLCB0MiksXG5cbiAgICAgICAgICAgIC8vIHIueSAtPSB0bXAyO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeSwgdDIsIFJ5KSxcblxuICAgICAgICAgICAgLy8gdG1wMyA9IHRtcDQgKiB6c3F1YXJlZDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIHpzcXVhcmVkLCB0MyksXG5cbiAgICAgICAgICAgIC8vIHRtcDMgPSB0bXAzICsgdG1wMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHQzLCB0MyksXG5cbiAgICAgICAgICAgIC8vIHRtcDMgPSAtdG1wMztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9uZWdcIiwgdDMsIHQzKSxcblxuICAgICAgICAgICAgLy8gdG1wNiA9IHRtcDYuc3F1YXJlKCkgLSB0bXAwIC0gdG1wNTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDYsIHQ2KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDYsIHQwLCB0NiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ2LCB0NSwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0bXAxID0gdG1wMSArIHRtcDE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCB0MSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0bXAxID0gdG1wMSArIHRtcDE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQxLCB0MSwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0bXA2ID0gdG1wNiAtIHRtcDE7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ2LCB0MSwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0bXAwID0gci56ICogenNxdWFyZWQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFJ6LCB6c3F1YXJlZCwgdDApLFxuXG4gICAgICAgICAgICAvLyB0bXAwID0gdG1wMCArIHRtcDA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQwLCB0MCwgdDApLFxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwQWRkU3RlcCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX3ByZXBBZGRTdGVwXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiUlwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcIlFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgUnggID0gYy5nZXRMb2NhbChcIlJcIik7XG4gICAgICAgIGNvbnN0IFJ5ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiUlwiKSwgYy5pMzJfY29uc3QoMipuOHEpKTtcbiAgICAgICAgY29uc3QgUnogID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJSXCIpLCBjLmkzMl9jb25zdCg0Km44cSkpO1xuXG4gICAgICAgIGNvbnN0IFF4ICA9IGMuZ2V0TG9jYWwoXCJRXCIpO1xuICAgICAgICBjb25zdCBReSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcIlFcIiksIGMuaTMyX2NvbnN0KDIqbjhxKSk7XG5cbiAgICAgICAgY29uc3QgdDEwICA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuICAgICAgICBjb25zdCB0MSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqbjhxKSk7XG4gICAgICAgIGNvbnN0IHQ5ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoNCpuOHEpKTtcblxuICAgICAgICBjb25zdCB6c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeXNxdWFyZWQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHp0c3F1YXJlZCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MyA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDQgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ1ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDcgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ4ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcblxuICAgICAgICAgICAgLy8genNxdWFyZWQgPSByLnouc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIFJ6LCB6c3F1YXJlZCksXG5cbiAgICAgICAgICAgIC8vIHlzcXVhcmVkID0gcS55LnNxdWFyZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBReSwgeXNxdWFyZWQpLFxuXG4gICAgICAgICAgICAvLyB0MCA9IHpzcXVhcmVkICogcS54O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB6c3F1YXJlZCwgUXgsIHQwKSxcblxuICAgICAgICAgICAgLy8gdDEgPSAoKHEueSArIHIueikuc3F1YXJlKCkgLSB5c3F1YXJlZCAtIHpzcXVhcmVkKSAqIHpzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBReSwgUnosIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDEsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIHlzcXVhcmVkLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQxLCB6c3F1YXJlZCwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0MSwgenNxdWFyZWQsIHQxKSxcblxuICAgICAgICAgICAgLy8gdDIgPSB0MCAtIHIueDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDAsIFJ4LCB0MiksXG5cbiAgICAgICAgICAgIC8vIHQzID0gdDIuc3F1YXJlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3F1YXJlXCIsIHQyLCB0MyksXG5cbiAgICAgICAgICAgIC8vIHQ0ID0gdDMgKyB0MztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHQzLCB0NCksXG5cbiAgICAgICAgICAgIC8vIHQ0ID0gdDQgKyB0NDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDQsIHQ0LCB0NCksXG5cbiAgICAgICAgICAgIC8vIHQ1ID0gdDQgKiB0MjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDQsIHQyLCB0NSksXG5cbiAgICAgICAgICAgIC8vIHQ2ID0gdDEgLSByLnkgLSByLnk7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQxLCBSeSwgdDYpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NiwgUnksIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDkgPSB0NiAqIHEueDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDYsIFF4LCB0OSksXG5cbiAgICAgICAgICAgIC8vIHQ3ID0gdDQgKiByLng7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQ0LCBSeCwgdDcpLFxuXG4gICAgICAgICAgICAvLyByLnggPSB0Ni5zcXVhcmUoKSAtIHQ1IC0gdDcgLSB0NztcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgdDYsIFJ4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUngsIHQ1LCBSeCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIFJ4LCB0NywgUngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeCwgdDcsIFJ4KSxcblxuICAgICAgICAgICAgLy8gci56ID0gKHIueiArIHQyKS5zcXVhcmUoKSAtIHpzcXVhcmVkIC0gdDM7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIFJ6LCB0MiwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCBSeiwgUnopLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCBSeiwgenNxdWFyZWQsIFJ6KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgUnosIHQzLCBSeiksXG5cbiAgICAgICAgICAgIC8vIHQxMCA9IHEueSArIHIuejtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgUXksIFJ6LCB0MTApLFxuXG4gICAgICAgICAgICAvLyB0OCA9ICh0NyAtIHIueCkgKiB0NjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDcsIFJ4LCB0OCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQ4LCB0NiwgdDgpLFxuXG4gICAgICAgICAgICAvLyB0MCA9IHIueSAqIHQ1O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBSeSwgdDUsIHQwKSxcblxuICAgICAgICAgICAgLy8gdDAgPSB0MCArIHQwO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MCwgdDAsIHQwKSxcblxuICAgICAgICAgICAgLy8gci55ID0gdDggLSB0MDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDgsIHQwLCBSeSksXG5cbiAgICAgICAgICAgIC8vIHQxMCA9IHQxMC5zcXVhcmUoKSAtIHlzcXVhcmVkO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3NxdWFyZVwiLCB0MTAsIHQxMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQxMCwgeXNxdWFyZWQsIHQxMCksXG5cbiAgICAgICAgICAgIC8vIHp0c3F1YXJlZCA9IHIuei5zcXVhcmUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zcXVhcmVcIiwgUnosIHp0c3F1YXJlZCksXG5cbiAgICAgICAgICAgIC8vIHQxMCA9IHQxMCAtIHp0c3F1YXJlZDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEwLCB6dHNxdWFyZWQsIHQxMCksXG5cbiAgICAgICAgICAgIC8vIHQ5ID0gdDkgKyB0OSAtIHQxMDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDksIHQ5LCB0OSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQ5LCB0MTAsIHQ5KSxcblxuICAgICAgICAgICAgLy8gdDEwID0gci56ICsgci56O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBSeiwgUnosIHQxMCksXG5cbiAgICAgICAgICAgIC8vIHQ2ID0gLXQ2O1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB0NiwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0MSA9IHQ2ICsgdDY7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQ2LCB0NiwgdDEpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlRzIoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wcmVwYXJlRzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUVwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVRXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cblxuICAgICAgICBjb25zdCBRID0gYy5nZXRMb2NhbChcInBRXCIpO1xuXG4gICAgICAgIGNvbnN0IHBSID0gbW9kdWxlLmFsbG9jKGYyc2l6ZSozKTtcbiAgICAgICAgY29uc3QgUiA9IGMuaTMyX2NvbnN0KHBSKTtcblxuICAgICAgICBjb25zdCBiYXNlID0gYy5nZXRMb2NhbChcInBwcmVRXCIpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChnMm1QcmVmaXggKyBcIl9ub3JtYWxpemVcIiwgUSwgYmFzZSksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMm1QcmVmaXggKyBcIl9pc1plcm9cIiwgYmFzZSksXG4gICAgICAgICAgICAgICAgYy5yZXQoW10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX2NvcHlcIiwgYmFzZSwgUiksXG4gICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKjMpKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5zZXRMb2NhbChcImlcIiwgYy5pMzJfY29uc3QoYXRlTG9vcEJpdEJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9wcmVwRGJsU3RlcFwiLCBSLCBjLmdldExvY2FsKFwicENvZWZcIikpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcblxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2xvYWQ4X3MoYy5nZXRMb2NhbChcImlcIiksIHBBdGVMb29wQml0Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jLmNhbGwocHJlZml4ICsgXCJfcHJlcEFkZFN0ZXBcIiwgUiwgYmFzZSwgYy5nZXRMb2NhbChcInBDb2VmXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2VmXCIpLCBjLmkzMl9jb25zdChhdGVDb2VmU2l6ZSkpKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcXogKCBjLmdldExvY2FsKFwiaVwiKSApKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRjZNdWwxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGY2bVByZWZpeCsgXCJfbXVsMVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpOyAgICAvLyBGNlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMxXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUlwiLCBcImkzMlwiKTsgICAgLy8gRjZcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFfYzAgPSBjLmdldExvY2FsKFwicEFcIik7XG4gICAgICAgIGNvbnN0IEFfYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBBX2MyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQVwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjQpKTtcblxuICAgICAgICBjb25zdCBjMSAgPSBjLmdldExvY2FsKFwicEMxXCIpO1xuXG4gICAgICAgIGNvbnN0IHQxID0gYy5nZXRMb2NhbChcInBSXCIpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IGJfYiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSo0KSk7XG5cbiAgICAgICAgY29uc3QgQWMwX0FjMSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBBYzFfQWMyID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzAsIEFfYzEsIEFjMF9BYzEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBBX2MxLCBBX2MyLCBBYzFfQWMyKSxcblxuICAgICAgICAgICAgLy8gbGV0IGJfYiA9IHNlbGYuYzEgKiBjMTtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQV9jMSwgYzEsIGJfYiksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MSA9IChzZWxmLmMxICsgc2VsZi5jMikgKiBjMSAtIGJfYjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQWMxX0FjMiwgYzEsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDEsIGJfYiwgdDEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDEgPSB0MS5tdWxfYnlfbm9ucmVzaWR1ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MiA9IChzZWxmLmMwICsgc2VsZi5jMSkgKiBjMSAtIGJfYjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQWMwX0FjMSwgYzEsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIGJfYiwgdDIpLFxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZEY2TXVsMSgpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRGNk11bDAxKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGY2bVByZWZpeCsgXCJfbXVsMDFcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQVwiLCBcImkzMlwiKTsgICAgLy8gRjZcbiAgICAgICAgZi5hZGRQYXJhbShcInBDMFwiLCBcImkzMlwiKTsgICAvLyBGMlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMxXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwUlwiLCBcImkzMlwiKTsgICAgLy8gRjZcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IEFfYzAgPSBjLmdldExvY2FsKFwicEFcIik7XG4gICAgICAgIGNvbnN0IEFfYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBBXCIpLCBjLmkzMl9jb25zdChmMXNpemUqMikpO1xuICAgICAgICBjb25zdCBBX2MyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQVwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjQpKTtcblxuICAgICAgICBjb25zdCBjMCAgPSBjLmdldExvY2FsKFwicEMwXCIpO1xuICAgICAgICBjb25zdCBjMSAgPSBjLmdldExvY2FsKFwicEMxXCIpO1xuXG4gICAgICAgIGNvbnN0IHQxID0gYy5nZXRMb2NhbChcInBSXCIpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IHQzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwUlwiKSwgYy5pMzJfY29uc3QoZjFzaXplKjQpKTtcblxuICAgICAgICBjb25zdCBhX2EgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgYl9iID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IEFjMF9BYzEgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKjIpKTtcbiAgICAgICAgY29uc3QgQWMwX0FjMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqMikpO1xuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vIGxldCBhX2EgPSBzZWxmLmMwICogYzA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFfYzAsIGMwLCBhX2EpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYl9iID0gc2VsZi5jMSAqIGMxO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBX2MxLCBjMSwgYl9iKSxcblxuXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIEFfYzAsIEFfYzEsIEFjMF9BYzEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBBX2MwLCBBX2MyLCBBYzBfQWMyKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gKHNlbGYuYzEgKyBzZWxmLmMyKSAqIGMxIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBBX2MxLCBBX2MyLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHQxLCBjMSwgdDEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MSwgYl9iLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MSA9IHQxLm11bF9ieV9ub25yZXNpZHVlKCkgKyBhX2E7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdDEsIHQxKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIGFfYSwgdDEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgdDIgPSAoYzAgKyBjMSkgKiAoc2VsZi5jMCArIHNlbGYuYzEpIC0gYV9hIC0gYl9iO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBjMCwgYzEsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgdDIsIEFjMF9BYzEsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIGFfYSwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MiwgYl9iLCB0MiksXG5cbiAgICAgICAgICAgIC8vIGxldCB0MyA9IChzZWxmLmMwICsgc2VsZi5jMikgKiBjMCAtIGFfYSArIGJfYjtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQWMwX0FjMiwgYzAsIHQzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDMsIGFfYSwgdDMpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MywgYl9iLCB0MyksXG5cblxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZEY2TXVsMDEoKTtcblxuXG4gICAgZnVuY3Rpb24gYnVpbGRGMTJNdWwwMTQoKSB7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihmdG1QcmVmaXgrIFwiX211bDAxNFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBBXCIsIFwiaTMyXCIpOyAgICAvLyBGMTJcbiAgICAgICAgZi5hZGRQYXJhbShcInBDMFwiLCBcImkzMlwiKTsgICAvLyBGMlxuICAgICAgICBmLmFkZFBhcmFtKFwicEMxXCIsIFwiaTMyXCIpOyAgIC8vIEYyXG4gICAgICAgIGYuYWRkUGFyYW0oXCJwQzRcIiwgXCJpMzJcIik7ICAgLy8gRjJcbiAgICAgICAgZi5hZGRQYXJhbShcInBSXCIsIFwiaTMyXCIpOyAgICAvLyBGMTJcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG5cbiAgICAgICAgY29uc3QgQV9jMCA9IGMuZ2V0TG9jYWwoXCJwQVwiKTtcbiAgICAgICAgY29uc3QgQV9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicEFcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSo2KSk7XG5cbiAgICAgICAgY29uc3QgYzAgID0gYy5nZXRMb2NhbChcInBDMFwiKTtcbiAgICAgICAgY29uc3QgYzEgID0gYy5nZXRMb2NhbChcInBDMVwiKTtcbiAgICAgICAgY29uc3QgYzQgID0gYy5nZXRMb2NhbChcInBDNFwiKTtcblxuICAgICAgICBjb25zdCBhYSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqNikpO1xuICAgICAgICBjb25zdCBiYiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMXNpemUqNikpO1xuICAgICAgICBjb25zdCBvID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG5cbiAgICAgICAgY29uc3QgUl9jMCA9IGMuZ2V0TG9jYWwoXCJwUlwiKTtcbiAgICAgICAgY29uc3QgUl9jMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFJcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSo2KSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgLy8gbGV0IGFhID0gc2VsZi5jMC5tdWxfYnlfMDEoYzAsIGMxKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWwwMVwiLCBBX2MwLCBjMCwgYzEsIGFhKSxcblxuICAgICAgICAgICAgLy8gbGV0IGJiID0gc2VsZi5jMS5tdWxfYnlfMShjNCk7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfbXVsMVwiLCBBX2MxLCBjNCwgYmIpLFxuXG4gICAgICAgICAgICAvLyBsZXQgbyA9IGMxICsgYzQ7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIGMxLCBjNCwgbyksXG5cbiAgICAgICAgICAgIC8vIGxldCBjMSA9IHNlbGYuYzEgKyBzZWxmLmMwO1xuICAgICAgICAgICAgYy5jYWxsKGY2bVByZWZpeCArIFwiX2FkZFwiLCBBX2MxLCBBX2MwLCBSX2MxKSxcblxuICAgICAgICAgICAgLy8gbGV0IGMxID0gYzEubXVsX2J5XzAxKGMwLCAmbyk7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfbXVsMDFcIiwgUl9jMSwgYzAsIG8sIFJfYzEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzEgPSBjMSAtIGFhIC0gYmI7XG4gICAgICAgICAgICBjLmNhbGwoZjZtUHJlZml4ICsgXCJfc3ViXCIsIFJfYzEsIGFhLCBSX2MxKSxcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9zdWJcIiwgUl9jMSwgYmIsIFJfYzEpLFxuXG4gICAgICAgICAgICAvLyBsZXQgYzAgPSBiYjtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9jb3B5XCIsIGJiLCBSX2MwKSxcblxuICAgICAgICAgICAgLy8gbGV0IGMwID0gYzAubXVsX2J5X25vbnJlc2lkdWUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9tdWxOUlwiLCBSX2MwLCBSX2MwKSxcblxuICAgICAgICAgICAgLy8gbGV0IGMwID0gYzAgKyBhYTtcbiAgICAgICAgICAgIGMuY2FsbChmNm1QcmVmaXggKyBcIl9hZGRcIiwgUl9jMCwgYWEsIFJfYzApLFxuICAgICAgICApO1xuICAgIH1cbiAgICBidWlsZEYxMk11bDAxNCgpO1xuXG5cbiAgICBmdW5jdGlvbiBidWlsZEVMTCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2VsbFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicENvZWZzXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicEZcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCBQeCAgPSBjLmdldExvY2FsKFwicFBcIik7XG4gICAgICAgIGNvbnN0IFB5ICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFBcIiksIGMuaTMyX2NvbnN0KG44cSkpO1xuXG4gICAgICAgIGNvbnN0IEYgID0gYy5nZXRMb2NhbChcInBGXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvZWYwXzAgID0gYy5nZXRMb2NhbChcInBDb2Vmc1wiKTtcbiAgICAgICAgY29uc3QgY29lZjBfMSAgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInBDb2Vmc1wiKSwgYy5pMzJfY29uc3QoZjFzaXplKSk7XG4gICAgICAgIGNvbnN0IGNvZWYxXzAgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZnNcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSoyKSk7XG4gICAgICAgIGNvbnN0IGNvZWYxXzEgID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZnNcIiksIGMuaTMyX2NvbnN0KGYxc2l6ZSozKSk7XG4gICAgICAgIGNvbnN0IGNvZWYyICA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZzXCIpLCBjLmkzMl9jb25zdChmMXNpemUqNCkpO1xuXG4gICAgICAgIGNvbnN0IHBjMCA9IG1vZHVsZS5hbGxvYyhmMXNpemUqMik7XG4gICAgICAgIGNvbnN0IGMwICA9IGMuaTMyX2NvbnN0KHBjMCk7XG4gICAgICAgIGNvbnN0IGMwX2MwID0gYy5pMzJfY29uc3QocGMwKTtcbiAgICAgICAgY29uc3QgYzBfYzEgPSBjLmkzMl9jb25zdChwYzArZjFzaXplKTtcblxuICAgICAgICBjb25zdCBwYzEgPSBtb2R1bGUuYWxsb2MoZjFzaXplKjIpO1xuICAgICAgICBjb25zdCBjMSAgPSBjLmkzMl9jb25zdChwYzEpO1xuICAgICAgICBjb25zdCBjMV9jMCA9IGMuaTMyX2NvbnN0KHBjMSk7XG4gICAgICAgIGNvbnN0IGMxX2MxID0gYy5pMzJfY29uc3QocGMxK2Yxc2l6ZSk7XG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIC8vICAgICBsZXQgbXV0IGMwID0gY29lZmZzLjA7XG4gICAgICAgICAgICAvLyAgICAgbGV0IG11dCBjMSA9IGNvZWZmcy4xO1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgIGMwLmMwICo9IHAueTtcbiAgICAgICAgICAgIC8vICAgIGMwLmMxICo9IHAueTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAgICBjMS5jMCAqPSBwLng7XG4gICAgICAgICAgICAvLyAgICBjMS5jMSAqPSBwLng7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gICAgIGYubXVsX2J5XzAxNCgmY29lZmZzLjIsICZjMSwgJmMwKVxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGNvZWYwXzAsIFB5LCBjMF9jMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGNvZWYwXzEsIFB5LCBjMF9jMSksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGNvZWYxXzAsIFB4LCBjMV9jMCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIGNvZWYxXzEsIFB4LCBjMV9jMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWwwMTRcIiwgRiwgY29lZjIsIGMxLCBjMCwgRiksXG5cbiAgICAgICAgKTtcblxuICAgIH1cbiAgICBidWlsZEVMTCgpO1xuXG4gICAgZnVuY3Rpb24gYnVpbGRNaWxsZXJMb29wKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKHByZWZpeCsgXCJfbWlsbGVyTG9vcFwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBwcmVQXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicHByZVFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZExvY2FsKFwicENvZWZcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkTG9jYWwoXCJpXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcHJlUCA9IGMuZ2V0TG9jYWwoXCJwcHJlUFwiKTtcblxuICAgICAgICBjb25zdCBjb2VmcyAgPSBjLmdldExvY2FsKFwicENvZWZcIik7XG5cbiAgICAgICAgY29uc3QgRiA9IGMuZ2V0TG9jYWwoXCJyXCIpO1xuXG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX29uZVwiLCBGKSxcblxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfaXNaZXJvXCIsIHByZVApLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX2lzWmVyb1wiLCBjLmdldExvY2FsKFwicHByZVFcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KFtdKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJwQ29lZlwiLCBjLmkzMl9hZGQoIGMuZ2V0TG9jYWwoXCJwcHJlUVwiKSwgYy5pMzJfY29uc3QoZjJzaXplKjMpKSksXG5cbiAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX2NvbnN0KGF0ZUxvb3BCaXRCeXRlcy5sZW5ndGgtMikpLFxuICAgICAgICAgICAgYy5ibG9jayhjLmxvb3AoXG5cblxuICAgICAgICAgICAgICAgIGMuY2FsbChwcmVmaXggKyBcIl9lbGxcIiwgcHJlUCwgY29lZnMsICBGKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwicENvZWZcIiwgYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwQ29lZlwiKSwgYy5pMzJfY29uc3QoYXRlQ29lZlNpemUpKSksXG5cbiAgICAgICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgICAgICBjLmkzMl9sb2FkOF9zKGMuZ2V0TG9jYWwoXCJpXCIpLCBwQXRlTG9vcEJpdEJ5dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5jYWxsKHByZWZpeCArIFwiX2VsbFwiLCBwcmVQLCBjb2VmcywgIEYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5zZXRMb2NhbChcInBDb2VmXCIsIGMuaTMyX2FkZChjLmdldExvY2FsKFwicENvZWZcIiksIGMuaTMyX2NvbnN0KGF0ZUNvZWZTaXplKSkpLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfc3F1YXJlXCIsIEYsIEYpLFxuXG4gICAgICAgICAgICAgICAgYy5icl9pZigxLCBjLmkzMl9lcSAoIGMuZ2V0TG9jYWwoXCJpXCIpLCBjLmkzMl9jb25zdCgxKSApKSxcbiAgICAgICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9zdWIoYy5nZXRMb2NhbChcImlcIiksIGMuaTMyX2NvbnN0KDEpKSksXG4gICAgICAgICAgICAgICAgYy5icigwKVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfZWxsXCIsIHByZVAsIGNvZWZzLCAgRiksXG5cbiAgICAgICAgKTtcblxuXG4gICAgICAgIGlmIChpc0xvb3BOZWdhdGl2ZSkge1xuICAgICAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgRiwgRiksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEZyb2Jlbml1c01hcChuKSB7XG4gICAgICAgIGNvbnN0IEYxMiA9IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMW4sIDBuXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzM4NTA3NTQzNzAwMzcxNjkwMTE5NTIxNDcwNzYwNTEzNjQwNTcxNTg4MDc0MjA5NzA2ODI0Mzg2NzYwNTA1MjI2MTM2Mjg0MjMyMTk2Mzc3MjUwNzIxODI2OTcxMTMwNjI3Nzc4OTE1ODk1MDY0MjQ3NjBuLCAxNTE2NTUxODUxODQ0OTgzODE0NjU2NDI3NDk2ODQ1NDAwOTkzOTgwNzUzOTg5NjgzMjU0NDY2NTYwMDc2MTM1MTA0MDMyMjcyNzEyMDAxMzkzNzA1MDQ5MzIwMTU5NTI4ODYxNDYzMDQ3NjYxMzUwMjduXSxcbiAgICAgICAgICAgICAgICBbNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFsyOTczNjc3NDA4OTg2NTYxMDQzNDQyNDY1MzQ2NTIwMTA4ODc5MTcyMDQyODgzMDA5MjQ5OTg5MTc2NDE1MDE4MDkxNDIwODA3MTkyMTgyNjM4NTY3MTE2MzE4NTc2NDcyNjQ5MzQ3MDE1OTE3NjkwNTMwbiwgMTAyODczMjE0NjIzNTEwNjM0OTk3NTMyNDQ3OTIxNTc5NTI3NzM4NDgzOTkzNjkyOTc1Nzg5NjE1NTY0MzExODAzMjYxMDg0MzI5ODY1NTIyNTg3NTU3MTMxMDU1MjU0MzAxNDY5MDg3ODM1NDg2OTI1N25dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTBuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzMxMjUzMzI1OTQxNzEwNTk0MjQ5MDgxMDgwOTYyMDQ2NDg5Nzg1NzAxMTgyODE5Nzc1NzU0MzU4MzI0MjI2MzE2MDE4MjQwMzQ0NjMzODI3Nzc5Mzc2MjEyNTA1OTI0MjU1MzU0OTMzMjA2ODM4MjU1NTduLCA4NzcwNzY5NjEwNTA2MDc5Njg1MDk2ODE3Mjk1MzEyNTUxNzc5ODY3NjQ1Mzc5NjE0MzI0NDk0OTk2MzU1MDQ1MjIyMDc2MTYwMjc0NTUwODY1MDUwNjYzNzg1MzY1OTAxMjg1NDQ1NzM1ODg3MzQyMzBuXSxcbiAgICAgICAgICAgICAgICBbNDAwMjQwOTU1NTIyMTY2NzM5MzQxNzc4OTgyNTczNTkwNDE1NjU1Njg4MjgxOTkzOTAwNzg4NTMzMjA1ODEzNjEyNDAzMTY1MDQ5MDgzNzg2NDQ0MjY4NzYyOTEyOTAxNTY2NDAzNzg5NDI3MjU1OTc4Nm4sIDBuXSxcbiAgICAgICAgICAgICAgICBbMTUxNjU1MTg1MTg0NDk4MzgxNDY1NjQyNzQ5Njg0NTQwMDk5Mzk4MDc1Mzk4OTY4MzI1NDQ2NjU2MDA3NjEzNTEwNDAzMjI3MjcxMjAwMTM5MzcwNTA0OTMyMDE1OTUyODg2MTQ2MzA0NzY2MTM1MDI3biwgMzg1MDc1NDM3MDAzNzE2OTAxMTk1MjE0NzA3NjA1MTM2NDA1NzE1ODgwNzQyMDk3MDY4MjQzODY3NjA1MDUyMjYxMzYyODQyMzIxOTYzNzcyNTA3MjE4MjY5NzExMzA2Mjc3Nzg5MTU4OTUwNjQyNDc2MG5dLFxuICAgICAgICAgICAgICAgIFs0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM2biwgMG5dLFxuICAgICAgICAgICAgICAgIFsxMDI4NzMyMTQ2MjM1MTA2MzQ5OTc1MzI0NDc5MjE1Nzk1Mjc3Mzg0ODM5OTM2OTI5NzU3ODk2MTU1NjQzMTE4MDMyNjEwODQzMjk4NjU1MjI1ODc1NTcxMzEwNTUyNTQzMDE0NjkwODc4MzU0ODY5MjU3biwgMjk3MzY3NzQwODk4NjU2MTA0MzQ0MjQ2NTM0NjUyMDEwODg3OTE3MjA0Mjg4MzAwOTI0OTk4OTE3NjQxNTAxODA5MTQyMDgwNzE5MjE4MjYzODU2NzExNjMxODU3NjQ3MjY0OTM0NzAxNTkxNzY5MDUzMG5dLFxuICAgICAgICAgICAgICAgIFs0MDAyNDA5NTU1MjIxNjY3MzkyNjI0MzEwNDM1MDA2Njg4NjQzOTM1NTAzMTE4MzA1NTg2NDM4MjcxMTcxMzk1ODQyOTcxMTU3NDgwMzgxMzc3MDE1NDA1OTgwMDUzNTM5MzU4NDE3MTM1NTQwOTM5NDM3biwgMG5dLFxuICAgICAgICAgICAgICAgIFs4NzcwNzY5NjEwNTA2MDc5Njg1MDk2ODE3Mjk1MzEyNTUxNzc5ODY3NjQ1Mzc5NjE0MzI0NDk0OTk2MzU1MDQ1MjIyMDc2MTYwMjc0NTUwODY1MDUwNjYzNzg1MzY1OTAxMjg1NDQ1NzM1ODg3MzQyMzBuLCAzMTI1MzMyNTk0MTcxMDU5NDI0OTA4MTA4MDk2MjA0NjQ4OTc4NTcwMTE4MjgxOTc3NTc1NDM1ODMyNDIyNjMxNjAxODI0MDM0NDYzMzgyNzc3OTM3NjIxMjUwNTkyNDI1NTM1NDkzMzIwNjgzODI1NTU3bl0sXG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgRjYgPSBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxbiwgMG5dLFxuICAgICAgICAgICAgICAgIFswbiwgNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm5dLFxuICAgICAgICAgICAgICAgIFs3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTBuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzBuLCAxbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzBuLCA3OTM0NzkzOTA3MjkyMTU1MTI2MjEzNzk3MDE2MzM0MjE0NDcwNjA4ODY3NDAyODEwNjA0OTMwMTA0NTY0ODc0MjcyODE2NDkwNzU0NzYzMDU2MjA3NTg3MzE2MjAzNTBuXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzFuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzduLCAwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzQwMDI0MDk1NTUyMjE2NjczOTM0MTc3ODk4MjU3MzU5MDQxNTY1NTY4ODI4MTk5MzkwMDc4ODUzMzIwNTgxMzYxMjQwMzE2NTA0OTA4Mzc4NjQ0NDI2ODc2MjkxMjkwMTU2NjQwMzc4OTQyNzI1NTk3ODZuLCAwbl0sXG4gICAgICAgICAgICAgICAgWzc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG4sIDBuXSxcbiAgICAgICAgICAgICAgICBbNzkzNDc5MzkwNzI5MjE1NTEyNjIxMzc5NzAxNjMzNDIxNDQ3MDYwODg2NzQwMjgxMDYwNDkzMDEwNDU2NDg3NDI3MjgxNjQ5MDc1NDc2MzA1NjIwNzU4NzMxNjIwMzUxbiwgMG5dLFxuICAgICAgICAgICAgXVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwXCIrbik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTw2OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IFggPSAoaT09MCkgPyBjLmdldExvY2FsKFwieFwiKSA6IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoaSpmMnNpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IFhjMCA9IFg7XG4gICAgICAgICAgICBjb25zdCBYYzEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplICsgZjFzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBSID0gKGk9PTApID8gYy5nZXRMb2NhbChcInJcIikgOiBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KGkqZjJzaXplKSk7XG4gICAgICAgICAgICBjb25zdCBSYzAgPSBSO1xuICAgICAgICAgICAgY29uc3QgUmMxID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChpKmYyc2l6ZSArIGYxc2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgY29lZiA9IG11bDIoRjEyW01hdGguZmxvb3IoaS8zKV1bbiUxMl0gLCBGNltpJTNdW24lNl0pO1xuICAgICAgICAgICAgY29uc3QgcENvZWYgPSBtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShjb2VmWzBdKSwgbjhxKSxcbiAgICAgICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoY29lZlsxXSksIG44cSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGlmIChuJTIgPT0gMSkge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgWGMwLCBSYzApLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbmVnXCIsIFhjMSwgUmMxKSxcbiAgICAgICAgICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBSLCBjLmkzMl9jb25zdChwQ29lZiksIFIpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGYuYWRkQ29kZShjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIFgsIGMuaTMyX2NvbnN0KHBDb2VmKSwgUikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbXVsMihhLCBiKSB7XG4gICAgICAgICAgICBjb25zdCBhYzAgPSBhWzBdO1xuICAgICAgICAgICAgY29uc3QgYWMxID0gYVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGJjMCA9IGJbMF07XG4gICAgICAgICAgICBjb25zdCBiYzEgPSBiWzFdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW1xuICAgICAgICAgICAgICAgIChhYzAgKiBiYzAgLSAoYWMxICogYmMxKSkgJSBxLFxuICAgICAgICAgICAgICAgIChhYzAgKiBiYzEgKyAoYWMxICogYmMwKSkgJSBxLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKHJlc1swXSkpIHJlc1swXSA9IHJlc1swXSArIHE7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ3ljbG90b21pY1NxdWFyZSgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19jeWNsb3RvbWljU3F1YXJlXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwieFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInJcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4MCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCB4NCA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHgzID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCgyKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB4MiA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QoMypmMnNpemUpKTtcbiAgICAgICAgY29uc3QgeDEgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInhcIiksIGMuaTMyX2NvbnN0KDQqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHg1ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJ4XCIpLCBjLmkzMl9jb25zdCg1KmYyc2l6ZSkpO1xuXG4gICAgICAgIGNvbnN0IHIwID0gYy5nZXRMb2NhbChcInJcIik7XG4gICAgICAgIGNvbnN0IHI0ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjMgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDIqZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHIyID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJyXCIpLCBjLmkzMl9jb25zdCgzKmYyc2l6ZSkpO1xuICAgICAgICBjb25zdCByMSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwiclwiKSwgYy5pMzJfY29uc3QoNCpmMnNpemUpKTtcbiAgICAgICAgY29uc3QgcjUgPSBjLmkzMl9hZGQoYy5nZXRMb2NhbChcInJcIiksIGMuaTMyX2NvbnN0KDUqZjJzaXplKSk7XG5cbiAgICAgICAgY29uc3QgdDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB0NSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmMnNpemUpKTtcbiAgICAgICAgY29uc3QgdG1wID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCBBVVggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG5cblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAvLyAgICAvLyB0MCArIHQxKnkgPSAoejAgKyB6MSp5KV4yID0gYV4yXG4gICAgICAgICAgICAvLyAgICB0bXAgPSB6MCAqIHoxO1xuICAgICAgICAgICAgLy8gICAgdDAgPSAoejAgKyB6MSkgKiAoejAgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejEpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICAgIHQxID0gdG1wICsgdG1wO1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB4MCwgeDEsIHRtcCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgeDEsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDAsIHQwLCB0MCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHgwLCB4MSwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgQVVYLCB0MCwgdDApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHRtcCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCBBVVgsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfc3ViXCIsIHQwLCBBVVgsIHQwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdG1wLCB0bXAsIHQxKSxcblxuICAgICAgICAgICAgLy8gIC8vIHQyICsgdDMqeSA9ICh6MiArIHozKnkpXjIgPSBiXjJcbiAgICAgICAgICAgIC8vICB0bXAgPSB6MiAqIHozO1xuICAgICAgICAgICAgLy8gIHQyID0gKHoyICsgejMpICogKHoyICsgbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHozKSAtIHRtcCAtIG15X0ZwNjo6bm9uX3Jlc2lkdWUgKiB0bXA7XG4gICAgICAgICAgICAvLyAgdDMgPSB0bXAgKyB0bXA7XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIHgyLCB4MywgdG1wKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB4MywgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4MiwgdDIsIHQyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgeDIsIHgzLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBBVVgsIHQyLCB0MiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsTlJcIiwgdG1wLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIEFVWCwgQVVYKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIEFVWCwgdDIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0bXAsIHRtcCwgdDMpLFxuXG4gICAgICAgICAgICAvLyAgLy8gdDQgKyB0NSp5ID0gKHo0ICsgejUqeSleMiA9IGNeMlxuICAgICAgICAgICAgLy8gIHRtcCA9IHo0ICogejU7XG4gICAgICAgICAgICAvLyAgdDQgPSAoejQgKyB6NSkgKiAoejQgKyBteV9GcDY6Om5vbl9yZXNpZHVlICogejUpIC0gdG1wIC0gbXlfRnA2Ojpub25fcmVzaWR1ZSAqIHRtcDtcbiAgICAgICAgICAgIC8vICB0NSA9IHRtcCArIHRtcDtcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgeDQsIHg1LCB0bXApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bE5SXCIsIHg1LCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHg0LCB0NCwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB4NCwgeDUsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfbXVsXCIsIEFVWCwgdDQsIHQ0KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxOUlwiLCB0bXAsIEFVWCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgQVVYLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NCwgQVVYLCB0NCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHRtcCwgdG1wLCB0NSksXG5cbiAgICAgICAgICAgIC8vIEZvciBBXG4gICAgICAgICAgICAvLyB6MCA9IDMgKiB0MCAtIDIgKiB6MFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0MCwgeDAsIHIwKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjAsIHIwLCByMCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQwLCByMCwgcjApLFxuICAgICAgICAgICAgLy8gejEgPSAzICogdDEgKyAyICogejFcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDEsIHgxLCByMSksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIxLCByMSwgcjEpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MSwgcjEsIHIxKSxcblxuICAgICAgICAgICAgLy8gRm9yIEJcbiAgICAgICAgICAgIC8vIHoyID0gMyAqICh4aSAqIHQ1KSArIDIgKiB6MlxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB0NSwgYy5pMzJfY29uc3QocEJsczEyMzgxVHdpc3QpLCBBVVgpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBBVVgsIHgyLCByMiksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHIyLCByMiwgcjIpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCBBVVgsIHIyLCByMiksXG4gICAgICAgICAgICAvLyB6MyA9IDMgKiB0NCAtIDIgKiB6M1xuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX3N1YlwiLCB0NCwgeDMsIHIzKSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgcjMsIHIzLCByMyksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQ0LCByMywgcjMpLFxuXG4gICAgICAgICAgICAvLyBGb3IgQ1xuICAgICAgICAgICAgLy8gejQgPSAzICogdDIgLSAyICogejRcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9zdWJcIiwgdDIsIHg0LCByNCksXG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHI0LCByNCwgcjQpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCB0MiwgcjQsIHI0KSxcbiAgICAgICAgICAgIC8vIHo1ID0gMyAqIHQzICsgMiAqIHo1XG4gICAgICAgICAgICBjLmNhbGwoZjJtUHJlZml4ICsgXCJfYWRkXCIsIHQzLCB4NSwgcjUpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX2FkZFwiLCByNSwgcjUsIHI1KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9hZGRcIiwgdDMsIHI1LCByNSksXG5cbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkQ3ljbG90b21pY0V4cChleHBvbmVudCwgaXNFeHBOZWdhdGl2ZSwgZm5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGV4cG9uZW50TmFmQnl0ZXMgPSBuYWYoZXhwb25lbnQpLm1hcCggKGIpID0+IChiPT0tMSA/IDB4RkY6IGIpICk7XG4gICAgICAgIGNvbnN0IHBFeHBvbmVudE5hZkJ5dGVzID0gbW9kdWxlLmFsbG9jKGV4cG9uZW50TmFmQnl0ZXMpO1xuICAgICAgICAvLyBjb25zdCBwRXhwb25lbnQgPSBtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoZXhwb25lbnQsIG44KSk7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX19jeWNsb3RvbWljRXhwX1wiK2ZuTmFtZSk7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImJpdFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRMb2NhbChcImlcIiwgXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYyA9IGYuZ2V0Q29kZUJ1aWxkZXIoKTtcblxuICAgICAgICBjb25zdCB4ID0gYy5nZXRMb2NhbChcInhcIik7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYy5nZXRMb2NhbChcInJcIik7XG5cbiAgICAgICAgY29uc3QgaW52ZXJzZSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgeCwgaW52ZXJzZSksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfb25lXCIsIHJlcyksXG5cbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy50ZWVMb2NhbChcImJpdFwiLCBjLmkzMl9sb2FkOF9zKGMuaTMyX2NvbnN0KGV4cG9uZW50TmFmQnl0ZXMubGVuZ3RoLTEpLCBwRXhwb25lbnROYWZCeXRlcykpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRMb2NhbChcImJpdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2NvbnN0KDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCB4LCByZXMpLFxuICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlcywgaW52ZXJzZSwgcmVzKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICBjLnNldExvY2FsKFwiaVwiLCBjLmkzMl9jb25zdChleHBvbmVudE5hZkJ5dGVzLmxlbmd0aC0yKSksXG4gICAgICAgICAgICBjLmJsb2NrKGMubG9vcChcbiAgICAgICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgcmVzLCByZXMpLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMudGVlTG9jYWwoXCJiaXRcIiwgYy5pMzJfbG9hZDhfcyhjLmdldExvY2FsKFwiaVwiKSwgcEV4cG9uZW50TmFmQnl0ZXMpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2V0TG9jYWwoXCJiaXRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pMzJfY29uc3QoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHJlcywgeCwgcmVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgcmVzLCBpbnZlcnNlLCByZXMpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjLmJyX2lmKDEsIGMuaTMyX2VxeiAoIGMuZ2V0TG9jYWwoXCJpXCIpICkpLFxuICAgICAgICAgICAgICAgIGMuc2V0TG9jYWwoXCJpXCIsIGMuaTMyX3N1YihjLmdldExvY2FsKFwiaVwiKSwgYy5pMzJfY29uc3QoMSkpKSxcbiAgICAgICAgICAgICAgICBjLmJyKDApXG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc0V4cE5lZ2F0aXZlKSB7XG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Nvbmp1Z2F0ZVwiLCByZXMsIHJlcyksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZEZpbmFsRXhwb25lbnRpYXRpb24oKSB7XG4gICAgICAgIGJ1aWxkQ3ljbG90b21pY1NxdWFyZSgpO1xuICAgICAgICBidWlsZEN5Y2xvdG9taWNFeHAoZmluYWxFeHBaLCBmaW5hbEV4cElzTmVnYXRpdmUsIFwidzBcIik7XG5cbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGVsdCA9IGMuZ2V0TG9jYWwoXCJ4XCIpO1xuICAgICAgICBjb25zdCByZXMgPSBjLmdldExvY2FsKFwiclwiKTtcbiAgICAgICAgY29uc3QgdDAgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQxID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0MiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDMgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG4gICAgICAgIGNvbnN0IHQ0ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGZ0c2l6ZSkpO1xuICAgICAgICBjb25zdCB0NSA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgdDYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZnRzaXplKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuXG4gICAgICAgICAgICAvLyBsZXQgbXV0IHQwID0gZi5mcm9iZW5pdXNfbWFwKDYpXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwNlwiLCBlbHQsIHQwKSxcblxuICAgICAgICAgICAgLy8gbGV0IHQxID0gZi5pbnZlcnQoKVxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2ludmVyc2VcIiwgZWx0LCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDIgPSB0MCAqIHQxO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0MCwgdDEsIHQyKSxcblxuICAgICAgICAgICAgLy8gdDEgPSB0Mi5jbG9uZSgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2NvcHlcIiwgdDIsIHQxKSxcblxuICAgICAgICAgICAgLy8gdDIgPSB0Mi5mcm9iZW5pdXNfbWFwKCkuZnJvYmVuaXVzX21hcCgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Zyb2Jlbml1c01hcDJcIiwgdDIsIHQyKSxcblxuICAgICAgICAgICAgLy8gdDIgKj0gdDE7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQyLCB0MSwgdDIpLFxuXG5cbiAgICAgICAgICAgIC8vIHQxID0gY3ljbG90b21pY19zcXVhcmUodDIpLmNvbmp1Z2F0ZSgpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljU3F1YXJlXCIsIHQyLCB0MSksXG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHQxLCB0MSksXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDMgPSBjeWNvbG90b21pY19leHAodDIpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIHQyLCB0MyksXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDQgPSBjeWNsb3RvbWljX3NxdWFyZSh0Myk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNTcXVhcmVcIiwgdDMsIHQ0KSxcblxuICAgICAgICAgICAgLy8gbGV0IG11dCB0NSA9IHQxICogdDM7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQxLCB0MywgdDUpLFxuXG4gICAgICAgICAgICAvLyB0MSA9IGN5Y29sb3RvbWljX2V4cCh0NSk7XG4gICAgICAgICAgICBjLmNhbGwocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIiwgdDUsIHQxKSxcblxuICAgICAgICAgICAgLy8gdDAgPSBjeWNvbG90b21pY19leHAodDEpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIHQxLCB0MCksXG5cbiAgICAgICAgICAgIC8vIGxldCBtdXQgdDYgPSBjeWNvbG90b21pY19leHAodDApO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIHQwLCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQ2ICo9IHQ0O1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0NiwgdDQsIHQ2KSxcblxuICAgICAgICAgICAgLy8gdDQgPSBjeWNvbG90b21pY19leHAodDYpO1xuICAgICAgICAgICAgYy5jYWxsKHByZWZpeCArIFwiX19jeWNsb3RvbWljRXhwX3cwXCIsIHQ2LCB0NCksXG5cbiAgICAgICAgICAgIC8vIHQ1ID0gdDUuY29uanVnYXRlKCk7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfY29uanVnYXRlXCIsIHQ1LCB0NSksXG5cbiAgICAgICAgICAgIC8vIHQ0ICo9IHQ1ICogdDI7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ0LCB0NSwgdDQpLFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0NCwgdDIsIHQ0KSxcblxuICAgICAgICAgICAgLy8gdDUgPSB0Mi5jb25qdWdhdGUoKTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9jb25qdWdhdGVcIiwgdDIsIHQ1KSxcblxuICAgICAgICAgICAgLy8gdDEgKj0gdDI7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQxLCB0MiwgdDEpLFxuXG4gICAgICAgICAgICAvLyB0MSA9IHQxLmZyb2Jlbml1c19tYXAoKS5mcm9iZW5pdXNfbWFwKCkuZnJvYmVuaXVzX21hcCgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Zyb2Jlbml1c01hcDNcIiwgdDEsIHQxKSxcblxuICAgICAgICAgICAgLy8gdDYgKj0gdDU7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQ2LCB0NSwgdDYpLFxuXG4gICAgICAgICAgICAvLyB0NiA9IHQ2LmZyb2Jlbml1c19tYXAoKTtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9mcm9iZW5pdXNNYXAxXCIsIHQ2LCB0NiksXG5cbiAgICAgICAgICAgIC8vIHQzICo9IHQwO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0MywgdDAsIHQzKSxcblxuICAgICAgICAgICAgLy8gdDMgPSB0My5mcm9iZW5pdXNfbWFwKCkuZnJvYmVuaXVzX21hcCgpO1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2Zyb2Jlbml1c01hcDJcIiwgdDMsIHQzKSxcblxuICAgICAgICAgICAgLy8gdDMgKj0gdDE7XG4gICAgICAgICAgICBjLmNhbGwoZnRtUHJlZml4ICsgXCJfbXVsXCIsIHQzLCB0MSwgdDMpLFxuXG4gICAgICAgICAgICAvLyB0MyAqPSB0NjtcbiAgICAgICAgICAgIGMuY2FsbChmdG1QcmVmaXggKyBcIl9tdWxcIiwgdDMsIHQ2LCB0MyksXG5cbiAgICAgICAgICAgIC8vIGYgPSB0MyAqIHQ0O1xuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCB0MywgdDQsIHJlcyksXG5cbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkRmluYWxFeHBvbmVudGlhdGlvbk9sZCgpIHtcbiAgICAgICAgY29uc3QgZiA9IG1vZHVsZS5hZGRGdW5jdGlvbihwcmVmaXgrIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25PbGRcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJ4XCIsIFwiaTMyXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwiclwiLCBcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBleHBvbmVudCA9IDMyMjI3NzM2MTUxNjkzNDE0MDQ2Mjg5MTU2NDU4NjUxMDEzOTkwODM3OTk2OTUxNDgyODQ5NDIxODM2NjY4ODAyNTI4ODY2MTA0MTEwNDY4Mjc5NDk5ODY4MDQ5NzU4MDAwODg5OTk3MzI0OTgxNDEwNDQ0NzY5Mjc3ODk4ODIwODM3Njc3OTU3MzgxOTQ4NTI2MzAyNjE1OTU4ODUxMDUxMzgzNDg3NjMwMzAxNDAxNjc5ODgwOTkxOTM0MzUzMjg5OTE2NDg0ODczMDI4MDk0MjYwOTk1NjY3MDkxNzU2NTYxODExNTg2NzI4NzM5OTYyMzI4NjgxMzI3MDM1NzkwMTczMTUxMDE4ODE0OTkzNDM2MzM2MDM4MTYxNDUwMTMzNDA4NjgyNTQ0MjI3MTkyMDA3OTM2MzI4OTk1NDUxMDU2NTM3NTM3ODQ0MzcwNDM3Mjk5NDg4MTQwNjc5Nzg4MjY3Njk3MTA4MjIwMDYyNjU0MTkxNjQxMzE4NDY0MjUyMDI2OTY3ODg5NzU1OTUzMjI2MDk0OTMzNDc2MDYwNDk2MjA4NjM0ODg5ODExODk4MjI0ODg0MjYzNDM3OTYzNzU5ODY2NTQ2ODgxNzc2OTA3NTg3ODU1NTQ5Mzc1MjIxNDQ5Mjc5MDEyMjc4NTg1MDIwMjk1NzU3NTIwMDE3NjA4NDIwNDQyMjc1MTQ4NTk1NzMzNjQ2NTQ3MjMyNDgxMDk4MjgzMzYzODQ5MDkwNDI3OTI4MjY5NjEzNDMyMzA3MjUxNTIyMDA0NDQ1MTU5MjY0Njg4NTQxMDU3MjIzNDQ1MTczMjc5MDU5MDAxMzQ3OTM1ODM0Mzg0MTIyMDA3NDE3NDg0ODIyMTcyMjAxNzA4MzU5Nzg3MjAxNzYzODUxNDEwMzE3NDEyMjc4NDg0MzkyNTU3ODM3MDQzMDg0MzUyMjk1OTYwMDA5NTY3NjI4NTcyMzczNzA0OTQzODM0NjU0NDc1MzE2ODkxMjk3NDk3Njc5MTUyODUzNTI3NjMxNzI1NjkwNDMzNjUyMDE3OTI4MTE0NTM5NDY4NjU2NTA1MDQxOTI1MDYxNDEwNzgwMzIzMzMxNDY1ODgyNTQ2MzExNzkwMDI1MDcwMTE5OTE4MTUyOTIwNTk0MjM2MzE1OTMyNTc2NTk5MTgxOTQzMzkxNDMwMzkwODg2MDQ2MDcyMDU4MTQwODIwMTM3MzE2NDA0Nzc3Mzc5NDgyNTQxMTAxMTkyMjMwNTgyMDA2NTYxMTEyMTU0NDU2MTgwODQxNDA1NTMwMjIxMjA1NzQ3MTM5NTcxOTQzMjA3MjIwOTI0NTYwMDI1ODEzNDM2NDU4NDYzNjgxMDA5MzUyMDI4NTcxMTA3MjU3ODcyMTQzNTUxNzg4NDEwMzUyNjQ4MzgzMjczMzI4OTgwMjQyNjE1NzMwMTU0Mjc0NDQ3Njc0MDAwODQ5NDc4MDM2MzM1NDMwNTExNjk3ODgwNTYyMDY3MTQ2NzA3MTQwMDcxMTM1ODgzOTU1MzM3NTM0MDcyNDg5OTczNTQ2MDQ4MDE0NDU5OTc4MjAxNDkwNjU4NjU0MzgxMzI5MjE1NzkyMjIyMDY0NTA4OTE5MjEzMDIwOTMzNDkyNjY2MTU4ODczNzAwNzc2ODU2NTgzODUxOTQ1NjYwMTU2MDgwNDk1Nzk4NTY2Nzg4MDM5NTIyMTA0OTI0OTgwMzc1MzU4MjYzNzcwODU2MG47XG5cbiAgICAgICAgY29uc3QgcEV4cG9uZW50ID0gbW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKCBleHBvbmVudCwgNTQ0ICkpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgZi5hZGRDb2RlKFxuICAgICAgICAgICAgYy5jYWxsKGZ0bVByZWZpeCArIFwiX2V4cFwiLCBjLmdldExvY2FsKFwieFwiKSwgYy5pMzJfY29uc3QocEV4cG9uZW50KSwgYy5pMzJfY29uc3QoNTQ0KSwgYy5nZXRMb2NhbChcInJcIikpLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgY29uc3QgcFByZVAgPSBtb2R1bGUuYWxsb2MocHJlUFNpemUpO1xuICAgIGNvbnN0IHBQcmVRID0gbW9kdWxlLmFsbG9jKHByZVFTaXplKTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkUGFpcmluZ0VxdWF0aW9uKG5QYWlyaW5ncykge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wYWlyaW5nRXFcIituUGFpcmluZ3MpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBhaXJpbmdzOyBpKyspIHtcbiAgICAgICAgICAgIGYuYWRkUGFyYW0oXCJwX1wiK2ksIFwiaTMyXCIpO1xuICAgICAgICAgICAgZi5hZGRQYXJhbShcInFfXCIraSwgXCJpMzJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZi5hZGRQYXJhbShcImNcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcmVzVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcbiAgICAgICAgY29uc3QgYXV4VCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX29uZVwiLCByZXNUICkpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUGFpcmluZ3M7IGkrKykge1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiLCBjLmdldExvY2FsKFwicF9cIitpKSwgYy5pMzJfY29uc3QocFByZVApICkpO1xuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9wcmVwYXJlRzJcIiwgYy5nZXRMb2NhbChcInFfXCIraSksIGMuaTMyX2NvbnN0KHBQcmVRKSApKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2tzXG4gICAgICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICAgICAgYy5pMzJfZXF6KGMuY2FsbChnMW1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIsIGMuaTMyX2NvbnN0KHBQcmVQKSkpLFxuICAgICAgICAgICAgICAgICAgICBjLnJldChjLmkzMl9jb25zdCgwKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwoZzJtUHJlZml4ICsgXCJfaW5Hcm91cEFmZmluZVwiLCBjLmkzMl9jb25zdChwUHJlUSkpKSxcbiAgICAgICAgICAgICAgICAgICAgYy5yZXQoYy5pMzJfY29uc3QoMCkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9taWxsZXJMb29wXCIsIGMuaTMyX2NvbnN0KHBQcmVQKSwgYy5pMzJfY29uc3QocFByZVEpLCBhdXhUICkpO1xuXG4gICAgICAgICAgICBmLmFkZENvZGUoYy5jYWxsKGZ0bVByZWZpeCArIFwiX211bFwiLCByZXNULCBhdXhULCByZXNUICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIsIHJlc1QsIHJlc1QgKSk7XG5cbiAgICAgICAgZi5hZGRDb2RlKGMuY2FsbChmdG1QcmVmaXggKyBcIl9lcVwiLCByZXNULCBjLmdldExvY2FsKFwiY1wiKSkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYnVpbGRQYWlyaW5nKCkge1xuXG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24ocHJlZml4KyBcIl9wYWlyaW5nXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInFcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuYWRkUGFyYW0oXCJyXCIsIFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgcmVzVCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyhmdHNpemUpKTtcblxuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiLCBjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QocFByZVApICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX3ByZXBhcmVHMlwiLCBjLmdldExvY2FsKFwicVwiKSwgYy5pMzJfY29uc3QocFByZVEpICkpO1xuICAgICAgICBmLmFkZENvZGUoYy5jYWxsKHByZWZpeCArIFwiX21pbGxlckxvb3BcIiwgYy5pMzJfY29uc3QocFByZVApLCBjLmkzMl9jb25zdChwUHJlUSksIHJlc1QgKSk7XG4gICAgICAgIGYuYWRkQ29kZShjLmNhbGwocHJlZml4ICsgXCJfZmluYWxFeHBvbmVudGlhdGlvblwiLCByZXNULCBjLmdldExvY2FsKFwiclwiKSApKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGJ1aWxkSW5Hcm91cEcyKCkge1xuICAgICAgICBjb25zdCBmID0gbW9kdWxlLmFkZEZ1bmN0aW9uKGcybVByZWZpeCsgXCJfaW5Hcm91cEFmZmluZVwiKTtcbiAgICAgICAgZi5hZGRQYXJhbShcInBcIiwgXCJpMzJcIik7XG4gICAgICAgIGYuc2V0UmV0dXJuVHlwZShcImkzMlwiKTtcblxuICAgICAgICBjb25zdCBjID0gZi5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IFdJTlYgPSBbXG4gICAgICAgICAgICAyMDAxMjA0Nzc3NjEwODMzNjk2NzA4ODk0OTEyODY3OTUyMDc4Mjc4NDQxNDA5OTY5NTAzOTQyNjY2MDI5MDY4MDYyMDE1ODI1MjQ1NDE4OTMyMjIxMzQzODE0NTY0NTA3ODMyMDE4OTQ3MTM2Mjc5ODk0bixcbiAgICAgICAgICAgIDIwMDEyMDQ3Nzc2MTA4MzM2OTY3MDg4OTQ5MTI4Njc5NTIwNzgyNzg0NDE0MDk5Njk1MDM5NDI2NjYwMjkwNjgwNjIwMTU4MjUyNDU0MTg5MzIyMjEzNDM4MTQ1NjQ1MDc4MzIwMTg5NDcxMzYyNzk4OTNuXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgRlJPQjJYID0gNDAwMjQwOTU1NTIyMTY2NzM5MjYyNDMxMDQzNTAwNjY4ODY0MzkzNTUwMzExODMwNTU4NjQzODI3MTE3MTM5NTg0Mjk3MTE1NzQ4MDM4MTM3NzAxNTQwNTk4MDA1MzUzOTM1ODQxNzEzNTU0MDkzOTQzNm47XG4gICAgICAgIGNvbnN0IEZST0IzWSA9IFtcbiAgICAgICAgICAgIDI5NzM2Nzc0MDg5ODY1NjEwNDM0NDI0NjUzNDY1MjAxMDg4NzkxNzIwNDI4ODMwMDkyNDk5ODkxNzY0MTUwMTgwOTE0MjA4MDcxOTIxODI2Mzg1NjcxMTYzMTg1NzY0NzI2NDkzNDcwMTU5MTc2OTA1MzBuLFxuICAgICAgICAgICAgMjk3MzY3NzQwODk4NjU2MTA0MzQ0MjQ2NTM0NjUyMDEwODg3OTE3MjA0Mjg4MzAwOTI0OTk4OTE3NjQxNTAxODA5MTQyMDgwNzE5MjE4MjYzODU2NzExNjMxODU3NjQ3MjY0OTM0NzAxNTkxNzY5MDUzMG5cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB3SW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKFtcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShXSU5WWzBdKSwgbjhxKSxcbiAgICAgICAgICAgIC4uLnV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShXSU5WWzFdKSwgbjhxKSxcbiAgICAgICAgXSkpO1xuXG4gICAgICAgIGNvbnN0IGZyb2IyWCA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoRlJPQjJYKSwgbjhxKSkpO1xuICAgICAgICBjb25zdCBmcm9iM1kgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoW1xuICAgICAgICAgICAgLi4udXRpbHMuYmlnSW50MkJ5dGVzTEUodG9Nb250Z29tZXJ5KEZST0IzWVswXSksIG44cSksXG4gICAgICAgICAgICAuLi51dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoRlJPQjNZWzFdKSwgbjhxKSxcbiAgICAgICAgXSkpO1xuXG4gICAgICAgIGNvbnN0IHogPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2ModXRpbHMuYmlnSW50MkJ5dGVzTEUoZmluYWxFeHBaLCA4KSkpO1xuXG4gICAgICAgIGNvbnN0IHB4ID0gYy5nZXRMb2NhbChcInBcIik7XG4gICAgICAgIGNvbnN0IHB5ID0gYy5pMzJfYWRkKGMuZ2V0TG9jYWwoXCJwXCIpLCBjLmkzMl9jb25zdChmMnNpemUpKTtcblxuICAgICAgICBjb25zdCBhdXggPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjFzaXplKSk7XG5cbiAgICAgICAgY29uc3QgeF93aW52ID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSkpO1xuICAgICAgICBjb25zdCB5X3dpbnYgPSBjLmkzMl9jb25zdChtb2R1bGUuYWxsb2MoZjJzaXplKSk7XG4gICAgICAgIGNvbnN0IHBmMiA9IG1vZHVsZS5hbGxvYyhmMnNpemUqMik7XG4gICAgICAgIGNvbnN0IGYyID0gYy5pMzJfY29uc3QocGYyKTtcbiAgICAgICAgY29uc3QgZjJ4ID0gYy5pMzJfY29uc3QocGYyKTtcbiAgICAgICAgY29uc3QgZjJ4X2MxID0gYy5pMzJfY29uc3QocGYyKTtcbiAgICAgICAgY29uc3QgZjJ4X2MyID0gYy5pMzJfY29uc3QocGYyK2Yxc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYyeSA9IGMuaTMyX2NvbnN0KHBmMitmMnNpemUpO1xuICAgICAgICBjb25zdCBmMnlfYzEgPSBjLmkzMl9jb25zdChwZjIrZjJzaXplKTtcbiAgICAgICAgY29uc3QgZjJ5X2MyID0gYy5pMzJfY29uc3QocGYyK2Yyc2l6ZStmMXNpemUpO1xuICAgICAgICBjb25zdCBwZjMgPSBtb2R1bGUuYWxsb2MoZjJzaXplKjMpO1xuICAgICAgICBjb25zdCBmMyA9IGMuaTMyX2NvbnN0KHBmMyk7XG4gICAgICAgIGNvbnN0IGYzeCA9IGMuaTMyX2NvbnN0KHBmMyk7XG4gICAgICAgIGNvbnN0IGYzeF9jMSA9IGMuaTMyX2NvbnN0KHBmMyk7XG4gICAgICAgIGNvbnN0IGYzeF9jMiA9IGMuaTMyX2NvbnN0KHBmMytmMXNpemUpO1xuICAgICAgICBjb25zdCBmM3kgPSBjLmkzMl9jb25zdChwZjMrZjJzaXplKTtcbiAgICAgICAgY29uc3QgZjN5X2MxID0gYy5pMzJfY29uc3QocGYzK2Yyc2l6ZSk7XG4gICAgICAgIGNvbnN0IGYzeV9jMiA9IGMuaTMyX2NvbnN0KHBmMytmMnNpemUrZjFzaXplKTtcbiAgICAgICAgY29uc3QgZjN6ID0gYy5pMzJfY29uc3QocGYzK2Yyc2l6ZSoyKTtcblxuXG4gICAgICAgIGYuYWRkQ29kZShcbiAgICAgICAgICAgIGMuaWYoXG4gICAgICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX2lzWmVyb0FmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSksXG4gICAgICAgICAgICAgICAgYy5yZXQoIGMuaTMyX2NvbnN0KDEpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuaTMyX2VxeihjLmNhbGwoZzJtUHJlZml4ICsgXCJfaW5DdXJ2ZUFmZmluZVwiLCBjLmdldExvY2FsKFwicFwiKSkpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmkzMl9jb25zdCgwKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCBweCwgd0ludiwgeF93aW52KSxcbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWxcIiwgcHksIHdJbnYsIHlfd2ludiksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9tdWwxXCIsIHhfd2ludiwgZnJvYjJYLCBmMngpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX25lZ1wiLCB5X3dpbnYsIGYyeSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9uZWdcIiwgeF93aW52LCBmM3gpLFxuICAgICAgICAgICAgYy5jYWxsKGYybVByZWZpeCArIFwiX211bFwiLCB5X3dpbnYsIGZyb2IzWSwgZjN5KSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBmMnhfYzEsIGYyeF9jMiwgYXV4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjJ4X2MxLCBmMnhfYzIsIGYyeF9jMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBhdXgsIGYyeF9jMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9zdWJcIiwgZjJ5X2MxLCBmMnlfYzIsIGF1eCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGYyeV9jMSwgZjJ5X2MyLCBmMnlfYzIpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX2NvcHlcIiwgYXV4LCBmMnlfYzEpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfYWRkXCIsIGYzeF9jMSwgZjN4X2MyLCBhdXgpLFxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBmM3hfYzEsIGYzeF9jMiwgZjN4X2MyKSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIGF1eCwgZjN4X2MxKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX3N1YlwiLCBmM3lfYzIsIGYzeV9jMSwgYXV4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9hZGRcIiwgZjN5X2MxLCBmM3lfYzIsIGYzeV9jMiksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBhdXgsIGYzeV9jMSksXG5cbiAgICAgICAgICAgIGMuY2FsbChmMm1QcmVmaXggKyBcIl9vbmVcIiwgZjN6KSxcblxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX3RpbWVzU2NhbGFyXCIsIGYzLCB6LCBjLmkzMl9jb25zdCg4KSwgZjMpLFxuICAgICAgICAgICAgYy5jYWxsKGcybVByZWZpeCArIFwiX2FkZE1peGVkXCIsIGYzLCBmMiwgZjMpLFxuXG4gICAgICAgICAgICBjLnJldChcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzJtUHJlZml4ICsgXCJfZXFNaXhlZFwiLCBmMywgYy5nZXRMb2NhbChcInBcIikpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZkluR3JvdXAgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZzJtUHJlZml4ICsgXCJfaW5Hcm91cFwiKTtcbiAgICAgICAgZkluR3JvdXAuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGZJbkdyb3VwLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYzIgPSBmSW5Hcm91cC5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eDIgPSBjMi5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYyc2l6ZSoyKSk7XG5cbiAgICAgICAgZkluR3JvdXAuYWRkQ29kZShcbiAgICAgICAgICAgIGMyLmNhbGwoZzJtUHJlZml4ICsgXCJfdG9BZmZpbmVcIiwgYzIuZ2V0TG9jYWwoXCJwSW5cIiksIGF1eDIpLFxuXG4gICAgICAgICAgICBjMi5yZXQoXG4gICAgICAgICAgICAgICAgYzIuY2FsbChnMm1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIsIGF1eDIpLFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRJbkdyb3VwRzEoKSB7XG4gICAgICAgIGNvbnN0IGYgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZzFtUHJlZml4KyBcIl9pbkdyb3VwQWZmaW5lXCIpO1xuICAgICAgICBmLmFkZFBhcmFtKFwicFwiLCBcImkzMlwiKTtcbiAgICAgICAgZi5zZXRSZXR1cm5UeXBlKFwiaTMyXCIpO1xuXG4gICAgICAgIGNvbnN0IGMgPSBmLmdldENvZGVCdWlsZGVyKCk7XG5cbiAgICAgICAgY29uc3QgQkVUQSA9IDQwMDI0MDk1NTUyMjE2NjczOTI2MjQzMTA0MzUwMDY2ODg2NDM5MzU1MDMxMTgzMDU1ODY0MzgyNzExNzEzOTU4NDI5NzExNTc0ODAzODEzNzcwMTU0MDU5ODAwNTM1MzkzNTg0MTcxMzU1NDA5Mzk0MzZuO1xuICAgICAgICBjb25zdCBCRVRBMiA9IDc5MzQ3OTM5MDcyOTIxNTUxMjYyMTM3OTcwMTYzMzQyMTQ0NzA2MDg4Njc0MDI4MTA2MDQ5MzAxMDQ1NjQ4NzQyNzI4MTY0OTA3NTQ3NjMwNTYyMDc1ODczMTYyMDM1MG47XG4gICAgICAgIGNvbnN0IFoyTTFEMyA9IChmaW5hbEV4cFogKiBmaW5hbEV4cFogLSAxbikgLyAzbjtcblxuICAgICAgICBjb25zdCBiZXRhID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKHRvTW9udGdvbWVyeShCRVRBKSwgbjhxKSkpO1xuICAgICAgICBjb25zdCBiZXRhMiA9IGMuaTMyX2NvbnN0KG1vZHVsZS5hbGxvYyh1dGlscy5iaWdJbnQyQnl0ZXNMRSh0b01vbnRnb21lcnkoQkVUQTIpLCBuOHEpKSk7XG5cbiAgICAgICAgY29uc3QgejJtMWQzID0gYy5pMzJfY29uc3QobW9kdWxlLmFsbG9jKHV0aWxzLmJpZ0ludDJCeXRlc0xFKFoyTTFEMywgMTYpKSk7XG5cblxuICAgICAgICBjb25zdCBweCA9IGMuZ2V0TG9jYWwoXCJwXCIpO1xuICAgICAgICBjb25zdCBweSA9IGMuaTMyX2FkZChjLmdldExvY2FsKFwicFwiKSwgYy5pMzJfY29uc3QoZjFzaXplKSk7XG5cbiAgICAgICAgY29uc3QgcHNwID0gbW9kdWxlLmFsbG9jKGYxc2l6ZSozKTtcbiAgICAgICAgY29uc3Qgc3AgPSBjLmkzMl9jb25zdChwc3ApO1xuICAgICAgICBjb25zdCBzcHggPSBjLmkzMl9jb25zdChwc3ApO1xuICAgICAgICBjb25zdCBzcHkgPSBjLmkzMl9jb25zdChwc3ArZjFzaXplKTtcblxuICAgICAgICBjb25zdCBwczJwID0gbW9kdWxlLmFsbG9jKGYxc2l6ZSoyKTtcbiAgICAgICAgY29uc3QgczJwID0gYy5pMzJfY29uc3QocHMycCk7XG4gICAgICAgIGNvbnN0IHMycHggPSBjLmkzMl9jb25zdChwczJwKTtcbiAgICAgICAgY29uc3QgczJweSA9IGMuaTMyX2NvbnN0KHBzMnArZjFzaXplKTtcblxuICAgICAgICBmLmFkZENvZGUoXG4gICAgICAgICAgICBjLmlmKFxuICAgICAgICAgICAgICAgIGMuY2FsbChnMW1QcmVmaXggKyBcIl9pc1plcm9BZmZpbmVcIiwgYy5nZXRMb2NhbChcInBcIikpLFxuICAgICAgICAgICAgICAgIGMucmV0KCBjLmkzMl9jb25zdCgxKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYy5pZihcbiAgICAgICAgICAgICAgICBjLmkzMl9lcXooYy5jYWxsKGcxbVByZWZpeCArIFwiX2luQ3VydmVBZmZpbmVcIiwgYy5nZXRMb2NhbChcInBcIikpKSxcbiAgICAgICAgICAgICAgICBjLnJldCggYy5pMzJfY29uc3QoMCkpLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgYy5jYWxsKGYxbVByZWZpeCArIFwiX211bFwiLCBweCwgYmV0YSwgc3B4KSxcbiAgICAgICAgICAgIGMuY2FsbChmMW1QcmVmaXggKyBcIl9jb3B5XCIsIHB5LCBzcHkpLFxuXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfbXVsXCIsIHB4LCBiZXRhMiwgczJweCksXG4gICAgICAgICAgICBjLmNhbGwoZjFtUHJlZml4ICsgXCJfY29weVwiLCBweSwgczJweSksXG5cblxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX2RvdWJsZUFmZmluZVwiLCBzcCwgc3ApLFxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX3N1Yk1peGVkXCIsIHNwLCBjLmdldExvY2FsKFwicFwiKSwgc3ApLFxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX3N1Yk1peGVkXCIsIHNwLCBzMnAsIHNwKSxcblxuICAgICAgICAgICAgYy5jYWxsKGcxbVByZWZpeCArIFwiX3RpbWVzU2NhbGFyXCIsIHNwLCB6Mm0xZDMsIGMuaTMyX2NvbnN0KDE2KSwgc3ApLFxuXG4gICAgICAgICAgICBjLnJldChcbiAgICAgICAgICAgICAgICBjLmNhbGwoZzFtUHJlZml4ICsgXCJfZXFNaXhlZFwiLCBzcCwgczJwKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZkluR3JvdXAgPSBtb2R1bGUuYWRkRnVuY3Rpb24oZzFtUHJlZml4ICsgXCJfaW5Hcm91cFwiKTtcbiAgICAgICAgZkluR3JvdXAuYWRkUGFyYW0oXCJwSW5cIiwgXCJpMzJcIik7XG4gICAgICAgIGZJbkdyb3VwLnNldFJldHVyblR5cGUoXCJpMzJcIik7XG5cbiAgICAgICAgY29uc3QgYzIgPSBmSW5Hcm91cC5nZXRDb2RlQnVpbGRlcigpO1xuXG4gICAgICAgIGNvbnN0IGF1eDIgPSBjMi5pMzJfY29uc3QobW9kdWxlLmFsbG9jKGYxc2l6ZSoyKSk7XG5cbiAgICAgICAgZkluR3JvdXAuYWRkQ29kZShcbiAgICAgICAgICAgIGMyLmNhbGwoZzFtUHJlZml4ICsgXCJfdG9BZmZpbmVcIiwgYzIuZ2V0TG9jYWwoXCJwSW5cIiksIGF1eDIpLFxuXG4gICAgICAgICAgICBjMi5yZXQoXG4gICAgICAgICAgICAgICAgYzIuY2FsbChnMW1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIsIGF1eDIpLFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9MDsgaTwxMDsgaSsrKSB7XG4gICAgICAgIGJ1aWxkRnJvYmVuaXVzTWFwKGkpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZnRtUHJlZml4ICsgXCJfZnJvYmVuaXVzTWFwXCIraSk7XG4gICAgfVxuXG5cbiAgICBidWlsZEluR3JvdXBHMSgpO1xuICAgIGJ1aWxkSW5Hcm91cEcyKCk7XG5cbiAgICBidWlsZFByZXBBZGRTdGVwKCk7XG4gICAgYnVpbGRQcmVwRG91YmxlU3RlcCgpO1xuXG4gICAgYnVpbGRQcmVwYXJlRzEoKTtcbiAgICBidWlsZFByZXBhcmVHMigpO1xuXG4gICAgYnVpbGRNaWxsZXJMb29wKCk7XG5cbiAgICBidWlsZEZpbmFsRXhwb25lbnRpYXRpb25PbGQoKTtcbiAgICBidWlsZEZpbmFsRXhwb25lbnRpYXRpb24oKTtcblxuICAgIGZvciAobGV0IGk9MTsgaTw9NTsgaSsrKSB7XG4gICAgICAgIGJ1aWxkUGFpcmluZ0VxdWF0aW9uKGkpO1xuICAgICAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcGFpcmluZ0VxXCIraSk7XG4gICAgfVxuXG4gICAgYnVpbGRQYWlyaW5nKCk7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcGFpcmluZ1wiKTtcblxuXG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKHByZWZpeCArIFwiX3ByZXBhcmVHMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfcHJlcGFyZUcyXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9taWxsZXJMb29wXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9maW5hbEV4cG9uZW50aWF0aW9uT2xkXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihwcmVmaXggKyBcIl9fY3ljbG90b21pY1NxdWFyZVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24ocHJlZml4ICsgXCJfX2N5Y2xvdG9taWNFeHBfdzBcIik7XG5cbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjZtUHJlZml4ICsgXCJfbXVsMVwiKTtcbiAgICBtb2R1bGUuZXhwb3J0RnVuY3Rpb24oZjZtUHJlZml4ICsgXCJfbXVsMDFcIik7XG4gICAgbW9kdWxlLmV4cG9ydEZ1bmN0aW9uKGZ0bVByZWZpeCArIFwiX211bDAxNFwiKTtcblxuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihnMW1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihnMW1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihnMm1QcmVmaXggKyBcIl9pbkdyb3VwQWZmaW5lXCIpO1xuICAgIG1vZHVsZS5leHBvcnRGdW5jdGlvbihnMm1QcmVmaXggKyBcIl9pbkdyb3VwXCIpO1xuXG4gICAgLy8gY29uc29sZS5sb2cobW9kdWxlLmZ1bmN0aW9uSWR4QnlOYW1lKTtcbn07XG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuXG4vLyBtb2R1bGUuZXhwb3J0cy5ibjEyOF93YXNtID0gcmVxdWlyZShcIi4vYnVpbGQvYm4xMjhfd2FzbS5qc1wiKTtcbi8vIG1vZHVsZS5leHBvcnRzLmJsczEyMzgxX3dhc20gPSByZXF1aXJlKFwiLi9idWlsZC9ibHMxMjM4MV93YXNtLmpzXCIpO1xuLy8gbW9kdWxlLmV4cG9ydHMubW50Njc1M193YXNtID0gcmVxdWlyZShcIi4vYnVpbGQvbW50Njc1M193YXNtLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy5idWlsZEJuMTI4ID0gcmVxdWlyZShcIi4vc3JjL2JuMTI4L2J1aWxkX2JuMTI4LmpzXCIpO1xubW9kdWxlLmV4cG9ydHMuYnVpbGRCbHMxMjM4MSA9IHJlcXVpcmUoXCIuL3NyYy9ibHMxMjM4MS9idWlsZF9ibHMxMjM4MS5qc1wiKTtcbi8vIG1vZHVsZS5leHBvcnRzLmJ1aWxkTW50Njc1MyA9IHJlcXVpcmUoXCIuL3NyYy9tbnQ2NzUzL2J1aWxkX21udDcuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkRjFtID0gcmVxdWlyZShcIi4vc3JjL2J1aWxkX2YxbVwiKTtcbiIsIi8qIGdsb2JhbCBCaWdJbnQgKi9cbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUJpZ0ludHMobykge1xuICAgIGlmICh0eXBlb2YgbyA9PSBcImJpZ2ludFwiIHx8IG8uZXEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gby50b1N0cmluZygxMCk7XG4gICAgfSBlbHNlIGlmIChvIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gU2NhbGFyLmZyb21ScHJMRShvLCAwKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgICAgcmV0dXJuIG8ubWFwKHN0cmluZ2lmeUJpZ0ludHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHJlc1trXSA9IHN0cmluZ2lmeUJpZ0ludHMob1trXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RyaW5naWZ5QmlnSW50cyhvKSB7XG4gICAgaWYgKHR5cGVvZiBvID09IFwic3RyaW5nXCIgJiYgL15bMC05XSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQobyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcInN0cmluZ1wiICYmIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KG8pKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQobyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG4gICAgICAgIHJldHVybiBvLm1hcCh1bnN0cmluZ2lmeUJpZ0ludHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAobyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobyk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVzW2tdID0gdW5zdHJpbmdpZnlCaWdJbnRzKG9ba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbztcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZUJ1ZmYyaW50KGJ1ZmYpIHtcbiAgICBsZXQgcmVzID0gQmlnSW50KDApO1xuICAgIGxldCBpID0gYnVmZi5sZW5ndGg7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICB3aGlsZSAoaSA+IDApIHtcbiAgICAgICAgaWYgKGkgPj0gNCkge1xuICAgICAgICAgICAgaSAtPSA0O1xuICAgICAgICAgICAgcmVzICs9IEJpZ0ludChidWZmVi5nZXRVaW50MzIoaSkpIDw8IEJpZ0ludChvZmZzZXQgKiA4KTtcbiAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICB9IGVsc2UgaWYgKGkgPj0gMikge1xuICAgICAgICAgICAgaSAtPSAyO1xuICAgICAgICAgICAgcmVzICs9IEJpZ0ludChidWZmVi5nZXRVaW50MTYoaSkpIDw8IEJpZ0ludChvZmZzZXQgKiA4KTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgcmVzICs9IEJpZ0ludChidWZmVi5nZXRVaW50OChpKSkgPDwgQmlnSW50KG9mZnNldCAqIDgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlSW50MkJ1ZmYobiwgbGVuKSB7XG4gICAgbGV0IHIgPSBuO1xuICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICBsZXQgbyA9IGxlbjtcbiAgICB3aGlsZSAobyA+IDApIHtcbiAgICAgICAgaWYgKG8gLSA0ID49IDApIHtcbiAgICAgICAgICAgIG8gLT0gNDtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBOdW1iZXIociAmIEJpZ0ludCgweGZmZmZmZmZmKSkpO1xuICAgICAgICAgICAgciA9IHIgPj4gQmlnSW50KDMyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvIC0gMiA+PSAwKSB7XG4gICAgICAgICAgICBvIC09IDI7XG4gICAgICAgICAgICBidWZmVi5zZXRVaW50MTYobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZmZmKSkpO1xuICAgICAgICAgICAgciA9IHIgPj4gQmlnSW50KDE2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG8gLT0gMTtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQ4KG8sIE51bWJlcihyICYgQmlnSW50KDB4ZmYpKSk7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoOCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIGRvZXMgbm90IGZpdCBpbiB0aGlzIGxlbmd0aFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZUJ1ZmYyaW50KGJ1ZmYpIHtcbiAgICBsZXQgcmVzID0gQmlnSW50KDApO1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBidWZmViA9IG5ldyBEYXRhVmlldyhidWZmLmJ1ZmZlciwgYnVmZi5ieXRlT2Zmc2V0LCBidWZmLmJ5dGVMZW5ndGgpO1xuICAgIHdoaWxlIChpIDwgYnVmZi5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGkgKyA0IDw9IGJ1ZmYubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQzMihpLCB0cnVlKSkgPDwgQmlnSW50KGkgKiA4KTtcbiAgICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMiA8PSBidWZmLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzICs9IEJpZ0ludChidWZmVi5nZXRVaW50MTYoaSwgdHJ1ZSkpIDw8IEJpZ0ludChpICogOCk7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgKz0gQmlnSW50KGJ1ZmZWLmdldFVpbnQ4KGksIHRydWUpKSA8PCBCaWdJbnQoaSAqIDgpO1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZUludDJCdWZmKG4sIGxlbikge1xuICAgIGxldCByID0gbjtcbiAgICBpZiAodHlwZW9mIGxlbiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZW4gPSBNYXRoLmZsb29yKChTY2FsYXIuYml0TGVuZ3RoKG4pIC0gMSkgLyA4KSArIDE7XG4gICAgICAgIGlmIChsZW4gPT0gMCkgbGVuID0gMTtcbiAgICB9XG4gICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIpO1xuICAgIGxldCBvID0gMDtcbiAgICB3aGlsZSAobyA8IGxlbikge1xuICAgICAgICBpZiAobyArIDQgPD0gbGVuKSB7XG4gICAgICAgICAgICBidWZmVi5zZXRVaW50MzIobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZmZmZmZmZikpLCB0cnVlKTtcbiAgICAgICAgICAgIG8gKz0gNDtcbiAgICAgICAgICAgIHIgPSByID4+IEJpZ0ludCgzMik7XG4gICAgICAgIH0gZWxzZSBpZiAobyArIDIgPD0gbGVuKSB7XG4gICAgICAgICAgICBidWZmVi5zZXRVaW50MTYobywgTnVtYmVyKHIgJiBCaWdJbnQoMHhmZmZmKSksIHRydWUpO1xuICAgICAgICAgICAgbyArPSAyO1xuICAgICAgICAgICAgciA9IHIgPj4gQmlnSW50KDE2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQ4KG8sIE51bWJlcihyICYgQmlnSW50KDB4ZmYpKSwgdHJ1ZSk7XG4gICAgICAgICAgICBvICs9IDE7XG4gICAgICAgICAgICByID0gciA+PiBCaWdJbnQoOCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIGRvZXMgbm90IGZpdCBpbiB0aGlzIGxlbmd0aFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlGRWxlbWVudHMoRiwgbykge1xuICAgIGlmICh0eXBlb2YgbyA9PSBcImJpZ2ludFwiIHx8IG8uZXEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gby50b1N0cmluZygxMCk7XG4gICAgfSBlbHNlIGlmIChvIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gRi50b1N0cmluZyhGLmUobykpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICAgICAgICByZXR1cm4gby5tYXAoc3RyaW5naWZ5RkVsZW1lbnRzLmJpbmQodGhpcywgRikpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCByZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgICAgICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHJlc1trXSA9IHN0cmluZ2lmeUZFbGVtZW50cyhGLCBvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zdHJpbmdpZnlGRWxlbWVudHMoRiwgbykge1xuICAgIGlmICh0eXBlb2YgbyA9PSBcInN0cmluZ1wiICYmIC9eWzAtOV0rJC8udGVzdChvKSkge1xuICAgICAgICByZXR1cm4gRi5lKG8pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gXCJzdHJpbmdcIiAmJiAvXjB4WzAtOWEtZkEtRl0rJC8udGVzdChvKSkge1xuICAgICAgICByZXR1cm4gRi5lKG8pO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICAgICAgICByZXR1cm4gby5tYXAodW5zdHJpbmdpZnlGRWxlbWVudHMuYmluZCh0aGlzLCBGKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChvID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICByZXNba10gPSB1bnN0cmluZ2lmeUZFbGVtZW50cyhGLCBvW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5jb25zdCBfcmV2VGFibGUgPSBbXTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBfcmV2VGFibGVbaV0gPSBfcmV2U2xvdyhpLCA4KTtcbn1cblxuZnVuY3Rpb24gX3JldlNsb3coaWR4LCBiaXRzKSB7XG4gICAgbGV0IHJlcyA9IDA7XG4gICAgbGV0IGEgPSBpZHg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRzOyBpKyspIHtcbiAgICAgICAgcmVzIDw8PSAxO1xuICAgICAgICByZXMgPSByZXMgfCAoYSAmIDEpO1xuICAgICAgICBhID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYml0UmV2ZXJzZShpZHgsIGJpdHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoX3JldlRhYmxlW2lkeCA+Pj4gMjRdIHxcbiAgICAgICAgKF9yZXZUYWJsZVsoaWR4ID4+PiAxNikgJiAweGZmXSA8PCA4KSB8XG4gICAgICAgIChfcmV2VGFibGVbKGlkeCA+Pj4gOCkgJiAweGZmXSA8PCAxNikgfFxuICAgICAgICAoX3JldlRhYmxlW2lkeCAmIDB4ZmZdIDw8IDI0KSkgPj4+XG4gICAgICAgICgzMiAtIGJpdHMpXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZzIoVikge1xuICAgIHJldHVybiAoXG4gICAgICAgICgoViAmIDB4ZmZmZjAwMDApICE9PSAwID8gKChWICY9IDB4ZmZmZjAwMDApLCAxNikgOiAwKSB8XG4gICAgICAgICgoViAmIDB4ZmYwMGZmMDApICE9PSAwID8gKChWICY9IDB4ZmYwMGZmMDApLCA4KSA6IDApIHxcbiAgICAgICAgKChWICYgMHhmMGYwZjBmMCkgIT09IDAgPyAoKFYgJj0gMHhmMGYwZjBmMCksIDQpIDogMCkgfFxuICAgICAgICAoKFYgJiAweGNjY2NjY2NjKSAhPT0gMCA/ICgoViAmPSAweGNjY2NjY2NjKSwgMikgOiAwKSB8XG4gICAgICAgICgoViAmIDB4YWFhYWFhYWEpICE9PSAwKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWZmUmV2ZXJzZUJpdHMoYnVmZiwgZVNpemUpIHtcbiAgICBjb25zdCBuID0gYnVmZi5ieXRlTGVuZ3RoIC8gZVNpemU7XG4gICAgY29uc3QgYml0cyA9IGxvZzIobik7XG4gICAgaWYgKG4gIT0gMSA8PCBiaXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50ZXJzXCIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBjb25zdCByID0gYml0UmV2ZXJzZShpLCBiaXRzKTtcbiAgICAgICAgaWYgKGkgPiByKSB7XG4gICAgICAgICAgICBjb25zdCB0bXAgPSBidWZmLnNsaWNlKGkgKiBlU2l6ZSwgKGkgKyAxKSAqIGVTaXplKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KGJ1ZmYuc2xpY2UociAqIGVTaXplLCAociArIDEpICogZVNpemUpLCBpICogZVNpemUpO1xuICAgICAgICAgICAgYnVmZi5zZXQodG1wLCByICogZVNpemUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkyYnVmZmVyKGFyciwgc0cpIHtcbiAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoc0cgKiBhcnIubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ1ZmYuc2V0KGFycltpXSwgaSAqIHNHKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlcjJhcnJheShidWZmLCBzRykge1xuICAgIGNvbnN0IG4gPSBidWZmLmJ5dGVMZW5ndGggLyBzRztcbiAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gYnVmZi5zbGljZShpICogc0csIGkgKiBzRyArIHNHKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn1cbiIsIlxuY29uc3QgUEFHRV9TSVpFID0gMTw8MzA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpZ0J1ZmZlciB7XG5cbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7XG4gICAgICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggPSBzaXplO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8c2l6ZTsgaSs9IFBBR0VfU0laRSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKHNpemUtaSwgUEFHRV9TSVpFKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKG5ldyBVaW50OEFycmF5KG4pKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgc2xpY2UoZnIsIHRvKSB7XG4gICAgICAgIGlmICggdG8gPT09IHVuZGVmaW5lZCApIHRvID0gdGhpcy5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAoIGZyID09PSB1bmRlZmluZWQgKSBmciA9IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRvLWZyO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3IoZnIgLyBQQUdFX1NJWkUpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguZmxvb3IoKGZyK2xlbi0xKSAvIFBBR0VfU0laRSk7XG5cbiAgICAgICAgaWYgKChmaXJzdFBhZ2UgPT0gbGFzdFBhZ2UpfHwobGVuPT0wKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbZmlyc3RQYWdlXS5zbGljZShmciVQQUdFX1NJWkUsIGZyJVBBR0VfU0laRSArIGxlbik7XG5cbiAgICAgICAgbGV0IGJ1ZmY7XG5cbiAgICAgICAgbGV0IHAgPSBmaXJzdFBhZ2U7XG4gICAgICAgIGxldCBvID0gZnIgJSBQQUdFX1NJWkU7XG4gICAgICAgIC8vIFJlbWFpbmluZyBieXRlcyB0byByZWFkXG4gICAgICAgIGxldCByID0gbGVuO1xuICAgICAgICB3aGlsZSAocj4wKSB7XG4gICAgICAgICAgICAvLyBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlXG4gICAgICAgICAgICBjb25zdCBsID0gKG8rciA+IFBBR0VfU0laRSkgPyAoUEFHRV9TSVpFIC1vKSA6IHI7XG4gICAgICAgICAgICBjb25zdCBzcmNWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJzW3BdLmJ1ZmZlciwgdGhpcy5idWZmZXJzW3BdLmJ5dGVPZmZzZXQrbywgbCk7XG4gICAgICAgICAgICBpZiAobCA9PSBsZW4pIHJldHVybiBzcmNWaWV3LnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoIWJ1ZmYpIHtcbiAgICAgICAgICAgICAgICBpZiAobGVuIDw9IFBBR0VfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICBidWZmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZmID0gbmV3IEJpZ0J1ZmZlcihsZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmYuc2V0KHNyY1ZpZXcsIGxlbi1yKTtcbiAgICAgICAgICAgIHIgPSByLWw7XG4gICAgICAgICAgICBwICsrO1xuICAgICAgICAgICAgbyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICBzZXQoYnVmZiwgb2Zmc2V0KSB7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkgb2Zmc2V0ID0gMDtcblxuICAgICAgICBjb25zdCBsZW4gPSBidWZmLmJ5dGVMZW5ndGg7XG5cbiAgICAgICAgaWYgKGxlbj09MCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0UGFnZSA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gUEFHRV9TSVpFKTtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2UgPSBNYXRoLmZsb29yKChvZmZzZXQrbGVuLTEpIC8gUEFHRV9TSVpFKTtcblxuICAgICAgICBpZiAoZmlyc3RQYWdlID09IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICBpZiAoKGJ1ZmYgaW5zdGFuY2VvZiBCaWdCdWZmZXIpJiYoYnVmZi5idWZmZXJzLmxlbmd0aD09MSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJzW2ZpcnN0UGFnZV0uc2V0KGJ1ZmYuYnVmZmVyc1swXSwgb2Zmc2V0ICUgUEFHRV9TSVpFKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyc1tmaXJzdFBhZ2VdLnNldChidWZmLCBvZmZzZXQgJSBQQUdFX1NJWkUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBwID0gZmlyc3RQYWdlO1xuICAgICAgICBsZXQgbyA9IG9mZnNldCAlIFBBR0VfU0laRTtcbiAgICAgICAgbGV0IHIgPSBsZW47XG4gICAgICAgIHdoaWxlIChyPjApIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSAobytyID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLW8pIDogcjtcbiAgICAgICAgICAgIGNvbnN0IHNyY1ZpZXcgPSBidWZmLnNsaWNlKCBsZW4gLXIsIGxlbiAtcitsKTtcbiAgICAgICAgICAgIGNvbnN0IGRzdFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcnNbcF0uYnVmZmVyLCB0aGlzLmJ1ZmZlcnNbcF0uYnl0ZU9mZnNldCArIG8sIGwpO1xuICAgICAgICAgICAgZHN0Vmlldy5zZXQoc3JjVmlldyk7XG4gICAgICAgICAgICByID0gci1sO1xuICAgICAgICAgICAgcCArKztcbiAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4iLCJpbXBvcnQgQmlnQnVmZmVyIGZyb20gXCIuL2JpZ2J1ZmZlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEJhdGNoQ29udmVydCh0bSwgZm5OYW1lLCBzSW4sIHNPdXQpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYmF0Y2hDb252ZXJ0KGJ1ZmZJbikge1xuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmSW4uYnl0ZUxlbmd0aCAvIHNJbik7XG4gICAgICAgIGlmICggblBvaW50cyAqIHNJbiAhPT0gYnVmZkluLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnVmZmVyIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKG5Qb2ludHMvdG0uY29uY3VycmVuY3kpO1xuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0bS5jb25jdXJyZW5jeTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChpPCB0bS5jb25jdXJyZW5jeS0xKSB7XG4gICAgICAgICAgICAgICAgbiA9IHBvaW50c1BlckNodW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50cyAtIGkqcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZDaHVuayA9IGJ1ZmZJbi5zbGljZShpKnBvaW50c1BlckNodW5rKnNJbiwgaSpwb2ludHNQZXJDaHVuaypzSW4gKyBuKnNJbik7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW1xuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOmJ1ZmZDaHVua30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1wiLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5OYW1lLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfVxuICAgICAgICAgICAgICAgIF19LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAxLCBsZW46c091dCAqIG59LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0bS5xdWV1ZUFjdGlvbih0YXNrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBmdWxsQnVmZk91dDtcbiAgICAgICAgaWYgKGJ1ZmZJbiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc091dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc091dCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcCA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQuc2V0KHJlc3VsdFtpXVswXSwgcCk7XG4gICAgICAgICAgICBwKz1yZXN1bHRbaV1bMF0uYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdWxsQnVmZk91dDtcbiAgICB9O1xufVxuIiwiaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IGdldFRocmVhZFJuZyB9IGZyb20gXCIuL3JhbmRvbS5qc1wiO1xuaW1wb3J0IGJ1aWxkQmF0Y2hDb252ZXJ0IGZyb20gXCIuL2VuZ2luZV9iYXRjaGNvbnZlcnQuanNcIjtcbmltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2FzbUZpZWxkMSB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0bSwgcHJlZml4LCBuOCwgcCkge1xuICAgICAgICB0aGlzLnRtID0gdG07XG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuXG4gICAgICAgIHRoaXMucCA9IHA7XG4gICAgICAgIHRoaXMubjggPSBuODtcbiAgICAgICAgdGhpcy50eXBlID0gXCJGMVwiO1xuICAgICAgICB0aGlzLm0gPSAxO1xuXG4gICAgICAgIHRoaXMuaGFsZiA9IFNjYWxhci5zaGlmdFJpZ2h0KHAsIFNjYWxhci5vbmUpO1xuICAgICAgICB0aGlzLmJpdExlbmd0aCA9IFNjYWxhci5iaXRMZW5ndGgocCk7XG4gICAgICAgIHRoaXMubWFzayA9IFNjYWxhci5zdWIoU2NhbGFyLnNoaWZ0TGVmdChTY2FsYXIub25lLCB0aGlzLmJpdExlbmd0aCksIFNjYWxhci5vbmUpO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKG44KTtcbiAgICAgICAgdGhpcy5wT3AyID0gdG0uYWxsb2MobjgpO1xuICAgICAgICB0aGlzLnBPcDMgPSB0bS5hbGxvYyhuOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIHRoaXMubjgpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbcHJlZml4ICsgXCJfb25lXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMub25lID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG5cbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLm5lZyh0aGlzLm9uZSk7XG4gICAgICAgIHRoaXMudHdvID0gdGhpcy5hZGQodGhpcy5vbmUsIHRoaXMub25lKTtcblxuICAgICAgICB0aGlzLm42NCA9IE1hdGguZmxvb3IobjgvOCk7XG4gICAgICAgIHRoaXMubjMyID0gTWF0aC5mbG9vcihuOC80KTtcblxuICAgICAgICBpZih0aGlzLm42NCo4ICE9IHRoaXMubjgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm44IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYWxmID0gU2NhbGFyLnNoaWZ0UmlnaHQodGhpcy5wLCBTY2FsYXIub25lKTtcbiAgICAgICAgdGhpcy5ucXIgPSB0aGlzLnR3bztcbiAgICAgICAgbGV0IHIgPSB0aGlzLmV4cCh0aGlzLm5xciwgdGhpcy5oYWxmKTtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmVxKHIsIHRoaXMubmVnb25lKSkge1xuICAgICAgICAgICAgdGhpcy5ucXIgPSB0aGlzLmFkZCh0aGlzLm5xciwgdGhpcy5vbmUpO1xuICAgICAgICAgICAgciA9IHRoaXMuZXhwKHRoaXMubnFyLCB0aGlzLmhhbGYpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGlmdCA9IHRoaXMubXVsKHRoaXMubnFyLCB0aGlzLm5xcik7XG4gICAgICAgIHRoaXMuc2hpZnRJbnYgPSB0aGlzLmludih0aGlzLnNoaWZ0KTtcblxuICAgICAgICB0aGlzLnMgPSAwO1xuICAgICAgICBsZXQgdCA9IFNjYWxhci5zdWIodGhpcy5wLCBTY2FsYXIub25lKTtcblxuICAgICAgICB3aGlsZSAoICFTY2FsYXIuaXNPZGQodCkgKSB7XG4gICAgICAgICAgICB0aGlzLnMgPSB0aGlzLnMgKyAxO1xuICAgICAgICAgICAgdCA9IFNjYWxhci5zaGlmdFJpZ2h0KHQsIFNjYWxhci5vbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53ID0gW107XG4gICAgICAgIHRoaXMud1t0aGlzLnNdID0gdGhpcy5leHAodGhpcy5ucXIsIHQpO1xuXG4gICAgICAgIGZvciAobGV0IGk9IHRoaXMucy0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMud1tpXSA9IHRoaXMuc3F1YXJlKHRoaXMud1tpKzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lcSh0aGlzLndbMF0sIHRoaXMub25lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY2FsY3VsYXRpbmcgcm9vdHMgb2YgdW5pdHlcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJhdGNoVG9Nb250Z29tZXJ5ID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoVG9Nb250Z29tZXJ5XCIsIHRoaXMubjgsIHRoaXMubjgpO1xuICAgICAgICB0aGlzLmJhdGNoRnJvbU1vbnRnb21lcnkgPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hGcm9tTW9udGdvbWVyeVwiLCB0aGlzLm44LCB0aGlzLm44KTtcbiAgICB9XG5cblxuICAgIG9wMihvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AyQm9vbChvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyKTtcbiAgICB9XG5cbiAgICBvcDEob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIG9wMUJvb2wob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICB9XG5cbiAgICBhZGQoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9hZGRcIiwgYSwgYik7XG4gICAgfVxuXG5cbiAgICBlcShhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyQm9vbChcIl9lcVwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzWmVyb1wiLCBhKTtcbiAgICB9XG5cbiAgICBzdWIoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICB9XG5cbiAgICBpbnYoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfaW52ZXJzZVwiLCBhKTtcbiAgICB9XG5cbiAgICB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfdG9Nb250Z29tZXJ5XCIsIGEpO1xuICAgIH1cblxuICAgIGZyb21Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2Zyb21Nb250Z29tZXJ5XCIsIGEpO1xuICAgIH1cblxuICAgIG11bChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX211bFwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBkaXYoYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX2ludmVyc2VcIl0odGhpcy5wT3AyLCB0aGlzLnBPcDIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9tdWxcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBzcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIGlzU3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1NxdWFyZVwiLCBhKTtcbiAgICB9XG5cbiAgICBzcXJ0KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3NxcnRcIiwgYSk7XG4gICAgfVxuXG4gICAgZXhwKGEsIGIpIHtcbiAgICAgICAgaWYgKCEoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICBiID0gU2NhbGFyLnRvTEVCdWZmKFNjYWxhci5lKGIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX2V4cFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgYi5ieXRlTGVuZ3RoLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgaXNOZWdhdGl2ZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNOZWdhdGl2ZVwiLCBhKTtcbiAgICB9XG5cbiAgICBlKGEsIGIpIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gYTtcbiAgICAgICAgbGV0IHJhID0gU2NhbGFyLmUoYSwgYik7XG4gICAgICAgIGlmIChTY2FsYXIuaXNOZWdhdGl2ZShyYSkpIHtcbiAgICAgICAgICAgIHJhID0gU2NhbGFyLm5lZyhyYSk7XG4gICAgICAgICAgICBpZiAoU2NhbGFyLmd0KHJhLCB0aGlzLnApKSB7XG4gICAgICAgICAgICAgICAgcmEgPSBTY2FsYXIubW9kKHJhLCB0aGlzLnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmEgPSBTY2FsYXIuc3ViKHRoaXMucCwgcmEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFNjYWxhci5ndChyYSwgdGhpcy5wKSkge1xuICAgICAgICAgICAgICAgIHJhID0gU2NhbGFyLm1vZChyYSwgdGhpcy5wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmID0gdXRpbHMubGVJbnQyQnVmZihyYSwgdGhpcy5uOCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvTW9udGdvbWVyeShidWZmKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCByYWRpeCkge1xuICAgICAgICBjb25zdCBhbiA9IHRoaXMuZnJvbU1vbnRnb21lcnkoYSk7XG4gICAgICAgIGNvbnN0IHMgPSBTY2FsYXIuZnJvbVJwckxFKGFuLCAwKTtcbiAgICAgICAgcmV0dXJuIFNjYWxhci50b1N0cmluZyhzLCByYWRpeCk7XG4gICAgfVxuXG4gICAgZnJvbVJuZyhybmcpIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLm44KTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdiA9IFNjYWxhci56ZXJvO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMubjY0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ID0gU2NhbGFyLmFkZCh2LCAgU2NhbGFyLnNoaWZ0TGVmdChybmcubmV4dFU2NCgpLCA2NCppKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ID0gU2NhbGFyLmJhbmQodiwgdGhpcy5tYXNrKTtcbiAgICAgICAgfSB3aGlsZSAoU2NhbGFyLmdlcSh2LCB0aGlzLnApKTtcbiAgICAgICAgU2NhbGFyLnRvUnByTEUoYnVmZiwgMCwgdiwgdGhpcy5uOCk7XG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVJuZyhnZXRUaHJlYWRSbmcoKSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBhbiA9IHRoaXMuZnJvbU1vbnRnb21lcnkoYSk7XG4gICAgICAgIHJldHVybiBTY2FsYXIuZnJvbVJwckxFKGFuLCAwKTtcbiAgICB9XG5cbiAgICBmcm9tT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMubjgpO1xuICAgICAgICBTY2FsYXIudG9ScHJMRShidWZmLCAwLCBhLCB0aGlzLm44KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Nb250Z29tZXJ5KGJ1ZmYpO1xuICAgIH1cblxuICAgIHRvUnByTEUoYnVmZiwgb2Zmc2V0LCBhKSB7XG4gICAgICAgIGJ1ZmYuc2V0KHRoaXMuZnJvbU1vbnRnb21lcnkoYSksIG9mZnNldCk7XG4gICAgfVxuXG4gICAgdG9ScHJCRShidWZmLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgY29uc3QgYnVmZjIgPSB0aGlzLmZyb21Nb250Z29tZXJ5KGEpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5uOC8yOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF1eCA9IGJ1ZmYyW2ldO1xuICAgICAgICAgICAgYnVmZjJbaV0gPSBidWZmMlt0aGlzLm44LTEtaV07XG4gICAgICAgICAgICBidWZmMlt0aGlzLm44LTEtaV0gPSBhdXg7XG4gICAgICAgIH1cbiAgICAgICAgYnVmZi5zZXQoYnVmZjIsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgZnJvbVJwckxFKGJ1ZmYsIG9mZnNldCkge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICAgICAgY29uc3QgcmVzID0gYnVmZi5zbGljZShvZmZzZXQsIG9mZnNldCArIHRoaXMubjgpO1xuICAgICAgICByZXR1cm4gdGhpcy50b01vbnRnb21lcnkocmVzKTtcbiAgICB9XG5cbiAgICBhc3luYyBiYXRjaEludmVyc2UoYnVmZkluKSB7XG4gICAgICAgIGxldCByZXR1cm5BcnJheSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzSW4gPSB0aGlzLm44O1xuICAgICAgICBjb25zdCBzT3V0ID0gdGhpcy5uODtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmSW4pKSB7XG4gICAgICAgICAgICBidWZmSW4gPSB1dGlscy5hcnJheTJidWZmZXIoYnVmZkluLCBzSW4gKTtcbiAgICAgICAgICAgIHJldHVybkFycmF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZJbiA9IGJ1ZmZJbi5zbGljZSgwLCBidWZmSW4uYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmSW4uYnl0ZUxlbmd0aCAvIHNJbik7XG4gICAgICAgIGlmICggblBvaW50cyAqIHNJbiAhPT0gYnVmZkluLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnVmZmVyIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKG5Qb2ludHMvdGhpcy50bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMudG0uY29uY3VycmVuY3k7IGkrKykge1xuICAgICAgICAgICAgbGV0IG47XG4gICAgICAgICAgICBpZiAoaTwgdGhpcy50bS5jb25jdXJyZW5jeS0xKSB7XG4gICAgICAgICAgICAgICAgbiA9IHBvaW50c1BlckNodW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50cyAtIGkqcG9pbnRzUGVyQ2h1bms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZDaHVuayA9IGJ1ZmZJbi5zbGljZShpKnBvaW50c1BlckNodW5rKnNJbiwgaSpwb2ludHNQZXJDaHVuaypzSW4gKyBuKnNJbik7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW1xuICAgICAgICAgICAgICAgIHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOmJ1ZmZDaHVua30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1wiLCB2YXI6IDEsIGxlbjpzT3V0ICogbn0sXG4gICAgICAgICAgICAgICAge2NtZDogXCJDQUxMXCIsIGZuTmFtZTogdGhpcy5wcmVmaXggKyBcIl9iYXRjaEludmVyc2VcIiwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBzSW59LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IHNPdXR9LFxuICAgICAgICAgICAgICAgIF19LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAxLCBsZW46c091dCAqIG59LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0O1xuICAgICAgICBpZiAoYnVmZkluIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHVybkFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuYnVmZmVyMmFycmF5KGZ1bGxCdWZmT3V0LCBzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsQnVmZk91dDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuIiwiaW1wb3J0IHsgZ2V0VGhyZWFkUm5nIH0gZnJvbSBcIi4vcmFuZG9tLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2FzbUZpZWxkMiB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0bSwgcHJlZml4LCBGKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG5cbiAgICAgICAgdGhpcy5GID0gRjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJGMlwiO1xuICAgICAgICB0aGlzLm0gPSBGLm0gKiAyO1xuICAgICAgICB0aGlzLm44ID0gdGhpcy5GLm44KjI7XG4gICAgICAgIHRoaXMubjMyID0gdGhpcy5GLm4zMioyO1xuICAgICAgICB0aGlzLm42NCA9IHRoaXMuRi5uNjQqMjtcblxuICAgICAgICB0aGlzLnBPcDEgPSB0bS5hbGxvYyhGLm44KjIpO1xuICAgICAgICB0aGlzLnBPcDIgPSB0bS5hbGxvYyhGLm44KjIpO1xuICAgICAgICB0aGlzLnBPcDMgPSB0bS5hbGxvYyhGLm44KjIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbcHJlZml4ICsgXCJfemVyb1wiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLnplcm8gPSB0bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl9vbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG5cbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLm5lZyh0aGlzLm9uZSk7XG4gICAgICAgIHRoaXMudHdvID0gdGhpcy5hZGQodGhpcy5vbmUsIHRoaXMub25lKTtcblxuICAgIH1cblxuICAgIG9wMihvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AyQm9vbChvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyKTtcbiAgICB9XG5cbiAgICBvcDEob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIG9wMUJvb2wob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICB9XG5cbiAgICBhZGQoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9hZGRcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgZXEoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMkJvb2woXCJfZXFcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgaXNaZXJvKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1plcm9cIiwgYSk7XG4gICAgfVxuXG4gICAgc3ViKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfc3ViXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIG5lZyhhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9uZWdcIiwgYSk7XG4gICAgfVxuXG4gICAgaW52KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2ludmVyc2VcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNOZWdhdGl2ZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNOZWdhdGl2ZVwiLCBhKTtcbiAgICB9XG5cbiAgICB0b01vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfdG9Nb250Z29tZXJ5XCIsIGEpO1xuICAgIH1cblxuICAgIGZyb21Nb250Z29tZXJ5KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2Zyb21Nb250Z29tZXJ5XCIsIGEpO1xuICAgIH1cblxuICAgIG11bChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX211bFwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBtdWwxKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsMVwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBkaXYoYSwgYikge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX2ludmVyc2VcIl0odGhpcy5wT3AyLCB0aGlzLnBPcDIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9tdWxcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDIsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBzcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIGlzU3F1YXJlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc1NxdWFyZVwiLCBhKTtcbiAgICB9XG5cbiAgICBzcXJ0KGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX3NxcnRcIiwgYSk7XG4gICAgfVxuXG4gICAgZXhwKGEsIGIpIHtcbiAgICAgICAgaWYgKCEoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICBiID0gU2NhbGFyLnRvTEVCdWZmKFNjYWxhci5lKGIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgYik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX2V4cFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgYi5ieXRlTGVuZ3RoLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgZShhLCBiKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIGE7XG4gICAgICAgIGlmICgoQXJyYXkuaXNBcnJheShhKSkgJiYgKGEubGVuZ3RoID09IDIpKSB7XG4gICAgICAgICAgICBjb25zdCBjMSA9IHRoaXMuRi5lKGFbMF0sIGIpO1xuICAgICAgICAgICAgY29uc3QgYzIgPSB0aGlzLkYuZShhWzFdLCBiKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIHJlcy5zZXQoYzEpO1xuICAgICAgICAgICAgcmVzLnNldChjMiwgdGhpcy5GLm44KjIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgRjJcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1N0cmluZyhhLCByYWRpeCkge1xuICAgICAgICBjb25zdCBzMSA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgY29uc3QgczIgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgpLCByYWRpeCk7XG4gICAgICAgIHJldHVybiBgWyR7czF9LCAke3MyfV1gO1xuICAgIH1cblxuICAgIGZyb21Sbmcocm5nKSB7XG4gICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLmZyb21Sbmcocm5nKTtcbiAgICAgICAgY29uc3QgYzIgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgIHJlcy5zZXQoYzEpO1xuICAgICAgICByZXMuc2V0KGMyLCB0aGlzLkYubjgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHJhbmRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVJuZyhnZXRUaHJlYWRSbmcoKSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBjMSA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKDAsIHRoaXMuRi5uOCkpO1xuICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi50b09iamVjdChhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpKTtcbiAgICAgICAgcmV0dXJuIFtjMSwgYzJdO1xuICAgIH1cblxuICAgIGZyb21PYmplY3QoYSkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICBjb25zdCBiMSA9IHRoaXMuRi5mcm9tT2JqZWN0KGFbMF0pO1xuICAgICAgICBjb25zdCBiMiA9IHRoaXMuRi5mcm9tT2JqZWN0KGFbMV0pO1xuICAgICAgICBidWZmLnNldChiMSk7XG4gICAgICAgIGJ1ZmYuc2V0KGIyLCB0aGlzLkYubjgpO1xuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9XG5cbiAgICBjMShhKSB7XG4gICAgICAgIHJldHVybiBhLnNsaWNlKDAsIHRoaXMuRi5uOCk7XG4gICAgfVxuXG4gICAgYzIoYSkge1xuICAgICAgICByZXR1cm4gYS5zbGljZSh0aGlzLkYubjgpO1xuICAgIH1cblxufVxuXG4iLCJcblxuaW1wb3J0IHsgZ2V0VGhyZWFkUm5nIH0gZnJvbSBcIi4vcmFuZG9tLmpzXCI7XG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2FzbUZpZWxkMyB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0bSwgcHJlZml4LCBGKSB7XG4gICAgICAgIHRoaXMudG0gPSB0bTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG5cbiAgICAgICAgdGhpcy5GID0gRjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJGM1wiO1xuICAgICAgICB0aGlzLm0gPSBGLm0gKiAzO1xuICAgICAgICB0aGlzLm44ID0gdGhpcy5GLm44KjM7XG4gICAgICAgIHRoaXMubjMyID0gdGhpcy5GLm4zMiozO1xuICAgICAgICB0aGlzLm42NCA9IHRoaXMuRi5uNjQqMztcblxuICAgICAgICB0aGlzLnBPcDEgPSB0bS5hbGxvYyhGLm44KjMpO1xuICAgICAgICB0aGlzLnBPcDIgPSB0bS5hbGxvYyhGLm44KjMpO1xuICAgICAgICB0aGlzLnBPcDMgPSB0bS5hbGxvYyhGLm44KjMpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbcHJlZml4ICsgXCJfemVyb1wiXSh0aGlzLnBPcDEpO1xuICAgICAgICB0aGlzLnplcm8gPSB0bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl9vbmVcIl0odGhpcy5wT3AxKTtcbiAgICAgICAgdGhpcy5vbmUgPSB0bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5uOCk7XG5cbiAgICAgICAgdGhpcy5uZWdvbmUgPSB0aGlzLm5lZyh0aGlzLm9uZSk7XG4gICAgICAgIHRoaXMudHdvID0gdGhpcy5hZGQodGhpcy5vbmUsIHRoaXMub25lKTtcblxuICAgIH1cblxuICAgIG9wMihvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5uOCk7XG4gICAgfVxuXG4gICAgb3AyQm9vbChvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyKTtcbiAgICB9XG5cbiAgICBvcDEob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIG9wMUJvb2wob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICB9XG5cblxuICAgIGVxKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDJCb29sKFwiX2VxXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGlzWmVybyhhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvXCIsIGEpO1xuICAgIH1cblxuICAgIGFkZChhLGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICB9XG5cbiAgICBzdWIoYSxiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJcIiwgYSwgYik7XG4gICAgfVxuXG4gICAgbmVnKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX25lZ1wiLCBhKTtcbiAgICB9XG5cbiAgICBpbnYoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfaW52ZXJzZVwiLCBhKTtcbiAgICB9XG5cbiAgICBpc05lZ2F0aXZlKGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3AxQm9vbChcIl9pc05lZ2F0aXZlXCIsIGEpO1xuICAgIH1cblxuICAgIHRvTW9udGdvbWVyeShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b01vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgZnJvbU1vbnRnb21lcnkoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfZnJvbU1vbnRnb21lcnlcIiwgYSk7XG4gICAgfVxuXG4gICAgbXVsKGEsYikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfbXVsXCIsIGEsIGIpO1xuICAgIH1cblxuICAgIGRpdihhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfaW52ZXJzZVwiXSh0aGlzLnBPcDIsIHRoaXMucE9wMik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX211bFwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMubjgpO1xuICAgIH1cblxuICAgIHNxdWFyZShhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9zcXVhcmVcIiwgYSk7XG4gICAgfVxuXG4gICAgaXNTcXVhcmUoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzU3F1YXJlXCIsIGEpO1xuICAgIH1cblxuICAgIHNxcnQoYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcDEoXCJfc3FydFwiLCBhKTtcbiAgICB9XG5cbiAgICBleHAoYSwgYikge1xuICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIGIgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUoYikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfZXhwXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBiLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLm44KTtcbiAgICB9XG5cbiAgICBlKGEsIGIpIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gYTtcbiAgICAgICAgaWYgKChBcnJheS5pc0FycmF5KGEpKSAmJiAoYS5sZW5ndGggPT0gMykpIHtcbiAgICAgICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLmUoYVswXSwgYik7XG4gICAgICAgICAgICBjb25zdCBjMiA9IHRoaXMuRi5lKGFbMV0sIGIpO1xuICAgICAgICAgICAgY29uc3QgYzMgPSB0aGlzLkYuZShhWzJdLCBiKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgICAgIHJlcy5zZXQoYzEpO1xuICAgICAgICAgICAgcmVzLnNldChjMiwgdGhpcy5GLm44KTtcbiAgICAgICAgICAgIHJlcy5zZXQoYzMsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIEYzXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoYSwgcmFkaXgpIHtcbiAgICAgICAgY29uc3QgczEgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSgwLCB0aGlzLkYubjgpLCByYWRpeCk7XG4gICAgICAgIGNvbnN0IHMyID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMiksIHJhZGl4KTtcbiAgICAgICAgY29uc3QgczMgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgqMiksIHJhZGl4KTtcbiAgICAgICAgcmV0dXJuIGBbJHtzMX0sICR7czJ9LCAke3MzfV1gO1xuICAgIH1cblxuICAgIGZyb21Sbmcocm5nKSB7XG4gICAgICAgIGNvbnN0IGMxID0gdGhpcy5GLmZyb21Sbmcocm5nKTtcbiAgICAgICAgY29uc3QgYzIgPSB0aGlzLkYuZnJvbVJuZyhybmcpO1xuICAgICAgICBjb25zdCBjMyA9IHRoaXMuRi5mcm9tUm5nKHJuZyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCozKTtcbiAgICAgICAgcmVzLnNldChjMSk7XG4gICAgICAgIHJlcy5zZXQoYzIsIHRoaXMuRi5uOCk7XG4gICAgICAgIHJlcy5zZXQoYzMsIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICByYW5kb20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21SbmcoZ2V0VGhyZWFkUm5nKCkpO1xuICAgIH1cblxuICAgIHRvT2JqZWN0KGEpIHtcbiAgICAgICAgY29uc3QgYzEgPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSgwLCB0aGlzLkYubjgpKTtcbiAgICAgICAgY29uc3QgYzIgPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSk7XG4gICAgICAgIGNvbnN0IGMzID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UodGhpcy5GLm44KjIsIHRoaXMuRi5uOCozKSk7XG4gICAgICAgIHJldHVybiBbYzEsIGMyLCBjM107XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMyk7XG4gICAgICAgIGNvbnN0IGIxID0gdGhpcy5GLmZyb21PYmplY3QoYVswXSk7XG4gICAgICAgIGNvbnN0IGIyID0gdGhpcy5GLmZyb21PYmplY3QoYVsxXSk7XG4gICAgICAgIGNvbnN0IGIzID0gdGhpcy5GLmZyb21PYmplY3QoYVsyXSk7XG4gICAgICAgIGJ1ZmYuc2V0KGIxKTtcbiAgICAgICAgYnVmZi5zZXQoYjIsIHRoaXMuRi5uOCk7XG4gICAgICAgIGJ1ZmYuc2V0KGIzLCB0aGlzLkYubjgqMik7XG4gICAgICAgIHJldHVybiBidWZmO1xuICAgIH1cblxuICAgIGMxKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UoMCwgdGhpcy5GLm44KTtcbiAgICB9XG5cbiAgICBjMihhKSB7XG4gICAgICAgIHJldHVybiBhLnNsaWNlKHRoaXMuRi5uOCwgdGhpcy5GLm44KjIpO1xuICAgIH1cblxuICAgIGMzKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuc2xpY2UodGhpcy5GLm44KjIpO1xuICAgIH1cblxufVxuXG5cbiIsIlxuXG5pbXBvcnQgKiBhcyBTY2FsYXIgZnJvbSBcIi4vc2NhbGFyLmpzXCI7XG5pbXBvcnQgYnVpbGRCYXRjaENvbnZlcnQgZnJvbSBcIi4vZW5naW5lX2JhdGNoY29udmVydC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYXNtQ3VydmUge1xuXG4gICAgY29uc3RydWN0b3IodG0sIHByZWZpeCwgRiwgcEdlbiwgcEdiLCBjb2ZhY3Rvcikge1xuICAgICAgICB0aGlzLnRtID0gdG07XG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuICAgICAgICB0aGlzLkYgPSBGO1xuXG4gICAgICAgIHRoaXMucE9wMSA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMiA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMucE9wMyA9IHRtLmFsbG9jKEYubjgqMyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVybyA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIEYubjgqMyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1twcmVmaXggKyBcIl96ZXJvQWZmaW5lXCJdKHRoaXMucE9wMSk7XG4gICAgICAgIHRoaXMuemVyb0FmZmluZSA9IHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDEsIEYubjgqMik7XG4gICAgICAgIHRoaXMub25lID0gdGhpcy50bS5nZXRCdWZmKHBHZW4sIEYubjgqMyk7XG4gICAgICAgIHRoaXMuZyA9IHRoaXMub25lO1xuICAgICAgICB0aGlzLm9uZUFmZmluZSA9IHRoaXMudG0uZ2V0QnVmZihwR2VuLCBGLm44KjIpO1xuICAgICAgICB0aGlzLmdBZmZpbmUgPSB0aGlzLm9uZUFmZmluZTtcbiAgICAgICAgdGhpcy5iID0gdGhpcy50bS5nZXRCdWZmKHBHYiwgRi5uOCk7XG5cbiAgICAgICAgaWYgKGNvZmFjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmNvZmFjdG9yID0gU2NhbGFyLnRvTEVCdWZmKGNvZmFjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmVnb25lID0gdGhpcy5uZWcodGhpcy5vbmUpO1xuICAgICAgICB0aGlzLnR3byA9IHRoaXMuYWRkKHRoaXMub25lLCB0aGlzLm9uZSk7XG5cbiAgICAgICAgdGhpcy5iYXRjaExFTXRvQyA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaExFTXRvQ1wiLCBGLm44KjIsIEYubjgpO1xuICAgICAgICB0aGlzLmJhdGNoTEVNdG9VID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoTEVNdG9VXCIsIEYubjgqMiwgRi5uOCoyKTtcbiAgICAgICAgdGhpcy5iYXRjaEN0b0xFTSA9IGJ1aWxkQmF0Y2hDb252ZXJ0KHRtLCBwcmVmaXggKyBcIl9iYXRjaEN0b0xFTVwiLCBGLm44LCBGLm44KjIpO1xuICAgICAgICB0aGlzLmJhdGNoVXRvTEVNID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoVXRvTEVNXCIsIEYubjgqMiwgRi5uOCoyKTtcbiAgICAgICAgdGhpcy5iYXRjaFRvSmFjb2JpYW4gPSBidWlsZEJhdGNoQ29udmVydCh0bSwgcHJlZml4ICsgXCJfYmF0Y2hUb0phY29iaWFuXCIsIEYubjgqMiwgRi5uOCozKTtcbiAgICAgICAgdGhpcy5iYXRjaFRvQWZmaW5lID0gYnVpbGRCYXRjaENvbnZlcnQodG0sIHByZWZpeCArIFwiX2JhdGNoVG9BZmZpbmVcIiwgRi5uOCozLCBGLm44KjIpO1xuICAgIH1cblxuICAgIG9wMihvcE5hbWUsIGEsIGIpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIGIpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCB0aGlzLnBPcDMpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMywgdGhpcy5GLm44KjMpO1xuICAgIH1cblxuICAgIG9wMmJvb2wob3BOYW1lLCBhLCBiKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AyLCBiKTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgb3BOYW1lXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICB9XG5cbiAgICBvcDEob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMuRi5uOCozKTtcbiAgICB9XG5cbiAgICBvcDFBZmZpbmUob3BOYW1lLCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBvcE5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMuRi5uOCoyKTtcbiAgICB9XG5cbiAgICBvcDFCb29sKG9wTmFtZSwgYSkge1xuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgb3BOYW1lXSh0aGlzLnBPcDEsIHRoaXMucE9wMyk7XG4gICAgfVxuXG4gICAgYWRkKGEsYikge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZFwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZE1peGVkXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyKFwiX2FkZE1peGVkXCIsIGIsIGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfYWRkQWZmaW5lXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdWIoYSxiKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfc3ViXCIsIGEsIGIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfc3ViTWl4ZWRcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIGlmIChiLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcDIoXCJfc3ViTWl4ZWRcIiwgYiwgYSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMihcIl9zdWJBZmZpbmVcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5lZyhhKSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9uZWdcIiwgYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcDFBZmZpbmUoXCJfbmVnQWZmaW5lXCIsIGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZG91YmxlKGEpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AxKFwiX2RvdWJsZVwiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMShcIl9kb3VibGVBZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1plcm8oYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcDFCb29sKFwiX2lzWmVyb1wiLCBhKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMUJvb2woXCJfaXNaZXJvQWZmaW5lXCIsIGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGltZXNTY2FsYXIoYSwgcykge1xuICAgICAgICBpZiAoIShzIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHMgPSBTY2FsYXIudG9MRUJ1ZmYoU2NhbGFyLmUocykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmbk5hbWU7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IHRoaXMucHJlZml4ICsgXCJfdGltZXNTY2FsYXJcIjtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IHRoaXMucHJlZml4ICsgXCJfdGltZXNTY2FsYXJBZmZpbmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLnNldEJ1ZmYodGhpcy5wT3AxLCBhKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMiwgcyk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1tmbk5hbWVdKHRoaXMucE9wMSwgdGhpcy5wT3AyLCBzLmJ5dGVMZW5ndGgsIHRoaXMucE9wMyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AzLCB0aGlzLkYubjgqMyk7XG4gICAgfVxuXG4gICAgdGltZXNGcihhLCBzKSB7XG4gICAgICAgIGxldCBmbk5hbWU7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IHRoaXMucHJlZml4ICsgXCJfdGltZXNGclwiO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgZm5OYW1lID0gdGhpcy5wcmVmaXggKyBcIl90aW1lc0ZyQWZmaW5lXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDIsIHMpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbZm5OYW1lXSh0aGlzLnBPcDEsIHRoaXMucE9wMiwgdGhpcy5wT3AzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG0uZ2V0QnVmZih0aGlzLnBPcDMsIHRoaXMuRi5uOCozKTtcbiAgICB9XG5cbiAgICBlcShhLGIpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMmJvb2woXCJfZXFcIiwgYSwgYik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMmJvb2woXCJfZXFNaXhlZFwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgaWYgKGIuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMmJvb2woXCJfZXFNaXhlZFwiLCBiLCBhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYi5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3AyYm9vbChcIl9lcUFmZmluZVwiLCBhLCBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9BZmZpbmUoYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcDFBZmZpbmUoXCJfdG9BZmZpbmVcIiwgYSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvSmFjb2JpYW4oYSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wMShcIl90b0phY29iaWFuXCIsIGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9ScHJVbmNvbXByZXNzZWQoYXJyLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX3RvQWZmaW5lXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmJ5dGVMZW5ndGggIT0gdGhpcy5GLm44KjIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9MRU10b1VcIl0odGhpcy5wT3AxLCB0aGlzLnBPcDEpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLkYubjgqMik7XG4gICAgICAgIGFyci5zZXQocmVzLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGZyb21ScHJVbmNvbXByZXNzZWQoYXJyLCBvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGFyci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRoaXMuRi5uOCoyKTtcbiAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYnVmZik7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLnByZWZpeCArIFwiX1V0b0xFTVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLkYubjgqMik7XG4gICAgfVxuXG4gICAgdG9ScHJDb21wcmVzc2VkKGFyciwgb2Zmc2V0LCBhKSB7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGEpO1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl90b0FmZmluZVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5ieXRlTGVuZ3RoICE9IHRoaXMuRi5uOCoyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMucHJlZml4ICsgXCJfTEVNdG9DXCJdKHRoaXMucE9wMSwgdGhpcy5wT3AxKTtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMSwgdGhpcy5GLm44KTtcbiAgICAgICAgYXJyLnNldChyZXMsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgZnJvbVJwckNvbXByZXNzZWQoYXJyLCBvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGFyci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRoaXMuRi5uOCk7XG4gICAgICAgIHRoaXMudG0uc2V0QnVmZih0aGlzLnBPcDEsIGJ1ZmYpO1xuICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl9DdG9MRU1cIl0odGhpcy5wT3AxLCB0aGlzLnBPcDIpO1xuICAgICAgICByZXR1cm4gdGhpcy50bS5nZXRCdWZmKHRoaXMucE9wMiwgdGhpcy5GLm44KjIpO1xuICAgIH1cblxuICAgIHRvVW5jb21wcmVzc2VkKGEpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuRi5uOCoyKTtcbiAgICAgICAgdGhpcy50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBhKTtcbiAgICAgICAgcmV0dXJuIGJ1ZmY7XG4gICAgfVxuXG4gICAgdG9ScHJMRU0oYXJyLCBvZmZzZXQsIGEpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgYXJyLnNldChhLCBvZmZzZXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMykge1xuICAgICAgICAgICAgdGhpcy50bS5zZXRCdWZmKHRoaXMucE9wMSwgYSk7XG4gICAgICAgICAgICB0aGlzLnRtLmluc3RhbmNlLmV4cG9ydHNbdGhpcy5wcmVmaXggKyBcIl90b0FmZmluZVwiXSh0aGlzLnBPcDEsIHRoaXMucE9wMSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYodGhpcy5wT3AxLCB0aGlzLkYubjgqMik7XG4gICAgICAgICAgICBhcnIuc2V0KHJlcywgb2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyb21ScHJMRU0oYXJyLCBvZmZzZXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gICAgICAgIHJldHVybiBhcnIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQrdGhpcy5GLm44KjIpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKGEsIHJhZGl4KSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggPT0gdGhpcy5GLm44KjMpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSgwLCB0aGlzLkYubjgpLCByYWRpeCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5GLnRvU3RyaW5nKGEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMiksIHJhZGl4KTtcbiAgICAgICAgICAgIGNvbnN0IHogPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgqMiksIHJhZGl4KTtcbiAgICAgICAgICAgIHJldHVybiBgWyAke3h9LCAke3l9LCAke3p9IF1gO1xuICAgICAgICB9IGVsc2UgaWYgKGEuYnl0ZUxlbmd0aCA9PSB0aGlzLkYubjgqMikge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuRi50b1N0cmluZyhhLnNsaWNlKDAsIHRoaXMuRi5uOCksIHJhZGl4KTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLkYudG9TdHJpbmcoYS5zbGljZSh0aGlzLkYubjgpLCByYWRpeCk7XG4gICAgICAgICAgICByZXR1cm4gYFsgJHt4fSwgJHt5fSBdYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsaWQoYSkge1xuICAgICAgICBpZiAodGhpcy5pc1plcm8oYSkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBGID0gdGhpcy5GO1xuICAgICAgICBjb25zdCBhYSA9IHRoaXMudG9BZmZpbmUoYSk7XG4gICAgICAgIGNvbnN0IHggPSBhYS5zbGljZSgwLCB0aGlzLkYubjgpO1xuICAgICAgICBjb25zdCB5ID0gYWEuc2xpY2UodGhpcy5GLm44LCB0aGlzLkYubjgqMik7XG4gICAgICAgIGNvbnN0IHgzYiA9IEYuYWRkKEYubXVsKEYuc3F1YXJlKHgpLHgpLCB0aGlzLmIpO1xuICAgICAgICBjb25zdCB5MiA9IEYuc3F1YXJlKHkpO1xuICAgICAgICByZXR1cm4gRi5lcSh4M2IsIHkyKTtcbiAgICB9XG5cbiAgICBmcm9tUm5nKHJuZykge1xuICAgICAgICBjb25zdCBGID0gdGhpcy5GO1xuICAgICAgICBsZXQgUCA9IFtdO1xuICAgICAgICBsZXQgZ3JlYXRlc3Q7XG4gICAgICAgIGxldCB4M2I7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIFBbMF0gPSBGLmZyb21Sbmcocm5nKTtcbiAgICAgICAgICAgIGdyZWF0ZXN0ID0gcm5nLm5leHRCb29sKCk7XG4gICAgICAgICAgICB4M2IgPSBGLmFkZChGLm11bChGLnNxdWFyZShQWzBdKSwgUFswXSksIHRoaXMuYik7XG4gICAgICAgIH0gd2hpbGUgKCFGLmlzU3F1YXJlKHgzYikpO1xuXG4gICAgICAgIFBbMV0gPSBGLnNxcnQoeDNiKTtcblxuICAgICAgICBjb25zdCBzID0gRi5pc05lZ2F0aXZlKFBbMV0pO1xuICAgICAgICBpZiAoZ3JlYXRlc3QgXiBzKSBQWzFdID0gRi5uZWcoUFsxXSk7XG5cbiAgICAgICAgbGV0IFBidWZmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5GLm44KjIpO1xuICAgICAgICBQYnVmZi5zZXQoUFswXSk7XG4gICAgICAgIFBidWZmLnNldChQWzFdLCB0aGlzLkYubjgpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvZmFjdG9yKSB7XG4gICAgICAgICAgICBQYnVmZiA9IHRoaXMudGltZXNTY2FsYXIoUGJ1ZmYsIHRoaXMuY29mYWN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFBidWZmO1xuICAgIH1cblxuXG5cbiAgICB0b09iamVjdChhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzWmVybyhhKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB0aGlzLkYudG9PYmplY3QodGhpcy5GLnplcm8pLFxuICAgICAgICAgICAgICAgIHRoaXMuRi50b09iamVjdCh0aGlzLkYub25lKSxcbiAgICAgICAgICAgICAgICB0aGlzLkYudG9PYmplY3QodGhpcy5GLnplcm8pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UoMCwgdGhpcy5GLm44KSk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLkYudG9PYmplY3QoYS5zbGljZSh0aGlzLkYubjgsIHRoaXMuRi5uOCoyKSk7XG4gICAgICAgIGxldCB6O1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoID09IHRoaXMuRi5uOCozKSB7XG4gICAgICAgICAgICB6ID0gdGhpcy5GLnRvT2JqZWN0KGEuc2xpY2UodGhpcy5GLm44KjIsIHRoaXMuRi5uOCozKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6ID0gdGhpcy5GLnRvT2JqZWN0KHRoaXMuRi5vbmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbeCwgeSwgel07XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdChhKSB7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLkYuZnJvbU9iamVjdChhWzBdKTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuRi5mcm9tT2JqZWN0KGFbMV0pO1xuICAgICAgICBsZXQgejtcbiAgICAgICAgaWYgKGEubGVuZ3RoPT0zKSB7XG4gICAgICAgICAgICB6ID0gdGhpcy5GLmZyb21PYmplY3QoYVsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6ID0gdGhpcy5GLm9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5GLmlzWmVybyh6LCB0aGlzLkYub25lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuemVyb0FmZmluZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLkYuZXEoeiwgdGhpcy5GLm9uZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMik7XG4gICAgICAgICAgICBidWZmLnNldCh4KTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHksIHRoaXMuRi5uOCk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSh0aGlzLkYubjgqMyk7XG4gICAgICAgICAgICBidWZmLnNldCh4KTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KHksIHRoaXMuRi5uOCk7XG4gICAgICAgICAgICBidWZmLnNldCh6LCB0aGlzLkYubjgqMik7XG4gICAgICAgICAgICByZXR1cm4gYnVmZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGUoYSkge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBhO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tT2JqZWN0KGEpO1xuICAgIH1cblxuICAgIHgoYSkge1xuICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnRvQWZmaW5lKGEpO1xuICAgICAgICByZXR1cm4gdG1wLnNsaWNlKDAsIHRoaXMuRi5uOCk7XG4gICAgfVxuXG4gICAgeShhKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IHRoaXMudG9BZmZpbmUoYSk7XG4gICAgICAgIHJldHVybiB0bXAuc2xpY2UodGhpcy5GLm44KTtcbiAgICB9XG5cbn1cblxuXG4iLCIvKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZWFkKHNlbGYpIHtcbiAgICBjb25zdCBNQVhNRU0gPSAzMjc2NztcbiAgICBsZXQgaW5zdGFuY2U7XG4gICAgbGV0IG1lbW9yeTtcblxuICAgIGlmIChzZWxmKSB7XG4gICAgICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICBpZiAoZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGUuZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhWzBdLmNtZCA9PSBcIklOSVRcIikge1xuICAgICAgICAgICAgICAgIGluaXQoZGF0YVswXSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFbMF0uY21kID09IFwiVEVSTUlOQVRFXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHJ1blRhc2soZGF0YSk7XG4gICAgICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoZGF0YSkge1xuICAgICAgICBjb25zdCBjb2RlID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5jb2RlKTtcbiAgICAgICAgY29uc3Qgd2FzbU1vZHVsZSA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoY29kZSk7XG4gICAgICAgIG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6ZGF0YS5pbml0LCBtYXhpbXVtOiBNQVhNRU19KTtcblxuICAgICAgICBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21Nb2R1bGUsIHtcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICAgIFwibWVtb3J5XCI6IG1lbW9yeVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgZnVuY3Rpb24gYWxsb2MobGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHUzMiA9IG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyLCAwLCAxKTtcbiAgICAgICAgd2hpbGUgKHUzMlswXSAmIDMpIHUzMlswXSsrOyAgLy8gUmV0dXJuIGFsd2F5cyBhbGlnbmVkIHBvaW50ZXJzXG4gICAgICAgIGNvbnN0IHJlcyA9IHUzMlswXTtcbiAgICAgICAgdTMyWzBdICs9IGxlbmd0aDtcbiAgICAgICAgaWYgKHUzMlswXSArIGxlbmd0aCA+IG1lbW9yeS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VzID0gbWVtb3J5LmJ1ZmZlci5ieXRlTGVuZ3RoIC8gMHgxMDAwMDtcbiAgICAgICAgICAgIGxldCByZXF1aXJlZFBhZ2VzID0gTWF0aC5mbG9vcigodTMyWzBdICsgbGVuZ3RoKSAvIDB4MTAwMDApKzE7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWRQYWdlcz5NQVhNRU0pIHJlcXVpcmVkUGFnZXM9TUFYTUVNO1xuICAgICAgICAgICAgbWVtb3J5Lmdyb3cocmVxdWlyZWRQYWdlcy1jdXJyZW50UGFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWxsb2NCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBhbGxvYyhidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHNldEJ1ZmZlcihwLCBidWZmZXIpO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCdWZmZXIocG9pbnRlciwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHU4ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh1OC5idWZmZXIsIHU4LmJ5dGVPZmZzZXQgKyBwb2ludGVyLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEJ1ZmZlcihwb2ludGVyLCBidWZmZXIpIHtcbiAgICAgICAgY29uc3QgdTggPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTtcbiAgICAgICAgdTguc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1blRhc2sodGFzaykge1xuICAgICAgICBpZiAodGFza1swXS5jbWQgPT0gXCJJTklUXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0KHRhc2tbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIHZhcnM6IFtdLFxuICAgICAgICAgICAgb3V0OiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1MzJhID0gbmV3IFVpbnQzMkFycmF5KG1lbW9yeS5idWZmZXIsIDAsIDEpO1xuICAgICAgICBjb25zdCBvbGRBbGxvYyA9IHUzMmFbMF07XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0YXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRhc2tbaV0uY21kKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUxMT0NTRVRcIjpcbiAgICAgICAgICAgICAgICBjdHgudmFyc1t0YXNrW2ldLnZhcl0gPSBhbGxvY0J1ZmZlcih0YXNrW2ldLmJ1ZmYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkFMTE9DXCI6XG4gICAgICAgICAgICAgICAgY3R4LnZhcnNbdGFza1tpXS52YXJdID0gYWxsb2ModGFza1tpXS5sZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlNFVFwiOlxuICAgICAgICAgICAgICAgIHNldEJ1ZmZlcihjdHgudmFyc1t0YXNrW2ldLnZhcl0sIHRhc2tbaV0uYnVmZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiQ0FMTFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRhc2tbaV0ucGFyYW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSB0YXNrW2ldLnBhcmFtc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwLnZhciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goY3R4LnZhcnNbcC52YXJdICsgKHAub2Zmc2V0IHx8IDApKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcC52YWwgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocC52YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmV4cG9ydHNbdGFza1tpXS5mbk5hbWVdKC4uLnBhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiR0VUXCI6XG4gICAgICAgICAgICAgICAgY3R4Lm91dFt0YXNrW2ldLm91dF0gPSBnZXRCdWZmZXIoY3R4LnZhcnNbdGFza1tpXS52YXJdLCB0YXNrW2ldLmxlbikuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjbWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdTMyYiA9IG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyLCAwLCAxKTtcbiAgICAgICAgdTMyYlswXSA9IG9sZEFsbG9jO1xuICAgICAgICByZXR1cm4gY3R4Lm91dDtcbiAgICB9XG5cblxuICAgIHJldHVybiBydW5UYXNrO1xufVxuIiwiLyogZ2xvYmFsIG5hdmlnYXRvciwgV2ViQXNzZW1ibHkgKi9cbi8qXG4gICAgQ29weXJpZ2h0IDIwMTkgMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB3YXNtc25hcmsgKFdlYiBBc3NlbWJseSB6a1NuYXJrIFByb3ZlcikuXG5cbiAgICB3YXNtc25hcmsgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICB3YXNtc25hcmsgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggd2FzbXNuYXJrLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLy8gY29uc3QgTUVNX1NJWkUgPSAxMDAwOyAgLy8gTWVtb3J5IHNpemUgaW4gNjRLIFBha2VzICg1MTJNYilcbmNvbnN0IE1FTV9TSVpFID0gMjU7ICAvLyBNZW1vcnkgc2l6ZSBpbiA2NEsgUGFrZXMgKDE2MDBLYilcblxuXG5pbXBvcnQgdGhyZWFkIGZyb20gXCIuL3RocmVhZG1hbl90aHJlYWQuanNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBXb3JrZXIgZnJvbSBcIndlYi13b3JrZXJcIjtcblxuY2xhc3MgRGVmZXJyZWQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+IHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzbGVlcChtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CYXNlNjQoc3RyKSB7XG4gICAgaWYgKHByb2Nlc3MuYnJvd3Nlcikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcy5idG9hKHN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0cikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgfVxufVxuXG5jb25zdCB0aHJlYWRTb3VyY2UgPSBzdHJpbmdUb0Jhc2U2NChcIihcIiArIHRocmVhZC50b1N0cmluZygpICsgXCIpKHNlbGYpXCIpO1xuY29uc3Qgd29ya2VyU291cmNlID0gXCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7YmFzZTY0LFwiICsgdGhyZWFkU291cmNlO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYnVpbGRUaHJlYWRNYW5hZ2VyKHdhc20sIHNpbmdsZVRocmVhZCkge1xuICAgIGNvbnN0IHRtID0gbmV3IFRocmVhZE1hbmFnZXIoKTtcblxuICAgIHRtLm1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6TUVNX1NJWkV9KTtcbiAgICB0bS51OCA9IG5ldyBVaW50OEFycmF5KHRtLm1lbW9yeS5idWZmZXIpO1xuICAgIHRtLnUzMiA9IG5ldyBVaW50MzJBcnJheSh0bS5tZW1vcnkuYnVmZmVyKTtcblxuICAgIGNvbnN0IHdhc21Nb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKHdhc20uY29kZSk7XG5cbiAgICB0bS5pbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21Nb2R1bGUsIHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgICBcIm1lbW9yeVwiOiB0bS5tZW1vcnlcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdG0uc2luZ2xlVGhyZWFkID0gc2luZ2xlVGhyZWFkO1xuICAgIHRtLmluaXRhbFBGcmVlID0gdG0udTMyWzBdOyAgIC8vIFNhdmUgdGhlIFBvaW50ZXIgdG8gZnJlZSBzcGFjZS5cbiAgICB0bS5wcSA9IHdhc20ucHE7XG4gICAgdG0ucHIgPSB3YXNtLnByO1xuICAgIHRtLnBHMWdlbiA9IHdhc20ucEcxZ2VuO1xuICAgIHRtLnBHMXplcm8gPSB3YXNtLnBHMXplcm87XG4gICAgdG0ucEcyZ2VuID0gd2FzbS5wRzJnZW47XG4gICAgdG0ucEcyemVybyA9IHdhc20ucEcyemVybztcbiAgICB0bS5wT25lVCA9IHdhc20ucE9uZVQ7XG5cbiAgICAvLyAgICB0bS5wVG1wMCA9IHRtLmFsbG9jKGN1cnZlLkcyLkYubjgqMyk7XG4gICAgLy8gICAgdG0ucFRtcDEgPSB0bS5hbGxvYyhjdXJ2ZS5HMi5GLm44KjMpO1xuXG5cbiAgICBpZiAoc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgIHRtLmNvZGUgPSB3YXNtLmNvZGU7XG4gICAgICAgIHRtLnRhc2tNYW5hZ2VyID0gdGhyZWFkKCk7XG4gICAgICAgIGF3YWl0IHRtLnRhc2tNYW5hZ2VyKFt7XG4gICAgICAgICAgICBjbWQ6IFwiSU5JVFwiLFxuICAgICAgICAgICAgaW5pdDogTUVNX1NJWkUsXG4gICAgICAgICAgICBjb2RlOiB0bS5jb2RlLnNsaWNlKClcbiAgICAgICAgfV0pO1xuICAgICAgICB0bS5jb25jdXJyZW5jeSAgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRtLndvcmtlcnMgPSBbXTtcbiAgICAgICAgdG0ucGVuZGluZ0RlZmVycmVkcyA9IFtdO1xuICAgICAgICB0bS53b3JraW5nID0gW107XG5cbiAgICAgICAgbGV0IGNvbmN1cnJlbmN5O1xuXG4gICAgICAgIGlmICgodHlwZW9mKG5hdmlnYXRvcikgPT09IFwib2JqZWN0XCIpICYmIG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBvcy5jcHVzKCkubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uY3VycmVuY3kgPT0gMCl7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1pdCB0byA2NCB0aHJlYWRzIGZvciBtZW1vcnkgcmVhc29ucy5cbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5PjY0KSBjb25jdXJyZW5jeT02NDtcbiAgICAgICAgdG0uY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaTxjb25jdXJyZW5jeTsgaSsrKSB7XG5cbiAgICAgICAgICAgIHRtLndvcmtlcnNbaV0gPSBuZXcgV29ya2VyKHdvcmtlclNvdXJjZSk7XG5cbiAgICAgICAgICAgIHRtLndvcmtlcnNbaV0uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgZ2V0T25Nc2coaSkpO1xuXG4gICAgICAgICAgICB0bS53b3JraW5nW2ldPWZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5pdFByb21pc2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0bS53b3JrZXJzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcHlDb2RlID0gd2FzbS5jb2RlLnNsaWNlKCk7XG4gICAgICAgICAgICBpbml0UHJvbWlzZXMucHVzaCh0bS5wb3N0QWN0aW9uKGksIFt7XG4gICAgICAgICAgICAgICAgY21kOiBcIklOSVRcIixcbiAgICAgICAgICAgICAgICBpbml0OiBNRU1fU0laRSxcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3B5Q29kZVxuICAgICAgICAgICAgfV0sIFtjb3B5Q29kZS5idWZmZXJdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChpbml0UHJvbWlzZXMpO1xuXG4gICAgfVxuICAgIHJldHVybiB0bTtcblxuICAgIGZ1bmN0aW9uIGdldE9uTXNnKGkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgaWYgKChlKSYmKGUuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZS5kYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG0ud29ya2luZ1tpXT1mYWxzZTtcbiAgICAgICAgICAgIHRtLnBlbmRpbmdEZWZlcnJlZHNbaV0ucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIHRtLnByb2Nlc3NXb3JrcygpO1xuICAgICAgICB9O1xuICAgIH1cblxufVxuXG5jbGFzcyBUaHJlYWRNYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLm9sZFBGcmVlID0gMDtcbiAgICB9XG5cbiAgICBzdGFydFN5bmNPcCgpIHtcbiAgICAgICAgaWYgKHRoaXMub2xkUEZyZWUgIT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiU3luYyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3NcIik7XG4gICAgICAgIHRoaXMub2xkUEZyZWUgPSB0aGlzLnUzMlswXTtcbiAgICB9XG5cbiAgICBlbmRTeW5jT3AoKSB7XG4gICAgICAgIGlmICh0aGlzLm9sZFBGcmVlID09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIHN5bmMgb3BlcmF0aW9uIGluIHByb2dyZXNzXCIpO1xuICAgICAgICB0aGlzLnUzMlswXSA9IHRoaXMub2xkUEZyZWU7XG4gICAgICAgIHRoaXMub2xkUEZyZWUgPSAwO1xuICAgIH1cblxuICAgIHBvc3RBY3Rpb24od29ya2VySWQsIGUsIHRyYW5zZmVycywgX2RlZmVycmVkKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtpbmdbd29ya2VySWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0aW5nIGEgam9iIHQgYSB3b3JraW5nIHdvcmtlclwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndvcmtpbmdbd29ya2VySWRdID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnBlbmRpbmdEZWZlcnJlZHNbd29ya2VySWRdID0gX2RlZmVycmVkID8gX2RlZmVycmVkIDogbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMud29ya2Vyc1t3b3JrZXJJZF0ucG9zdE1lc3NhZ2UoZSwgdHJhbnNmZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nRGVmZXJyZWRzW3dvcmtlcklkXS5wcm9taXNlO1xuICAgIH1cblxuICAgIHByb2Nlc3NXb3JrcygpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wOyAoaTx0aGlzLndvcmtlcnMubGVuZ3RoKSYmKHRoaXMuYWN0aW9uUXVldWUubGVuZ3RoID4gMCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMud29ya2luZ1tpXSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmsgPSB0aGlzLmFjdGlvblF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0QWN0aW9uKGksIHdvcmsuZGF0YSwgd29yay50cmFuc2ZlcnMsIHdvcmsuZGVmZXJyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcXVldWVBY3Rpb24oYWN0aW9uRGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudGFza01hbmFnZXIoYWN0aW9uRGF0YSk7XG4gICAgICAgICAgICBkLnJlc29sdmUocmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlcnM6IHRyYW5zZmVycyxcbiAgICAgICAgICAgICAgICBkZWZlcnJlZDogZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NXb3JrcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmVzZXRNZW1vcnkoKSB7XG4gICAgICAgIHRoaXMudTMyWzBdID0gdGhpcy5pbml0YWxQRnJlZTtcbiAgICB9XG5cbiAgICBhbGxvY0J1ZmYoYnVmZikge1xuICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5hbGxvYyhidWZmLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnNldEJ1ZmYocG9pbnRlciwgYnVmZik7XG4gICAgICAgIHJldHVybiBwb2ludGVyO1xuICAgIH1cblxuICAgIGdldEJ1ZmYocG9pbnRlciwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnU4LnNsaWNlKHBvaW50ZXIsIHBvaW50ZXIrIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgc2V0QnVmZihwb2ludGVyLCBidWZmZXIpIHtcbiAgICAgICAgdGhpcy51OC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcG9pbnRlcik7XG4gICAgfVxuXG4gICAgYWxsb2MobGVuZ3RoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnUzMlswXSAmIDMpIHRoaXMudTMyWzBdKys7ICAvLyBSZXR1cm4gYWx3YXlzIGFsaWduZWQgcG9pbnRlcnNcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy51MzJbMF07XG4gICAgICAgIHRoaXMudTMyWzBdICs9IGxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBhc3luYyB0ZXJtaW5hdGUoKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLndvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vyc1tpXS5wb3N0TWVzc2FnZShbe2NtZDogXCJURVJNSU5BVEVcIn1dKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyMDApO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IEJpZ0J1ZmZlciBmcm9tIFwiLi9iaWdidWZmZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRCYXRjaEFwcGx5S2V5KGN1cnZlLCBncm91cE5hbWUpIHtcbiAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IHRtID0gY3VydmUudG07XG5cbiAgICBjdXJ2ZVtncm91cE5hbWVdLmJhdGNoQXBwbHlLZXkgPSBhc3luYyBmdW5jdGlvbihidWZmLCBmaXJzdCwgaW5jLCBpblR5cGUsIG91dFR5cGUpIHtcbiAgICAgICAgaW5UeXBlID0gaW5UeXBlIHx8IFwiYWZmaW5lXCI7XG4gICAgICAgIG91dFR5cGUgPSBvdXRUeXBlIHx8IFwiYWZmaW5lXCI7XG4gICAgICAgIGxldCBmbk5hbWUsIGZuQWZmaW5lO1xuICAgICAgICBsZXQgc0dpbiwgc0dtaWQsIHNHb3V0O1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImphY29iaWFuXCIpIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjM7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fYmF0Y2hBcHBseUtleVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzR2luID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fYmF0Y2hBcHBseUtleU1peGVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzR21pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJqYWNvYmlhblwiKSB7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm5BZmZpbmUgPSBcImcxbV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICAgICAgc0dvdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiamFjb2JpYW5cIikge1xuICAgICAgICAgICAgICAgIHNHaW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgICAgICBmbk5hbWUgPSBcImcybV9iYXRjaEFwcGx5S2V5XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNHaW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbk5hbWUgPSBcImcybV9iYXRjaEFwcGx5S2V5TWl4ZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNHbWlkID0gRy5GLm44KjM7XG4gICAgICAgICAgICBpZiAob3V0VHlwZSA9PSBcImphY29iaWFuXCIpIHtcbiAgICAgICAgICAgICAgICBzR291dCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbkFmZmluZSA9IFwiZzJtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgICAgICBzR291dCA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZnJtX2JhdGNoQXBwbHlLZXlcIjtcbiAgICAgICAgICAgIHNHaW4gPSBHLm44O1xuICAgICAgICAgICAgc0dtaWQgPSBHLm44O1xuICAgICAgICAgICAgc0dvdXQgPSBHLm44O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cDogXCIgKyBncm91cE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHaW4pO1xuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IE1hdGguZmxvb3IoblBvaW50cy90bS5jb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgaW5jID0gRnIuZShpbmMpO1xuICAgICAgICBsZXQgdCA9IEZyLmUoZmlyc3QpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dG0uY29uY3VycmVuY3k7IGkrKykge1xuICAgICAgICAgICAgbGV0IG47XG4gICAgICAgICAgICBpZiAoaTwgdG0uY29uY3VycmVuY3ktMSkge1xuICAgICAgICAgICAgICAgIG4gPSBwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKnBvaW50c1BlckNodW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG49PTApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBcIkFMTE9DU0VUXCIsXG4gICAgICAgICAgICAgICAgdmFyOiAwLFxuICAgICAgICAgICAgICAgIGJ1ZmY6IGJ1ZmYuc2xpY2UoaSpwb2ludHNQZXJDaHVuaypzR2luLCBpKnBvaW50c1BlckNodW5rKnNHaW4gKyBuKnNHaW4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogdH0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMywgbGVuOiBuKk1hdGgubWF4KHNHbWlkLCBzR291dCl9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBcIkNBTExcIixcbiAgICAgICAgICAgICAgICBmbk5hbWU6IGZuTmFtZSxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IG59LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6M31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmbkFmZmluZSkge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNtZDogXCJDQUxMXCIsXG4gICAgICAgICAgICAgICAgICAgIGZuTmFtZTogZm5BZmZpbmUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBufSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDMsIGxlbjogbipzR291dH0pO1xuXG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2godG0ucXVldWVBY3Rpb24odGFzaykpO1xuICAgICAgICAgICAgdCA9IEZyLm11bCh0LCBGci5leHAoaW5jLCBuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBsZXQgb3V0QnVmZjtcbiAgICAgICAgaWYgKGJ1ZmYgaW5zdGFuY2VvZiBCaWdCdWZmZXIpIHtcbiAgICAgICAgICAgIG91dEJ1ZmYgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0dvdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0QnVmZiA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0dvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3V0QnVmZi5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHAgKz0gcmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0QnVmZjtcbiAgICB9O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFBhaXJpbmcoY3VydmUpIHtcbiAgICBjb25zdCB0bSA9IGN1cnZlLnRtO1xuICAgIGN1cnZlLnBhaXJpbmcgPSBmdW5jdGlvbiBwYWlyaW5nKGEsIGIpIHtcblxuICAgICAgICB0bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwQSA9IHRtLmFsbG9jQnVmZihjdXJ2ZS5HMS50b0phY29iaWFuKGEpKTtcbiAgICAgICAgY29uc3QgcEIgPSB0bS5hbGxvY0J1ZmYoY3VydmUuRzIudG9KYWNvYmlhbihiKSk7XG4gICAgICAgIGNvbnN0IHBSZXMgPSB0bS5hbGxvYyhjdXJ2ZS5HdC5uOCk7XG4gICAgICAgIHRtLmluc3RhbmNlLmV4cG9ydHNbY3VydmUubmFtZSArIFwiX3BhaXJpbmdcIl0ocEEsIHBCLCBwUmVzKTtcblxuICAgICAgICBjb25zdCByZXMgPSB0bS5nZXRCdWZmKHBSZXMsIGN1cnZlLkd0Lm44KTtcblxuICAgICAgICB0bS5lbmRTeW5jT3AoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgY3VydmUucGFpcmluZ0VxID0gYXN5bmMgZnVuY3Rpb24gcGFpcmluZ0VxKCkge1xuICAgICAgICBsZXQgIGJ1ZmZDdDtcbiAgICAgICAgbGV0IG5FcXM7XG4gICAgICAgIGlmICgoYXJndW1lbnRzLmxlbmd0aCAlIDIpID09IDEpIHtcbiAgICAgICAgICAgIGJ1ZmZDdCA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1xuICAgICAgICAgICAgbkVxcyA9IChhcmd1bWVudHMubGVuZ3RoIC0xKSAvMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZDdCA9IGN1cnZlLkd0Lm9uZTtcbiAgICAgICAgICAgIG5FcXMgPSBhcmd1bWVudHMubGVuZ3RoIC8yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkVxczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgZzFCdWZmID0gY3VydmUuRzEudG9KYWNvYmlhbihhcmd1bWVudHNbaSoyXSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGcxQnVmZn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAxLCBsZW46IGN1cnZlLnByZVBTaXplfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGcyQnVmZiA9IGN1cnZlLkcyLnRvSmFjb2JpYW4oYXJndW1lbnRzW2kqMiArMV0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBnMkJ1ZmZ9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMywgbGVuOiBjdXJ2ZS5wcmVRU2l6ZX0pO1xuXG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDQsIGxlbjogY3VydmUuR3Qubjh9KTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGN1cnZlLm5hbWUgKyBcIl9wcmVwYXJlRzFcIiwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX1cbiAgICAgICAgICAgIF19KTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGN1cnZlLm5hbWUgKyBcIl9wcmVwYXJlRzJcIiwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhcjogM31cbiAgICAgICAgICAgIF19KTtcblxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGN1cnZlLm5hbWUgKyBcIl9taWxsZXJMb29wXCIsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDN9LFxuICAgICAgICAgICAgICAgIHt2YXI6IDR9XG4gICAgICAgICAgICBdfSk7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogNCwgbGVuOiBjdXJ2ZS5HdC5uOH0pO1xuXG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgdG0ucXVldWVBY3Rpb24odGFzaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIHRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBSZXMgPSB0bS5hbGxvYyhjdXJ2ZS5HdC5uOCk7XG4gICAgICAgIHRtLmluc3RhbmNlLmV4cG9ydHMuZnRtX29uZShwUmVzKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwTVIgPSB0bS5hbGxvY0J1ZmYocmVzdWx0W2ldWzBdKTtcbiAgICAgICAgICAgIHRtLmluc3RhbmNlLmV4cG9ydHMuZnRtX211bChwUmVzLCBwTVIsIHBSZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRtLmluc3RhbmNlLmV4cG9ydHNbY3VydmUubmFtZSArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIl0ocFJlcywgcFJlcyk7XG5cbiAgICAgICAgY29uc3QgcEN0ID0gdG0uYWxsb2NCdWZmKGJ1ZmZDdCk7XG5cbiAgICAgICAgY29uc3QgciA9ICEhdG0uaW5zdGFuY2UuZXhwb3J0cy5mdG1fZXEocFJlcywgcEN0KTtcblxuICAgICAgICB0bS5lbmRTeW5jT3AoKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgY3VydmUucHJlcGFyZUcxID0gZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnRtLnN0YXJ0U3luY09wKCk7XG4gICAgICAgIGNvbnN0IHBQID0gdGhpcy50bS5hbGxvY0J1ZmYocCk7XG4gICAgICAgIGNvbnN0IHBQcmVwUCA9IHRoaXMudG0uYWxsb2ModGhpcy5wcmVQU2l6ZSk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9wcmVwYXJlRzFcIl0ocFAsIHBQcmVwUCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZihwUHJlcFAsIHRoaXMucHJlUFNpemUpO1xuICAgICAgICB0aGlzLnRtLmVuZFN5bmNPcCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG5cbiAgICBjdXJ2ZS5wcmVwYXJlRzIgPSBmdW5jdGlvbihxKSB7XG4gICAgICAgIHRoaXMudG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcFEgPSB0aGlzLnRtLmFsbG9jQnVmZihxKTtcbiAgICAgICAgY29uc3QgcFByZXBRID0gdGhpcy50bS5hbGxvYyh0aGlzLnByZVFTaXplKTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMubmFtZSArIFwiX3ByZXBhcmVHMlwiXShwUSwgcFByZXBRKTtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50bS5nZXRCdWZmKHBQcmVwUSwgdGhpcy5wcmVRU2l6ZSk7XG4gICAgICAgIHRoaXMudG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIGN1cnZlLm1pbGxlckxvb3AgPSBmdW5jdGlvbihwcmVQLCBwcmVRKSB7XG4gICAgICAgIHRoaXMudG0uc3RhcnRTeW5jT3AoKTtcbiAgICAgICAgY29uc3QgcFByZVAgPSB0aGlzLnRtLmFsbG9jQnVmZihwcmVQKTtcbiAgICAgICAgY29uc3QgcFByZVEgPSB0aGlzLnRtLmFsbG9jQnVmZihwcmVRKTtcbiAgICAgICAgY29uc3QgcFJlcyA9IHRoaXMudG0uYWxsb2ModGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uaW5zdGFuY2UuZXhwb3J0c1t0aGlzLm5hbWUgKyBcIl9taWxsZXJMb29wXCJdKHBQcmVQLCBwUHJlUSwgcFJlcyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudG0uZ2V0QnVmZihwUmVzLCB0aGlzLkd0Lm44KTtcbiAgICAgICAgdGhpcy50bS5lbmRTeW5jT3AoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgY3VydmUuZmluYWxFeHBvbmVudGlhdGlvbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgdGhpcy50bS5zdGFydFN5bmNPcCgpO1xuICAgICAgICBjb25zdCBwQSA9IHRoaXMudG0uYWxsb2NCdWZmKGEpO1xuICAgICAgICBjb25zdCBwUmVzID0gdGhpcy50bS5hbGxvYyh0aGlzLkd0Lm44KTtcbiAgICAgICAgdGhpcy50bS5pbnN0YW5jZS5leHBvcnRzW3RoaXMubmFtZSArIFwiX2ZpbmFsRXhwb25lbnRpYXRpb25cIl0ocEEsIHBSZXMpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnRtLmdldEJ1ZmYocFJlcywgdGhpcy5HdC5uOCk7XG4gICAgICAgIHRoaXMudG0uZW5kU3luY09wKCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxufVxuIiwiaW1wb3J0IHsgbG9nMiB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmNvbnN0IHBUU2l6ZXMgPSBbXG4gICAgMSAsICAxLCAgMSwgIDEsICAgIDIsICAzLCAgNCwgIDUsXG4gICAgNiAsICA3LCAgNywgIDgsICAgIDksIDEwLCAxMSwgMTIsXG4gICAgMTMsIDEzLCAxNCwgMTUsICAgMTYsIDE2LCAxNywgMTcsXG4gICAgMTcsIDE3LCAxNywgMTcsICAgMTcsIDE3LCAxNywgMTdcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTXVsdGlleHAoY3VydmUsIGdyb3VwTmFtZSkge1xuICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgIGNvbnN0IHRtID0gRy50bTtcbiAgICBhc3luYyBmdW5jdGlvbiBfbXVsdGlFeHBDaHVuayhidWZmQmFzZXMsIGJ1ZmZTY2FsYXJzLCBpblR5cGUsIGxvZ2dlciwgbG9nVGV4dCkge1xuICAgICAgICBpZiAoICEgKGJ1ZmZCYXNlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpICkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGAke2xvZ1RleHR9IF9tdWx0aUV4cENodW5rIGJ1ZmZCYXNlcyBpcyBub3QgVWludDhBcnJheWApO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2xvZ1RleHR9IF9tdWx0aUV4cENodW5rIGJ1ZmZCYXNlcyBpcyBub3QgVWludDhBcnJheWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggISAoYnVmZlNjYWxhcnMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSApIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihgJHtsb2dUZXh0fSBfbXVsdGlFeHBDaHVuayBidWZmU2NhbGFycyBpcyBub3QgVWludDhBcnJheWApO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2xvZ1RleHR9IF9tdWx0aUV4cENodW5rIGJ1ZmZTY2FsYXJzIGlzIG5vdCBVaW50OEFycmF5YCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5UeXBlID0gaW5UeXBlIHx8IFwiYWZmaW5lXCI7XG5cbiAgICAgICAgbGV0IHNHSW47XG4gICAgICAgIGxldCBmbk5hbWU7XG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBmbk5hbWUgPSBcImcxbV9tdWx0aWV4cEFmZmluZV9jaHVua1wiO1xuICAgICAgICAgICAgICAgIHNHSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fbXVsdGlleHBfY2h1bmtcIjtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fbXVsdGlleHBBZmZpbmVfY2h1bmtcIjtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX211bHRpZXhwX2NodW5rXCI7XG4gICAgICAgICAgICAgICAgc0dJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmQmFzZXMuYnl0ZUxlbmd0aCAvIHNHSW4pO1xuXG4gICAgICAgIGlmIChuUG9pbnRzID09IDApIHJldHVybiBHLnplcm87XG4gICAgICAgIGNvbnN0IHNTY2FsYXIgPSBNYXRoLmZsb29yKGJ1ZmZTY2FsYXJzLmJ5dGVMZW5ndGggLyBuUG9pbnRzKTtcbiAgICAgICAgaWYoIHNTY2FsYXIgKiBuUG9pbnRzICE9IGJ1ZmZTY2FsYXJzLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjYWxhciBzaXplIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYml0Q2h1bmtTaXplID0gcFRTaXplc1tsb2cyKG5Qb2ludHMpXTtcbiAgICAgICAgY29uc3QgbkNodW5rcyA9IE1hdGguZmxvb3IoKHNTY2FsYXIqOCAtIDEpIC8gYml0Q2h1bmtTaXplKSArMTtcblxuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ1ZmZCYXNlc30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGJ1ZmZTY2FsYXJzfSxcbiAgICAgICAgICAgICAgICB7Y21kOiBcIkFMTE9DXCIsIHZhcjogMiwgbGVuOiBHLkYubjgqM30sXG4gICAgICAgICAgICAgICAge2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5OYW1lLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBzU2NhbGFyfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogblBvaW50c30sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IGkqYml0Q2h1bmtTaXplfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhbDogTWF0aC5taW4oc1NjYWxhcio4IC0gaSpiaXRDaHVua1NpemUsIGJpdENodW5rU2l6ZSl9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAyfVxuICAgICAgICAgICAgICAgIF19LFxuICAgICAgICAgICAgICAgIHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAyLCBsZW46IEcuRi5uOCozfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICBHLnRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IHJlcyA9IEcuemVybztcbiAgICAgICAgZm9yIChsZXQgaT1yZXN1bHQubGVuZ3RoLTE7IGk+PTA7IGktLSkge1xuICAgICAgICAgICAgaWYgKCFHLmlzWmVybyhyZXMpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPGJpdENodW5rU2l6ZTsgaisrKSByZXMgPSBHLmRvdWJsZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0gRy5hZGQocmVzLCByZXN1bHRbaV1bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfbXVsdGlFeHAoYnVmZkJhc2VzLCBidWZmU2NhbGFycywgaW5UeXBlLCBsb2dnZXIsIGxvZ1RleHQpIHtcbiAgICAgICAgY29uc3QgTUFYX0NIVU5LX1NJWkUgPSAxIDw8IDIyO1xuICAgICAgICBjb25zdCBNSU5fQ0hVTktfU0laRSA9IDEgPDwgMTA7XG4gICAgICAgIGxldCBzR0luO1xuXG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNHSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzR0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNHSW4gPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmQmFzZXMuYnl0ZUxlbmd0aCAvIHNHSW4pO1xuICAgICAgICBjb25zdCBzU2NhbGFyID0gTWF0aC5mbG9vcihidWZmU2NhbGFycy5ieXRlTGVuZ3RoIC8gblBvaW50cyk7XG4gICAgICAgIGlmKCBzU2NhbGFyICogblBvaW50cyAhPSBidWZmU2NhbGFycy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY2FsYXIgc2l6ZSBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpdENodW5rU2l6ZSA9IHBUU2l6ZXNbbG9nMihuUG9pbnRzKV07XG4gICAgICAgIGNvbnN0IG5DaHVua3MgPSBNYXRoLmZsb29yKChzU2NhbGFyKjggLSAxKSAvIGJpdENodW5rU2l6ZSkgKzE7XG5cbiAgICAgICAgbGV0IGNodW5rU2l6ZTtcbiAgICAgICAgY2h1bmtTaXplID0gTWF0aC5mbG9vcihuUG9pbnRzIC8gKHRtLmNvbmN1cnJlbmN5IC9uQ2h1bmtzKSk7XG4gICAgICAgIGlmIChjaHVua1NpemU+TUFYX0NIVU5LX1NJWkUpIGNodW5rU2l6ZSA9IE1BWF9DSFVOS19TSVpFO1xuICAgICAgICBpZiAoY2h1bmtTaXplPE1JTl9DSFVOS19TSVpFKSBjaHVua1NpemUgPSBNSU5fQ0hVTktfU0laRTtcblxuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBNdWx0aWV4cCBzdGFydDogJHtsb2dUZXh0fTogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuPSBNYXRoLm1pbihuUG9pbnRzIC0gaSwgY2h1bmtTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZCYXNlc0NodW5rID0gYnVmZkJhc2VzLnNsaWNlKGkqc0dJbiwgKGkrbikqc0dJbik7XG4gICAgICAgICAgICBjb25zdCBidWZmU2NhbGFyc0NodW5rID0gYnVmZlNjYWxhcnMuc2xpY2UoaSpzU2NhbGFyLCAoaStuKSpzU2NhbGFyKTtcbiAgICAgICAgICAgIG9wUHJvbWlzZXMucHVzaChfbXVsdGlFeHBDaHVuayhidWZmQmFzZXNDaHVuaywgYnVmZlNjYWxhcnNDaHVuaywgaW5UeXBlLCBsb2dnZXIsIGxvZ1RleHQpLnRoZW4oIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBNdWx0aWV4cCBlbmQ6ICR7bG9nVGV4dH06ICR7aX0vJHtuUG9pbnRzfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IHJlcyA9IEcuemVybztcbiAgICAgICAgZm9yIChsZXQgaT1yZXN1bHQubGVuZ3RoLTE7IGk+PTA7IGktLSkge1xuICAgICAgICAgICAgcmVzID0gRy5hZGQocmVzLCByZXN1bHRbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBHLm11bHRpRXhwID0gYXN5bmMgZnVuY3Rpb24gbXVsdGlFeHBBZmZpbmUoYnVmZkJhc2VzLCBidWZmU2NhbGFycywgbG9nZ2VyLCBsb2dUZXh0KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBfbXVsdGlFeHAoYnVmZkJhc2VzLCBidWZmU2NhbGFycywgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ1RleHQpO1xuICAgIH07XG4gICAgRy5tdWx0aUV4cEFmZmluZSA9IGFzeW5jIGZ1bmN0aW9uIG11bHRpRXhwQWZmaW5lKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIGxvZ2dlciwgbG9nVGV4dCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgX211bHRpRXhwKGJ1ZmZCYXNlcywgYnVmZlNjYWxhcnMsIFwiYWZmaW5lXCIsIGxvZ2dlciwgbG9nVGV4dCk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7bG9nMiwgYnVmZlJldmVyc2VCaXRzLCBhcnJheTJidWZmZXIsIGJ1ZmZlcjJhcnJheX0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBCaWdCdWZmZXIgZnJvbSBcIi4vYmlnYnVmZmVyLmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGRlQoY3VydmUsIGdyb3VwTmFtZSkge1xuICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgY29uc3QgdG0gPSBHLnRtO1xuICAgIGFzeW5jIGZ1bmN0aW9uIF9mZnQoYnVmZiwgaW52ZXJzZSwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuXG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBvdXRUeXBlID0gb3V0VHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBjb25zdCBNQVhfQklUU19USFJFQUQgPSAxNDtcblxuICAgICAgICBsZXQgc0luLCBzTWlkLCBzT3V0LCBmbkluMk1pZCwgZm5NaWQyT3V0LCBmbkZGVE1peCwgZm5GRlRKb2luLCBmbkZGVEZpbmFsO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICAgICAgZm5JbjJNaWQgPSBcImcxbV9iYXRjaFRvSmFjb2JpYW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzTWlkID0gRy5GLm44KjM7XG4gICAgICAgICAgICBpZiAoaW52ZXJzZSkge1xuICAgICAgICAgICAgICAgIGZuRkZURmluYWwgPSBcImcxbV9mZnRGaW5hbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm5GRlRKb2luID0gXCJnMW1fZmZ0Sm9pblwiO1xuICAgICAgICAgICAgZm5GRlRNaXggPSBcImcxbV9mZnRNaXhcIjtcblxuICAgICAgICAgICAgaWYgKG91dFR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgICAgICBmbk1pZDJPdXQgPSBcImcxbV9iYXRjaFRvQWZmaW5lXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuSW4yTWlkID0gXCJnMm1fYmF0Y2hUb0phY29iaWFuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgICAgICBmbkZGVEZpbmFsID0gXCJnMm1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuRkZUSm9pbiA9IFwiZzJtX2ZmdEpvaW5cIjtcbiAgICAgICAgICAgIGZuRkZUTWl4ID0gXCJnMm1fZmZ0TWl4XCI7XG4gICAgICAgICAgICBpZiAob3V0VHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc091dCA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuTWlkMk91dCA9IFwiZzJtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc091dCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIHNJbiA9IEcubjg7XG4gICAgICAgICAgICBzTWlkID0gRy5uODtcbiAgICAgICAgICAgIHNPdXQgPSBHLm44O1xuICAgICAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgICAgICBmbkZGVEZpbmFsID0gXCJmcm1fZmZ0RmluYWxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuRkZUTWl4ID0gXCJmcm1fZmZ0TWl4XCI7XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImZybV9mZnRKb2luXCI7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXR1cm5BcnJheSA9IGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmKSkge1xuICAgICAgICAgICAgYnVmZiA9IGFycmF5MmJ1ZmZlcihidWZmLCBzSW4pO1xuICAgICAgICAgICAgcmV0dXJuQXJyYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZiA9IGJ1ZmYuc2xpY2UoMCwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmLmJ5dGVMZW5ndGggLyBzSW47XG4gICAgICAgIGNvbnN0IGJpdHMgPSBsb2cyKG5Qb2ludHMpO1xuXG4gICAgICAgIGlmICAoKDEgPDwgYml0cykgIT0gblBvaW50cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmZ0IG11c3QgYmUgbXVsdGlwbGUgb2YgMlwiICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0cyA9PSBGci5zICsxKSB7XG4gICAgICAgICAgICBsZXQgYnVmZk91dDtcblxuICAgICAgICAgICAgaWYgKGludmVyc2UpIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0ID0gIGF3YWl0IF9mZnRFeHRJbnYoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZPdXQgPSAgYXdhaXQgX2ZmdEV4dChidWZmLCBpblR5cGUsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJldHVybkFycmF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjJhcnJheShidWZmT3V0LCBzT3V0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZPdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW52O1xuICAgICAgICBpZiAoaW52ZXJzZSkge1xuICAgICAgICAgICAgaW52ID0gRnIuaW52KEZyLmUoblBvaW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJ1ZmZPdXQ7XG5cbiAgICAgICAgYnVmZlJldmVyc2VCaXRzKGJ1ZmYsIHNJbik7XG5cbiAgICAgICAgbGV0IGNodW5rcztcbiAgICAgICAgbGV0IHBvaW50c0luQ2h1bmsgPSBNYXRoLm1pbigxIDw8IE1BWF9CSVRTX1RIUkVBRCwgblBvaW50cyk7XG4gICAgICAgIGxldCBuQ2h1bmtzID0gblBvaW50cyAvIHBvaW50c0luQ2h1bms7XG5cbiAgICAgICAgd2hpbGUgKChuQ2h1bmtzIDwgdG0uY29uY3VycmVuY3kpJiYocG9pbnRzSW5DaHVuaz49MTYpKSB7XG4gICAgICAgICAgICBuQ2h1bmtzICo9IDI7XG4gICAgICAgICAgICBwb2ludHNJbkNodW5rIC89IDI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsMkNodW5rID0gbG9nMihwb2ludHNJbkNodW5rKTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaTwgbkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYCR7bG9nZ2VyVHh0fTogZmZ0ICR7Yml0c30gbWl4IHN0YXJ0OiAke2l9LyR7bkNodW5rc31gKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMCwgbGVuOiBzTWlkKnBvaW50c0luQ2h1bmt9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZDaHVuayA9IGJ1ZmYuc2xpY2UoIChwb2ludHNJbkNodW5rICogaSkqc0luLCAocG9pbnRzSW5DaHVuayAqIChpKzEpKSpzSW4pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiU0VUXCIsIHZhcjogMCwgYnVmZjogYnVmZkNodW5rfSk7XG4gICAgICAgICAgICBpZiAoZm5JbjJNaWQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTpmbkluMk1pZCwgcGFyYW1zOiBbe3ZhcjowfSwge3ZhbDogcG9pbnRzSW5DaHVua30sIHt2YXI6IDB9XX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaj0xOyBqPD1sMkNodW5rO2orKykge1xuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOmZuRkZUTWl4LCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBwb2ludHNJbkNodW5rfSwge3ZhbDogan1dfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsMkNodW5rPT1iaXRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZuRkZURmluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBpbnZ9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZURmluYWwsICBwYXJhbXM6W1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNJbkNodW5rfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmbk1pZDJPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5NaWQyT3V0LCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBwb2ludHNJbkNodW5rfSwge3ZhcjogMH1dfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNJbkNodW5rKnNPdXR9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDowLCB2YXI6IDAsIGxlbjogc01pZCpwb2ludHNJbkNodW5rfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spLnRoZW4oIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdCAke2JpdHN9IG1peCBlbmQ6ICR7aX0vJHtuQ2h1bmtzfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmtzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaTwgbkNodW5rczsgaSsrKSBjaHVua3NbaV0gPSBjaHVua3NbaV1bMF07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGwyQ2h1bmsrMTsgICBpPD1iaXRzOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgJHtsb2dnZXJUeHR9OiBmZnQgICR7Yml0c30gIGpvaW46ICR7aX0vJHtiaXRzfWApO1xuICAgICAgICAgICAgY29uc3Qgbkdyb3VwcyA9IDEgPDwgKGJpdHMgLSBpKTtcbiAgICAgICAgICAgIGNvbnN0IG5DaHVua3NQZXJHcm91cCA9IG5DaHVua3MgLyBuR3JvdXBzO1xuICAgICAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPG5Hcm91cHM7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGs9MDsgayA8bkNodW5rc1Blckdyb3VwLzI7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IEZyLmV4cCggRnIud1tpXSwgaypwb2ludHNJbkNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5jID0gRnIud1tpXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzEgPSBqKm5DaHVua3NQZXJHcm91cCArIGs7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8yID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrICsgbkNodW5rc1Blckdyb3VwLzI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGNodW5rc1tvMV19KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAxLCBidWZmOiBjaHVua3NbbzJdfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMiwgYnVmZjogZmlyc3R9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAzLCBidWZmOiBpbmN9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuRkZUSm9pbiwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogcG9pbnRzSW5DaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGk9PWJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbkZGVEZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiA0LCBidWZmOiBpbnZ9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5GRlRGaW5hbCwgIHBhcmFtczpbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNJbkNodW5rfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogNH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkNBTExcIiwgZm5OYW1lOiBmbkZGVEZpbmFsLCAgcGFyYW1zOltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IHBvaW50c0luQ2h1bmt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiA0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5NaWQyT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5NaWQyT3V0LCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBwb2ludHNJbkNodW5rfSwge3ZhcjogMH1dfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5NaWQyT3V0LCBwYXJhbXM6IFt7dmFyOjF9LCB7dmFsOiBwb2ludHNJbkNodW5rfSwge3ZhcjogMX1dfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzSW5DaHVuaypzT3V0fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDEsIGxlbjogcG9pbnRzSW5DaHVuaypzT3V0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogcG9pbnRzSW5DaHVuaypzTWlkfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDEsIGxlbjogcG9pbnRzSW5DaHVuaypzTWlkfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKHRtLnF1ZXVlQWN0aW9uKHRhc2spLnRoZW4oIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYCR7bG9nZ2VyVHh0fTogZmZ0ICR7Yml0c30gam9pbiAgJHtpfS8ke2JpdHN9ICAke2orMX0vJHtuR3JvdXBzfSAke2t9LyR7bkNodW5rc1Blckdyb3VwLzJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkdyb3VwczsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrIDxuQ2h1bmtzUGVyR3JvdXAvMjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8xID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMiA9IGoqbkNodW5rc1Blckdyb3VwICsgayArIG5DaHVua3NQZXJHcm91cC8yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNDaHVuayA9IHJlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzFdID0gcmVzQ2h1bmtbMF07XG4gICAgICAgICAgICAgICAgICAgIGNodW5rc1tvMl0gPSByZXNDaHVua1sxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnVmZiBpbnN0YW5jZW9mIEJpZ0J1ZmZlcikge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzT3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheShuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbMF0uc2xpY2UoKHBvaW50c0luQ2h1bmstMSkqc091dCkpO1xuICAgICAgICAgICAgbGV0IHA9IHNPdXQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpPW5DaHVua3MtMTsgaT4wOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBidWZmT3V0LnNldChjaHVua3NbaV0sIHApO1xuICAgICAgICAgICAgICAgIHAgKz0gcG9pbnRzSW5DaHVuaypzT3V0O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjaHVua3NbaV07ICAvLyBMaWJlcmF0ZSBtZW1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZPdXQuc2V0KGNodW5rc1swXS5zbGljZSgwLCAocG9pbnRzSW5DaHVuay0xKSpzT3V0KSwgcCk7XG4gICAgICAgICAgICBkZWxldGUgY2h1bmtzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DaHVua3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1ZmZPdXQuc2V0KGNodW5rc1tpXSwgcG9pbnRzSW5DaHVuaypzT3V0KmkpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjaHVua3NbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXIyYXJyYXkoYnVmZk91dCwgc091dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZk91dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIF9mZnRFeHQoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICBsZXQgYjEsIGIyO1xuICAgICAgICBiMSA9IGJ1ZmYuc2xpY2UoIDAgLCBidWZmLmJ5dGVMZW5ndGgvMik7XG4gICAgICAgIGIyID0gYnVmZi5zbGljZSggYnVmZi5ieXRlTGVuZ3RoLzIsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBbYjEsIGIyXSA9IGF3YWl0IF9mZnRKb2luRXh0KGIxLCBiMiwgXCJmZnRKb2luRXh0XCIsIEZyLm9uZSwgRnIuc2hpZnQsIGluVHlwZSwgXCJqYWNvYmlhblwiLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaCggX2ZmdChiMSwgZmFsc2UsIFwiamFjb2JpYW5cIiwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaCggX2ZmdChiMiwgZmFsc2UsIFwiamFjb2JpYW5cIiwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpKTtcblxuICAgICAgICBjb25zdCByZXMxID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGxldCBidWZmT3V0O1xuICAgICAgICBpZiAocmVzMVswXS5ieXRlTGVuZ3RoID4gKDE8PDI4KSkge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBCaWdCdWZmZXIocmVzMVswXS5ieXRlTGVuZ3RoKjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBVaW50OEFycmF5KHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPdXQuc2V0KHJlczFbMF0pO1xuICAgICAgICBidWZmT3V0LnNldChyZXMxWzFdLCByZXMxWzBdLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIF9mZnRFeHRJbnYoYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICBsZXQgYjEsIGIyO1xuICAgICAgICBiMSA9IGJ1ZmYuc2xpY2UoIDAgLCBidWZmLmJ5dGVMZW5ndGgvMik7XG4gICAgICAgIGIyID0gYnVmZi5zbGljZSggYnVmZi5ieXRlTGVuZ3RoLzIsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBwcm9taXNlcy5wdXNoKCBfZmZ0KGIxLCB0cnVlLCBpblR5cGUsIFwiamFjb2JpYW5cIiwgbG9nZ2VyLCBsb2dnZXJUeHQpKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaCggX2ZmdChiMiwgdHJ1ZSwgaW5UeXBlLCBcImphY29iaWFuXCIsIGxvZ2dlciwgbG9nZ2VyVHh0KSk7XG5cbiAgICAgICAgW2IxLCBiMl0gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgcmVzMSA9IGF3YWl0IF9mZnRKb2luRXh0KGIxLCBiMiwgXCJmZnRKb2luRXh0SW52XCIsIEZyLm9uZSwgRnIuc2hpZnRJbnYsIFwiamFjb2JpYW5cIiwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpO1xuXG4gICAgICAgIGxldCBidWZmT3V0O1xuICAgICAgICBpZiAocmVzMVswXS5ieXRlTGVuZ3RoID4gKDE8PDI4KSkge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBCaWdCdWZmZXIocmVzMVswXS5ieXRlTGVuZ3RoKjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBVaW50OEFycmF5KHJlczFbMF0uYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZPdXQuc2V0KHJlczFbMF0pO1xuICAgICAgICBidWZmT3V0LnNldChyZXMxWzFdLCByZXMxWzBdLmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBidWZmT3V0O1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gX2ZmdEpvaW5FeHQoYnVmZjEsIGJ1ZmYyLCBmbiwgZmlyc3QsIGluYywgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDE8PDE2O1xuICAgICAgICBjb25zdCBNSU5fQ0hVTktfU0laRSA9IDE8PDQ7XG5cbiAgICAgICAgbGV0IGZuTmFtZTtcbiAgICAgICAgbGV0IGZuSW4yTWlkLCBmbk1pZDJPdXQ7XG4gICAgICAgIGxldCBzT3V0LCBzSW4sIHNNaWQ7XG5cbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuSW4yTWlkID0gXCJnMW1fYmF0Y2hUb0phY29iaWFuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc01pZCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fXCIrZm47XG4gICAgICAgICAgICBpZiAob3V0VHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgZm5NaWQyT3V0ID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc091dCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGlmIChpblR5cGUgPT0gXCJhZmZpbmVcIikge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCoyO1xuICAgICAgICAgICAgICAgIGZuSW4yTWlkID0gXCJnMm1fYmF0Y2hUb0phY29iaWFuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fXCIrZm47XG4gICAgICAgICAgICBzTWlkID0gRy5GLm44KjM7XG4gICAgICAgICAgICBpZiAob3V0VHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgZm5NaWQyT3V0ID0gXCJnMm1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgICAgIHNPdXQgPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc091dCA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIHNJbiA9IEZyLm44O1xuICAgICAgICAgICAgc091dCA9IEZyLm44O1xuICAgICAgICAgICAgc01pZCA9IEZyLm44O1xuICAgICAgICAgICAgZm5OYW1lID0gXCJmcm1fXCIgKyBmbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnVmZjEuYnl0ZUxlbmd0aCAhPSBidWZmMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJ1ZmZlciBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBNYXRoLmZsb29yKGJ1ZmYxLmJ5dGVMZW5ndGggLyBzSW4pO1xuICAgICAgICBpZiAoblBvaW50cyAhPSAxIDw8IGxvZzIoblBvaW50cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjaHVua1NpemUgPSBNYXRoLmZsb29yKG5Qb2ludHMgL3RtLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgaWYgKGNodW5rU2l6ZSA8IE1JTl9DSFVOS19TSVpFKSBjaHVua1NpemUgPSBNSU5fQ0hVTktfU0laRTtcbiAgICAgICAgaWYgKGNodW5rU2l6ZSA+IE1BWF9DSFVOS19TSVpFKSBjaHVua1NpemUgPSBNQVhfQ0hVTktfU0laRTtcblxuICAgICAgICBjb25zdCBvcFByb21pc2VzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYCR7bG9nZ2VyVHh0fTogZmZ0Sm9pbkV4dCBTdGFydDogJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuPSBNYXRoLm1pbihuUG9pbnRzIC0gaSwgY2h1bmtTaXplKTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RDaHVuayA9IEZyLm11bChmaXJzdCwgRnIuZXhwKCBpbmMsIGkpKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgYjEgPSBidWZmMS5zbGljZShpKnNJbiwgKGkrbikqc0luKTtcbiAgICAgICAgICAgIGNvbnN0IGIyID0gYnVmZjIuc2xpY2UoaSpzSW4sIChpK24pKnNJbik7XG5cbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMCwgbGVuOiBzTWlkKm59KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIlNFVFwiLCB2YXI6IDAsIGJ1ZmY6IGIxfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1wiLCB2YXI6IDEsIGxlbjogc01pZCpufSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJTRVRcIiwgdmFyOiAxLCBidWZmOiBiMn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBmaXJzdENodW5rfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDMsIGJ1ZmY6IGluY30pO1xuICAgICAgICAgICAgaWYgKGZuSW4yTWlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5JbjJNaWQsIHBhcmFtczogW3t2YXI6MH0sIHt2YWw6IG59LCB7dmFyOiAwfV19KTtcbiAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTpmbkluMk1pZCwgcGFyYW1zOiBbe3ZhcjoxfSwge3ZhbDogbn0sIHt2YXI6IDF9XX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhcjogM30sXG4gICAgICAgICAgICAgICAge3ZhbDogRnIuc30sXG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICBpZiAoZm5NaWQyT3V0KSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5NaWQyT3V0LCBwYXJhbXM6IFt7dmFyOjB9LCB7dmFsOiBufSwge3ZhcjogMH1dfSk7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6Zm5NaWQyT3V0LCBwYXJhbXM6IFt7dmFyOjF9LCB7dmFsOiBufSwge3ZhcjogMX1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogbipzT3V0fSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAxLCB2YXI6IDEsIGxlbjogbipzT3V0fSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgdG0ucXVldWVBY3Rpb24odGFzaykudGhlbiggKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGAke2xvZ2dlclR4dH06IGZmdEpvaW5FeHQgRW5kOiAke2l9LyR7blBvaW50c31gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQxO1xuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQyO1xuICAgICAgICBpZiAoblBvaW50cyAqIHNPdXQgPiAxPDwyOCkge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNPdXQpO1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQyID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNPdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzT3V0KTtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MiA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc091dCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcCA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxLnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQyLnNldChyZXN1bHRbaV1bMV0sIHApO1xuICAgICAgICAgICAgcCs9cmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2Z1bGxCdWZmT3V0MSwgZnVsbEJ1ZmZPdXQyXTtcbiAgICB9XG5cblxuICAgIEcuZmZ0ID0gYXN5bmMgZnVuY3Rpb24oYnVmZiwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgX2ZmdChidWZmLCBmYWxzZSwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgfTtcblxuICAgIEcuaWZmdCA9IGFzeW5jIGZ1bmN0aW9uKGJ1ZmYsIGluVHlwZSwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IF9mZnQoYnVmZiwgdHJ1ZSwgaW5UeXBlLCBvdXRUeXBlLCBsb2dnZXIsIGxvZ2dlclR4dCk7XG4gICAgfTtcblxuICAgIEcubGFncmFuZ2VFdmFsdWF0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChidWZmLCBpblR5cGUsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KSB7XG4gICAgICAgIGluVHlwZSA9IGluVHlwZSB8fCBcImFmZmluZVwiO1xuICAgICAgICBvdXRUeXBlID0gb3V0VHlwZSB8fCBcImFmZmluZVwiO1xuXG4gICAgICAgIGxldCBzSW47XG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBpZiAoaW5UeXBlID09IFwiYWZmaW5lXCIpIHtcbiAgICAgICAgICAgICAgICBzSW4gPSBHLkYubjgqMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgaWYgKGluVHlwZSA9PSBcImFmZmluZVwiKSB7XG4gICAgICAgICAgICAgICAgc0luID0gRy5GLm44KjI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNJbiA9IEcuRi5uOCozO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkZyXCIpIHtcbiAgICAgICAgICAgIHNJbiA9IEZyLm44O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmLmJ5dGVMZW5ndGggL3NJbjtcbiAgICAgICAgY29uc3QgYml0cyA9IGxvZzIoblBvaW50cyk7XG5cbiAgICAgICAgaWYgKCgyICoqIGJpdHMpKnNJbiAhPSBidWZmLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcImxhZ3JhbmdlRXZhbHVhdGlvbnMgaWludmFsaWQgaW5wdXQgc2l6ZVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxhZ3JhbmdlRXZhbHVhdGlvbnMgaW52YWxpZCBJbnB1dCBzaXplXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpdHMgPD0gRnIucykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IEcuaWZmdChidWZmLCBpblR5cGUsIG91dFR5cGUsIGxvZ2dlciwgbG9nZ2VyVHh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXRzID4gRnIucysxKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGlucHV0IHRvbyBiaWdcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsYWdyYW5nZUV2YWx1YXRpb25zIGlucHV0IHRvbyBiaWdcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdDAgPSBidWZmLnNsaWNlKDAsIGJ1ZmYuYnl0ZUxlbmd0aC8yKTtcbiAgICAgICAgbGV0IHQxID0gYnVmZi5zbGljZShidWZmLmJ5dGVMZW5ndGgvMiwgYnVmZi5ieXRlTGVuZ3RoKTtcblxuXG4gICAgICAgIGNvbnN0IHNoaWZ0VG9TbWFsbE0gPSBGci5leHAoRnIuc2hpZnQsIG5Qb2ludHMvMik7XG4gICAgICAgIGNvbnN0IHNDb25zdCA9IEZyLmludiggRnIuc3ViKEZyLm9uZSwgc2hpZnRUb1NtYWxsTSkpO1xuXG4gICAgICAgIFt0MCwgdDFdID0gYXdhaXQgX2ZmdEpvaW5FeHQodDAsIHQxLCBcInByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb25cIiwgc0NvbnN0LCBGci5zaGlmdEludiwgaW5UeXBlLCBcImphY29iaWFuXCIsIGxvZ2dlciwgbG9nZ2VyVHh0ICsgXCIgcHJlcFwiKTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQodDAsIHRydWUsIFwiamFjb2JpYW5cIiwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQgKyBcIiB0MFwiKSk7XG4gICAgICAgIHByb21pc2VzLnB1c2goIF9mZnQodDEsIHRydWUsIFwiamFjb2JpYW5cIiwgb3V0VHlwZSwgbG9nZ2VyLCBsb2dnZXJUeHQgKyBcIiB0MVwiKSk7XG5cbiAgICAgICAgW3QwLCB0MV0gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGJ1ZmZPdXQ7XG4gICAgICAgIGlmICh0MC5ieXRlTGVuZ3RoID4gKDE8PDI4KSkge1xuICAgICAgICAgICAgYnVmZk91dCA9IG5ldyBCaWdCdWZmZXIodDAuYnl0ZUxlbmd0aCoyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZPdXQgPSBuZXcgVWludDhBcnJheSh0MC5ieXRlTGVuZ3RoKjIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZk91dC5zZXQodDApO1xuICAgICAgICBidWZmT3V0LnNldCh0MSwgdDAuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmZPdXQ7XG4gICAgfTtcblxuICAgIEcuZmZ0TWl4ID0gYXN5bmMgZnVuY3Rpb24gZmZ0TWl4KGJ1ZmYpIHtcbiAgICAgICAgY29uc3Qgc0cgPSBHLkYubjgqMztcbiAgICAgICAgbGV0IGZuTmFtZSwgZm5GRlRKb2luO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fZmZ0TWl4XCI7XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImcxbV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRzJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMm1fZmZ0TWl4XCI7XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImcybV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOYW1lID09IFwiRnJcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJmcm1fZmZ0TWl4XCI7XG4gICAgICAgICAgICBmbkZGVEpvaW4gPSBcImZybV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IE1hdGguZmxvb3IoYnVmZi5ieXRlTGVuZ3RoIC8gc0cpO1xuICAgICAgICBjb25zdCBwb3dlciA9IGxvZzIoblBvaW50cyk7XG5cbiAgICAgICAgbGV0IG5DaHVua3MgPSAxIDw8IGxvZzIodG0uY29uY3VycmVuY3kpO1xuXG4gICAgICAgIGlmIChuUG9pbnRzIDw9IG5DaHVua3MqMikgbkNodW5rcyA9IDE7XG5cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBuUG9pbnRzIC8gbkNodW5rcztcblxuICAgICAgICBjb25zdCBwb3dlckNodW5rID0gbG9nMihwb2ludHNQZXJDaHVuayk7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG4gICAgICAgICAgICBjb25zdCBiID0gYnVmZi5zbGljZSgoaSogcG9pbnRzUGVyQ2h1bmspKnNHLCAoKGkrMSkqIHBvaW50c1BlckNodW5rKSpzRyk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ9KTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MTsgajw9cG93ZXJDaHVuazsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNQZXJDaHVua30sXG4gICAgICAgICAgICAgICAgICAgIHt2YWw6IGp9XG4gICAgICAgICAgICAgICAgXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c1BlckNodW5rKnNHfSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgdG0ucXVldWVBY3Rpb24odGFzaylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykgY2h1bmtzW2ldID0gcmVzdWx0W2ldWzBdO1xuXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHBvd2VyQ2h1bmsrMTsgaTw9cG93ZXI7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbkdyb3VwcyA9IDEgPDwgKHBvd2VyIC0gaSk7XG4gICAgICAgICAgICBjb25zdCBuQ2h1bmtzUGVyR3JvdXAgPSBuQ2h1bmtzIC8gbkdyb3VwcztcbiAgICAgICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxuR3JvdXBzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrPTA7IGsgPG5DaHVua3NQZXJHcm91cC8yOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBGci5leHAoIEZyLndbaV0sIGsqcG9pbnRzUGVyQ2h1bmspO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmMgPSBGci53W2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMSA9IGoqbkNodW5rc1Blckdyb3VwICsgaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbzIgPSBqKm5DaHVua3NQZXJHcm91cCArIGsgKyBuQ2h1bmtzUGVyR3JvdXAvMjtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMCwgYnVmZjogY2h1bmtzW28xXX0pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGNodW5rc1tvMl19KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAyLCBidWZmOiBmaXJzdH0pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDMsIGJ1ZmY6IGluY30pO1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5GRlRKb2luLCAgcGFyYW1zOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNQZXJDaHVua30sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDN9XG4gICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMCwgdmFyOiAwLCBsZW46IHBvaW50c1BlckNodW5rKnNHfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDEsIHZhcjogMSwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgICAgICAgICBvcFByb21pc2VzLnB1c2godG0ucXVldWVBY3Rpb24odGFzaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8bkdyb3VwczsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrIDxuQ2h1bmtzUGVyR3JvdXAvMjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG8xID0gaipuQ2h1bmtzUGVyR3JvdXAgKyBrO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvMiA9IGoqbkNodW5rc1Blckdyb3VwICsgayArIG5DaHVua3NQZXJHcm91cC8yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNDaHVuayA9IHJlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjaHVua3NbbzFdID0gcmVzQ2h1bmtbMF07XG4gICAgICAgICAgICAgICAgICAgIGNodW5rc1tvMl0gPSByZXNDaHVua1sxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQ7XG4gICAgICAgIGlmIChidWZmIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzRyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0cpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQoY2h1bmtzW2ldLCBwKTtcbiAgICAgICAgICAgIHArPWNodW5rc1tpXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH07XG5cbiAgICBHLmZmdEpvaW4gPSBhc3luYyBmdW5jdGlvbiBmZnRKb2luKGJ1ZmYxLCBidWZmMiwgZmlyc3QsIGluYykge1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCozO1xuICAgICAgICBsZXQgZm5OYW1lO1xuICAgICAgICBpZiAoZ3JvdXBOYW1lID09IFwiRzFcIikge1xuICAgICAgICAgICAgZm5OYW1lID0gXCJnMW1fZmZ0Sm9pblwiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGZuTmFtZSA9IFwiZzJtX2ZmdEpvaW5cIjtcbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJGclwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImZybV9mZnRKb2luXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmYxLmJ5dGVMZW5ndGggIT0gYnVmZjIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBidWZmZXIgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmMS5ieXRlTGVuZ3RoIC8gc0cpO1xuICAgICAgICBpZiAoblBvaW50cyAhPSAxIDw8IGxvZzIoblBvaW50cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuQ2h1bmtzID0gMSA8PCBsb2cyKHRtLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgaWYgKG5Qb2ludHMgPD0gbkNodW5rcyoyKSBuQ2h1bmtzID0gMTtcblxuICAgICAgICBjb25zdCBwb2ludHNQZXJDaHVuayA9IG5Qb2ludHMgLyBuQ2h1bmtzO1xuXG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2h1bmsgPSBGci5tdWwoZmlyc3QsIEZyLmV4cChpbmMsIGkqcG9pbnRzUGVyQ2h1bmspKTtcbiAgICAgICAgICAgIGNvbnN0IGIxID0gYnVmZjEuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKChpKzEpKiBwb2ludHNQZXJDaHVuaykqc0cpO1xuICAgICAgICAgICAgY29uc3QgYjIgPSBidWZmMi5zbGljZSgoaSogcG9pbnRzUGVyQ2h1bmspKnNHLCAoKGkrMSkqIHBvaW50c1BlckNodW5rKSpzRyk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGIxfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGIyfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDIsIGJ1ZmY6IGZpcnN0Q2h1bmt9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMywgYnVmZjogaW5jfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5OYW1lLCBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICB7dmFyOiAwfSxcbiAgICAgICAgICAgICAgICB7dmFyOiAxfSxcbiAgICAgICAgICAgICAgICB7dmFsOiBwb2ludHNQZXJDaHVua30sXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhcjogM31cbiAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMCwgbGVuOiBwb2ludHNQZXJDaHVuaypzR30pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiR0VUXCIsIG91dDogMSwgdmFyOiAxLCBsZW46IHBvaW50c1BlckNodW5rKnNHfSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgdG0ucXVldWVBY3Rpb24odGFzaylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwob3BQcm9taXNlcyk7XG5cbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MTtcbiAgICAgICAgbGV0IGZ1bGxCdWZmT3V0MjtcbiAgICAgICAgaWYgKGJ1ZmYxIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dDEgPSBuZXcgQmlnQnVmZmVyKG5Qb2ludHMqc0cpO1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQyID0gbmV3IEJpZ0J1ZmZlcihuUG9pbnRzKnNHKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0MSA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0cpO1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQyID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzRyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcCA9MDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQxLnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICAgICAgZnVsbEJ1ZmZPdXQyLnNldChyZXN1bHRbaV1bMV0sIHApO1xuICAgICAgICAgICAgcCs9cmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2Z1bGxCdWZmT3V0MSwgZnVsbEJ1ZmZPdXQyXTtcbiAgICB9O1xuXG5cblxuICAgIEcuZmZ0RmluYWwgPSAgYXN5bmMgZnVuY3Rpb24gZmZ0RmluYWwoYnVmZiwgZmFjdG9yKSB7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjM7XG4gICAgICAgIGNvbnN0IHNHb3V0ID0gRy5GLm44KjI7XG4gICAgICAgIGxldCBmbk5hbWUsIGZuVG9BZmZpbmU7XG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImcxbV9mZnRGaW5hbFwiO1xuICAgICAgICAgICAgZm5Ub0FmZmluZSA9IFwiZzFtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgfSBlbHNlIGlmIChncm91cE5hbWUgPT0gXCJHMlwiKSB7XG4gICAgICAgICAgICBmbk5hbWUgPSBcImcybV9mZnRGaW5hbFwiO1xuICAgICAgICAgICAgZm5Ub0FmZmluZSA9IFwiZzJtX2JhdGNoVG9BZmZpbmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuUG9pbnRzID0gTWF0aC5mbG9vcihidWZmLmJ5dGVMZW5ndGggLyBzRyk7XG4gICAgICAgIGlmIChuUG9pbnRzICE9IDEgPDwgbG9nMihuUG9pbnRzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pbnRzUGVyQ2h1bmsgPSBNYXRoLmZsb29yKG5Qb2ludHMgLyB0bS5jb25jdXJyZW5jeSk7XG5cbiAgICAgICAgY29uc3Qgb3BQcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dG0uY29uY3VycmVuY3k7IGkrKykge1xuICAgICAgICAgICAgbGV0IG47XG4gICAgICAgICAgICBpZiAoaTwgdG0uY29uY3VycmVuY3ktMSkge1xuICAgICAgICAgICAgICAgIG4gPSBwb2ludHNQZXJDaHVuaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKnBvaW50c1BlckNodW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG49PTApIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYiA9IGJ1ZmYuc2xpY2UoKGkqIHBvaW50c1BlckNodW5rKSpzRywgKGkqcG9pbnRzUGVyQ2h1bmsrbikqc0cpO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBifSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGZhY3Rvcn0pO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuTmFtZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAge3ZhcjogMX0sXG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5Ub0FmZmluZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICAgICAge3ZhbDogbn0sXG4gICAgICAgICAgICAgICAge3ZhcjogMH0sXG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDAsIGxlbjogbipzR291dH0pO1xuICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRtLnF1ZXVlQWN0aW9uKHRhc2spXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICBsZXQgZnVsbEJ1ZmZPdXQ7XG4gICAgICAgIGlmIChidWZmIGluc3RhbmNlb2YgQmlnQnVmZmVyKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBCaWdCdWZmZXIoblBvaW50cypzR291dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dCA9IG5ldyBVaW50OEFycmF5KG5Qb2ludHMqc0dvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPTA7XG4gICAgICAgIGZvciAobGV0IGk9cmVzdWx0Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgICAgICAgIGZ1bGxCdWZmT3V0LnNldChyZXN1bHRbaV1bMF0sIHApO1xuICAgICAgICAgICAgcCs9cmVzdWx0W2ldWzBdLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVsbEJ1ZmZPdXQ7XG4gICAgfTtcbn1cbiIsImltcG9ydCBXYXNtRmllbGQxIGZyb20gXCIuL3dhc21fZmllbGQxLmpzXCI7XG5pbXBvcnQgV2FzbUZpZWxkMiBmcm9tIFwiLi93YXNtX2ZpZWxkMi5qc1wiO1xuaW1wb3J0IFdhc21GaWVsZDMgZnJvbSBcIi4vd2FzbV9maWVsZDMuanNcIjtcbmltcG9ydCBXYXNtQ3VydmUgZnJvbSBcIi4vd2FzbV9jdXJ2ZS5qc1wiO1xuaW1wb3J0IGJ1aWxkVGhyZWFkTWFuYWdlciBmcm9tIFwiLi90aHJlYWRtYW4uanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCBidWlsZEJhdGNoQXBwbHlLZXkgZnJvbSBcIi4vZW5naW5lX2FwcGx5a2V5LmpzXCI7XG5pbXBvcnQgYnVpbGRQYWlyaW5nIGZyb20gXCIuL2VuZ2luZV9wYWlyaW5nLmpzXCI7XG5pbXBvcnQgYnVpbGRNdWx0aUV4cCBmcm9tIFwiLi9lbmdpbmVfbXVsdGlleHAuanNcIjtcbmltcG9ydCBidWlsZEZGVCBmcm9tIFwiLi9lbmdpbmVfZmZ0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRW5naW5lKHBhcmFtcykge1xuXG4gICAgY29uc3QgdG0gPSBhd2FpdCBidWlsZFRocmVhZE1hbmFnZXIocGFyYW1zLndhc20sIHBhcmFtcy5zaW5nbGVUaHJlYWQpO1xuXG5cbiAgICBjb25zdCBjdXJ2ZSA9IHt9O1xuXG4gICAgY3VydmUucSA9IFNjYWxhci5lKHBhcmFtcy53YXNtLnEudG9TdHJpbmcoKSk7XG4gICAgY3VydmUuciA9IFNjYWxhci5lKHBhcmFtcy53YXNtLnIudG9TdHJpbmcoKSk7XG4gICAgY3VydmUubmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgIGN1cnZlLnRtID0gdG07XG4gICAgY3VydmUucHJlUFNpemUgPSBwYXJhbXMud2FzbS5wcmVQU2l6ZTtcbiAgICBjdXJ2ZS5wcmVRU2l6ZSA9IHBhcmFtcy53YXNtLnByZVFTaXplO1xuICAgIGN1cnZlLkZyID0gbmV3IFdhc21GaWVsZDEodG0sIFwiZnJtXCIsIHBhcmFtcy5uOHIsIHBhcmFtcy5yKTtcbiAgICBjdXJ2ZS5GMSA9IG5ldyBXYXNtRmllbGQxKHRtLCBcImYxbVwiLCBwYXJhbXMubjhxLCBwYXJhbXMucSk7XG4gICAgY3VydmUuRjIgPSBuZXcgV2FzbUZpZWxkMih0bSwgXCJmMm1cIiwgY3VydmUuRjEpO1xuICAgIGN1cnZlLkcxID0gbmV3IFdhc21DdXJ2ZSh0bSwgXCJnMW1cIiwgY3VydmUuRjEsIHBhcmFtcy53YXNtLnBHMWdlbiwgcGFyYW1zLndhc20ucEcxYiwgcGFyYW1zLmNvZmFjdG9yRzEpO1xuICAgIGN1cnZlLkcyID0gbmV3IFdhc21DdXJ2ZSh0bSwgXCJnMm1cIiwgY3VydmUuRjIsIHBhcmFtcy53YXNtLnBHMmdlbiwgcGFyYW1zLndhc20ucEcyYiwgcGFyYW1zLmNvZmFjdG9yRzIpO1xuICAgIGN1cnZlLkY2ID0gbmV3IFdhc21GaWVsZDModG0sIFwiZjZtXCIsIGN1cnZlLkYyKTtcbiAgICBjdXJ2ZS5GMTIgPSBuZXcgV2FzbUZpZWxkMih0bSwgXCJmdG1cIiwgY3VydmUuRjYpO1xuXG4gICAgY3VydmUuR3QgPSBjdXJ2ZS5GMTI7XG5cbiAgICBidWlsZEJhdGNoQXBwbHlLZXkoY3VydmUsIFwiRzFcIik7XG4gICAgYnVpbGRCYXRjaEFwcGx5S2V5KGN1cnZlLCBcIkcyXCIpO1xuICAgIGJ1aWxkQmF0Y2hBcHBseUtleShjdXJ2ZSwgXCJGclwiKTtcblxuICAgIGJ1aWxkTXVsdGlFeHAoY3VydmUsIFwiRzFcIik7XG4gICAgYnVpbGRNdWx0aUV4cChjdXJ2ZSwgXCJHMlwiKTtcblxuICAgIGJ1aWxkRkZUKGN1cnZlLCBcIkcxXCIpO1xuICAgIGJ1aWxkRkZUKGN1cnZlLCBcIkcyXCIpO1xuICAgIGJ1aWxkRkZUKGN1cnZlLCBcIkZyXCIpO1xuXG4gICAgYnVpbGRQYWlyaW5nKGN1cnZlKTtcblxuICAgIGN1cnZlLmFycmF5MmJ1ZmZlciA9IGZ1bmN0aW9uKGFyciwgc0cpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IG5ldyBVaW50OEFycmF5KHNHKmFyci5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KGFycltpXSwgaSpzRyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVmZjtcbiAgICB9O1xuXG4gICAgY3VydmUuYnVmZmVyMmFycmF5ID0gZnVuY3Rpb24oYnVmZiAsIHNHKSB7XG4gICAgICAgIGNvbnN0IG49IGJ1ZmYuYnl0ZUxlbmd0aCAvIHNHO1xuICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkobik7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuOyBpKyspIHtcbiAgICAgICAgICAgIGFycltpXSA9IGJ1ZmYuc2xpY2UoaSpzRywgaSpzRytzRyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG5cbiIsImltcG9ydCB7IGJ1aWxkQm4xMjggYXMgYnVpbGRCbjEyOHdhc20gfSBmcm9tIFwid2FzbWN1cnZlc1wiO1xuaW1wb3J0IGJ1aWxkRW5naW5lIGZyb20gXCIuL2VuZ2luZS5qc1wiO1xuaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHsgTW9kdWxlQnVpbGRlciB9IGZyb20gXCJ3YXNtYnVpbGRlclwiO1xuXG5nbG9iYWxUaGlzLmN1cnZlX2JuMTI4ID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gYnVpbGRCbjEyOChzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcblxuICAgIGNvbnN0IG1vZHVsZUJ1aWxkZXIgPSBuZXcgTW9kdWxlQnVpbGRlcigpO1xuICAgIG1vZHVsZUJ1aWxkZXIuc2V0TWVtb3J5KDI1KTtcbiAgICBidWlsZEJuMTI4d2FzbShtb2R1bGVCdWlsZGVyKTtcblxuICAgIGlmIChwbHVnaW5zKSBwbHVnaW5zKG1vZHVsZUJ1aWxkZXIpO1xuXG4gICAgY29uc3QgYm4xMjh3YXNtID0ge307XG5cbiAgICBibjEyOHdhc20uY29kZSA9IG1vZHVsZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICBibjEyOHdhc20ucHEgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZjFtLnBxO1xuICAgIGJuMTI4d2FzbS5wciA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5mcm0ucHE7XG4gICAgYm4xMjh3YXNtLnBHMWdlbiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzFnZW47XG4gICAgYm4xMjh3YXNtLnBHMXplcm8gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcxemVybztcbiAgICBibjEyOHdhc20ucEcxYiA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wRzFiO1xuICAgIGJuMTI4d2FzbS5wRzJnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyZ2VuO1xuICAgIGJuMTI4d2FzbS5wRzJ6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnBHMnplcm87XG4gICAgYm4xMjh3YXNtLnBHMmIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucEcyYjtcbiAgICBibjEyOHdhc20ucE9uZVQgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucE9uZVQ7XG4gICAgYm4xMjh3YXNtLnByZVBTaXplID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnByZVBTaXplO1xuICAgIGJuMTI4d2FzbS5wcmVRU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibjEyOC5wcmVRU2l6ZTtcbiAgICBibjEyOHdhc20ubjhxID0gMzI7XG4gICAgYm4xMjh3YXNtLm44ciA9IDMyO1xuICAgIGJuMTI4d2FzbS5xID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJuMTI4LnE7XG4gICAgYm4xMjh3YXNtLnIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYm4xMjgucjtcblxuICAgIGlmICgoIXNpbmdsZVRocmVhZCkgJiYgKGdsb2JhbFRoaXMuY3VydmVfYm4xMjgpKSByZXR1cm4gZ2xvYmFsVGhpcy5jdXJ2ZV9ibjEyODtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG5hbWU6IFwiYm4xMjhcIixcbiAgICAgICAgd2FzbTogYm4xMjh3YXNtLFxuICAgICAgICBxOiBTY2FsYXIuZShcIjIxODg4MjQyODcxODM5Mjc1MjIyMjQ2NDA1NzQ1MjU3Mjc1MDg4Njk2MzExMTU3Mjk3ODIzNjYyNjg5MDM3ODk0NjQ1MjI2MjA4NTgzXCIpLFxuICAgICAgICByOiBTY2FsYXIuZShcIjIxODg4MjQyODcxODM5Mjc1MjIyMjQ2NDA1NzQ1MjU3Mjc1MDg4NTQ4MzY0NDAwNDE2MDM0MzQzNjk4MjA0MTg2NTc1ODA4NDk1NjE3XCIpLFxuICAgICAgICBuOHE6IDMyLFxuICAgICAgICBuOHI6IDMyLFxuICAgICAgICBjb2ZhY3RvckcyOiBTY2FsYXIuZShcIjMwNjQ0ZTcyZTEzMWEwMjliODUwNDViNjgxODE1ODVlMDZjZWVjZGE1NzJhMjQ4OTM0NWYyMjk5YzBmOWZhOGRcIiwgMTYpLFxuICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCA/IHRydWUgOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGJ1aWxkRW5naW5lKHBhcmFtcyk7XG4gICAgY3VydmUudGVybWluYXRlID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5zaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgICAgIGdsb2JhbFRoaXMuY3VydmVfYm4xMjggPSBudWxsO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50bS50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXNpbmdsZVRocmVhZCkge1xuICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JuMTI4ID0gY3VydmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG4iLCJpbXBvcnQgeyBidWlsZEJsczEyMzgxIGFzIGJ1aWxkQmxzMTIzODF3YXNtIH0gZnJvbSBcIndhc21jdXJ2ZXNcIjtcbmltcG9ydCBidWlsZEVuZ2luZSBmcm9tIFwiLi9lbmdpbmUuanNcIjtcbmltcG9ydCAqIGFzIFNjYWxhciBmcm9tIFwiLi9zY2FsYXIuanNcIjtcbmltcG9ydCB7IE1vZHVsZUJ1aWxkZXIgfSBmcm9tIFwid2FzbWJ1aWxkZXJcIjtcblxuZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSA9IG51bGw7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKSB7XG5cbiAgICBjb25zdCBtb2R1bGVCdWlsZGVyID0gbmV3IE1vZHVsZUJ1aWxkZXIoKTtcbiAgICBtb2R1bGVCdWlsZGVyLnNldE1lbW9yeSgyNSk7XG4gICAgYnVpbGRCbHMxMjM4MXdhc20obW9kdWxlQnVpbGRlcik7XG5cbiAgICBpZiAocGx1Z2lucykgcGx1Z2lucyhtb2R1bGVCdWlsZGVyKTtcblxuICAgIGNvbnN0IGJsczEyMzgxd2FzbSA9IHt9O1xuXG4gICAgYmxzMTIzODF3YXNtLmNvZGUgPSBtb2R1bGVCdWlsZGVyLmJ1aWxkKCk7XG4gICAgYmxzMTIzODF3YXNtLnBxID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmYxbS5wcTtcbiAgICBibHMxMjM4MXdhc20ucHIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuZnJtLnBxO1xuICAgIGJsczEyMzgxd2FzbS5wRzFnZW4gPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxZ2VuO1xuICAgIGJsczEyMzgxd2FzbS5wRzF6ZXJvID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMXplcm87XG4gICAgYmxzMTIzODF3YXNtLnBHMWIgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucEcxYjtcbiAgICBibHMxMjM4MXdhc20ucEcyZ2VuID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMmdlbjtcbiAgICBibHMxMjM4MXdhc20ucEcyemVybyA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wRzJ6ZXJvO1xuICAgIGJsczEyMzgxd2FzbS5wRzJiID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBHMmI7XG4gICAgYmxzMTIzODF3YXNtLnBPbmVUID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnBPbmVUO1xuICAgIGJsczEyMzgxd2FzbS5wcmVQU2l6ZSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5wcmVQU2l6ZTtcbiAgICBibHMxMjM4MXdhc20ucHJlUVNpemUgPSBtb2R1bGVCdWlsZGVyLm1vZHVsZXMuYmxzMTIzODEucHJlUVNpemU7XG4gICAgYmxzMTIzODF3YXNtLm44cSA9IDQ4O1xuICAgIGJsczEyMzgxd2FzbS5uOHIgPSAzMjtcbiAgICBibHMxMjM4MXdhc20ucSA9IG1vZHVsZUJ1aWxkZXIubW9kdWxlcy5ibHMxMjM4MS5xO1xuICAgIGJsczEyMzgxd2FzbS5yID0gbW9kdWxlQnVpbGRlci5tb2R1bGVzLmJsczEyMzgxLnI7XG5cblxuICAgIGlmICgoIXNpbmdsZVRocmVhZCkgJiYgKGdsb2JhbFRoaXMuY3VydmVfYmxzMTIzODEpKSByZXR1cm4gZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG5hbWU6IFwiYmxzMTIzODFcIixcbiAgICAgICAgd2FzbTogYmxzMTIzODF3YXNtLFxuICAgICAgICBxOiBTY2FsYXIuZShcIjFhMDExMWVhMzk3ZmU2OWE0YjFiYTdiNjQzNGJhY2Q3NjQ3NzRiODRmMzg1MTJiZjY3MzBkMmEwZjZiMGY2MjQxZWFiZmZmZWIxNTNmZmZmYjlmZWZmZmZmZmZmYWFhYlwiLCAxNiksXG4gICAgICAgIHI6IFNjYWxhci5lKFwiNzNlZGE3NTMyOTlkN2Q0ODMzMzlkODA4MDlhMWQ4MDU1M2JkYTQwMmZmZmU1YmZlZmZmZmZmZmYwMDAwMDAwMVwiLCAxNiksXG4gICAgICAgIG44cTogNDgsXG4gICAgICAgIG44cjogMzIsXG4gICAgICAgIGNvZmFjdG9yRzE6IFNjYWxhci5lKFwiMHgzOTZjOGMwMDU1NTVlMTU2OGMwMGFhYWIwMDAwYWFhYlwiLCAxNiksXG4gICAgICAgIGNvZmFjdG9yRzI6IFNjYWxhci5lKFwiMHg1ZDU0M2E5NTQxNGU3ZjEwOTFkNTA3OTI4NzZhMjAyY2Q5MWRlNDU0NzA4NWFiYWE2OGEyMDViMmU1YTdkZGZhNjI4ZjFjYjRkOWU4MmVmMjE1MzdlMjkzYTY2OTFhZTE2MTZlYzZlNzg2ZjBjNzBjZjFjMzhlMzFjNzIzOGU1XCIsIDE2KSxcbiAgICAgICAgc2luZ2xlVGhyZWFkOiBzaW5nbGVUaHJlYWQgPyB0cnVlIDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBidWlsZEVuZ2luZShwYXJhbXMpO1xuICAgIGN1cnZlLnRlcm1pbmF0ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMuc2luZ2xlVGhyZWFkKSB7XG4gICAgICAgICAgICBnbG9iYWxUaGlzLmN1cnZlX2JsczEyMzgxID0gbnVsbDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudG0udGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFzaW5nbGVUaHJlYWQpIHtcbiAgICAgICAgZ2xvYmFsVGhpcy5jdXJ2ZV9ibHMxMjM4MSA9IGN1cnZlO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJ2ZTtcbn1cblxuIiwiaW1wb3J0ICogYXMgU2NhbGFyIGZyb20gXCIuL3NjYWxhci5qc1wiO1xuaW1wb3J0IHtkZWZhdWx0IGFzIGJ1aWxkQm4xMjh9IGZyb20gXCIuL2JuMTI4LmpzXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgYnVpbGRCbHMxMjM4MX0gZnJvbSBcIi4vYmxzMTIzODEuanNcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmNvbnN0IGJsczEyMzgxcSA9IFNjYWxhci5lKFwiMWEwMTExZWEzOTdmZTY5YTRiMWJhN2I2NDM0YmFjZDc2NDc3NGI4NGYzODUxMmJmNjczMGQyYTBmNmIwZjYyNDFlYWJmZmZlYjE1M2ZmZmZiOWZlZmZmZmZmZmZhYWFiXCIsIDE2KTtcbmNvbnN0IGJuMTI4cSA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg2OTYzMTExNTcyOTc4MjM2NjI2ODkwMzc4OTQ2NDUyMjYyMDg1ODNcIik7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21SKHIsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBpZiAoU2NhbGFyLmVxKHIsIGJuMTI4cikpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIGlmIChTY2FsYXIuZXEociwgYmxzMTIzODFyKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7U2NhbGFyLnRvU3RyaW5nKHIpfWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VydmU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJ2ZUZyb21RKHEsIHNpbmdsZVRocmVhZCwgcGx1Z2lucykge1xuICAgIGxldCBjdXJ2ZTtcbiAgICBpZiAoU2NhbGFyLmVxKHEsIGJuMTI4cSkpIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJuMTI4KHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIGlmIChTY2FsYXIuZXEocSwgYmxzMTIzODFxKSkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQmxzMTIzODEoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnZlIG5vdCBzdXBwb3J0ZWQ6ICR7U2NhbGFyLnRvU3RyaW5nKHEsIDE2KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnZlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q3VydmVGcm9tTmFtZShuYW1lLCBzaW5nbGVUaHJlYWQsIHBsdWdpbnMpIHtcbiAgICBsZXQgY3VydmU7XG4gICAgY29uc3Qgbm9ybU5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIGlmIChbXCJCTjEyOFwiLCBcIkJOMjU0XCIsIFwiQUxUQk4xMjhcIl0uaW5kZXhPZihub3JtTmFtZSkgPj0gMCkge1xuICAgICAgICBjdXJ2ZSA9IGF3YWl0IGJ1aWxkQm4xMjgoc2luZ2xlVGhyZWFkLCBwbHVnaW5zKTtcbiAgICB9IGVsc2UgaWYgKFtcIkJMUzEyMzgxXCJdLmluZGV4T2Yobm9ybU5hbWUpID49IDApIHtcbiAgICAgICAgY3VydmUgPSBhd2FpdCBidWlsZEJsczEyMzgxKHNpbmdsZVRocmVhZCwgcGx1Z2lucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJ2ZSBub3Qgc3VwcG9ydGVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJ2ZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobikge1xuICAgICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpLm1hdGNoKC9bQS1aYS16MC05XSsvZykuam9pbihcIlwiKTtcbiAgICB9XG5cbn1cbiIsImNvbnN0IFNVQkFSUkFZX1NJWkUgPSAweDQwMDAwO1xuXG5jb25zdCBCaWdBcnJheUhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRFbGVtZW50KHByb3ApO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG9ialtwcm9wXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnNldEVsZW1lbnQocHJvcCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNsYXNzIF9CaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IgKGluaXRTaXplKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gaW5pdFNpemUgfHwgMDtcbiAgICAgICAgdGhpcy5hcnIgPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGluaXRTaXplOyBpKz1TVUJBUlJBWV9TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmFycltpL1NVQkFSUkFZX1NJWkVdID0gbmV3IEFycmF5KE1hdGgubWluKFNVQkFSUkFZX1NJWkUsIGluaXRTaXplIC0gaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoICgpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50ICh0aGlzLmxlbmd0aCwgYXJndW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNsaWNlIChmLCB0KSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0LWYpO1xuICAgICAgICBmb3IgKGxldCBpPWY7IGk8IHQ7IGkrKykgYXJyW2ktZl0gPSB0aGlzLmdldEVsZW1lbnQoaSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGdldEVsZW1lbnQoaWR4KSB7XG4gICAgICAgIGlkeCA9IHBhcnNlSW50KGlkeCk7XG4gICAgICAgIGNvbnN0IGlkeDEgPSBNYXRoLmZsb29yKGlkeCAvIFNVQkFSUkFZX1NJWkUpO1xuICAgICAgICBjb25zdCBpZHgyID0gaWR4ICUgU1VCQVJSQVlfU0laRTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyW2lkeDFdID8gdGhpcy5hcnJbaWR4MV1baWR4Ml0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldEVsZW1lbnQoaWR4LCB2YWx1ZSkge1xuICAgICAgICBpZHggPSBwYXJzZUludChpZHgpO1xuICAgICAgICBjb25zdCBpZHgxID0gTWF0aC5mbG9vcihpZHggLyBTVUJBUlJBWV9TSVpFKTtcbiAgICAgICAgaWYgKCF0aGlzLmFycltpZHgxXSkge1xuICAgICAgICAgICAgdGhpcy5hcnJbaWR4MV0gPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWR4MiA9IGlkeCAlIFNVQkFSUkFZX1NJWkU7XG4gICAgICAgIHRoaXMuYXJyW2lkeDFdW2lkeDJdID0gdmFsdWU7XG4gICAgICAgIGlmIChpZHggPj0gdGhpcy5sZW5ndGgpIHRoaXMubGVuZ3RoID0gaWR4KzE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRLZXlzKCkge1xuICAgICAgICBjb25zdCBuZXdBID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLmFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJyW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuYXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcnJbaV1bal0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0EucHVzaChpKlNVQkFSUkFZX1NJWkUraik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0E7XG4gICAgfVxufVxuXG5jbGFzcyBCaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IoIGluaXRTaXplICkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgX0JpZ0FycmF5KGluaXRTaXplKTtcbiAgICAgICAgY29uc3QgZXh0T2JqID0gbmV3IFByb3h5KG9iaiwgQmlnQXJyYXlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV4dE9iajtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJpZ0FycmF5O1xuIiwiaW1wb3J0IHtGMUZpZWxkLCBnZXRDdXJ2ZUZyb21SfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgIEJpZ0FycmF5IGZyb20gXCJAaWRlbjMvYmlnYXJyYXlcIjtcbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuXG5leHBvcnQgY29uc3QgUjFDU19GSUxFX0hFQURFUl9TRUNUSU9OID0gMTtcbmV4cG9ydCBjb25zdCBSMUNTX0ZJTEVfQ09OU1RSQUlOVFNfU0VDVElPTiA9IDI7XG5leHBvcnQgY29uc3QgUjFDU19GSUxFX1dJUkUyTEFCRUxJRF9TRUNUSU9OID0gMztcbmV4cG9ydCBjb25zdCBSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgUjFDU19GSUxFX0NVU1RPTV9HQVRFU19VU0VTX1NFQ1RJT04gPSA1O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFIxY3NIZWFkZXIoZmQsc2VjdGlvbnMsc2luZ2xlVGhyZWFkKSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBzaW5nbGVUaHJlYWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNpbmdsZVRocmVhZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaW5nbGVUaHJlYWQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge1xuICAgICAgICAgICAgc2luZ2xlVGhyZWFkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgc2luZ2xlVGhyZWFkOiBzaW5nbGVUaHJlYWQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0ge307XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCAxKTtcbiAgICAvLyBSZWFkIEhlYWRlclxuICAgIHJlcy5uOCA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy5wcmltZSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmlnSW50KGZkLCByZXMubjgpO1xuXG4gICAgaWYgKG9wdGlvbnMuRikge1xuICAgICAgICBpZiAob3B0aW9ucy5GLnAgIT0gcmVzLnByaW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJEaWZmZXJlbnQgUHJpbWVcIik7XG4gICAgICAgIHJlcy5GID0gb3B0aW9ucy5GO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZXRGaWVsZEZyb21QcmltZSkge1xuICAgICAgICByZXMuRiA9IGF3YWl0IG9wdGlvbnMuZ2V0RmllbGRGcm9tUHJpbWUocmVzLnByaW1lLCBvcHRpb25zLnNpbmdsZVRocmVhZCk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmdldEN1cnZlRnJvbVByaW1lKSB7XG4gICAgICAgIHJlcy5jdXJ2ZSA9IGF3YWl0IG9wdGlvbnMuZ2V0Q3VydmVGcm9tUHJpbWUocmVzLnByaW1lLCBvcHRpb25zLnNpbmdsZVRocmVhZCk7XG4gICAgICAgIHJlcy5GID0gcmVzLmN1cnZlLkZyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXMuY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZUZyb21SKHJlcy5wcmltZSwgb3B0aW9ucy5zaW5nbGVUaHJlYWQpO1xuICAgICAgICAgICAgcmVzLkYgPSByZXMuY3VydmUuRnI7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVzLkYgPSBuZXcgRjFGaWVsZChyZXMucHJpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzLm5WYXJzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgcmVzLm5PdXRwdXRzID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG4gICAgcmVzLm5QdWJJbnB1dHMgPSBhd2FpdCBmZC5yZWFkVUxFMzIoKTtcbiAgICByZXMublBydklucHV0cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy5uTGFiZWxzID0gYXdhaXQgZmQucmVhZFVMRTY0KCk7XG4gICAgcmVzLm5Db25zdHJhaW50cyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuICAgIHJlcy51c2VDdXN0b21HYXRlcyA9IHR5cGVvZiBzZWN0aW9uc1tSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTl0gIT09IFwidW5kZWZpbmVkXCIgJiYgc2VjdGlvbnNbUjFDU19GSUxFX0NVU1RPTV9HQVRFU19MSVNUX1NFQ1RJT05dICE9PSBudWxsXG4gICAgICAgICYmIHR5cGVvZiBzZWN0aW9uc1tSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX1VTRVNfU0VDVElPTl0gIT09IFwidW5kZWZpbmVkXCIgJiYgc2VjdGlvbnNbUjFDU19GSUxFX0NVU1RPTV9HQVRFU19VU0VTX1NFQ1RJT05dICE9PSBudWxsO1xuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ29uc3RyYWludHMoZmQsc2VjdGlvbnMsIHIxY3MsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IGxvZ2dlcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHgsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgYlIxY3MgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmQsIHNlY3Rpb25zLCAyKTtcbiAgICBsZXQgYlIxY3NQb3MgPSAwO1xuICAgIGxldCBjb25zdHJhaW50cztcbiAgICBpZiAocjFjcy5uQ29uc3RyYWludHM+MTw8MjApIHtcbiAgICAgICAgY29uc3RyYWludHMgPSBuZXcgQmlnQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdHJhaW50cyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8cjFjcy5uQ29uc3RyYWludHM7IGkrKykge1xuICAgICAgICBpZiAoKG9wdGlvbnMubG9nZ2VyKSYmKGklMTAwMDAwID09IDApKSBvcHRpb25zLmxvZ2dlci5pbmZvKGAke29wdGlvbnMubG9nZ2VyQ3R4fTogTG9hZGluZyBjb25zdHJhaW50czogJHtpfS8ke3IxY3MubkNvbnN0cmFpbnRzfWApO1xuICAgICAgICBjb25zdCBjID0gcmVhZENvbnN0cmFpbnQoKTtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChjKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuXG5cbiAgICBmdW5jdGlvbiByZWFkQ29uc3RyYWludCgpIHtcbiAgICAgICAgY29uc3QgYyA9IFtdO1xuICAgICAgICBjWzBdID0gcmVhZExDKCk7XG4gICAgICAgIGNbMV0gPSByZWFkTEMoKTtcbiAgICAgICAgY1syXSA9IHJlYWRMQygpO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkTEMoKSB7XG4gICAgICAgIGNvbnN0IGxjPSB7fTtcblxuICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1Bvcys0KTtcbiAgICAgICAgYlIxY3NQb3MgKz0gNDtcbiAgICAgICAgY29uc3QgYnVmZlVMMzJWID0gbmV3IERhdGFWaWV3KGJ1ZmZVTDMyLmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IG5JZHggPSBidWZmVUwzMlYuZ2V0VWludDMyKDAsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBiUjFjcy5zbGljZShiUjFjc1BvcywgYlIxY3NQb3MgKyAoNCtyMWNzLm44KSpuSWR4ICk7XG4gICAgICAgIGJSMWNzUG9zICs9ICg0K3IxY3MubjgpKm5JZHg7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5JZHg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gYnVmZlYuZ2V0VWludDMyKGkqKDQrcjFjcy5uOCksIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcjFjcy5GLmZyb21ScHJMRShidWZmLCBpKig0K3IxY3MubjgpKzQpO1xuICAgICAgICAgICAgbGNbaWR4XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGM7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1hcChmZCwgc2VjdGlvbnMsIHIxY3MsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgb3B0aW9ucyA9IGxvZ2dlcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2dnZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb3B0aW9ucz0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJNYXAgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmQsIHNlY3Rpb25zLCAzKTtcbiAgICBsZXQgYk1hcFBvcyA9IDA7XG4gICAgbGV0IG1hcDtcblxuICAgIGlmIChyMWNzLm5WYXJzPjE8PDIwKSB7XG4gICAgICAgIG1hcCA9IG5ldyBCaWdBcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcCA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8cjFjcy5uVmFyczsgaSsrKSB7XG4gICAgICAgIGlmICgob3B0aW9ucy5sb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgb3B0aW9ucy5sb2dnZXIuaW5mbyhgJHtvcHRpb25zLmxvZ2dlckN0eH06IExvYWRpbmcgbWFwOiAke2l9LyR7cjFjcy5uVmFyc31gKTtcbiAgICAgICAgY29uc3QgaWR4ID0gcmVhZFVMRTY0KCk7XG4gICAgICAgIG1hcC5wdXNoKGlkeCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcblxuICAgIGZ1bmN0aW9uIHJlYWRVTEU2NCgpIHtcbiAgICAgICAgY29uc3QgYnVmZlVMRTY0ID0gYk1hcC5zbGljZShiTWFwUG9zLCBiTWFwUG9zKzgpO1xuICAgICAgICBiTWFwUG9zICs9IDg7XG4gICAgICAgIGNvbnN0IGJ1ZmZVTEU2NFYgPSBuZXcgRGF0YVZpZXcoYnVmZlVMRTY0LmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IExTQiA9IGJ1ZmZVTEU2NFYuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgICAgICBjb25zdCBNU0IgPSBidWZmVUxFNjRWLmdldFVpbnQzMig0LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gTVNCICogMHgxMDAwMDAwMDAgKyBMU0I7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUjFjc0ZkKGZkLCBzZWN0aW9ucywgb3B0aW9ucykge1xuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgcHJvcGVydGllczpcbiAgICAgKiAgbG9hZENvbnN0cmFpbnRzOiA8Ym9vbD4gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICogIGxvYWRNYXA6ICAgICAgICAgPGJvb2w+IGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgKiAgbG9hZEN1c3RvbUdhdGVzOiA8Ym9vbD4gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICovXG5cbiAgICBpZih0eXBlb2Ygb3B0aW9ucyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWFkUjFjc0ZkOiBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIG9wdGlvbnMubG9hZENvbnN0cmFpbnRzID0gXCJsb2FkQ29uc3RyYWludHNcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5sb2FkQ29uc3RyYWludHMgOiB0cnVlO1xuICAgIG9wdGlvbnMubG9hZE1hcCA9IFwibG9hZE1hcFwiIGluIG9wdGlvbnMgPyBvcHRpb25zLmxvYWRNYXAgOiBmYWxzZTtcbiAgICBvcHRpb25zLmxvYWRDdXN0b21HYXRlcyA9IFwibG9hZEN1c3RvbUdhdGVzXCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMubG9hZEN1c3RvbUdhdGVzIDogdHJ1ZTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlYWRSMWNzSGVhZGVyKGZkLCBzZWN0aW9ucywgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5sb2FkQ29uc3RyYWludHMpIHtcbiAgICAgICAgcmVzLmNvbnN0cmFpbnRzID0gYXdhaXQgcmVhZENvbnN0cmFpbnRzKGZkLCBzZWN0aW9ucywgcmVzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIExhYmVsc1xuXG4gICAgaWYgKG9wdGlvbnMubG9hZE1hcCkge1xuICAgICAgICByZXMubWFwID0gYXdhaXQgcmVhZE1hcChmZCwgc2VjdGlvbnMsIHJlcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubG9hZEN1c3RvbUdhdGVzKSB7XG4gICAgICAgIGlmIChyZXMudXNlQ3VzdG9tR2F0ZXMpIHtcbiAgICAgICAgICAgIHJlcy5jdXN0b21HYXRlcyA9IGF3YWl0IHJlYWRDdXN0b21HYXRlc0xpc3RTZWN0aW9uKGZkLCBzZWN0aW9ucywgcmVzKTtcbiAgICAgICAgICAgIHJlcy5jdXN0b21HYXRlc1VzZXMgPSBhd2FpdCByZWFkQ3VzdG9tR2F0ZXNVc2VzU2VjdGlvbihmZCwgc2VjdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmN1c3RvbUdhdGVzID0gW107XG4gICAgICAgICAgICByZXMuY3VzdG9tR2F0ZXNVc2VzID0gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSMWNzKGZpbGVOYW1lLCBsb2FkQ29uc3RyYWludHMsIGxvYWRNYXAsIHNpbmdsZVRocmVhZCwgbG9nZ2VyLCBsb2dnZXJDdHgpIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIGxvYWRDb25zdHJhaW50cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBvcHRpb25zID0gbG9hZENvbnN0cmFpbnRzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvYWRDb25zdHJhaW50cyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvcHRpb25zPSB7XG4gICAgICAgICAgICBsb2FkQ29uc3RyYWludHM6IHRydWUsXG4gICAgICAgICAgICBsb2FkTWFwOiBmYWxzZSxcbiAgICAgICAgICAgIGxvYWRDdXN0b21HYXRlczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBsb2FkQ29uc3RyYWludHM6IGxvYWRDb25zdHJhaW50cyxcbiAgICAgICAgICAgIGxvYWRNYXA6IGxvYWRNYXAsXG4gICAgICAgICAgICBzaW5nbGVUaHJlYWQ6IHNpbmdsZVRocmVhZCxcbiAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgICAgbG9nZ2VyQ3R4OiBsb2dnZXJDdHhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7ZmQsIHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShmaWxlTmFtZSwgXCJyMWNzXCIsIDEsIDE8PDI1LCAxPDwyMik7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCByZWFkUjFjc0ZkKGZkLCBzZWN0aW9ucywgb3B0aW9ucyk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDdXN0b21HYXRlc0xpc3RTZWN0aW9uKGZkLCBzZWN0aW9ucywgcmVzKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQsIHNlY3Rpb25zLCBSMUNTX0ZJTEVfQ1VTVE9NX0dBVEVTX0xJU1RfU0VDVElPTik7XG5cbiAgICBsZXQgbnVtID0gYXdhaXQgZmQucmVhZFVMRTMyKCk7XG5cbiAgICBsZXQgY3VzdG9tR2F0ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIGxldCBjdXN0b21HYXRlID0ge307XG4gICAgICAgIGN1c3RvbUdhdGUudGVtcGxhdGVOYW1lID0gYXdhaXQgZmQucmVhZFN0cmluZygpO1xuICAgICAgICBsZXQgbnVtUGFyYW1ldGVycyA9IGF3YWl0IGZkLnJlYWRVTEUzMigpO1xuXG4gICAgICAgIGN1c3RvbUdhdGUucGFyYW1ldGVycyA9IEFycmF5KG51bVBhcmFtZXRlcnMpO1xuICAgICAgICBsZXQgYnVmZiA9IGF3YWl0IGZkLnJlYWQocmVzLm44ICogbnVtUGFyYW1ldGVycyk7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1QYXJhbWV0ZXJzOyBqKyspIHtcbiAgICAgICAgICAgIGN1c3RvbUdhdGUucGFyYW1ldGVyc1tqXSA9IHJlcy5GLmZyb21ScHJMRShidWZmLCBqICogcmVzLm44LCByZXMubjgpOztcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21HYXRlcy5wdXNoKGN1c3RvbUdhdGUpO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdhdGVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEN1c3RvbUdhdGVzVXNlc1NlY3Rpb24oZmQsc2VjdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBiUjFjcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZCwgc2VjdGlvbnMsIFIxQ1NfRklMRV9DVVNUT01fR0FURVNfVVNFU19TRUNUSU9OKTtcbiAgICBjb25zdCBiUjFjczMyID0gbmV3IFVpbnQzMkFycmF5KGJSMWNzLmJ1ZmZlciwgYlIxY3MuYnl0ZU9mZnNldCwgYlIxY3MuYnl0ZUxlbmd0aC80KTtcbiAgICBjb25zdCBuQ3VzdG9tR2F0ZVVzZXMgPSBiUjFjczMyWzBdO1xuICAgIGxldCBiUjFjc1BvcyA9IDE7XG4gICAgbGV0IGN1c3RvbUdhdGVzVXNlcztcbiAgICBpZiAobkN1c3RvbUdhdGVVc2VzPjE8PDIwKSB7XG4gICAgICAgIGN1c3RvbUdhdGVzVXNlcyA9IG5ldyBCaWdBcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGN1c3RvbUdhdGVzVXNlcyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8bkN1c3RvbUdhdGVVc2VzOyBpKyspIHtcbiAgICAgICAgaWYgKChvcHRpb25zLmxvZ2dlcikmJihpJTEwMDAwMCA9PSAwKSkgb3B0aW9ucy5sb2dnZXIuaW5mbyhgJHtvcHRpb25zLmxvZ2dlckN0eH06IExvYWRpbmcgY3VzdG9tIGdhdGUgdXNlczogJHtpfS8ke25DdXN0b21HYXRlVXNlc31gKTtcbiAgICAgICAgbGV0IGMgPSB7fTtcbiAgICAgICAgYy5pZCA9IGJSMWNzMzJbYlIxY3NQb3MrK107XG4gICAgICAgIGxldCBudW1TaWduYWxzID0gYlIxY3MzMltiUjFjc1BvcysrXTtcbiAgICAgICAgYy5zaWduYWxzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtU2lnbmFsczsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBMU0IgPSBiUjFjczMyW2JSMWNzUG9zKytdO1xuICAgICAgICAgICAgY29uc3QgTVNCID0gYlIxY3MzMltiUjFjc1BvcysrXTtcbiAgICAgICAgICAgIGMuc2lnbmFscy5wdXNoKE1TQiAqIDB4MTAwMDAwMDAwICsgTFNCKTtcbiAgICAgICAgfVxuICAgICAgICBjdXN0b21HYXRlc1VzZXMucHVzaChjKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1c3RvbUdhdGVzVXNlcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc0hlYWRlcihmZCwgY2lyKSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAxKTtcbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKGNpci5uOCk7IC8vIFRlbXBvcmFsbHkgc2V0IHRvIDAgbGVuZ3RoXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLndyaXRlQmlnSW50KGZkLCBjaXIucHJpbWUsIGNpci5uOCk7XG5cbiAgICBhd2FpdCBmZC53cml0ZVVMRTMyKGNpci5uVmFycyk7XG4gICAgYXdhaXQgZmQud3JpdGVVTEUzMihjaXIubk91dHB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLm5QdWJJbnB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLm5QcnZJbnB1dHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFNjQoY2lyLm5MYWJlbHMpO1xuICAgIGF3YWl0IGZkLndyaXRlVUxFMzIoY2lyLmNvbnN0cmFpbnRzLmxlbmd0aCk7XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc0NvbnN0cmFpbnRzKGZkLCBjaXIsIGxvZ2dlciwgbG9nZ2VyQ3R4KSB7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkLCAyKTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxjaXIuY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgbG9nZ2VyLmluZm8oYCR7bG9nZ2VyQ3R4fTogd3JpdGluZyBjb25zdHJhaW50OiAke2l9LyR7Y2lyLmNvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDb25zdHJhaW50KGNpci5jb25zdHJhaW50c1tpXSk7XG4gICAgfVxuXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZCk7XG5cblxuICAgIGZ1bmN0aW9uIHdyaXRlQ29uc3RyYWludChjKSB7XG4gICAgICAgIGNvbnN0IG44ID0gY2lyLm44O1xuICAgICAgICBjb25zdCBGID0gY2lyLkYgfHwgY2lyLmN1cnZlLkZyO1xuICAgICAgICBjb25zdCBpZHhBID0gT2JqZWN0LmtleXMoY1swXSk7XG4gICAgICAgIGNvbnN0IGlkeEIgPSBPYmplY3Qua2V5cyhjWzFdKTtcbiAgICAgICAgY29uc3QgaWR4QyA9IE9iamVjdC5rZXlzKGNbMl0pO1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoKGlkeEEubGVuZ3RoK2lkeEIubGVuZ3RoK2lkeEMubGVuZ3RoKSoobjgrNCkgKyAxMik7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgbGV0IG89MDtcblxuICAgICAgICBidWZmVi5zZXRVaW50MzIobywgaWR4QS5sZW5ndGgsIHRydWUpOyBvKz00O1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8aWR4QS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29lZiA9IGlkeEFbaV07XG4gICAgICAgICAgICBidWZmVi5zZXRVaW50MzIobywgY29lZiwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgICAgICBGLnRvUnByTEUoYnVmZiwgbywgY1swXVtjb2VmXSk7IG8rPW44O1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIGlkeEIubGVuZ3RoLCB0cnVlKTsgbys9NDtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGlkeEIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZWYgPSBpZHhCW2ldO1xuICAgICAgICAgICAgYnVmZlYuc2V0VWludDMyKG8sIGNvZWYsIHRydWUpOyBvKz00O1xuICAgICAgICAgICAgRi50b1JwckxFKGJ1ZmYsIG8sIGNbMV1bY29lZl0pOyBvKz1uODtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBpZHhDLmxlbmd0aCwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxpZHhDLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VmID0gaWR4Q1tpXTtcbiAgICAgICAgICAgIGJ1ZmZWLnNldFVpbnQzMihvLCBjb2VmLCB0cnVlKTsgbys9NDtcbiAgICAgICAgICAgIEYudG9ScHJMRShidWZmLCBvLCBjWzJdW2NvZWZdKTsgbys9bjg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmQud3JpdGUoYnVmZik7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUjFjc01hcChmZCwgY2lyLCBsb2dnZXIsIGxvZ2dlckN0eCkge1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZCwgMyk7XG5cbiAgICBpZiAoY2lyLm1hcC5sZW5ndGggIT0gY2lyLm5WYXJzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1hcCBzaXplXCIpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjaXIublZhcnM7IGkrKykge1xuICAgICAgICBpZiAoKGxvZ2dlcikmJihpJTEwMDAwID09IDApKSBsb2dnZXIuaW5mbyhgJHtsb2dnZXJDdHh9OiB3cml0aW5nIG1hcDogJHtpfS8ke2Npci5uVmFyc31gKTtcbiAgICAgICAgYXdhaXQgZmQud3JpdGVVTEU2NChjaXIubWFwW2ldKTtcbiAgICB9XG5cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkKTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVIxY3MoZmlsZU5hbWUsIGNpciwgbG9nZ2VyLCBsb2dnZXJDdHgpIHtcblxuICAgIGNvbnN0IGZkID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUoZmlsZU5hbWUsIFwicjFjc1wiLCAxLCAzLCAxPDwyNSwgMTw8MjIpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzSGVhZGVyKGZkLCBjaXIpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzQ29uc3RyYWludHMoZmQsIGNpciwgbG9nZ2VyLCBsb2dnZXJDdHgpO1xuXG4gICAgYXdhaXQgd3JpdGVSMWNzTWFwKGZkLCBjaXIsIGxvZ2dlciwgbG9nZ2VyQ3R4KTtcblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyByZWFkUjFjcyB9ICBmcm9tIFwicjFjc2ZpbGVcIjtcblxuY29uc3QgYmxzMTIzODFyID0gU2NhbGFyLmUoXCI3M2VkYTc1MzI5OWQ3ZDQ4MzMzOWQ4MDgwOWExZDgwNTUzYmRhNDAyZmZmZTViZmVmZmZmZmZmZjAwMDAwMDAxXCIsIDE2KTtcbmNvbnN0IGJuMTI4ciA9IFNjYWxhci5lKFwiMjE4ODgyNDI4NzE4MzkyNzUyMjIyNDY0MDU3NDUyNTcyNzUwODg1NDgzNjQ0MDA0MTYwMzQzNDM2OTgyMDQxODY1NzU4MDg0OTU2MTdcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHIxY3NJbmZvKHIxY3NOYW1lLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IGNpciA9IGF3YWl0IHJlYWRSMWNzKHIxY3NOYW1lKTtcblxuICAgIGlmIChTY2FsYXIuZXEoY2lyLnByaW1lLCBibjEyOHIpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiQ3VydmU6IGJuLTEyOFwiKTtcbiAgICB9IGVsc2UgaWYgKFNjYWxhci5lcShjaXIucHJpbWUsIGJsczEyMzgxcikpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJDdXJ2ZTogYmxzMTItMzgxXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGBVbmtub3duIEN1cnZlLiBQcmltZTogJHtTY2FsYXIudG9TdHJpbmcoY2lyLnByaW1lKX1gKTtcbiAgICB9XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgV2lyZXM6ICR7Y2lyLm5WYXJzfWApO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGAjIG9mIENvbnN0cmFpbnRzOiAke2Npci5uQ29uc3RyYWludHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgUHJpdmF0ZSBJbnB1dHM6ICR7Y2lyLm5QcnZJbnB1dHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgUHVibGljIElucHV0czogJHtjaXIublB1YklucHV0c31gKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgIyBvZiBMYWJlbHM6ICR7Y2lyLm5MYWJlbHN9YCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYCMgb2YgT3V0cHV0czogJHtjaXIubk91dHB1dHN9YCk7XG5cbiAgICByZXR1cm4gY2lyO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtyZWFkUjFjc30gIGZyb20gXCJyMWNzZmlsZVwiO1xuaW1wb3J0IHsgc3RyaW5naWZ5QmlnSW50c1dpdGhGaWVsZCB9IGZyb20gXCIuL21pc2MuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiByMWNzRXhwb3J0SnNvbihyMWNzRmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgY29uc3QgY2lyID0gYXdhaXQgcmVhZFIxY3MocjFjc0ZpbGVOYW1lLCB0cnVlLCB0cnVlLCB0cnVlLCBsb2dnZXIpO1xuICAgIGNvbnN0IEZyPWNpci5jdXJ2ZS5GcjtcbiAgICBkZWxldGUgY2lyLmN1cnZlO1xuICAgIGRlbGV0ZSBjaXIuRjtcblxuICAgIHJldHVybiBzdHJpbmdpZnlCaWdJbnRzV2l0aEZpZWxkKEZyLCBjaXIpO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHtkZWZhdWx0IGFzIHByaW50fSBmcm9tIFwiLi9yMWNzX3ByaW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW5mb30gZnJvbSBcIi4vcjFjc19pbmZvLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZXhwb3J0SnNvbn0gZnJvbSBcIi4vcjFjc19leHBvcnRfanNvbi5qc1wiO1xuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gbG9hZFN5bWJvbHMoc3ltRmlsZU5hbWUpIHtcbiAgICBjb25zdCBzeW0gPSB7XG4gICAgICAgIGxhYmVsSWR4Mk5hbWU6IFsgXCJvbmVcIiBdLFxuICAgICAgICB2YXJJZHgyTmFtZTogWyBcIm9uZVwiIF0sXG4gICAgICAgIGNvbXBvbmVudElkeDJOYW1lOiBbXVxuICAgIH07XG4gICAgY29uc3QgZmQgPSBhd2FpdCBmYXN0RmlsZS5yZWFkRXhpc3Rpbmcoc3ltRmlsZU5hbWUpO1xuICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKGZkLnRvdGFsU2l6ZSk7XG4gICAgY29uc3Qgc3ltc1N0ciA9IG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShidWZmKTtcbiAgICBjb25zdCBsaW5lcyA9IHN5bXNTdHIuc3BsaXQoXCJcXG5cIik7XG4gICAgZm9yIChsZXQgaT0wOyBpPGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IGxpbmVzW2ldLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgaWYgKGFyci5sZW5ndGghPTQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoc3ltLnZhcklkeDJOYW1lW2FyclsxXV0pIHtcbiAgICAgICAgICAgIHN5bS52YXJJZHgyTmFtZVthcnJbMV1dICs9IFwifFwiICsgYXJyWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ltLnZhcklkeDJOYW1lW2FyclsxXV0gPSBhcnJbM107XG4gICAgICAgIH1cbiAgICAgICAgc3ltLmxhYmVsSWR4Mk5hbWVbYXJyWzBdXSA9IGFyclszXTtcbiAgICAgICAgaWYgKCFzeW0uY29tcG9uZW50SWR4Mk5hbWVbYXJyWzJdXSkge1xuICAgICAgICAgICAgc3ltLmNvbXBvbmVudElkeDJOYW1lW2FyclsyXV0gPSBleHRyYWN0Q29tcG9uZW50KGFyclszXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHN5bTtcblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RDb21wb25lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgYXJyLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3IgZWxlbWVudFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXCIuXCIpO1xuICAgIH1cbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGZhc3RGaWxlIGZyb20gXCJmYXN0ZmlsZVwiO1xuaW1wb3J0IHsgV2l0bmVzc0NhbGN1bGF0b3JCdWlsZGVyIH0gZnJvbSBcImNpcmNvbV9ydW50aW1lXCI7XG5pbXBvcnQgKiBhcyB3dG5zVXRpbHMgZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgbG9hZFN5bXMgZnJvbSBcIi4vbG9hZHN5bXMuanNcIjtcbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB3dG5zRGVidWcoX2lucHV0LCB3YXNtRmlsZU5hbWUsIHd0bnNGaWxlTmFtZSwgc3ltTmFtZSwgb3B0aW9ucywgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCBpbnB1dCA9IHVuc3RyaW5naWZ5QmlnSW50cyhfaW5wdXQpO1xuXG4gICAgY29uc3QgZmRXYXNtID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKHdhc21GaWxlTmFtZSk7XG4gICAgY29uc3Qgd2FzbSA9IGF3YWl0IGZkV2FzbS5yZWFkKGZkV2FzbS50b3RhbFNpemUpO1xuICAgIGF3YWl0IGZkV2FzbS5jbG9zZSgpO1xuXG5cbiAgICBsZXQgd2NPcHMgPSB7XG4gICAgICAgIHNhbml0eUNoZWNrOiB0cnVlXG4gICAgfTtcbiAgICBsZXQgc3ltID0gYXdhaXQgbG9hZFN5bXMoc3ltTmFtZSk7XG4gICAgaWYgKG9wdGlvbnMuc2V0KSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nU2V0U2lnbmFsPSBmdW5jdGlvbihsYWJlbElkeCwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBsaW5lIGJlbG93IHNwbGl0cyB0aGUgYXJyb3cgbG9nIGludG8gMiBzdHJpbmdzIHRvIGF2b2lkIHNvbWUgU2VjdXJlIEVDTUFTY3JpcHQgaXNzdWVzXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlNFVCBcIiArIHN5bS5sYWJlbElkeDJOYW1lW2xhYmVsSWR4XSArIFwiIDxcIiArIFwiLS0gXCIgKyB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZ2V0KSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nR2V0U2lnbmFsPSBmdW5jdGlvbih2YXJJZHgsIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBUaGUgbGluZSBiZWxvdyBzcGxpdHMgdGhlIGFycm93IGxvZyBpbnRvIDIgc3RyaW5ncyB0byBhdm9pZCBzb21lIFNlY3VyZSBFQ01BU2NyaXB0IGlzc3Vlc1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJHRVQgXCIgKyBzeW0ubGFiZWxJZHgyTmFtZVt2YXJJZHhdICsgXCIgLS1cIiArIFwiPiBcIiArIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmlnZ2VyKSB7XG4gICAgICAgIGlmICghc3ltKSBzeW0gPSBhd2FpdCBsb2FkU3ltcyhzeW1OYW1lKTtcbiAgICAgICAgd2NPcHMubG9nU3RhcnRDb21wb25lbnQ9IGZ1bmN0aW9uKGNJZHgpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiU1RBUlQ6IFwiICsgc3ltLmNvbXBvbmVudElkeDJOYW1lW2NJZHhdKTtcbiAgICAgICAgfTtcbiAgICAgICAgd2NPcHMubG9nRmluaXNoQ29tcG9uZW50PSBmdW5jdGlvbihjSWR4KSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZJTklTSDogXCIgKyBzeW0uY29tcG9uZW50SWR4Mk5hbWVbY0lkeF0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB3Y09wcy5zeW0gPSBzeW07XG5cbiAgICBjb25zdCB3YyA9IGF3YWl0IFdpdG5lc3NDYWxjdWxhdG9yQnVpbGRlcih3YXNtLCB3Y09wcyk7XG4gICAgY29uc3QgdyA9IGF3YWl0IHdjLmNhbGN1bGF0ZVdpdG5lc3MoaW5wdXQpO1xuXG4gICAgY29uc3QgZmRXdG5zID0gYXdhaXQgYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUod3Ruc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMik7XG5cbiAgICBhd2FpdCB3dG5zVXRpbHMud3JpdGUoZmRXdG5zLCB3LCB3Yy5wcmltZSk7XG5cbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7cmVhZH0gZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiB3dG5zRXhwb3J0SnNvbih3dG5zRmlsZU5hbWUpIHtcblxuICAgIGNvbnN0IHcgPSBhd2FpdCByZWFkKHd0bnNGaWxlTmFtZSk7XG5cbiAgICByZXR1cm4gdztcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgd3Ruc1V0aWxzIGZyb20gXCIuL3d0bnNfdXRpbHMuanNcIjtcbmltcG9ydCB7IHJlYWRSMWNzRmQgfSBmcm9tIFwicjFjc2ZpbGVcIjtcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCAqIGFzIGN1cnZlcyBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gd3Ruc0NoZWNrKHIxY3NGaWxlbmFtZSwgd3Ruc0ZpbGVuYW1lLCBsb2dnZXIpIHtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiV0lUTkVTUyBDSEVDS0lORyBTVEFSVEVEXCIpO1xuXG4gICAgLy8gUmVhZCByMWNzIGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyByMWNzIGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRSMWNzLFxuICAgICAgICBzZWN0aW9uczogc2VjdGlvbnNSMWNzXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZShyMWNzRmlsZW5hbWUsIFwicjFjc1wiLCAxLCAxIDw8IDIyLCAxIDw8IDI0KTtcbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NGZChmZFIxY3MsIHNlY3Rpb25zUjFjcywgeyBsb2FkQ29uc3RyYWludHM6IGZhbHNlLCBsb2FkQ3VzdG9tR2F0ZXM6IGZhbHNlIH0pO1xuXG4gICAgLy8gUmVhZCB3aXRuZXNzIGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB3aXRuZXNzIGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRXdG5zLFxuICAgICAgICBzZWN0aW9uczogd3Ruc1NlY3Rpb25zXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh3dG5zRmlsZW5hbWUsIFwid3Ruc1wiLCAyLCAxIDw8IDIyLCAxIDw8IDI0KTtcbiAgICBjb25zdCB3dG5zSGVhZGVyID0gYXdhaXQgd3Ruc1V0aWxzLnJlYWRIZWFkZXIoZmRXdG5zLCB3dG5zU2VjdGlvbnMpO1xuXG4gICAgaWYgKCFTY2FsYXIuZXEocjFjcy5wcmltZSwgd3Ruc0hlYWRlci5xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDdXJ2ZSBvZiB0aGUgd2l0bmVzcyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIHByb3Zpbmcga2V5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZXaXRuZXNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkV3Rucywgd3Ruc1NlY3Rpb25zLCAyKTtcbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgY3VydmVzLmdldEN1cnZlRnJvbVIocjFjcy5wcmltZSk7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBzRnIgPSBGci5uODtcblxuICAgIGNvbnN0IGJSMWNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIiAgV0lUTkVTUyBDSEVDS1wiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VydmU6ICAgICAgICAgICR7cjFjcy5jdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzICh3aXJlcyk6ICAgJHtyMWNzLm5WYXJzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBPdXB1dHM6ICAgICAgICAgJHtyMWNzLm5PdXRwdXRzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBQdWJsaWMgSW5wdXRzOiAgJHtyMWNzLm5QdWJJbnB1dHN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIFByaXZhdGUgSW5wdXRzOiAke3IxY3MublBydklucHV0c31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgTGFiZWxzOiAgICAgICAgICR7cjFjcy5uTGFiZWxzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDb25zdHJhaW50czogICAgJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VzdG9tIEdhdGVzOiAgICR7cjFjcy51c2VDdXN0b21HYXRlc31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgIH1cblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDaGVja2luZyB3aXRuZXNzIGNvcnJlY3RuZXNzXCIpO1xuXG4gICAgbGV0IGJSMWNzUG9zID0gMDtcbiAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHIxY3MubkNvbnN0cmFpbnRzOyBpKyspIHtcbiAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDCt8K3wrcgcHJvY2Vzc2luZyByMWNzIGNvbnN0cmFpbnRzICR7aX0vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vUmVhZCB0aGUgdGhyZWUgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiB0aGUgY29uc3RyYWludCB3aGVyZSBBICogQiAtIEMgPSAwXG4gICAgICAgIGNvbnN0IGxjQSA9IHJlYWRMQygpO1xuICAgICAgICBjb25zdCBsY0IgPSByZWFkTEMoKTtcbiAgICAgICAgY29uc3QgbGNDID0gcmVhZExDKCk7XG5cbiAgICAgICAgLy8gRXZhbHVhdGUgdGhlIGxpbmVhciBjb21iaW5hdGlvbnNcbiAgICAgICAgY29uc3QgZXZhbEEgPSBFdmFsdWF0ZUxpbmVhckNvbWJpbmF0aW9uKGxjQSk7XG4gICAgICAgIGNvbnN0IGV2YWxCID0gRXZhbHVhdGVMaW5lYXJDb21iaW5hdGlvbihsY0IpO1xuICAgICAgICBjb25zdCBldmFsQyA9IEV2YWx1YXRlTGluZWFyQ29tYmluYXRpb24obGNDKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IEEgKiBCIC0gQyA9PSAwXG4gICAgICAgIGlmICghRnIuZXEoRnIuc3ViKEZyLm11bChldmFsQSwgZXZhbEIpLCBldmFsQyksIEZyLnplcm8pKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIsK3wrfCtyBhYm9ydGluZyBjaGVja2luZyBwcm9jZXNzIGF0IGNvbnN0cmFpbnQgXCIgKyBpKTtcbiAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmZFIxY3MuY2xvc2UoKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJXSVRORVNTIElTIENPUlJFQ1RcIik7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcIldJVE5FU1MgQ0hFQ0tJTkcgRklOSVNIRUQgU1VDQ0VTU0ZVTExZXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJXSVRORVNTIElTIE5PVCBDT1JSRUNUXCIpO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJXSVRORVNTIENIRUNLSU5HIEZJTklTSEVEIFVOU1VDQ0VTU0ZVTExZXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcblxuICAgIGZ1bmN0aW9uIEV2YWx1YXRlTGluZWFyQ29tYmluYXRpb24obGMpIHtcbiAgICAgICAgbGV0IHJlcyA9IEZyLnplcm87XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGxjKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChzaWduYWxJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsVmFsdWUgPSBnZXRXaXRuZXNzVmFsdWUoc2lnbmFsSWQpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsRmFjdG9yID0gbGNbc2lnbmFsSWRdO1xuXG4gICAgICAgICAgICByZXMgPSBGci5hZGQocmVzLCBGci5tdWwoc2lnbmFsVmFsdWUsIHNpZ25hbEZhY3RvcikpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRMQygpIHtcbiAgICAgICAgY29uc3QgbGMgPSB7fTtcblxuICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArIDQpO1xuICAgICAgICBiUjFjc1BvcyArPSA0O1xuICAgICAgICBjb25zdCBidWZmVUwzMlYgPSBuZXcgRGF0YVZpZXcoYnVmZlVMMzIuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgbklkeCA9IGJ1ZmZVTDMyVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgYnVmZiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArICg0ICsgcjFjcy5uOCkgKiBuSWR4KTtcbiAgICAgICAgYlIxY3NQb3MgKz0gKDQgKyByMWNzLm44KSAqIG5JZHg7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSWR4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGJ1ZmZWLmdldFVpbnQzMihpICogKDQgKyByMWNzLm44KSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSByMWNzLkYuZnJvbVJwckxFKGJ1ZmYsIGkgKiAoNCArIHIxY3MubjgpICsgNCk7XG4gICAgICAgICAgICBsY1tpZHhdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXaXRuZXNzVmFsdWUoc2lnbmFsSWQpIHtcbiAgICAgICAgcmV0dXJuIEZyLmZyb21ScHJMRShidWZmV2l0bmVzcy5zbGljZShzaWduYWxJZCAqIHNGciwgc2lnbmFsSWQgKiBzRnIgKyBzRnIpKTtcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuZXhwb3J0IHtkZWZhdWx0IGFzIGNhbGN1bGF0ZX0gZnJvbSBcIi4vd3Ruc19jYWxjdWxhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZWJ1Z30gZnJvbSBcIi4vd3Ruc19kZWJ1Zy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEpzb259IGZyb20gXCIuL3d0bnNfZXhwb3J0X2pzb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjaGVja30gZnJvbSBcIi4vd3Ruc19jaGVjay5qc1wiOyIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmNvbnN0IFNVQkFSUkFZX1NJWkUgPSAweDQwMDAwO1xuXG5jb25zdCBCaWdBcnJheUhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRFbGVtZW50KHByb3ApO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG9ialtwcm9wXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnNldEVsZW1lbnQocHJvcCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNsYXNzIF9CaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IgKGluaXRTaXplKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gaW5pdFNpemUgfHwgMDtcbiAgICAgICAgdGhpcy5hcnIgPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG5cbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGluaXRTaXplOyBpKz1TVUJBUlJBWV9TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmFycltpL1NVQkFSUkFZX1NJWkVdID0gbmV3IEFycmF5KE1hdGgubWluKFNVQkFSUkFZX1NJWkUsIGluaXRTaXplIC0gaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoICgpIHtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50ICh0aGlzLmxlbmd0aCwgYXJndW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNsaWNlIChmLCB0KSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSh0LWYpO1xuICAgICAgICBmb3IgKGxldCBpPWY7IGk8IHQ7IGkrKykgYXJyW2ktZl0gPSB0aGlzLmdldEVsZW1lbnQoaSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGdldEVsZW1lbnQoaWR4KSB7XG4gICAgICAgIGlkeCA9IHBhcnNlSW50KGlkeCk7XG4gICAgICAgIGNvbnN0IGlkeDEgPSBNYXRoLmZsb29yKGlkeCAvIFNVQkFSUkFZX1NJWkUpO1xuICAgICAgICBjb25zdCBpZHgyID0gaWR4ICUgU1VCQVJSQVlfU0laRTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyW2lkeDFdID8gdGhpcy5hcnJbaWR4MV1baWR4Ml0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldEVsZW1lbnQoaWR4LCB2YWx1ZSkge1xuICAgICAgICBpZHggPSBwYXJzZUludChpZHgpO1xuICAgICAgICBjb25zdCBpZHgxID0gTWF0aC5mbG9vcihpZHggLyBTVUJBUlJBWV9TSVpFKTtcbiAgICAgICAgaWYgKCF0aGlzLmFycltpZHgxXSkge1xuICAgICAgICAgICAgdGhpcy5hcnJbaWR4MV0gPSBuZXcgQXJyYXkoU1VCQVJSQVlfU0laRSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWR4MiA9IGlkeCAlIFNVQkFSUkFZX1NJWkU7XG4gICAgICAgIHRoaXMuYXJyW2lkeDFdW2lkeDJdID0gdmFsdWU7XG4gICAgICAgIGlmIChpZHggPj0gdGhpcy5sZW5ndGgpIHRoaXMubGVuZ3RoID0gaWR4KzE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRLZXlzKCkge1xuICAgICAgICBjb25zdCBuZXdBID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLmFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJyW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuYXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcnJbaV1bal0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0EucHVzaChpKlNVQkFSUkFZX1NJWkUraik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0E7XG4gICAgfVxufVxuXG5jbGFzcyBCaWdBcnJheSB7XG4gICAgY29uc3RydWN0b3IoIGluaXRTaXplICkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgX0JpZ0FycmF5KGluaXRTaXplKTtcbiAgICAgICAgY29uc3QgZXh0T2JqID0gbmV3IFByb3h5KG9iaiwgQmlnQXJyYXlIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV4dE9iajtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJpZ0FycmF5O1xuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtyZWFkUjFjc0hlYWRlcn0gZnJvbSBcInIxY3NmaWxlXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgICByZWFkQmluRmlsZSxcbiAgICBjcmVhdGVCaW5GaWxlLFxuICAgIHJlYWRTZWN0aW9uLFxuICAgIHdyaXRlQmlnSW50LFxuICAgIHN0YXJ0V3JpdGVTZWN0aW9uLFxuICAgIGVuZFdyaXRlU2VjdGlvbixcbn0gZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7IGxvZzIsIGZvcm1hdEhhc2ggfSBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIEJpZ0J1ZmZlciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCBCaWdBcnJheSBmcm9tIFwiLi9iaWdhcnJheS5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG5ld1pLZXkocjFjc05hbWUsIHB0YXVOYW1lLCB6a2V5TmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCBUQVVfRzEgPSAwO1xuICAgIGNvbnN0IFRBVV9HMiA9IDE7XG4gICAgY29uc3QgQUxQSEFUQVVfRzEgPSAyO1xuICAgIGNvbnN0IEJFVEFUQVVfRzEgPSAzO1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcbiAgICBjb25zdCBjc0hhc2hlciA9IEJsYWtlMmIoNjQpO1xuXG4gICAgY29uc3Qge2ZkOiBmZFBUYXUsIHNlY3Rpb25zOiBzZWN0aW9uc1BUYXV9ID0gYXdhaXQgcmVhZEJpbkZpbGUocHRhdU5hbWUsIFwicHRhdVwiLCAxLCAxPDwyMiwgMTw8MjQpO1xuICAgIGNvbnN0IHtjdXJ2ZSwgcG93ZXJ9ID0gYXdhaXQgdXRpbHMucmVhZFBUYXVIZWFkZXIoZmRQVGF1LCBzZWN0aW9uc1BUYXUpO1xuICAgIGNvbnN0IHtmZDogZmRSMWNzLCBzZWN0aW9uczogc2VjdGlvbnNSMWNzfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHIxY3NOYW1lLCBcInIxY3NcIiwgMSwgMTw8MjIsIDE8PDI0KTtcbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NIZWFkZXIoZmRSMWNzLCBzZWN0aW9uc1IxY3MsIGZhbHNlKTtcblxuICAgIGNvbnN0IGZkWktleSA9IGF3YWl0IGNyZWF0ZUJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAxLCAxMCwgMTw8MjIsIDE8PDI0KTtcblxuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44KjI7XG5cbiAgICBpZiAocjFjcy5wcmltZSAhPSBjdXJ2ZS5yKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcInIxY3MgY3VydmUgZG9lcyBub3QgbWF0Y2ggcG93ZXJzIG9mIHRhdSBjZXJlbW9ueSBjdXJ2ZVwiKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGNvbnN0IGNpclBvd2VyID0gbG9nMihyMWNzLm5Db25zdHJhaW50cyArIHIxY3MublB1YklucHV0cyArIHIxY3Mubk91dHB1dHMgKzEgLTEpICsxO1xuXG4gICAgaWYgKGNpclBvd2VyID4gcG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBjaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgcG93ZXIgb2YgdGF1IGNlcmVtb255LiAke3IxY3MubkNvbnN0cmFpbnRzfSoyID4gMioqJHtwb3dlcn1gKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmICghc2VjdGlvbnNQVGF1WzEyXSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJQb3dlcnMgb2YgdGF1IGlzIG5vdCBwcmVwYXJlZC5cIik7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBjb25zdCBuUHVibGljID0gcjFjcy5uT3V0cHV0cyArIHIxY3MublB1YklucHV0cztcbiAgICBjb25zdCBkb21haW5TaXplID0gMiAqKiBjaXJQb3dlcjtcblxuICAgIC8vIFdyaXRlIHRoZSBoZWFkZXJcbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMSk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoMSk7IC8vIEdyb3RoXG4gICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG5cbiAgICAvLyBXcml0ZSB0aGUgR3JvdGggaGVhZGVyIHNlY3Rpb25cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCAyKTtcbiAgICBjb25zdCBwcmltZVEgPSBjdXJ2ZS5xO1xuICAgIGNvbnN0IG44cSA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVEpIC0gMSkgLyA2NCkgKzEpKjg7XG5cbiAgICBjb25zdCBwcmltZVIgPSBjdXJ2ZS5yO1xuICAgIGNvbnN0IG44ciA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKzEpKjg7XG4gICAgY29uc3QgUnIgPSBTY2FsYXIubW9kKFNjYWxhci5zaGwoMSwgbjhyKjgpLCBwcmltZVIpO1xuICAgIGNvbnN0IFIyciA9IGN1cnZlLkZyLmUoU2NhbGFyLm1vZChTY2FsYXIubXVsKFJyLFJyKSwgcHJpbWVSKSk7XG5cbiAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihuOHEpO1xuICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVRLCBuOHEpO1xuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgYXdhaXQgd3JpdGVCaWdJbnQoZmRaS2V5LCBwcmltZVIsIG44cik7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocjFjcy5uVmFycyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiBiYXJzXG4gICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoblB1YmxpYyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcHVibGljIHZhcnMgKG5vdCBpbmNsdWRpbmcgT05FKVxuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKGRvbWFpblNpemUpOyAgICAgICAgICAgICAgICAgIC8vIGRvbWFpblNpemVcblxuICAgIGxldCBiQWxwaGExO1xuICAgIGJBbHBoYTEgPSBhd2FpdCBmZFBUYXUucmVhZChzRzEsIHNlY3Rpb25zUFRhdVs0XVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYkFscGhhMSk7XG4gICAgYkFscGhhMSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJBbHBoYTEpO1xuICAgIGNzSGFzaGVyLnVwZGF0ZShiQWxwaGExKTtcblxuICAgIGxldCBiQmV0YTE7XG4gICAgYkJldGExID0gYXdhaXQgZmRQVGF1LnJlYWQoc0cxLCBzZWN0aW9uc1BUYXVbNV1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJCZXRhMSk7XG4gICAgYkJldGExID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hMRU10b1UoYkJldGExKTtcbiAgICBjc0hhc2hlci51cGRhdGUoYkJldGExKTtcblxuICAgIGxldCBiQmV0YTI7XG4gICAgYkJldGEyID0gYXdhaXQgZmRQVGF1LnJlYWQoc0cyLCBzZWN0aW9uc1BUYXVbNl1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJCZXRhMik7XG4gICAgYkJldGEyID0gYXdhaXQgY3VydmUuRzIuYmF0Y2hMRU10b1UoYkJldGEyKTtcbiAgICBjc0hhc2hlci51cGRhdGUoYkJldGEyKTtcblxuICAgIGNvbnN0IGJnMSA9IG5ldyBVaW50OEFycmF5KHNHMSk7XG4gICAgY3VydmUuRzEudG9ScHJMRU0oYmcxLCAwLCBjdXJ2ZS5HMS5nKTtcbiAgICBjb25zdCBiZzIgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgIGN1cnZlLkcyLnRvUnByTEVNKGJnMiwgMCwgY3VydmUuRzIuZyk7XG4gICAgY29uc3QgYmcxVSA9IG5ldyBVaW50OEFycmF5KHNHMSk7XG4gICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYmcxVSwgMCwgY3VydmUuRzEuZyk7XG4gICAgY29uc3QgYmcyVSA9IG5ldyBVaW50OEFycmF5KHNHMik7XG4gICAgY3VydmUuRzIudG9ScHJVbmNvbXByZXNzZWQoYmcyVSwgMCwgY3VydmUuRzIuZyk7XG5cbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYmcyKTsgICAgICAgIC8vIGdhbW1hMlxuICAgIGF3YWl0IGZkWktleS53cml0ZShiZzEpOyAgICAgICAgLy8gZGVsdGExXG4gICAgYXdhaXQgZmRaS2V5LndyaXRlKGJnMik7ICAgICAgICAvLyBkZWx0YTJcbiAgICBjc0hhc2hlci51cGRhdGUoYmcyVSk7ICAgICAgLy8gZ2FtbWEyXG4gICAgY3NIYXNoZXIudXBkYXRlKGJnMVUpOyAgICAgIC8vIGRlbHRhMVxuICAgIGNzSGFzaGVyLnVwZGF0ZShiZzJVKTsgICAgICAvLyBkZWx0YTJcbiAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyByMWNzXCIpO1xuICAgIGxldCBzUjFjcyA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGNvbnN0IEEgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQjEgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQjIgPSBuZXcgQmlnQXJyYXkocjFjcy5uVmFycyk7XG4gICAgY29uc3QgQyA9IG5ldyBCaWdBcnJheShyMWNzLm5WYXJzLSBuUHVibGljIC0xKTtcbiAgICBjb25zdCBJQyA9IG5ldyBBcnJheShuUHVibGljKzEpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJSZWFkaW5nIHRhdUcxXCIpO1xuICAgIGxldCBzVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTIsIChkb21haW5TaXplIC0xKSpzRzEsIGRvbWFpblNpemUqc0cxKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlJlYWRpbmcgdGF1RzJcIik7XG4gICAgbGV0IHNUYXVHMiA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUFRhdSwgc2VjdGlvbnNQVGF1LCAxMywgKGRvbWFpblNpemUgLTEpKnNHMiwgZG9tYWluU2l6ZSpzRzIpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyBhbHBoYXRhdUcxXCIpO1xuICAgIGxldCBzQWxwaGFUYXVHMSA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUFRhdSwgc2VjdGlvbnNQVGF1LCAxNCwgKGRvbWFpblNpemUgLTEpKnNHMSwgZG9tYWluU2l6ZSpzRzEpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyBiZXRhdGF1RzFcIik7XG4gICAgbGV0IHNCZXRhVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTUsIChkb21haW5TaXplIC0xKSpzRzEsIGRvbWFpblNpemUqc0cxKTtcblxuICAgIGF3YWl0IHByb2Nlc3NDb25zdHJhaW50cygpO1xuXG4gICAgYXdhaXQgY29tcG9zZUFuZFdyaXRlUG9pbnRzKDMsIFwiRzFcIiwgSUMsIFwiSUNcIik7XG5cbiAgICBhd2FpdCB3cml0ZUhzKCk7XG5cbiAgICBhd2FpdCBoYXNoSFBvaW50cygpO1xuXG4gICAgYXdhaXQgY29tcG9zZUFuZFdyaXRlUG9pbnRzKDgsIFwiRzFcIiwgQywgXCJDXCIpO1xuICAgIGF3YWl0IGNvbXBvc2VBbmRXcml0ZVBvaW50cyg1LCBcIkcxXCIsIEEsIFwiQVwiKTtcbiAgICBhd2FpdCBjb21wb3NlQW5kV3JpdGVQb2ludHMoNiwgXCJHMVwiLCBCMSwgXCJCMVwiKTtcbiAgICBhd2FpdCBjb21wb3NlQW5kV3JpdGVQb2ludHMoNywgXCJHMlwiLCBCMiwgXCJCMlwiKTtcblxuICAgIGNvbnN0IGNzSGFzaCA9IGNzSGFzaGVyLmRpZ2VzdCgpO1xuICAgIC8vIENvbnRyaWJ1dGlvbnMgc2VjdGlvblxuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMTApO1xuICAgIGF3YWl0IGZkWktleS53cml0ZShjc0hhc2gpO1xuICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKDApO1xuICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oZm9ybWF0SGFzaChjc0hhc2gsIFwiQ2lyY3VpdCBoYXNoOiBcIikpO1xuXG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFIxY3MuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFBUYXUuY2xvc2UoKTtcblxuICAgIHJldHVybiBjc0hhc2g7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUhzKCkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIDkpO1xuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IEJpZ0J1ZmZlcihkb21haW5TaXplKnNHMSk7XG4gICAgICAgIGlmIChjaXJQb3dlciA8IGN1cnZlLkZyLnMpIHtcbiAgICAgICAgICAgIGxldCBzVGF1RzEgPSBhd2FpdCByZWFkU2VjdGlvbihmZFBUYXUsIHNlY3Rpb25zUFRhdSwgMTIsIChkb21haW5TaXplKjItMSkqc0cxLCBkb21haW5TaXplKjIqc0cxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTwgZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGBzcGxpdGluZyBidWZmZXI6ICR7aX0vJHtkb21haW5TaXplfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBzVGF1RzEuc2xpY2UoIChpKjIrMSkqc0cxLCAoaSoyKzEpKnNHMSArIHNHMSApO1xuICAgICAgICAgICAgICAgIGJ1ZmZPdXQuc2V0KGJ1ZmYsIGkqc0cxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaXJQb3dlciA9PSBjdXJ2ZS5Gci5zKSB7XG4gICAgICAgICAgICBjb25zdCBvID0gc2VjdGlvbnNQVGF1WzEyXVswXS5wICsgKCgyICoqIChjaXJQb3dlcisxKSkgLTEpKnNHMTtcbiAgICAgICAgICAgIGF3YWl0IGZkUFRhdS5yZWFkVG9CdWZmZXIoYnVmZk91dCwgMCwgZG9tYWluU2l6ZSpzRzEsIG8gKyBkb21haW5TaXplKnNHMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJDaXJjdWl0IHRvbyBiaWdcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgY3VydmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJ1ZmZPdXQpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ29uc3RyYWludHMoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZDb2VmZiA9IG5ldyBVaW50OEFycmF5KDEyICsgY3VydmUuRnIubjgpO1xuICAgICAgICBjb25zdCBidWZmQ29lZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmZDb2VmZi5idWZmZXIpO1xuICAgICAgICBjb25zdCBiT25lID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRnIubjgpO1xuICAgICAgICBjdXJ2ZS5Gci50b1JwckxFKGJPbmUsIDAsIGN1cnZlLkZyLmUoMSkpO1xuXG4gICAgICAgIGxldCByMWNzUG9zID0gMDtcblxuICAgICAgICBmdW5jdGlvbiByMWNzX3JlYWRVTEUzMigpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBzUjFjcy5zbGljZShyMWNzUG9zLCByMWNzUG9zKzQpO1xuICAgICAgICAgICAgcjFjc1BvcyArPSA0O1xuICAgICAgICAgICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZWLmdldFVpbnQzMigwLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZWZzID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGM9MDsgYzxyMWNzLm5Db25zdHJhaW50czsgYysrKSB7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikmJihjJTEwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHByb2Nlc3NpbmcgY29uc3RyYWludHM6ICR7Y30vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIGNvbnN0IG5BID0gcjFjc19yZWFkVUxFMzIoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxuQTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHIxY3NfcmVhZFVMRTMyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29lZnAgPSByMWNzUG9zO1xuICAgICAgICAgICAgICAgIHIxY3NQb3MgKz0gY3VydmUuRnIubjg7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsMXQgPSBUQVVfRzE7XG4gICAgICAgICAgICAgICAgY29uc3QgbDEgPSBzRzEqYztcbiAgICAgICAgICAgICAgICBjb25zdCBsMnQgPSBCRVRBVEFVX0cxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwyID0gc0cxKmM7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBW3NdID09PSBcInVuZGVmaW5lZFwiKSBBW3NdID0gW107XG4gICAgICAgICAgICAgICAgQVtzXS5wdXNoKFtsMXQsIGwxLCBjb2VmcF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHMgPD0gblB1YmxpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBJQ1tzXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ1tzLSBuUHVibGljIC0xXSA9PT0gXCJ1bmRlZmluZWRcIikgQ1tzLSBuUHVibGljIC0xXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBDW3MgLSBuUHVibGljIC0xXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2Vmcy5wdXNoKFswLCBjLCBzLCBjb2VmcF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuQiA9IHIxY3NfcmVhZFVMRTMyKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8bkI7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSByMWNzX3JlYWRVTEUzMigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZWZwID0gcjFjc1BvcztcbiAgICAgICAgICAgICAgICByMWNzUG9zICs9IGN1cnZlLkZyLm44O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbDF0ID0gVEFVX0cxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwxID0gc0cxKmM7XG4gICAgICAgICAgICAgICAgY29uc3QgbDJ0ID0gVEFVX0cyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwyID0gc0cyKmM7XG4gICAgICAgICAgICAgICAgY29uc3QgbDN0ID0gQUxQSEFUQVVfRzE7XG4gICAgICAgICAgICAgICAgY29uc3QgbDMgPSBzRzEqYztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEIxW3NdID09PSBcInVuZGVmaW5lZFwiKSBCMVtzXSA9IFtdO1xuICAgICAgICAgICAgICAgIEIxW3NdLnB1c2goW2wxdCwgbDEsIGNvZWZwXSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCMltzXSA9PT0gXCJ1bmRlZmluZWRcIikgQjJbc10gPSBbXTtcbiAgICAgICAgICAgICAgICBCMltzXS5wdXNoKFtsMnQsIGwyLCBjb2VmcF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHMgPD0gblB1YmxpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBJQ1tzXS5wdXNoKFtsM3QsIGwzLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ1tzLSBuUHVibGljIC0xXSA9PT0gXCJ1bmRlZmluZWRcIikgQ1tzLSBuUHVibGljIC0xXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBDW3MtIG5QdWJsaWMgLTFdLnB1c2goW2wzdCwgbDMsIGNvZWZwXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29lZnMucHVzaChbMSwgYywgcywgY29lZnBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbkMgPSByMWNzX3JlYWRVTEUzMigpO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5DOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gcjFjc19yZWFkVUxFMzIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2VmcCA9IHIxY3NQb3M7XG4gICAgICAgICAgICAgICAgcjFjc1BvcyArPSBjdXJ2ZS5Gci5uODtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGwxdCA9IFRBVV9HMTtcbiAgICAgICAgICAgICAgICBjb25zdCBsMSA9IHNHMSpjO1xuICAgICAgICAgICAgICAgIGlmIChzIDw9IG5QdWJsaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBJQ1tzXSA9PT0gXCJ1bmRlZmluZWRcIikgSUNbc10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgSUNbc10ucHVzaChbbDF0LCBsMSwgY29lZnBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIENbcy0gblB1YmxpYyAtMV0gPT09IFwidW5kZWZpbmVkXCIpIENbcy0gblB1YmxpYyAtMV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgQ1tzLSBuUHVibGljIC0xXS5wdXNoKFtsMXQsIGwxLCBjb2VmcF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IG5QdWJsaWMgOyBzKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGwxdCA9IFRBVV9HMTtcbiAgICAgICAgICAgIGNvbnN0IGwxID0gc0cxKihyMWNzLm5Db25zdHJhaW50cyArIHMpO1xuICAgICAgICAgICAgY29uc3QgbDJ0ID0gQkVUQVRBVV9HMTtcbiAgICAgICAgICAgIGNvbnN0IGwyID0gc0cxKihyMWNzLm5Db25zdHJhaW50cyArIHMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBBW3NdID09PSBcInVuZGVmaW5lZFwiKSBBW3NdID0gW107XG4gICAgICAgICAgICBBW3NdLnB1c2goW2wxdCwgbDEsIC0xXSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIElDW3NdID09PSBcInVuZGVmaW5lZFwiKSBJQ1tzXSA9IFtdO1xuICAgICAgICAgICAgSUNbc10ucHVzaChbbDJ0LCBsMiwgLTFdKTtcbiAgICAgICAgICAgIGNvZWZzLnB1c2goWzAsIHIxY3MubkNvbnN0cmFpbnRzICsgcywgcywgLTFdKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCA0KTtcblxuICAgICAgICBjb25zdCBidWZmU2VjdGlvbiA9IG5ldyBCaWdCdWZmZXIoY29lZnMubGVuZ3RoKigxMitjdXJ2ZS5Gci5uOCkgKyA0KTtcblxuICAgICAgICBjb25zdCBidWZmNCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCBidWZmNFYgPSBuZXcgRGF0YVZpZXcoYnVmZjQuYnVmZmVyKTtcbiAgICAgICAgYnVmZjRWLnNldFVpbnQzMigwLCBjb2Vmcy5sZW5ndGgsIHRydWUpO1xuICAgICAgICBidWZmU2VjdGlvbi5zZXQoYnVmZjQpO1xuICAgICAgICBsZXQgY29lZnNQb3MgPSA0O1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8Y29lZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKGklMTAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgY29lZmZzOiAke2l9LyR7Y29lZnMubGVuZ3RofWApO1xuICAgICAgICAgICAgd3JpdGVDb2VmKGNvZWZzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShidWZmU2VjdGlvbik7XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlQ29lZihjKSB7XG4gICAgICAgICAgICBidWZmQ29lZmZWLnNldFVpbnQzMigwLCBjWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIGJ1ZmZDb2VmZlYuc2V0VWludDMyKDQsIGNbMV0sIHRydWUpO1xuICAgICAgICAgICAgYnVmZkNvZWZmVi5zZXRVaW50MzIoOCwgY1syXSwgdHJ1ZSk7XG4gICAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICAgIGlmIChjWzNdPj0wKSB7XG4gICAgICAgICAgICAgICAgbiA9IGN1cnZlLkZyLmZyb21ScHJMRShzUjFjcy5zbGljZShjWzNdLCBjWzNdICsgY3VydmUuRnIubjgpLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IGN1cnZlLkZyLmZyb21ScHJMRShiT25lLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5SMiA9IGN1cnZlLkZyLm11bChuLCBSMnIpO1xuICAgICAgICAgICAgY3VydmUuRnIudG9ScHJMRShidWZmQ29lZmYsIDEyLCBuUjIpO1xuICAgICAgICAgICAgYnVmZlNlY3Rpb24uc2V0KGJ1ZmZDb2VmZiwgY29lZnNQb3MpO1xuICAgICAgICAgICAgY29lZnNQb3MgKz0gYnVmZkNvZWZmLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFuZFdyaXRlUG9pbnRzKGlkU2VjdGlvbiwgZ3JvdXBOYW1lLCBhcnIsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IENIVU5LX1NJWkU9IDE8PDE1O1xuICAgICAgICBjb25zdCBHID0gY3VydmVbZ3JvdXBOYW1lXTtcblxuICAgICAgICBoYXNoVTMyKGFyci5sZW5ndGgpO1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIGlkU2VjdGlvbik7XG5cbiAgICAgICAgbGV0IG9wUHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBsZXQgaT0wO1xuICAgICAgICB3aGlsZSAoaTxhcnIubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIGxldCB0PTA7XG4gICAgICAgICAgICB3aGlsZSAoKGk8YXJyLmxlbmd0aCkmJih0PGN1cnZlLnRtLmNvbmN1cnJlbmN5KSkge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIpICBsb2dnZXIuZGVidWcoYFdyaXRpbmcgcG9pbnRzIHN0YXJ0ICR7c2VjdGlvbk5hbWV9OiAke2l9LyR7YXJyLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICBsZXQgbiA9IDE7XG4gICAgICAgICAgICAgICAgbGV0IG5QID0gKGFycltpXSA/IGFycltpXS5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGkgKyBuIDwgYXJyLmxlbmd0aCkgJiYgKG5QICsgKGFycltpK25dID8gYXJyW2krbl0ubGVuZ3RoIDogMCkgPCBDSFVOS19TSVpFKSAmJiAobjxDSFVOS19TSVpFKSkge1xuICAgICAgICAgICAgICAgICAgICBuUCArPSAoYXJyW2krbl0gPyBhcnJbaStuXS5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgbiArKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyID0gYXJyLnNsaWNlKGksIGkgKyBuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfaSA9IGk7XG4gICAgICAgICAgICAgICAgb3BQcm9taXNlcy5wdXNoKGNvbXBvc2VBbmRXcml0ZVBvaW50c1RocmVhZChncm91cE5hbWUsIHN1YkFyciwgbG9nZ2VyLCBzZWN0aW9uTmFtZSkudGhlbiggKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlcikgIGxvZ2dlci5kZWJ1ZyhgV3JpdGluZyBwb2ludHMgZW5kICR7c2VjdGlvbk5hbWV9OiAke19pfS8ke2Fyci5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgdCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChvcFByb21pc2VzKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaz0wOyBrPHJlc3VsdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZShyZXN1bHRba11bMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBHLmJhdGNoTEVNdG9VKHJlc3VsdFtrXVswXSk7XG4gICAgICAgICAgICAgICAgY3NIYXNoZXIudXBkYXRlKGJ1ZmYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3BQcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wb3NlQW5kV3JpdGVQb2ludHNUaHJlYWQoZ3JvdXBOYW1lLCBhcnIsIGxvZ2dlciwgc2VjdGlvbk5hbWUpIHtcbiAgICAgICAgY29uc3QgRyA9IGN1cnZlW2dyb3VwTmFtZV07XG4gICAgICAgIGNvbnN0IHNHaW4gPSBHLkYubjgqMjtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBHLkYubjgqMztcbiAgICAgICAgY29uc3Qgc0dvdXQgPSBHLkYubjgqMjtcbiAgICAgICAgbGV0IGZuRXhwLCBmbk11bHRpRXhwLCBmbkJhdGNoVG9BZmZpbmUsIGZuWmVybztcbiAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBcIkcxXCIpIHtcbiAgICAgICAgICAgIGZuRXhwID0gXCJnMW1fdGltZXNTY2FsYXJBZmZpbmVcIjtcbiAgICAgICAgICAgIGZuTXVsdGlFeHAgPSBcImcxbV9tdWx0aWV4cEFmZmluZVwiO1xuICAgICAgICAgICAgZm5CYXRjaFRvQWZmaW5lID0gXCJnMW1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgZm5aZXJvID0gXCJnMW1femVyb1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwTmFtZSA9PSBcIkcyXCIpIHtcbiAgICAgICAgICAgIGZuRXhwID0gXCJnMm1fdGltZXNTY2FsYXJBZmZpbmVcIjtcbiAgICAgICAgICAgIGZuTXVsdGlFeHAgPSBcImcybV9tdWx0aWV4cEFmZmluZVwiO1xuICAgICAgICAgICAgZm5CYXRjaFRvQWZmaW5lID0gXCJnMm1fYmF0Y2hUb0FmZmluZVwiO1xuICAgICAgICAgICAgZm5aZXJvID0gXCJnMm1femVyb1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWNjID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSBhY2MgKz0gYXJyW2ldID8gYXJyW2ldLmxlbmd0aCA6IDA7XG4gICAgICAgIGxldCBiQmFzZXMsIGJTY2FsYXJzO1xuICAgICAgICBpZiAoYWNjPiAyPDwxNCkge1xuICAgICAgICAgICAgYkJhc2VzID0gbmV3IEJpZ0J1ZmZlcihhY2Mqc0dpbik7XG4gICAgICAgICAgICBiU2NhbGFycyA9IG5ldyBCaWdCdWZmZXIoYWNjKmN1cnZlLkZyLm44KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJCYXNlcyA9IG5ldyBVaW50OEFycmF5KGFjYypzR2luKTtcbiAgICAgICAgICAgIGJTY2FsYXJzID0gbmV3IFVpbnQ4QXJyYXkoYWNjKmN1cnZlLkZyLm44KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcEIgPTA7XG4gICAgICAgIGxldCBwUyA9MDtcblxuICAgICAgICBjb25zdCBzQnVmZnMgPSBbXG4gICAgICAgICAgICBzVGF1RzEsXG4gICAgICAgICAgICBzVGF1RzIsXG4gICAgICAgICAgICBzQWxwaGFUYXVHMSxcbiAgICAgICAgICAgIHNCZXRhVGF1RzFcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBiT25lID0gbmV3IFVpbnQ4QXJyYXkoY3VydmUuRnIubjgpO1xuICAgICAgICBjdXJ2ZS5Gci50b1JwckxFKGJPbmUsIDAsIGN1cnZlLkZyLmUoMSkpO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWFycltpXSkgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8YXJyW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaikmJihqJTEwMDAwID09IDApKSAgbG9nZ2VyLmRlYnVnKGBDb25maWd1cmluZyBiaWcgYXJyYXkgJHtzZWN0aW9uTmFtZX06ICR7an0vJHthcnJbaV0ubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIGJCYXNlcy5zZXQoXG4gICAgICAgICAgICAgICAgICAgIHNCdWZmc1thcnJbaV1bal1bMF1dLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzFdICsgc0dpblxuICAgICAgICAgICAgICAgICAgICApLCBvZmZzZXQqc0dpblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFycltpXVtqXVsyXT49MCkge1xuICAgICAgICAgICAgICAgICAgICBiU2NhbGFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzUjFjcy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaV1bal1bMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyW2ldW2pdWzJdICsgY3VydmUuRnIubjhcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQqY3VydmUuRnIubjhcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiU2NhbGFycy5zZXQoYk9uZSwgb2Zmc2V0KmN1cnZlLkZyLm44KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyci5sZW5ndGg+MSkge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBiQmFzZXN9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogYlNjYWxhcnN9KTtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMiwgbGVuOiBhcnIubGVuZ3RoKnNHbWlkfSk7XG4gICAgICAgICAgICBwQiA9IDA7XG4gICAgICAgICAgICBwUyA9IDA7XG4gICAgICAgICAgICBsZXQgcEQgPTA7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcnJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuWmVybywgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyLCBvZmZzZXQ6IHBEfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgICAgIHBEICs9IHNHbWlkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFycltpXS5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5FeHAsIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge3ZhcjogMCwgb2Zmc2V0OiBwQn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAxLCBvZmZzZXQ6IHBTfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWw6IGN1cnZlLkZyLm44fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDIsIG9mZnNldDogcER9XG4gICAgICAgICAgICAgICAgICAgIF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogZm5NdWx0aUV4cCwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAwLCBvZmZzZXQ6IHBCfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YXI6IDEsIG9mZnNldDogcFN9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogY3VydmUuRnIubjh9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbDogYXJyW2ldLmxlbmd0aH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFyOiAyLCBvZmZzZXQ6IHBEfVxuICAgICAgICAgICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBCICs9IHNHaW4qYXJyW2ldLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBwUyArPSBjdXJ2ZS5Gci5uOCphcnJbaV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHBEICs9IHNHbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IGZuQmF0Y2hUb0FmZmluZSwgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICAgICAge3ZhbDogYXJyLmxlbmd0aH0sXG4gICAgICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICBdfSk7XG4gICAgICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDIsIGxlbjogYXJyLmxlbmd0aCpzR291dH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShiQmFzZXMsIGJTY2FsYXJzLCBsb2dnZXIsIHNlY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIHJlcyA9IFsgRy50b0FmZmluZShyZXMpIF07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBhc3luYyBmdW5jdGlvbiBoYXNoSFBvaW50cygpIHtcbiAgICAgICAgY29uc3QgQ0hVTktfU0laRSA9IDE8PDE0O1xuXG4gICAgICAgIGhhc2hVMzIoZG9tYWluU2l6ZS0xKTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZG9tYWluU2l6ZS0xOyBpKz0gQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgIGxvZ2dlci5kZWJ1ZyhgSGFzaGluZ0hQb2ludHM6ICR7aX0vJHtkb21haW5TaXplfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKGRvbWFpblNpemUtMSwgQ0hVTktfU0laRSk7XG4gICAgICAgICAgICBhd2FpdCBoYXNoSFBvaW50c0NodW5rKGksIG4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaEhQb2ludHNDaHVuayhvZmZzZXQsIG5Qb2ludHMpIHtcbiAgICAgICAgY29uc3QgYnVmZjEgPSBhd2FpdCBmZFBUYXUucmVhZChuUG9pbnRzICpzRzEsIHNlY3Rpb25zUFRhdVsyXVswXS5wICsgKG9mZnNldCArIGRvbWFpblNpemUpKnNHMSk7XG4gICAgICAgIGNvbnN0IGJ1ZmYyID0gYXdhaXQgZmRQVGF1LnJlYWQoblBvaW50cyAqc0cxLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIG9mZnNldCpzRzEpO1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeT0gY3VydmUudG0uY29uY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IG5Qb2ludHNQZXJUaHJlYWQgPSBNYXRoLmZsb29yKG5Qb2ludHMgLyBjb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IGNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50c1BlclRocmVhZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKm5Qb2ludHNQZXJUaHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YkJ1ZmYxID0gYnVmZjEuc2xpY2UoaSpuUG9pbnRzUGVyVGhyZWFkKnNHMSwgKGkqblBvaW50c1BlclRocmVhZCtuKSpzRzEpO1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVmZjIgPSBidWZmMi5zbGljZShpKm5Qb2ludHNQZXJUaHJlYWQqc0cxLCAoaSpuUG9pbnRzUGVyVGhyZWFkK24pKnNHMSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goaGFzaEhQb2ludHNUaHJlYWQoc3ViQnVmZjEsIHN1YkJ1ZmYyKSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxyZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNzSGFzaGVyLnVwZGF0ZShyZXN1bHRbaV1bMF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFzaEhQb2ludHNUaHJlYWQoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmMS5ieXRlTGVuZ3RoL3NHMTtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBjdXJ2ZS5HMS5GLm44KjM7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBbXTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NTRVRcIiwgdmFyOiAwLCBidWZmOiBidWZmMX0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDEsIGJ1ZmY6IGJ1ZmYyfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DXCIsIHZhcjogMiwgbGVuOiBuUG9pbnRzKnNHbWlkfSk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgIHRhc2sucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBcIkNBTExcIixcbiAgICAgICAgICAgICAgICBmbk5hbWU6IFwiZzFtX3N1YkFmZmluZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICB7dmFyOiAwLCBvZmZzZXQ6IGkqc0cxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMSwgb2Zmc2V0OiBpKnNHMX0sXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDIsIG9mZnNldDogaSpzR21pZH0sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwiZzFtX2JhdGNoVG9BZmZpbmVcIiwgcGFyYW1zOiBbXG4gICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgICAgIHt2YWw6IG5Qb2ludHN9LFxuICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgIF19KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQ0FMTFwiLCBmbk5hbWU6IFwiZzFtX2JhdGNoTEVNdG9VXCIsIHBhcmFtczogW1xuICAgICAgICAgICAge3ZhcjogMn0sXG4gICAgICAgICAgICB7dmFsOiBuUG9pbnRzfSxcbiAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICBdfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkdFVFwiLCBvdXQ6IDAsIHZhcjogMiwgbGVuOiBuUG9pbnRzKnNHMX0pO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN1cnZlLnRtLnF1ZXVlQWN0aW9uKHRhc2spO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzaFUzMihuKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlYgPSBuZXcgRGF0YVZpZXcoYnVmZi5idWZmZXIsIGJ1ZmYuYnl0ZU9mZnNldCwgYnVmZi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgYnVmZlYuc2V0VWludDMyKDAsIG4sIGZhbHNlKTtcbiAgICAgICAgY3NIYXNoZXIudXBkYXRlKGJ1ZmYpO1xuICAgIH1cblxufVxuXG5cbiIsIlxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMmV4cG9ydE1QQ1BhcmFtcyh6a2V5TmFtZSwgbXBjcGFyYW1zTmFtZSwgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCB7ZmQ6IGZkWktleSwgc2VjdGlvbnM6IHNlY3Rpb25zWktleX0gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCBzZWN0aW9uc1pLZXkpO1xuICAgIGlmICh6a2V5LnByb3RvY29sICE9IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZ3JvdGgxNlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG4gICAgY29uc3Qgc0cxID0gY3VydmUuRzEuRi5uOCoyO1xuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkcyLkYubjgqMjtcblxuICAgIGNvbnN0IG1wY1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkWktleSwgY3VydmUsIHNlY3Rpb25zWktleSk7XG5cbiAgICBjb25zdCBmZE1QQ1BhcmFtcyA9IGF3YWl0IGZhc3RGaWxlLmNyZWF0ZU92ZXJyaWRlKG1wY3BhcmFtc05hbWUpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVmVyaWZpY2F0aW9uIEtleSBTZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgYXdhaXQgd3JpdGVHMSh6a2V5LnZrX2FscGhhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzEoemtleS52a19iZXRhXzEpO1xuICAgIGF3YWl0IHdyaXRlRzIoemtleS52a19iZXRhXzIpO1xuICAgIGF3YWl0IHdyaXRlRzIoemtleS52a19nYW1tYV8yKTtcbiAgICBhd2FpdCB3cml0ZUcxKHprZXkudmtfZGVsdGFfMSk7XG4gICAgYXdhaXQgd3JpdGVHMih6a2V5LnZrX2RlbHRhXzIpO1xuXG4gICAgLy8gSUNcbiAgICBsZXQgYnVmZkJhc2VzSUM7XG4gICAgYnVmZkJhc2VzSUMgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uc1pLZXksIDMpO1xuICAgIGJ1ZmZCYXNlc0lDID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hMRU10b1UoYnVmZkJhc2VzSUMpO1xuXG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzSUMpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gaCBTZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgY29uc3QgYnVmZkJhc2VzSF9Mb2RkID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgc2VjdGlvbnNaS2V5LCA5KTtcblxuICAgIGxldCBidWZmQmFzZXNIX1RhdTtcbiAgICBidWZmQmFzZXNIX1RhdSA9IGF3YWl0IGN1cnZlLkcxLmZmdChidWZmQmFzZXNIX0xvZGQsIFwiYWZmaW5lXCIsIFwiamFjb2JpYW5cIiwgbG9nZ2VyKTtcbiAgICBidWZmQmFzZXNIX1RhdSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoQXBwbHlLZXkoYnVmZkJhc2VzSF9UYXUsIGN1cnZlLkZyLm5lZyhjdXJ2ZS5Gci5lKDIpKSwgY3VydmUuRnIud1t6a2V5LnBvd2VyKzFdLCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlcik7XG5cbiAgICAvLyBSZW1vdmUgbGFzdCBlbGVtZW50LiAgKFRoZSBkZWdyZWUgb2YgSCB3aWxsIGJlIGFsbHdheXMgbS0yKVxuICAgIGJ1ZmZCYXNlc0hfVGF1ID0gYnVmZkJhc2VzSF9UYXUuc2xpY2UoMCwgYnVmZkJhc2VzSF9UYXUuYnl0ZUxlbmd0aCAtIHNHMSk7XG4gICAgYnVmZkJhc2VzSF9UYXUgPSBhd2FpdCBjdXJ2ZS5HMS5iYXRjaExFTXRvVShidWZmQmFzZXNIX1RhdSk7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzSF9UYXUpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTCBzZWN0aW9uXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgbGV0IGJ1ZmZCYXNlc0M7XG4gICAgYnVmZkJhc2VzQyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgOCk7XG4gICAgYnVmZkJhc2VzQyA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJ1ZmZCYXNlc0MpO1xuICAgIGF3YWl0IHdyaXRlUG9pbnRBcnJheShcIkcxXCIsIGJ1ZmZCYXNlc0MpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQSBTZWN0aW9uIChDIHNlY3Rpb24pXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgbGV0IGJ1ZmZCYXNlc0E7XG4gICAgYnVmZkJhc2VzQSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNSk7XG4gICAgYnVmZkJhc2VzQSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoTEVNdG9VKGJ1ZmZCYXNlc0EpO1xuICAgIGF3YWl0IHdyaXRlUG9pbnRBcnJheShcIkcxXCIsIGJ1ZmZCYXNlc0EpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQjEgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGxldCBidWZmQmFzZXNCMTtcbiAgICBidWZmQmFzZXNCMSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNik7XG4gICAgYnVmZkJhc2VzQjEgPSBhd2FpdCBjdXJ2ZS5HMS5iYXRjaExFTXRvVShidWZmQmFzZXNCMSk7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzFcIiwgYnVmZkJhc2VzQjEpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIGxldCBidWZmQmFzZXNCMjtcbiAgICBidWZmQmFzZXNCMiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHNlY3Rpb25zWktleSwgNyk7XG4gICAgYnVmZkJhc2VzQjIgPSBhd2FpdCBjdXJ2ZS5HMi5iYXRjaExFTXRvVShidWZmQmFzZXNCMik7XG4gICAgYXdhaXQgd3JpdGVQb2ludEFycmF5KFwiRzJcIiwgYnVmZkJhc2VzQjIpO1xuXG4gICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgYXdhaXQgd3JpdGVVMzIobXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGk9MDsgaTxtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV07XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoYy5kZWx0YUFmdGVyKTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShjLmRlbHRhLmcxX3MpO1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGMuZGVsdGEuZzFfc3gpO1xuICAgICAgICBhd2FpdCB3cml0ZUcyKGMuZGVsdGEuZzJfc3B4KTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYy50cmFuc2NyaXB0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZE1QQ1BhcmFtcy5jbG9zZSgpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMShQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzEpO1xuICAgICAgICBjdXJ2ZS5HMS50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgICAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRNUENQYXJhbXMud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVQb2ludEFycmF5KGdyb3VwTmFtZSwgYnVmZikge1xuICAgICAgICBsZXQgc0c7XG4gICAgICAgIGlmIChncm91cE5hbWUgPT0gXCJHMVwiKSB7XG4gICAgICAgICAgICBzRyA9IHNHMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNHID0gc0cyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZlNpemUgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlNpemVWID0gbmV3IERhdGFWaWV3KGJ1ZmZTaXplLmJ1ZmZlciwgYnVmZlNpemUuYnl0ZU9mZnNldCwgYnVmZlNpemUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGJ1ZmZTaXplVi5zZXRVaW50MzIoMCwgYnVmZi5ieXRlTGVuZ3RoIC8gc0csIGZhbHNlKTtcblxuICAgICAgICBhd2FpdCBmZE1QQ1BhcmFtcy53cml0ZShidWZmU2l6ZSk7XG4gICAgICAgIGF3YWl0IGZkTVBDUGFyYW1zLndyaXRlKGJ1ZmYpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlVTMyKG4pIHtcbiAgICAgICAgY29uc3QgYnVmZlNpemUgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgYnVmZlNpemVWID0gbmV3IERhdGFWaWV3KGJ1ZmZTaXplLmJ1ZmZlciwgYnVmZlNpemUuYnl0ZU9mZnNldCwgYnVmZlNpemUuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGJ1ZmZTaXplVi5zZXRVaW50MzIoMCwgbiwgZmFsc2UpO1xuXG4gICAgICAgIGF3YWl0IGZkTVBDUGFyYW1zLndyaXRlKGJ1ZmZTaXplKTtcbiAgICB9XG5cblxuXG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBmYXN0RmlsZSBmcm9tIFwiZmFzdGZpbGVcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgYXMgZ2V0Q3VydmUgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwaGFzZTJpbXBvcnRNUENQYXJhbXMoemtleU5hbWVPbGQsIG1wY3BhcmFtc05hbWUsIHprZXlOYW1lTmV3LCBuYW1lLCBsb2dnZXIpIHtcblxuICAgIGNvbnN0IHtmZDogZmRaS2V5T2xkLCBzZWN0aW9uczogc2VjdGlvbnNaS2V5T2xkfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5TmFtZU9sZCwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXlIZWFkZXIgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZFpLZXlPbGQsIHNlY3Rpb25zWktleU9sZCwgZmFsc2UpO1xuICAgIGlmICh6a2V5SGVhZGVyLnByb3RvY29sICE9IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZ3JvdGgxNlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXlIZWFkZXIucSk7XG4gICAgY29uc3Qgc0cxID0gY3VydmUuRzEuRi5uOCoyO1xuICAgIGNvbnN0IHNHMiA9IGN1cnZlLkcyLkYubjgqMjtcblxuICAgIGNvbnN0IG9sZE1QQ1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkWktleU9sZCwgY3VydmUsIHNlY3Rpb25zWktleU9sZCk7XG4gICAgY29uc3QgbmV3TVBDUGFyYW1zID0ge307XG5cbiAgICBjb25zdCBmZE1QQ1BhcmFtcyA9IGF3YWl0IGZhc3RGaWxlLnJlYWRFeGlzdGluZyhtcGNwYXJhbXNOYW1lKTtcblxuICAgIGZkTVBDUGFyYW1zLnBvcyA9XG4gICAgICAgIHNHMSozICsgc0cyKjMgKyAgICAgICAgICAgICAgICAgICAgIC8vIHZLZXlcbiAgICAgICAgOCArIHNHMSp6a2V5SGVhZGVyLm5WYXJzICsgICAgICAgICAgICAgIC8vIElDICsgQ1xuICAgICAgICA0ICsgc0cxKih6a2V5SGVhZGVyLmRvbWFpblNpemUtMSkgKyAgICAgLy8gSFxuICAgICAgICA0ICsgc0cxKnprZXlIZWFkZXIublZhcnMgKyAgICAgICAgICAgICAgLy8gQVxuICAgICAgICA0ICsgc0cxKnprZXlIZWFkZXIublZhcnMgKyAgICAgICAgICAgICAgLy8gQjFcbiAgICAgICAgNCArIHNHMip6a2V5SGVhZGVyLm5WYXJzOyAgICAgICAgICAgICAgIC8vIEIyXG5cbiAgICAvLyBjc0hhc2hcbiAgICBuZXdNUENQYXJhbXMuY3NIYXNoID0gIGF3YWl0IGZkTVBDUGFyYW1zLnJlYWQoNjQpO1xuXG4gICAgY29uc3QgbkNvbnR0cmlidXRpb25zID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgbmV3TVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bkNvbnR0cmlidXRpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IHsgZGVsdGE6e30gfTtcbiAgICAgICAgYy5kZWx0YUFmdGVyID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zeCA9IGF3YWl0IHJlYWRHMShmZE1QQ1BhcmFtcyk7XG4gICAgICAgIGMuZGVsdGEuZzJfc3B4ID0gYXdhaXQgcmVhZEcyKGZkTVBDUGFyYW1zKTtcbiAgICAgICAgYy50cmFuc2NyaXB0ID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZCg2NCk7XG4gICAgICAgIGlmIChpPG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgYy50eXBlID0gb2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0udHlwZTtcbiAgICAgICAgICAgIGlmIChjLnR5cGU9PTEpIHtcbiAgICAgICAgICAgICAgICBjLmJlYWNvbkhhc2ggPSBvbGRNUENQYXJhbXMuY29udHJpYnV0aW9uc1tpXS5iZWFjb25IYXNoO1xuICAgICAgICAgICAgICAgIGMubnVtSXRlcmF0aW9uc0V4cCA9IG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldLm51bUl0ZXJhdGlvbnNFeHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0ubmFtZSkge1xuICAgICAgICAgICAgICAgIGMubmFtZSA9IG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3TVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMucHVzaChjKTtcbiAgICB9XG5cbiAgICBpZiAoIW1pc2MuaGFzaElzRXF1YWwobmV3TVBDUGFyYW1zLmNzSGFzaCwgb2xkTVBDUGFyYW1zLmNzSGFzaCkpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSGFzaCBvZiB0aGUgb3JpZ2luYWwgY2lyY3VpdCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBNUEMgb25lXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9sZE1QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCA+IG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJUaGUgaW1wb2VydGVkIGZpbGUgZG9lcyBub3QgaW5jbHVkZSBuZXcgY29udHJpYnV0aW9uc1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGk9MDsgaTxvbGRNUENQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWNvbnRyaWJ1dGlvbklzRXF1YWwob2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0sIG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zW2ldKSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBQcmV2aW9zIGNvbnRyaWJ1dGlvbiAke2l9IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIFNldCB0aGUgc2FtZSBuYW1lIHRvIGFsbCBuZXcgY29udHJvYnV0aW9uc1xuICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGk9b2xkTVBDUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpPG5ld01QQ1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdNUENQYXJhbXMuY29udHJpYnV0aW9uc1tpXS5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZkWktleU5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuICAgIGZkTVBDUGFyYW1zLnBvcyA9IDA7XG5cbiAgICAvLyBIZWFkZXJcbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxOyAgLy8gaWdub3JlIGFscGhhMSAoa2VlcCBvcmlnaW5hbClcbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxOyAgLy8gaWdub3JlIGJldGExXG4gICAgZmRNUENQYXJhbXMucG9zICs9IHNHMjsgIC8vIGlnbm9yZSBiZXRhMlxuICAgIGZkTVBDUGFyYW1zLnBvcyArPSBzRzI7ICAvLyBpZ25vcmUgZ2FtbWEyXG4gICAgemtleUhlYWRlci52a19kZWx0YV8xID0gYXdhaXQgcmVhZEcxKGZkTVBDUGFyYW1zKTtcbiAgICB6a2V5SGVhZGVyLnZrX2RlbHRhXzIgPSBhd2FpdCByZWFkRzIoZmRNUENQYXJhbXMpO1xuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZFpLZXlOZXcsIHprZXlIZWFkZXIpO1xuXG4gICAgLy8gSUMgKEtlZXAgb3JpZ2luYWwpXG4gICAgY29uc3QgbklDID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5JQyAhPSB6a2V5SGVhZGVyLm5QdWJsaWMgKzEpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRzIGluIElDXCIpO1xuICAgICAgICBhd2FpdCBmZFpLZXlOZXcuZGlzY2FyZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZkTVBDUGFyYW1zLnBvcyArPSBzRzEqKHprZXlIZWFkZXIublB1YmxpYysxKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgMyk7XG5cbiAgICAvLyBDb2VmZnMgKEtlZXAgb3JpZ2luYWwpXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkWktleU9sZCwgc2VjdGlvbnNaS2V5T2xkLCBmZFpLZXlOZXcsIDQpO1xuXG4gICAgLy8gSCBTZWN0aW9uXG4gICAgY29uc3QgbkggPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkVUJFMzIoKTtcbiAgICBpZiAobkggIT0gemtleUhlYWRlci5kb21haW5TaXplLTEpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgcG9pbnRzIGluIEhcIik7XG4gICAgICAgIGF3YWl0IGZkWktleU5ldy5kaXNjYXJkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGJ1ZmZIO1xuICAgIGNvbnN0IGJ1ZmZUYXVVID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZChzRzEqKHprZXlIZWFkZXIuZG9tYWluU2l6ZS0xKSk7XG4gICAgY29uc3QgYnVmZlRhdUxFTSA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoVXRvTEVNKGJ1ZmZUYXVVKTtcbiAgICBidWZmSCA9IG5ldyBVaW50OEFycmF5KHprZXlIZWFkZXIuZG9tYWluU2l6ZSpzRzEpO1xuICAgIGJ1ZmZILnNldChidWZmVGF1TEVNKTsgICAvLyBMZXQgdGhlIGxhc3Qgb25lIHRvIHplcm8uXG4gICAgY3VydmUuRzEudG9ScHJMRU0oYnVmZkgsIHNHMSooemtleUhlYWRlci5kb21haW5TaXplLTEpLCBjdXJ2ZS5HMS56ZXJvQWZmaW5lKTtcbiAgICBjb25zdCBuMkludiA9IGN1cnZlLkZyLm5lZyhjdXJ2ZS5Gci5pbnYoY3VydmUuRnIuZSgyKSkpO1xuICAgIGNvbnN0IHdJbnYgPSBjdXJ2ZS5Gci5pbnYoY3VydmUuRnIud1t6a2V5SGVhZGVyLnBvd2VyKzFdKTtcbiAgICBidWZmSCA9IGF3YWl0IGN1cnZlLkcxLmJhdGNoQXBwbHlLZXkoYnVmZkgsIG4ySW52LCB3SW52LCBcImFmZmluZVwiLCBcImphY29iaWFuXCIsIGxvZ2dlcik7XG4gICAgYnVmZkggPSBhd2FpdCBjdXJ2ZS5HMS5pZmZ0KGJ1ZmZILCBcImphY29iaWFuXCIsIFwiYWZmaW5lXCIsIGxvZ2dlcik7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleU5ldywgOSk7XG4gICAgYXdhaXQgZmRaS2V5TmV3LndyaXRlKGJ1ZmZIKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uKGZkWktleU5ldyk7XG5cbiAgICAvLyBDIFNlY2lvbiAoTCBzZWN0aW9uKVxuICAgIGNvbnN0IG5MID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5MICE9ICh6a2V5SGVhZGVyLm5WYXJzLXprZXlIZWFkZXIublB1YmxpYy0xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHMgaW4gTFwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgYnVmZkw7XG4gICAgYnVmZkwgPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkKHNHMSooemtleUhlYWRlci5uVmFycy16a2V5SGVhZGVyLm5QdWJsaWMtMSkpO1xuICAgIGJ1ZmZMID0gYXdhaXQgY3VydmUuRzEuYmF0Y2hVdG9MRU0oYnVmZkwpO1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFdyaXRlU2VjdGlvbihmZFpLZXlOZXcsIDgpO1xuICAgIGF3YWl0IGZkWktleU5ldy53cml0ZShidWZmTCk7XG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFdyaXRlU2VjdGlvbihmZFpLZXlOZXcpO1xuXG4gICAgLy8gQSBTZWN0aW9uXG4gICAgY29uc3QgbkEgPSBhd2FpdCBmZE1QQ1BhcmFtcy5yZWFkVUJFMzIoKTtcbiAgICBpZiAobkEgIT0gemtleUhlYWRlci5uVmFycykge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBwb2ludHMgaW4gQVwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgY29uc3QgbkIxID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5CMSAhPSB6a2V5SGVhZGVyLm5WYXJzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50cyBpbiBCMVwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cxKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNik7XG5cbiAgICAvLyBCMiBTZWN0aW9uXG4gICAgY29uc3QgbkIyID0gYXdhaXQgZmRNUENQYXJhbXMucmVhZFVCRTMyKCk7XG4gICAgaWYgKG5CMiAhPSB6a2V5SGVhZGVyLm5WYXJzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHBvaW50cyBpbiBCMlwiKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5TmV3LmRpc2NhcmQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmZE1QQ1BhcmFtcy5wb3MgKz0gc0cyKih6a2V5SGVhZGVyLm5WYXJzKTtcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRaS2V5T2xkLCBzZWN0aW9uc1pLZXlPbGQsIGZkWktleU5ldywgNyk7XG5cbiAgICBhd2FpdCB6a2V5VXRpbHMud3JpdGVNUENQYXJhbXMoZmRaS2V5TmV3LCBjdXJ2ZSwgbmV3TVBDUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkTVBDUGFyYW1zLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRaS2V5TmV3LmNsb3NlKCk7XG4gICAgYXdhaXQgZmRaS2V5T2xkLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMShmZCkge1xuICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChjdXJ2ZS5HMS5GLm44KjIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRzEuZnJvbVJwclVuY29tcHJlc3NlZChidWZmLCAwKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRzIoZmQpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkLnJlYWQoY3VydmUuRzIuRi5uOCoyKTtcbiAgICAgICAgcmV0dXJuIGN1cnZlLkcyLmZyb21ScHJVbmNvbXByZXNzZWQoYnVmZiwgMCk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBjb250cmlidXRpb25Jc0VxdWFsKGMxLCBjMikge1xuICAgICAgICBpZiAoIWN1cnZlLkcxLmVxKGMxLmRlbHRhQWZ0ZXIgICAsIGMyLmRlbHRhQWZ0ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghY3VydmUuRzEuZXEoYzEuZGVsdGEuZzFfcyAgICwgYzIuZGVsdGEuZzFfcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFjdXJ2ZS5HMS5lcShjMS5kZWx0YS5nMV9zeCAgLCBjMi5kZWx0YS5nMV9zeCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFjdXJ2ZS5HMi5lcShjMS5kZWx0YS5nMl9zcHggLCBjMi5kZWx0YS5nMl9zcHgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghbWlzYy5oYXNoSXNFcXVhbChjMS50cmFuc2NyaXB0LCBjMi50cmFuc2NyaXB0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IGhhc2hUb0cyIGFzIGhhc2hUb0cyIH0gZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuY29uc3Qgc2FtZVJhdGlvID0gbWlzYy5zYW1lUmF0aW87XG5pbXBvcnQge2hhc2hHMSwgaGFzaFB1YktleX0gZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgU2NhbGFyLCBDaGFDaGEsIEJpZ0J1ZmZlciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMnZlcmlmeUZyb21Jbml0KGluaXRGaWxlTmFtZSwgcFRhdUZpbGVOYW1lLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgbGV0IHNyO1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZCwgc2VjdGlvbnN9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHprZXlGaWxlTmFtZSwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXkgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZCwgc2VjdGlvbnMsIGZhbHNlKTtcbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IGdyb3RoMTZcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcblxuICAgIGNvbnN0IG1wY1BhcmFtcyA9IGF3YWl0IHprZXlVdGlscy5yZWFkTVBDUGFyYW1zKGZkLCBjdXJ2ZSwgc2VjdGlvbnMpO1xuXG4gICAgY29uc3QgYWNjdW11bGF0ZWRIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBhY2N1bXVsYXRlZEhhc2hlci51cGRhdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgbGV0IGN1ckRlbHRhID0gY3VydmUuRzEuZztcbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IG1wY1BhcmFtcy5jb250cmlidXRpb25zW2ldO1xuICAgICAgICBjb25zdCBvdXJIYXNoZXIgPSBtaXNjLmNsb25lSGFzaGVyKGFjY3VtdWxhdGVkSGFzaGVyKTtcblxuICAgICAgICBoYXNoRzEob3VySGFzaGVyLCBjdXJ2ZSwgYy5kZWx0YS5nMV9zKTtcbiAgICAgICAgaGFzaEcxKG91ckhhc2hlciwgY3VydmUsIGMuZGVsdGEuZzFfc3gpO1xuXG4gICAgICAgIGlmICghbWlzYy5oYXNoSXNFcXVhbChvdXJIYXNoZXIuZGlnZXN0KCksIGMudHJhbnNjcmlwdCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJTlZBTElEKCR7aX0pOiBJbmNvbnNpc3RlbnQgdHJhbnNjcmlwdCBgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbHRhX2cyX3NwID0gaGFzaFRvRzIoY3VydmUsIGMudHJhbnNjcmlwdCk7XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGMuZGVsdGEuZzFfcywgYy5kZWx0YS5nMV9zeCwgZGVsdGFfZzJfc3AsIGMuZGVsdGEuZzJfc3B4KTtcbiAgICAgICAgaWYgKHNyICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgSU5WQUxJRCgke2l9KTogcHVibGljIGtleSBHMSBhbmQgRzIgZG8gbm90IGhhdmUgdGhlIHNhbWUgcmF0aW9uIGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1ckRlbHRhLCBjLmRlbHRhQWZ0ZXIsIGRlbHRhX2cyX3NwLCBjLmRlbHRhLmcyX3NweCk7XG4gICAgICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElOVkFMSUQoJHtpfSk6IGRlbHRhQWZ0ZXIgZG9lcyBub3QgZmlsbG93IHRoZSBwdWJsaWMga2V5IGApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMudHlwZSA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLnJuZ0Zyb21CZWFjb25QYXJhbXMoYy5iZWFjb25IYXNoLCBjLm51bUl0ZXJhdGlvbnNFeHApO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRfcHJ2S2V5ID0gY3VydmUuRnIuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRfZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZF9nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoZXhwZWN0ZWRfZzFfcywgZXhwZWN0ZWRfcHJ2S2V5KSk7XG4gICAgICAgICAgICBpZiAoY3VydmUuRzEuZXEoZXhwZWN0ZWRfZzFfcywgYy5kZWx0YS5nMV9zKSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBJTlZBTElEKCR7aX0pOiBLZXkgb2YgdGhlIGJlYWNvbiBkb2VzIG5vdCBtYXRjaC4gZzFfcyBgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VydmUuRzEuZXEoZXhwZWN0ZWRfZzFfc3gsIGMuZGVsdGEuZzFfc3gpICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYElOVkFMSUQoJHtpfSk6IEtleSBvZiB0aGUgYmVhY29uIGRvZXMgbm90IG1hdGNoLiBnMV9zeCBgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBoYXNoUHViS2V5KGFjY3VtdWxhdGVkSGFzaGVyLCBjdXJ2ZSwgYyk7XG5cbiAgICAgICAgY29uc3QgY29udHJpYnV0aW9uSGFzaGVyID0gQmxha2UyYig2NCk7XG4gICAgICAgIGhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgYyk7XG5cbiAgICAgICAgYy5jb250cmlidXRpb25IYXNoID0gY29udHJpYnV0aW9uSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgICAgIGN1ckRlbHRhID0gYy5kZWx0YUFmdGVyO1xuICAgIH1cblxuXG4gICAgY29uc3Qge2ZkOiBmZEluaXQsIHNlY3Rpb25zOiBzZWN0aW9uc0luaXR9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKGluaXRGaWxlTmFtZSwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXlJbml0ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRJbml0LCBzZWN0aW9uc0luaXQsIGZhbHNlKTtcblxuICAgIGlmICh6a2V5SW5pdC5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5aW5pdCBmaWxlIGlzIG5vdCBncm90aDE2XCIpO1xuICAgIH1cblxuICAgIGlmICggICghU2NhbGFyLmVxKHprZXlJbml0LnEsIHprZXkucSkpXG4gICAgICAgIHx8KCFTY2FsYXIuZXEoemtleUluaXQuciwgemtleS5yKSlcbiAgICAgICAgfHwoemtleUluaXQubjhxICE9IHprZXkubjhxKVxuICAgICAgICB8fCh6a2V5SW5pdC5uOHIgIT0gemtleS5uOHIpKVxuICAgIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRDogIERpZmZlcmVudCBjdXJ2ZXNcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoICAoemtleUluaXQublZhcnMgIT0gemtleS5uVmFycylcbiAgICAgICAgfHwoemtleUluaXQublB1YmxpYyAhPSAgemtleS5uUHVibGljKVxuICAgICAgICB8fCh6a2V5SW5pdC5kb21haW5TaXplICE9IHprZXkuZG9tYWluU2l6ZSkpXG4gICAge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgRGlmZmVyZW50IGNpcmN1aXQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY3VydmUuRzEuZXEoemtleS52a19hbHBoYV8xLCB6a2V5SW5pdC52a19hbHBoYV8xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBhbHBoYTFcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcSh6a2V5LnZrX2JldGFfMSwgemtleUluaXQudmtfYmV0YV8xKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBiZXRhMVwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnZlLkcyLmVxKHprZXkudmtfYmV0YV8yLCB6a2V5SW5pdC52a19iZXRhXzIpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIGJldGEyXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VydmUuRzIuZXEoemtleS52a19nYW1tYV8yLCB6a2V5SW5pdC52a19nYW1tYV8yKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBnYW1tYTJcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJ2ZS5HMS5lcSh6a2V5LnZrX2RlbHRhXzEsIGN1ckRlbHRhKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBkZWx0YTFcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIGN1cnZlLkcxLmcsIGN1ckRlbHRhLCBjdXJ2ZS5HMi5nLCB6a2V5LnZrX2RlbHRhXzIpO1xuICAgIGlmIChzciAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJTlZBTElEOiAgSW52YWxpZCBkZWx0YTJcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBtcGNQYXJhbXNJbml0ID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRJbml0LCBjdXJ2ZSwgc2VjdGlvbnNJbml0KTtcbiAgICBpZiAoIW1pc2MuaGFzaElzRXF1YWwobXBjUGFyYW1zLmNzSGFzaCwgbXBjUGFyYW1zSW5pdC5jc0hhc2gpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBDaXJjdWl0IGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc2l6ZXMgb2Ygc2VjdGlvbnNcbiAgICBpZiAoc2VjdGlvbnNbOF1bMF0uc2l6ZSAhPSBzRzEqKHprZXkublZhcnMtemtleS5uUHVibGljLTEpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIEwgc2VjdGlvbiBzaXplXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25zWzldWzBdLnNpemUgIT0gc0cxKih6a2V5LmRvbWFpblNpemUpKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIklOVkFMSUQ6ICBJbnZhbGlkIEggc2VjdGlvbiBzaXplXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHNzO1xuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDMpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSU5WQUxJRDogIElDIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDQpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQ29lZmZzIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDUpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQSBzZWN0aW9uIGlzIG5vdCBpZGVudGljYWxcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5zZWN0aW9uSXNFcXVhbChmZCwgc2VjdGlvbnMsIGZkSW5pdCwgc2VjdGlvbnNJbml0LCA2KTtcbiAgICBpZiAoIXNzKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcIkIxIHNlY3Rpb24gaXMgbm90IGlkZW50aWNhbFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnNlY3Rpb25Jc0VxdWFsKGZkLCBzZWN0aW9ucywgZmRJbml0LCBzZWN0aW9uc0luaXQsIDcpO1xuICAgIGlmICghc3MpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiQjIgc2VjdGlvbiBpcyBub3QgaWRlbnRpY2FsXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgTFxuICAgIHNyID0gYXdhaXQgc2VjdGlvbkhhc1NhbWVSYXRpbyhcIkcxXCIsIGZkSW5pdCwgc2VjdGlvbnNJbml0LCBmZCwgc2VjdGlvbnMsIDgsIHprZXkudmtfZGVsdGFfMiwgemtleUluaXQudmtfZGVsdGFfMiwgXCJMIHNlY3Rpb25cIik7XG4gICAgaWYgKHNyIT09dHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJMIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBIXG4gICAgc3IgPSBhd2FpdCBzYW1lUmF0aW9IKCk7XG4gICAgaWYgKHNyIT09dHJ1ZSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJIIHNlY3Rpb24gZG9lcyBub3QgbWF0Y2hcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2gobXBjUGFyYW1zLmNzSGFzaCwgXCJDaXJjdWl0IEhhc2g6IFwiKSk7XG5cbiAgICBhd2FpdCBmZC5jbG9zZSgpO1xuICAgIGF3YWl0IGZkSW5pdC5jbG9zZSgpO1xuXG4gICAgZm9yIChsZXQgaT1tcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGMgPSBtcGNQYXJhbXMuY29udHJpYnV0aW9uc1tpXTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goYy5jb250cmlidXRpb25IYXNoLCBgY29udHJpYnV0aW9uICMke2krMX0gJHtjLm5hbWUgPyBjLm5hbWUgOiBcIlwifTpgKSk7XG4gICAgICAgIGlmIChjLnR5cGUgPT0gMSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYEJlYWNvbiBnZW5lcmF0b3I6ICR7bWlzYy5ieXRlQXJyYXkyaGV4KGMuYmVhY29uSGFzaCl9YCk7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgQmVhY29uIGl0ZXJhdGlvbnMgRXhwOiAke2MubnVtSXRlcmF0aW9uc0V4cH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlpLZXkgT2shXCIpO1xuXG4gICAgcmV0dXJuIHRydWU7XG5cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlY3Rpb25IYXNTYW1lUmF0aW8oZ3JvdXBOYW1lLCBmZDEsIHNlY3Rpb25zMSwgZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbiwgZzJzcCwgZzJzcHgsIHNlY3Rpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IE1BWF9DSFVOS19TSVpFID0gMTw8MjA7XG4gICAgICAgIGNvbnN0IEcgPSBjdXJ2ZVtncm91cE5hbWVdO1xuICAgICAgICBjb25zdCBzRyA9IEcuRi5uOCoyO1xuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZDEsIHNlY3Rpb25zMSwgaWRTZWN0aW9uKTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24oZmQyLCBzZWN0aW9uczIsIGlkU2VjdGlvbik7XG5cbiAgICAgICAgbGV0IFIxID0gRy56ZXJvO1xuICAgICAgICBsZXQgUjIgPSBHLnplcm87XG5cbiAgICAgICAgY29uc3QgblBvaW50cyA9IHNlY3Rpb25zMVtpZFNlY3Rpb25dWzBdLnNpemUgLyBzRztcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8blBvaW50czsgaSArPSBNQVhfQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKGBTYW1lIHJhdGlvIGNoZWNrICR7c2VjdGlvbk5hbWV9OiAgJHtpfS8ke25Qb2ludHN9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oblBvaW50cyAtIGksIE1BWF9DSFVOS19TSVpFKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VzMSA9IGF3YWl0IGZkMS5yZWFkKG4qc0cpO1xuICAgICAgICAgICAgY29uc3QgYmFzZXMyID0gYXdhaXQgZmQyLnJlYWQobipzRyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxhcnMgPSBtaXNjLmdldFJhbmRvbUJ5dGVzKDQqbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHIxID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShiYXNlczEsIHNjYWxhcnMpO1xuICAgICAgICAgICAgY29uc3QgcjIgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJhc2VzMiwgc2NhbGFycyk7XG5cbiAgICAgICAgICAgIFIxID0gRy5hZGQoUjEsIHIxKTtcbiAgICAgICAgICAgIFIyID0gRy5hZGQoUjIsIHIyKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQxKTtcbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkMik7XG5cbiAgICAgICAgaWYgKG5Qb2ludHMgPT0gMCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgc3IgPSBhd2FpdCBzYW1lUmF0aW8oY3VydmUsIFIxLCBSMiwgZzJzcCwgZzJzcHgpO1xuICAgICAgICBpZiAoc3IgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBzYW1lUmF0aW9IKCkge1xuICAgICAgICBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDE8PDIwO1xuICAgICAgICBjb25zdCBHID0gY3VydmUuRzE7XG4gICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgIGNvbnN0IHNHID0gRy5GLm44KjI7XG5cbiAgICAgICAgY29uc3Qge2ZkOiBmZFBUYXUsIHNlY3Rpb25zOiBzZWN0aW9uc1BUYXV9ID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRCaW5GaWxlKHBUYXVGaWxlTmFtZSwgXCJwdGF1XCIsIDEpO1xuXG4gICAgICAgIGxldCBidWZmX3IgPSBuZXcgQmlnQnVmZmVyKHprZXkuZG9tYWluU2l6ZSAqIHprZXkubjhyKTtcblxuICAgICAgICBjb25zdCBzZWVkPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTw4OyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gPSBtaXNjLnJlYWRVSW50MzJCRShtaXNjLmdldFJhbmRvbUJ5dGVzKDQpLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBybmcgPSBuZXcgQ2hhQ2hhKHNlZWQpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8emtleS5kb21haW5TaXplLTE7IGkrKykgeyAgIC8vIE5vdGUgdGhhdCBsYXN0IG9uZSBpcyB6ZXJvXG4gICAgICAgICAgICBjb25zdCBlID0gRnIuZnJvbVJuZyhybmcpO1xuICAgICAgICAgICAgRnIudG9ScHJMRShidWZmX3IsIGkqemtleS5uOHIsIGUpO1xuICAgICAgICB9XG4gICAgICAgIEZyLnRvUnByTEUoYnVmZl9yLCAoemtleS5kb21haW5TaXplLTEpKnprZXkubjhyLCBGci56ZXJvKTtcblxuICAgICAgICBsZXQgUjEgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx6a2V5LmRvbWFpblNpemU7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSCBWZXJpZmljYWl0aW9uKHRhdSk6ICAke2l9LyR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgubWluKHprZXkuZG9tYWluU2l6ZSAtIGksIE1BWF9DSFVOS19TSVpFKTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZjEgPSBhd2FpdCBmZFBUYXUucmVhZChzRypuLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIHprZXkuZG9tYWluU2l6ZSpzRyArIGkqc0cpO1xuICAgICAgICAgICAgY29uc3QgYnVmZjIgPSBhd2FpdCBmZFBUYXUucmVhZChzRypuLCBzZWN0aW9uc1BUYXVbMl1bMF0ucCArIGkqc0cpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmQiA9IGF3YWl0IGJhdGNoU3Vic3RyYWN0KGJ1ZmYxLCBidWZmMik7XG4gICAgICAgICAgICBjb25zdCBidWZmUyA9IGJ1ZmZfci5zbGljZShpKnprZXkubjhyLCAoaStuKSp6a2V5Lm44cik7XG4gICAgICAgICAgICBjb25zdCByID0gYXdhaXQgRy5tdWx0aUV4cEFmZmluZShidWZmQiwgYnVmZlMpO1xuXG4gICAgICAgICAgICBSMSA9IEcuYWRkKFIxLCByKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbHVjbGF0ZSBvZGQgY29lZmljaWVudHMgaW4gdHJhbnNmb3JtZWQgZG9tYWluXG5cbiAgICAgICAgYnVmZl9yID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZl9yKTtcbiAgICAgICAgLy8gY29uc3QgZmlyc3QgPSBjdXJ2ZS5Gci5uZWcoY3VydmUuRnIuaW52KGN1cnZlLkZyLmUoMikpKTtcbiAgICAgICAgLy8gV29ya3MqMiAgIGNvbnN0IGZpcnN0ID0gY3VydmUuRnIubmVnKGN1cnZlLkZyLmUoMikpO1xuXG5cbiAgICAgICAgbGV0IGZpcnN0O1xuXG4gICAgICAgIGlmICh6a2V5LnBvd2VyIDwgRnIucykge1xuICAgICAgICAgICAgZmlyc3QgPSBGci5uZWcoRnIuZSgyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzbWFsbF9tICA9IDIgKiogRnIucztcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0X3RvX3NtYWxsX20gPSBGci5leHAoRnIuc2hpZnQsIHNtYWxsX20pO1xuICAgICAgICAgICAgZmlyc3QgPSBGci5zdWIoIHNoaWZ0X3RvX3NtYWxsX20sIEZyLm9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdCBpbmMgPSBjdXJ2ZS5Gci5pbnYoY3VydmUuUEZyLndbemtleS5wb3dlcisxXSk7XG4gICAgICAgIGNvbnN0IGluYyA9IHprZXkucG93ZXIgPCBGci5zID8gRnIud1t6a2V5LnBvd2VyKzFdIDogRnIuc2hpZnQ7XG4gICAgICAgIGJ1ZmZfciA9IGF3YWl0IEZyLmJhdGNoQXBwbHlLZXkoYnVmZl9yLCBmaXJzdCwgaW5jKTtcbiAgICAgICAgYnVmZl9yID0gYXdhaXQgRnIuZmZ0KGJ1ZmZfcik7XG4gICAgICAgIGJ1ZmZfciA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoYnVmZl9yKTtcblxuICAgICAgICBhd2FpdCBiaW5GaWxlVXRpbHMuc3RhcnRSZWFkVW5pcXVlU2VjdGlvbihmZCwgc2VjdGlvbnMsIDkpO1xuICAgICAgICBsZXQgUjIgPSBHLnplcm87XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx6a2V5LmRvbWFpblNpemU7IGkgKz0gTUFYX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgSCBWZXJpZmljYWl0aW9uKGxhZ3JhbmdlKTogICR7aX0vJHt6a2V5LmRvbWFpblNpemV9YCk7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5taW4oemtleS5kb21haW5TaXplIC0gaSwgTUFYX0NIVU5LX1NJWkUpO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmID0gYXdhaXQgZmQucmVhZChzRypuKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZTID0gYnVmZl9yLnNsaWNlKGkqemtleS5uOHIsIChpK24pKnprZXkubjhyKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBHLm11bHRpRXhwQWZmaW5lKGJ1ZmYsIGJ1ZmZTKTtcblxuICAgICAgICAgICAgUjIgPSBHLmFkZChSMiwgcik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYmluRmlsZVV0aWxzLmVuZFJlYWRTZWN0aW9uKGZkKTtcblxuICAgICAgICBzciA9IGF3YWl0IHNhbWVSYXRpbyhjdXJ2ZSwgUjEsIFIyLCB6a2V5LnZrX2RlbHRhXzIsIHprZXlJbml0LnZrX2RlbHRhXzIpO1xuICAgICAgICBpZiAoc3IgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gYmF0Y2hTdWJzdHJhY3QoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IHNHID0gY3VydmUuRzEuRi5uOCoyO1xuICAgICAgICBjb25zdCBuUG9pbnRzID0gYnVmZjEuYnl0ZUxlbmd0aCAvIHNHO1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeT0gY3VydmUudG0uY29uY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IG5Qb2ludHNQZXJUaHJlYWQgPSBNYXRoLmZsb29yKG5Qb2ludHMgLyBjb25jdXJyZW5jeSk7XG4gICAgICAgIGNvbnN0IG9wUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGNvbmN1cnJlbmN5OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgaWYgKGk8IGNvbmN1cnJlbmN5LTEpIHtcbiAgICAgICAgICAgICAgICBuID0gblBvaW50c1BlclRocmVhZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IG5Qb2ludHMgLSBpKm5Qb2ludHNQZXJUaHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobj09MCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YkJ1ZmYxID0gYnVmZjEuc2xpY2UoaSpuUG9pbnRzUGVyVGhyZWFkKnNHMSwgKGkqblBvaW50c1BlclRocmVhZCtuKSpzRzEpO1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVmZjIgPSBidWZmMi5zbGljZShpKm5Qb2ludHNQZXJUaHJlYWQqc0cxLCAoaSpuUG9pbnRzUGVyVGhyZWFkK24pKnNHMSk7XG4gICAgICAgICAgICBvcFByb21pc2VzLnB1c2goYmF0Y2hTdWJzdHJhY3RUaHJlYWQoc3ViQnVmZjEsIHN1YkJ1ZmYyKSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKG9wUHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IGZ1bGxCdWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoblBvaW50cypzRyk7XG4gICAgICAgIGxldCBwID0wO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmdWxsQnVmZk91dC5zZXQocmVzdWx0W2ldWzBdLCBwKTtcbiAgICAgICAgICAgIHArPXJlc3VsdFtpXVswXS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmT3V0O1xuICAgIH1cblxuXG4gICAgYXN5bmMgZnVuY3Rpb24gYmF0Y2hTdWJzdHJhY3RUaHJlYWQoYnVmZjEsIGJ1ZmYyKSB7XG4gICAgICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjgqMjtcbiAgICAgICAgY29uc3Qgc0dtaWQgPSBjdXJ2ZS5HMS5GLm44KjM7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSBidWZmMS5ieXRlTGVuZ3RoL3NHMTtcbiAgICAgICAgY29uc3QgdGFzayA9IFtdO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJBTExPQ1NFVFwiLCB2YXI6IDAsIGJ1ZmY6IGJ1ZmYxfSk7XG4gICAgICAgIHRhc2sucHVzaCh7Y21kOiBcIkFMTE9DU0VUXCIsIHZhcjogMSwgYnVmZjogYnVmZjJ9KTtcbiAgICAgICAgdGFzay5wdXNoKHtjbWQ6IFwiQUxMT0NcIiwgdmFyOiAyLCBsZW46IG5Qb2ludHMqc0dtaWR9KTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5Qb2ludHM7IGkrKykge1xuICAgICAgICAgICAgdGFzay5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwiQ0FMTFwiLFxuICAgICAgICAgICAgICAgIGZuTmFtZTogXCJnMW1fc3ViQWZmaW5lXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHt2YXI6IDAsIG9mZnNldDogaSpzRzF9LFxuICAgICAgICAgICAgICAgICAgICB7dmFyOiAxLCBvZmZzZXQ6IGkqc0cxfSxcbiAgICAgICAgICAgICAgICAgICAge3ZhcjogMiwgb2Zmc2V0OiBpKnNHbWlkfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJDQUxMXCIsIGZuTmFtZTogXCJnMW1fYmF0Y2hUb0FmZmluZVwiLCBwYXJhbXM6IFtcbiAgICAgICAgICAgIHt2YXI6IDJ9LFxuICAgICAgICAgICAge3ZhbDogblBvaW50c30sXG4gICAgICAgICAgICB7dmFyOiAyfSxcbiAgICAgICAgXX0pO1xuICAgICAgICB0YXNrLnB1c2goe2NtZDogXCJHRVRcIiwgb3V0OiAwLCB2YXI6IDIsIGxlbjogblBvaW50cypzRzF9KTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS50bS5xdWV1ZUFjdGlvbih0YXNrKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgbmV3WktleSBmcm9tIFwiLi96a2V5X25ldy5qc1wiO1xuaW1wb3J0IHBoYXNlMnZlcmlmeUZyb21Jbml0IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBoYXNlMnZlcmlmeUZyb21SMWNzKHIxY3NGaWxlTmFtZSwgcFRhdUZpbGVOYW1lLCB6a2V5RmlsZU5hbWUsIGxvZ2dlcikge1xuXG4gICAgLy8gY29uc3QgaW5pdEZpbGVOYW1lID0gXCJ+XCIgKyB6a2V5RmlsZU5hbWUgKyBcIi5pbml0XCI7XG4gICAgY29uc3QgaW5pdEZpbGVOYW1lID0ge3R5cGU6IFwiYmlnTWVtXCJ9O1xuICAgIGF3YWl0IG5ld1pLZXkocjFjc0ZpbGVOYW1lLCBwVGF1RmlsZU5hbWUsIGluaXRGaWxlTmFtZSwgbG9nZ2VyKTtcblxuICAgIHJldHVybiBhd2FpdCBwaGFzZTJ2ZXJpZnlGcm9tSW5pdChpbml0RmlsZU5hbWUsIHBUYXVGaWxlTmFtZSwgemtleUZpbGVOYW1lLCBsb2dnZXIpO1xufVxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCBCbGFrZTJiIGZyb20gXCJibGFrZTJiLXdhc21cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCB7IGhhc2hUb0cyIGFzIGhhc2hUb0cyIH0gZnJvbSBcIi4va2V5cGFpci5qc1wiO1xuaW1wb3J0IHsgYXBwbHlLZXlUb1NlY3Rpb24gfSBmcm9tIFwiLi9tcGNfYXBwbHlrZXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGhhc2UyY29udHJpYnV0ZSh6a2V5TmFtZU9sZCwgemtleU5hbWVOZXcsIG5hbWUsIGVudHJvcHksIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRPbGQsIHNlY3Rpb25zOiBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWVPbGQsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRPbGQsIHNlY3Rpb25zKTtcbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcImdyb3RoMTZcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgaXMgbm90IGdyb3RoMTZcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgY29uc3QgbXBjUGFyYW1zID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuXG5cbiAgICBjb25zdCBybmcgPSBhd2FpdCBtaXNjLmdldFJhbmRvbVJuZyhlbnRyb3B5KTtcblxuICAgIGNvbnN0IHRyYW5zY3JpcHRIYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICB0cmFuc2NyaXB0SGFzaGVyLnVwZGF0ZShtcGNQYXJhbXMuY3NIYXNoKTtcbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXRpbHMuaGFzaFB1YktleSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnNbaV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGN1ckNvbnRyaWJ1dGlvbiA9IHt9O1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YSA9IHt9O1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkgPSBjdXJ2ZS5Gci5mcm9tUm5nKHJuZyk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MgPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS5mcm9tUm5nKHJuZykpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpKTtcbiAgICB1dGlscy5oYXNoRzEodHJhbnNjcmlwdEhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zKTtcbiAgICB1dGlscy5oYXNoRzEodHJhbnNjcmlwdEhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLnRyYW5zY3JpcHQgPSB0cmFuc2NyaXB0SGFzaGVyLmRpZ2VzdCgpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcCA9IGhhc2hUb0cyKGN1cnZlLCBjdXJDb250cmlidXRpb24udHJhbnNjcmlwdCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NweCA9IGN1cnZlLkcyLnRvQWZmaW5lKGN1cnZlLkcyLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NwLCBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5KSk7XG5cbiAgICB6a2V5LnZrX2RlbHRhXzEgPSBjdXJ2ZS5HMS50aW1lc0ZyKHprZXkudmtfZGVsdGFfMSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSk7XG4gICAgemtleS52a19kZWx0YV8yID0gY3VydmUuRzIudGltZXNGcih6a2V5LnZrX2RlbHRhXzIsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuXG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhQWZ0ZXIgPSB6a2V5LnZrX2RlbHRhXzE7XG5cbiAgICBjdXJDb250cmlidXRpb24udHlwZSA9IDA7XG4gICAgaWYgKG5hbWUpIGN1ckNvbnRyaWJ1dGlvbi5uYW1lID0gbmFtZTtcblxuICAgIG1wY1BhcmFtcy5jb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZE5ldywgemtleSk7XG5cbiAgICAvLyBJQ1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAzKTtcblxuICAgIC8vIENvZWZmcyAoS2VlcCBvcmlnaW5hbClcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNCk7XG5cbiAgICAvLyBBIFNlY3Rpb25cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGNvbnN0IGludkRlbHRhID0gY3VydmUuRnIuaW52KGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDgsIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkwgU2VjdGlvblwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDksIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkggU2VjdGlvblwiLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgemtleVV0aWxzLndyaXRlTVBDUGFyYW1zKGZkTmV3LCBjdXJ2ZSwgbXBjUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG4gICAgYXdhaXQgZmROZXcuY2xvc2UoKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbkhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHV0aWxzLmhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1aW9uSGFzaCA9IGNvbnRyaWJ1dGlvbkhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChtcGNQYXJhbXMuY3NIYXNoLCBcIkNpcmN1aXQgSGFzaDogXCIpKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhtaXNjLmZvcm1hdEhhc2goY29udHJpYnVpb25IYXNoLCBcIkNvbnRyaWJ1dGlvbiBIYXNoOiBcIikpO1xuXG4gICAgcmV0dXJuIGNvbnRyaWJ1aW9uSGFzaDtcbn1cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMTggMEtJTVMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya0pTLlxuXG4gICAgc25hcmtKUyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJrSlMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWNcbiAgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAgIGFsb25nIHdpdGggc25hcmtKUy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgemtleVV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCB7IGdldEN1cnZlRnJvbVEgYXMgZ2V0Q3VydmUgfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCAqIGFzIG1pc2MgZnJvbSBcIi4vbWlzYy5qc1wiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgaGFzaFRvRzIgYXMgaGFzaFRvRzIgfSBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5pbXBvcnQgeyBhcHBseUtleVRvU2VjdGlvbiB9IGZyb20gXCIuL21wY19hcHBseWtleS5qc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJlYWNvbih6a2V5TmFtZU9sZCwgemtleU5hbWVOZXcsIG5hbWUsIGJlYWNvbkhhc2hTdHIsIG51bUl0ZXJhdGlvbnNFeHAsIGxvZ2dlcikge1xuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IGJlYWNvbkhhc2ggPSBtaXNjLmhleDJCeXRlQXJyYXkoYmVhY29uSGFzaFN0cik7XG4gICAgaWYgKCAgIChiZWFjb25IYXNoLmJ5dGVMZW5ndGggPT0gMClcbiAgICAgICAgfHwgKGJlYWNvbkhhc2guYnl0ZUxlbmd0aCoyICE9YmVhY29uSGFzaFN0ci5sZW5ndGgpKVxuICAgIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBCZWFjb24gSGFzaC4gKEl0IG11c3QgYmUgYSB2YWxpZCBoZXhhZGVjaW1hbCBzZXF1ZW5jZSlcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJlYWNvbkhhc2gubGVuZ3RoPj0yNTYpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiTWF4aW11bSBsZW5naHQgb2YgYmVhY29uIGhhc2ggaXMgMjU1IGJ5dGVzXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbnVtSXRlcmF0aW9uc0V4cCA9IHBhcnNlSW50KG51bUl0ZXJhdGlvbnNFeHApO1xuICAgIGlmICgobnVtSXRlcmF0aW9uc0V4cDwxMCl8fChudW1JdGVyYXRpb25zRXhwPjYzKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG51bUl0ZXJhdGlvbnNFeHAuIChNdXN0IGJlIGJldHdlZW4gMTAgYW5kIDYzKVwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuXG4gICAgY29uc3Qge2ZkOiBmZE9sZCwgc2VjdGlvbnM6IHNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5TmFtZU9sZCwgXCJ6a2V5XCIsIDIpO1xuICAgIGNvbnN0IHprZXkgPSBhd2FpdCB6a2V5VXRpbHMucmVhZEhlYWRlcihmZE9sZCwgc2VjdGlvbnMpO1xuXG4gICAgaWYgKHprZXkucHJvdG9jb2wgIT0gXCJncm90aDE2XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiemtleSBmaWxlIGlzIG5vdCBncm90aDE2XCIpO1xuICAgIH1cblxuXG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuXG4gICAgY29uc3QgbXBjUGFyYW1zID0gYXdhaXQgemtleVV0aWxzLnJlYWRNUENQYXJhbXMoZmRPbGQsIGN1cnZlLCBzZWN0aW9ucyk7XG5cbiAgICBjb25zdCBmZE5ldyA9IGF3YWl0IGJpbkZpbGVVdGlscy5jcmVhdGVCaW5GaWxlKHprZXlOYW1lTmV3LCBcInprZXlcIiwgMSwgMTApO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5ybmdGcm9tQmVhY29uUGFyYW1zKGJlYWNvbkhhc2gsIG51bUl0ZXJhdGlvbnNFeHApO1xuXG4gICAgY29uc3QgdHJhbnNjcmlwdEhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHRyYW5zY3JpcHRIYXNoZXIudXBkYXRlKG1wY1BhcmFtcy5jc0hhc2gpO1xuICAgIGZvciAobGV0IGk9MDsgaTxtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1dGlscy5oYXNoUHViS2V5KHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBtcGNQYXJhbXMuY29udHJpYnV0aW9uc1tpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VyQ29udHJpYnV0aW9uID0ge307XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhID0ge307XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcyA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLmZyb21Sbmcocm5nKSk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3N4ID0gY3VydmUuRzEudG9BZmZpbmUoY3VydmUuRzEudGltZXNGcihjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcywgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSkpO1xuICAgIHV0aWxzLmhhc2hHMSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MpO1xuICAgIHV0aWxzLmhhc2hHMSh0cmFuc2NyaXB0SGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3N4KTtcbiAgICBjdXJDb250cmlidXRpb24udHJhbnNjcmlwdCA9IHRyYW5zY3JpcHRIYXNoZXIuZGlnZXN0KCk7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcyX3NwID0gaGFzaFRvRzIoY3VydmUsIGN1ckNvbnRyaWJ1dGlvbi50cmFuc2NyaXB0KTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3B4ID0gY3VydmUuRzIudG9BZmZpbmUoY3VydmUuRzIudGltZXNGcihjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3AsIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpKTtcblxuICAgIHprZXkudmtfZGVsdGFfMSA9IGN1cnZlLkcxLnRpbWVzRnIoemtleS52a19kZWx0YV8xLCBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5KTtcbiAgICB6a2V5LnZrX2RlbHRhXzIgPSBjdXJ2ZS5HMi50aW1lc0ZyKHprZXkudmtfZGVsdGFfMiwgY3VyQ29udHJpYnV0aW9uLmRlbHRhLnBydktleSk7XG5cbiAgICBjdXJDb250cmlidXRpb24uZGVsdGFBZnRlciA9IHprZXkudmtfZGVsdGFfMTtcblxuICAgIGN1ckNvbnRyaWJ1dGlvbi50eXBlID0gMTtcbiAgICBjdXJDb250cmlidXRpb24ubnVtSXRlcmF0aW9uc0V4cCA9IG51bUl0ZXJhdGlvbnNFeHA7XG4gICAgY3VyQ29udHJpYnV0aW9uLmJlYWNvbkhhc2ggPSBiZWFjb25IYXNoO1xuXG4gICAgaWYgKG5hbWUpIGN1ckNvbnRyaWJ1dGlvbi5uYW1lID0gbmFtZTtcblxuICAgIG1wY1BhcmFtcy5jb250cmlidXRpb25zLnB1c2goY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGF3YWl0IHprZXlVdGlscy53cml0ZUhlYWRlcihmZE5ldywgemtleSk7XG5cbiAgICAvLyBJQ1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCAzKTtcblxuICAgIC8vIENvZWZmcyAoS2VlcCBvcmlnaW5hbClcbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNCk7XG5cbiAgICAvLyBBIFNlY3Rpb25cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuY29weVNlY3Rpb24oZmRPbGQsIHNlY3Rpb25zLCBmZE5ldywgNSk7XG5cbiAgICAvLyBCMSBTZWN0aW9uXG4gICAgYXdhaXQgYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDYpO1xuXG4gICAgLy8gQjIgU2VjdGlvblxuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5jb3B5U2VjdGlvbihmZE9sZCwgc2VjdGlvbnMsIGZkTmV3LCA3KTtcblxuICAgIGNvbnN0IGludkRlbHRhID0gY3VydmUuRnIuaW52KGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5wcnZLZXkpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDgsIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkwgU2VjdGlvblwiLCBsb2dnZXIpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9TZWN0aW9uKGZkT2xkLCBzZWN0aW9ucywgZmROZXcsIDksIGN1cnZlLCBcIkcxXCIsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIkggU2VjdGlvblwiLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgemtleVV0aWxzLndyaXRlTVBDUGFyYW1zKGZkTmV3LCBjdXJ2ZSwgbXBjUGFyYW1zKTtcblxuICAgIGF3YWl0IGZkT2xkLmNsb3NlKCk7XG4gICAgYXdhaXQgZmROZXcuY2xvc2UoKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbkhhc2hlciA9IEJsYWtlMmIoNjQpO1xuICAgIHV0aWxzLmhhc2hQdWJLZXkoY29udHJpYnV0aW9uSGFzaGVyLCBjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uKTtcblxuICAgIGNvbnN0IGNvbnRyaWJ1aW9uSGFzaCA9IGNvbnRyaWJ1dGlvbkhhc2hlci5kaWdlc3QoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKG1pc2MuZm9ybWF0SGFzaChjb250cmlidWlvbkhhc2gsIFwiQ29udHJpYnV0aW9uIEhhc2g6IFwiKSk7XG5cbiAgICByZXR1cm4gY29udHJpYnVpb25IYXNoO1xufVxuIiwiaW1wb3J0IHsgcmVhZFpLZXkgYXMgcmVhZFpLZXkgfSBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gemtleUV4cG9ydEpzb24oemtleUZpbGVOYW1lKSB7XG5cbiAgICBjb25zdCB6S2V5ID0gYXdhaXQgcmVhZFpLZXkoemtleUZpbGVOYW1lLCB0cnVlKTtcbiAgICBkZWxldGUgektleS5jdXJ2ZTtcbiAgICBkZWxldGUgektleS5GO1xuXG4gICAgcmV0dXJuIHV0aWxzLnN0cmluZ2lmeUJpZ0ludHMoektleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBGb3JtYXQgb2YgdGhlIG91dHB1dFxuLy8gICAgICBIYXNoIG9mIHRoZSBsYXN0IGNvbnRyaWJ1dGlvbiAgNjQgQnl0ZXNcbi8vICAgICAgMl5OKjItMSBUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBUYXVHMiBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIDJeTiBBbHBoYVRhdUcxIFBvaW50cyAoY29tcHJlc3NlZClcbi8vICAgICAgMl5OIEJldGFUYXVHMSBQb2ludHMgKGNvbXByZXNzZWQpXG4vLyAgICAgIFB1YmxpYyBLZXlcbi8vICAgICAgICAgIEJldGFHMiAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnMgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSpzKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnQgKGNvbXByZXNzZWQpXG4vLyAgICAgICAgICBHMSp0KmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzEqdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcxKnUqYmV0YSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnNwKnRhdSAoY29tcHJlc3NlZClcbi8vICAgICAgICAgIEcyKnRwKmFscGhhIChjb21wcmVzc2VkKVxuLy8gICAgICAgICAgRzIqdXAqYmV0YSAoY29tcHJlc3NlZClcblxuaW1wb3J0ICogYXMgZmFzdEZpbGUgZnJvbSBcImZhc3RmaWxlXCI7XG5pbXBvcnQgQmxha2UyYiBmcm9tIFwiYmxha2UyYi13YXNtXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyBtaXNjIGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uIH0gZnJvbSBcIi4vbXBjX2FwcGx5a2V5LmpzXCI7XG5pbXBvcnQgeyBoYXNoUHViS2V5IH0gZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHsgaGFzaFRvRzIgYXMgaGFzaFRvRzIgfSBmcm9tIFwiLi9rZXlwYWlyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGJlbGxtYW5Db250cmlidXRlKGN1cnZlLCBjaGFsbGVuZ2VGaWxlbmFtZSwgcmVzcG9uZXNGaWxlTmFtZSwgZW50cm9weSwgbG9nZ2VyKSB7XG4gICAgYXdhaXQgQmxha2UyYi5yZWFkeSgpO1xuXG4gICAgY29uc3Qgcm5nID0gYXdhaXQgbWlzYy5nZXRSYW5kb21SbmcoZW50cm9weSk7XG5cbiAgICBjb25zdCBkZWx0YSA9IGN1cnZlLkZyLmZyb21Sbmcocm5nKTtcbiAgICBjb25zdCBpbnZEZWx0YSA9IGN1cnZlLkZyLmludihkZWx0YSk7XG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44KjI7XG4gICAgY29uc3Qgc0cyID0gY3VydmUuRzIuRi5uOCoyO1xuXG4gICAgY29uc3QgZmRGcm9tID0gYXdhaXQgZmFzdEZpbGUucmVhZEV4aXN0aW5nKGNoYWxsZW5nZUZpbGVuYW1lKTtcbiAgICBjb25zdCBmZFRvID0gYXdhaXQgZmFzdEZpbGUuY3JlYXRlT3ZlcnJpZGUocmVzcG9uZXNGaWxlTmFtZSk7XG5cblxuICAgIGF3YWl0IGNvcHkoc0cxKTsgLy8gYWxwaGExXG4gICAgYXdhaXQgY29weShzRzEpOyAvLyBiZXRhMVxuICAgIGF3YWl0IGNvcHkoc0cyKTsgLy8gYmV0YTJcbiAgICBhd2FpdCBjb3B5KHNHMik7IC8vIGdhbW1hMlxuICAgIGNvbnN0IG9sZERlbHRhMSA9IGF3YWl0IHJlYWRHMSgpO1xuICAgIGNvbnN0IGRlbHRhMSA9IGN1cnZlLkcxLnRpbWVzRnIob2xkRGVsdGExLCBkZWx0YSk7XG4gICAgYXdhaXQgd3JpdGVHMShkZWx0YTEpO1xuICAgIGNvbnN0IG9sZERlbHRhMiA9IGF3YWl0IHJlYWRHMigpO1xuICAgIGNvbnN0IGRlbHRhMiA9IGN1cnZlLkcyLnRpbWVzRnIob2xkRGVsdGEyLCBkZWx0YSk7XG4gICAgYXdhaXQgd3JpdGVHMihkZWx0YTIpO1xuXG4gICAgLy8gSUNcbiAgICBjb25zdCBuSUMgPSBhd2FpdCBmZEZyb20ucmVhZFVCRTMyKCk7XG4gICAgYXdhaXQgZmRUby53cml0ZVVCRTMyKG5JQyk7XG4gICAgYXdhaXQgY29weShuSUMqc0cxKTtcblxuICAgIC8vIEhcbiAgICBjb25zdCBuSCA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkgpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgbnVsbCwgY3VydmUsIFwiRzFcIiwgbkgsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIlVOQ09NUFJFU1NFRFwiLCBcIkhcIiwgbG9nZ2VyKTtcblxuICAgIC8vIExcbiAgICBjb25zdCBuTCA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkwpO1xuICAgIGF3YWl0IGFwcGx5S2V5VG9DaGFsbGVuZ2VTZWN0aW9uKGZkRnJvbSwgZmRUbywgbnVsbCwgY3VydmUsIFwiRzFcIiwgbkwsIGludkRlbHRhLCBjdXJ2ZS5Gci5lKDEpLCBcIlVOQ09NUFJFU1NFRFwiLCBcIkxcIiwgbG9nZ2VyKTtcblxuICAgIC8vIEFcbiAgICBjb25zdCBuQSA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkEpO1xuICAgIGF3YWl0IGNvcHkobkEqc0cxKTtcblxuICAgIC8vIEIxXG4gICAgY29uc3QgbkIxID0gYXdhaXQgZmRGcm9tLnJlYWRVQkUzMigpO1xuICAgIGF3YWl0IGZkVG8ud3JpdGVVQkUzMihuQjEpO1xuICAgIGF3YWl0IGNvcHkobkIxKnNHMSk7XG5cbiAgICAvLyBCMlxuICAgIGNvbnN0IG5CMiA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBhd2FpdCBmZFRvLndyaXRlVUJFMzIobkIyKTtcbiAgICBhd2FpdCBjb3B5KG5CMipzRzIpO1xuXG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8vIFJlYWQgY29udHJpYnV0aW9uc1xuICAgIC8vLy8vLy8vLy9cbiAgICBjb25zdCB0cmFuc2NyaXB0SGFzaGVyID0gQmxha2UyYig2NCk7XG5cbiAgICBjb25zdCBtcGNQYXJhbXMgPSB7fTtcbiAgICAvLyBjc0hhc2hcbiAgICBtcGNQYXJhbXMuY3NIYXNoID0gIGF3YWl0IGZkRnJvbS5yZWFkKDY0KTtcbiAgICB0cmFuc2NyaXB0SGFzaGVyLnVwZGF0ZShtcGNQYXJhbXMuY3NIYXNoKTtcblxuICAgIGNvbnN0IG5Db250dHJpYnV0aW9ucyA9IGF3YWl0IGZkRnJvbS5yZWFkVUJFMzIoKTtcbiAgICBtcGNQYXJhbXMuY29udHJpYnV0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxuQ29udHRyaWJ1dGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCBjID0geyBkZWx0YTp7fSB9O1xuICAgICAgICBjLmRlbHRhQWZ0ZXIgPSBhd2FpdCByZWFkRzEoKTtcbiAgICAgICAgYy5kZWx0YS5nMV9zID0gYXdhaXQgcmVhZEcxKCk7XG4gICAgICAgIGMuZGVsdGEuZzFfc3ggPSBhd2FpdCByZWFkRzEoKTtcbiAgICAgICAgYy5kZWx0YS5nMl9zcHggPSBhd2FpdCByZWFkRzIoKTtcbiAgICAgICAgYy50cmFuc2NyaXB0ID0gYXdhaXQgZmRGcm9tLnJlYWQoNjQpO1xuICAgICAgICBtcGNQYXJhbXMuY29udHJpYnV0aW9ucy5wdXNoKGMpO1xuICAgICAgICBoYXNoUHViS2V5KHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJDb250cmlidXRpb24gPSB7fTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEgPSB7fTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEucHJ2S2V5ID0gZGVsdGE7XG4gICAgY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MgPSBjdXJ2ZS5HMS50b0FmZmluZShjdXJ2ZS5HMS5mcm9tUm5nKHJuZykpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMV9zeCA9IGN1cnZlLkcxLnRvQWZmaW5lKGN1cnZlLkcxLnRpbWVzRnIoY3VyQ29udHJpYnV0aW9uLmRlbHRhLmcxX3MsIGRlbHRhKSk7XG4gICAgdXRpbHMuaGFzaEcxKHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfcyk7XG4gICAgdXRpbHMuaGFzaEcxKHRyYW5zY3JpcHRIYXNoZXIsIGN1cnZlLCBjdXJDb250cmlidXRpb24uZGVsdGEuZzFfc3gpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi50cmFuc2NyaXB0ID0gdHJhbnNjcmlwdEhhc2hlci5kaWdlc3QoKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGEuZzJfc3AgPSBoYXNoVG9HMihjdXJ2ZSwgY3VyQ29udHJpYnV0aW9uLnRyYW5zY3JpcHQpO1xuICAgIGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcHggPSBjdXJ2ZS5HMi50b0FmZmluZShjdXJ2ZS5HMi50aW1lc0ZyKGN1ckNvbnRyaWJ1dGlvbi5kZWx0YS5nMl9zcCwgZGVsdGEpKTtcbiAgICBjdXJDb250cmlidXRpb24uZGVsdGFBZnRlciA9IGRlbHRhMTtcbiAgICBjdXJDb250cmlidXRpb24udHlwZSA9IDA7XG4gICAgbXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMucHVzaChjdXJDb250cmlidXRpb24pO1xuXG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8vIFdyaXRlIENPbnRyaWJ1dGlvblxuICAgIC8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGZkVG8ud3JpdGUobXBjUGFyYW1zLmNzSGFzaCk7XG4gICAgYXdhaXQgZmRUby53cml0ZVVCRTMyKG1wY1BhcmFtcy5jb250cmlidXRpb25zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bXBjUGFyYW1zLmNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IG1wY1BhcmFtcy5jb250cmlidXRpb25zW2ldO1xuICAgICAgICBhd2FpdCB3cml0ZUcxKGMuZGVsdGFBZnRlcik7XG4gICAgICAgIGF3YWl0IHdyaXRlRzEoYy5kZWx0YS5nMV9zKTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMShjLmRlbHRhLmcxX3N4KTtcbiAgICAgICAgYXdhaXQgd3JpdGVHMihjLmRlbHRhLmcyX3NweCk7XG4gICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYy50cmFuc2NyaXB0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cmlidXRpb25IYXNoZXIgPSBCbGFrZTJiKDY0KTtcbiAgICBoYXNoUHViS2V5KGNvbnRyaWJ1dGlvbkhhc2hlciwgY3VydmUsIGN1ckNvbnRyaWJ1dGlvbik7XG5cbiAgICBjb25zdCBjb250cmlidXRpb25IYXNoID0gY29udHJpYnV0aW9uSGFzaGVyLmRpZ2VzdCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8obWlzYy5mb3JtYXRIYXNoKGNvbnRyaWJ1dGlvbkhhc2gsIFwiQ29udHJpYnV0aW9uIEhhc2g6IFwiKSk7XG5cbiAgICBhd2FpdCBmZFRvLmNsb3NlKCk7XG4gICAgYXdhaXQgZmRGcm9tLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gY29udHJpYnV0aW9uSGFzaDtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvcHkobkJ5dGVzKSB7XG4gICAgICAgIGNvbnN0IENIVU5LX1NJWkUgPSBmZEZyb20ucGFnZVNpemUqMjtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5CeXRlczsgaSs9IENIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1pbihuQnl0ZXMgLWksIENIVU5LX1NJWkUpO1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKG4pO1xuICAgICAgICAgICAgYXdhaXQgZmRUby53cml0ZShidWZmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMSgpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGN1cnZlLkcxLkYubjgqMik7XG4gICAgICAgIHJldHVybiBjdXJ2ZS5HMS5mcm9tUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDApO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRHMigpIHtcbiAgICAgICAgY29uc3QgYnVmZiA9IGF3YWl0IGZkRnJvbS5yZWFkKGN1cnZlLkcyLkYubjgqMik7XG4gICAgICAgIHJldHVybiBjdXJ2ZS5HMi5mcm9tUnByVW5jb21wcmVzc2VkKGJ1ZmYsIDApO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlRzEoUCkge1xuICAgICAgICBjb25zdCBidWZmID0gbmV3IFVpbnQ4QXJyYXkoc0cxKTtcbiAgICAgICAgY3VydmUuRzEudG9ScHJVbmNvbXByZXNzZWQoYnVmZiwgMCwgUCk7XG4gICAgICAgIGF3YWl0IGZkVG8ud3JpdGUoYnVmZik7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVHMihQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBuZXcgVWludDhBcnJheShzRzIpO1xuICAgICAgICBjdXJ2ZS5HMi50b1JwclVuY29tcHJlc3NlZChidWZmLCAwLCBQKTtcbiAgICAgICAgYXdhaXQgZmRUby53cml0ZShidWZmKTtcbiAgICB9XG5cblxufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAxOCAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0ICogYXMgYmluRmlsZVV0aWxzIGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgKiBhcyB6a2V5VXRpbHMgZnJvbSBcIi4vemtleV91dGlscy5qc1wiO1xuaW1wb3J0IHtnZXRDdXJ2ZUZyb21RIGFzIGdldEN1cnZlfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7dXRpbHN9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmltcG9ydCB7RkZMT05LX1BST1RPQ09MX0lEfSBmcm9tIFwiLi96a2V5X2NvbnN0YW50cy5qc1wiO1xuXG5jb25zdCB7c3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gemtleUV4cG9ydFZlcmlmaWNhdGlvbktleSh6a2V5TmFtZSwgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJFWFBPUlQgVkVSSUZJQ0FUSU9OIEtFWSBTVEFSVEVEXCIpO1xuXG4gICAgY29uc3Qge2ZkLCBzZWN0aW9uc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUoemtleU5hbWUsIFwiemtleVwiLCAyKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmQsIHNlY3Rpb25zKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBEZXRlY3RlZCBwcm90b2NvbDogXCIgKyB6a2V5LnByb3RvY29sKTtcblxuICAgIGxldCByZXM7XG4gICAgaWYgKHprZXkucHJvdG9jb2wgPT09IFwiZ3JvdGgxNlwiKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IGdyb3RoMTZWayh6a2V5LCBmZCwgc2VjdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoemtleS5wcm90b2NvbCA9PT0gXCJwbG9ua1wiKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHBsb25rVmsoemtleSk7XG4gICAgfSBlbHNlIGlmICh6a2V5LnByb3RvY29sSWQgJiYgemtleS5wcm90b2NvbElkID09PSBGRkxPTktfUFJPVE9DT0xfSUQpIHtcbiAgICAgICAgcmVzID0gYXdhaXQgZXhwb3J0RkZsb25rVmsoemtleSwgbG9nZ2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6a2V5IGZpbGUgcHJvdG9jb2wgdW5yZWNvZ25pemVkXCIpO1xuICAgIH1cblxuICAgIGF3YWl0IGZkLmNsb3NlKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkVYUE9SVCBWRVJJRklDQVRJT04gS0VZIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5hc3luYyBmdW5jdGlvbiBncm90aDE2VmsoemtleSwgZmQsIHNlY3Rpb25zKSB7XG4gICAgY29uc3QgY3VydmUgPSBhd2FpdCBnZXRDdXJ2ZSh6a2V5LnEpO1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjggKiAyO1xuXG4gICAgY29uc3QgYWxwaGFCZXRhID0gYXdhaXQgY3VydmUucGFpcmluZyh6a2V5LnZrX2FscGhhXzEsIHprZXkudmtfYmV0YV8yKTtcblxuICAgIGxldCB2S2V5ID0ge1xuICAgICAgICBwcm90b2NvbDogemtleS5wcm90b2NvbCxcbiAgICAgICAgY3VydmU6IGN1cnZlLm5hbWUsXG4gICAgICAgIG5QdWJsaWM6IHprZXkublB1YmxpYyxcblxuICAgICAgICB2a19hbHBoYV8xOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LnZrX2FscGhhXzEpLFxuXG4gICAgICAgIHZrX2JldGFfMjogY3VydmUuRzIudG9PYmplY3QoemtleS52a19iZXRhXzIpLFxuICAgICAgICB2a19nYW1tYV8yOiBjdXJ2ZS5HMi50b09iamVjdCh6a2V5LnZrX2dhbW1hXzIpLFxuICAgICAgICB2a19kZWx0YV8yOiBjdXJ2ZS5HMi50b09iamVjdCh6a2V5LnZrX2RlbHRhXzIpLFxuXG4gICAgICAgIHZrX2FscGhhYmV0YV8xMjogY3VydmUuR3QudG9PYmplY3QoYWxwaGFCZXRhKVxuICAgIH07XG5cbiAgICAvLyBSZWFkIElDIFNlY3Rpb25cbiAgICAvLy8vLy8vLy8vL1xuICAgIGF3YWl0IGJpbkZpbGVVdGlscy5zdGFydFJlYWRVbmlxdWVTZWN0aW9uKGZkLCBzZWN0aW9ucywgMyk7XG4gICAgdktleS5JQyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHprZXkublB1YmxpYzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBhd2FpdCBmZC5yZWFkKHNHMSk7XG4gICAgICAgIGNvbnN0IFAgPSBjdXJ2ZS5HMS50b09iamVjdChidWZmKTtcbiAgICAgICAgdktleS5JQy5wdXNoKFApO1xuICAgIH1cbiAgICBhd2FpdCBiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24oZmQpO1xuXG4gICAgdktleSA9IHN0cmluZ2lmeUJpZ0ludHModktleSk7XG5cbiAgICByZXR1cm4gdktleTtcbn1cblxuXG5hc3luYyBmdW5jdGlvbiBwbG9ua1ZrKHprZXkpIHtcbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlKHprZXkucSk7XG5cbiAgICBsZXQgdktleSA9IHtcbiAgICAgICAgcHJvdG9jb2w6IHprZXkucHJvdG9jb2wsXG4gICAgICAgIGN1cnZlOiBjdXJ2ZS5uYW1lLFxuICAgICAgICBuUHVibGljOiB6a2V5Lm5QdWJsaWMsXG4gICAgICAgIHBvd2VyOiB6a2V5LnBvd2VyLFxuXG4gICAgICAgIGsxOiBjdXJ2ZS5Gci50b09iamVjdCh6a2V5LmsxKSxcbiAgICAgICAgazI6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkuazIpLFxuXG4gICAgICAgIFFtOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlFtKSxcbiAgICAgICAgUWw6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUWwpLFxuICAgICAgICBRcjogY3VydmUuRzEudG9PYmplY3QoemtleS5RciksXG4gICAgICAgIFFvOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlFvKSxcbiAgICAgICAgUWM6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUWMpLFxuICAgICAgICBTMTogY3VydmUuRzEudG9PYmplY3QoemtleS5TMSksXG4gICAgICAgIFMyOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LlMyKSxcbiAgICAgICAgUzM6IGN1cnZlLkcxLnRvT2JqZWN0KHprZXkuUzMpLFxuXG4gICAgICAgIFhfMjogY3VydmUuRzIudG9PYmplY3QoemtleS5YXzIpLFxuXG4gICAgICAgIHc6IGN1cnZlLkZyLnRvT2JqZWN0KGN1cnZlLkZyLndbemtleS5wb3dlcl0pXG4gICAgfTtcblxuICAgIHZLZXkgPSBzdHJpbmdpZnlCaWdJbnRzKHZLZXkpO1xuXG4gICAgcmV0dXJuIHZLZXk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9ydEZGbG9ua1ZrKHprZXksIGxvZ2dlcikge1xuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmUoemtleS5xKTtcblxuICAgIGxldCB2S2V5ID0ge1xuICAgICAgICBwcm90b2NvbDogemtleS5wcm90b2NvbCxcbiAgICAgICAgY3VydmU6IGN1cnZlLm5hbWUsXG4gICAgICAgIG5QdWJsaWM6IHprZXkublB1YmxpYyxcbiAgICAgICAgcG93ZXI6IHprZXkucG93ZXIsXG5cbiAgICAgICAgazE6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkuazEpLFxuICAgICAgICBrMjogY3VydmUuRnIudG9PYmplY3QoemtleS5rMiksXG5cbiAgICAgICAgdzogY3VydmUuRnIudG9PYmplY3QoY3VydmUuRnIud1t6a2V5LnBvd2VyXSksXG4gICAgICAgIC8vd1c6IGN1cnZlLkZyLnRvT2JqZWN0KGN1cnZlLkZyLndbemtleS5wb3dlciArIDFdKSxcbiAgICAgICAgdzM6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkudzMpLFxuICAgICAgICB3NDogY3VydmUuRnIudG9PYmplY3QoemtleS53NCksXG4gICAgICAgIHc4OiBjdXJ2ZS5Gci50b09iamVjdCh6a2V5Lnc4KSxcbiAgICAgICAgd3I6IGN1cnZlLkZyLnRvT2JqZWN0KHprZXkud3IpLFxuXG4gICAgICAgIFhfMjogY3VydmUuRzIudG9PYmplY3QoemtleS5YXzIpLFxuXG4gICAgICAgIEMwOiBjdXJ2ZS5HMS50b09iamVjdCh6a2V5LkMwKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeUJpZ0ludHModktleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIjtcbmltcG9ydCB7Z2V0Q3VydmVGcm9tTmFtZX0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQge3V0aWxzfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5cbmNvbnN0IHt1bnN0cmluZ2lmeUJpZ0ludHMsIHN0cmluZ2lmeUJpZ0ludHN9ID0gdXRpbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZmbG9ua0V4cG9ydFNvbGlkaXR5VmVyaWZpZXIodmssIHRlbXBsYXRlcywgbG9nZ2VyKSB7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgRVhQT1JUIFNPTElESVRZIFZFUklGSUVSIFNUQVJURURcIik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlRnJvbU5hbWUodmsuY3VydmUpO1xuXG4gICAgLy8gUHJlY29tcHV0ZSB3M18yLCB3NF8yIGFuZCB3NF8zXG4gICAgbGV0IHczID0gZnJvbVZrZXkodmsudzMpO1xuICAgIHZrLnczXzIgPSB0b1ZrZXkoY3VydmUuRnIuc3F1YXJlKHczKSk7XG5cbiAgICBsZXQgdzQgPSBmcm9tVmtleSh2ay53NCk7XG4gICAgdmsudzRfMiA9IHRvVmtleShjdXJ2ZS5Gci5zcXVhcmUodzQpKTtcbiAgICB2ay53NF8zID0gdG9Wa2V5KGN1cnZlLkZyLm11bChjdXJ2ZS5Gci5zcXVhcmUodzQpLCB3NCkpO1xuXG4gICAgbGV0IHc4ID0gZnJvbVZrZXkodmsudzgpO1xuICAgIGxldCBhY2MgPSBjdXJ2ZS5Gci5vbmU7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICBhY2MgPSBjdXJ2ZS5Gci5tdWwoYWNjLCB3OCk7XG4gICAgICAgIHZrW1widzhfXCIgKyBpXSA9IHRvVmtleShhY2MpO1xuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1t2ay5wcm90b2NvbF07XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBFWFBPUlQgU09MSURJVFkgVkVSSUZJRVIgRklOSVNIRURcIik7XG5cbiAgICByZXR1cm4gZWpzLnJlbmRlcih0ZW1wbGF0ZSwgdmspO1xuXG4gICAgZnVuY3Rpb24gZnJvbVZrZXkoc3RyKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHVuc3RyaW5naWZ5QmlnSW50cyhzdHIpO1xuICAgICAgICByZXR1cm4gY3VydmUuRnIuZnJvbU9iamVjdCh2YWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvVmtleSh2YWwpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gY3VydmUuRnIudG9PYmplY3QodmFsKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUJpZ0ludHMoc3RyKTtcbiAgICB9XG59XG5cbiIsImltcG9ydCBlanMgZnJvbSBcImVqc1wiO1xuXG5pbXBvcnQgZXhwb3J0VmVyaWZpY2F0aW9uS2V5IGZyb20gXCIuL3prZXlfZXhwb3J0X3ZlcmlmaWNhdGlvbmtleS5qc1wiO1xuaW1wb3J0IGZmbG9ua0V4cG9ydFNvbGlkaXR5VmVyaWZpZXJDbWQgZnJvbSBcIi4vZmZsb25rX2V4cG9ydF9zb2xpZGl0eV92ZXJpZmllci5qc1wiO1xuLy8gTm90IHJlYWR5IHlldFxuLy8gbW9kdWxlLmV4cG9ydHMuZ2VuZXJhdGVWZXJpZmllcl9raW1sZWVvaCA9IGdlbmVyYXRlVmVyaWZpZXJfa2ltbGVlb2g7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNvbGlkaXR5VmVyaWZpZXIoektleU5hbWUsIHRlbXBsYXRlcywgbG9nZ2VyKSB7XG5cbiAgICBjb25zdCB2ZXJpZmljYXRpb25LZXkgPSBhd2FpdCBleHBvcnRWZXJpZmljYXRpb25LZXkoektleU5hbWUsIGxvZ2dlcik7XG5cbiAgICBpZiAoXCJmZmxvbmtcIiA9PT0gdmVyaWZpY2F0aW9uS2V5LnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiBmZmxvbmtFeHBvcnRTb2xpZGl0eVZlcmlmaWVyQ21kKHZlcmlmaWNhdGlvbktleSwgdGVtcGxhdGVzLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGxldCB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1t2ZXJpZmljYXRpb25LZXkucHJvdG9jb2xdO1xuXG4gICAgcmV0dXJuIGVqcy5yZW5kZXIodGVtcGxhdGUsIHZlcmlmaWNhdGlvbktleSk7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBuZXdaS2V5fSBmcm9tIFwiLi96a2V5X25ldy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEJlbGxtYW59IGZyb20gXCIuL3prZXlfZXhwb3J0X2JlbGxtYW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbXBvcnRCZWxsbWFufSBmcm9tIFwiLi96a2V5X2ltcG9ydF9iZWxsbWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5RnJvbVIxY3N9IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21yMWNzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5RnJvbUluaXR9IGZyb20gXCIuL3prZXlfdmVyaWZ5X2Zyb21pbml0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY29udHJpYnV0ZX0gZnJvbSBcIi4vemtleV9jb250cmlidXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYmVhY29ufSBmcm9tIFwiLi96a2V5X2JlYWNvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydEpzb259IGZyb20gXCIuL3prZXlfZXhwb3J0X2pzb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBiZWxsbWFuQ29udHJpYnV0ZX0gZnJvbSBcIi4vemtleV9iZWxsbWFuX2NvbnRyaWJ1dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHBvcnRWZXJpZmljYXRpb25LZXl9IGZyb20gXCIuL3prZXlfZXhwb3J0X3ZlcmlmaWNhdGlvbmtleS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4cG9ydFNvbGlkaXR5VmVyaWZpZXJ9IGZyb20gXCIuL3prZXlfZXhwb3J0X3NvbGlkaXR5dmVyaWZpZXIuanNcIjtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjEgMGtpbXMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8qIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgcGFwZXI6IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTkvOTUzLnBkZiAqL1xuXG5pbXBvcnQge3JlYWRSMWNzRmR9IGZyb20gXCJyMWNzZmlsZVwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vcG93ZXJzb2Z0YXVfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gICAgcmVhZEJpbkZpbGUsXG4gICAgY3JlYXRlQmluRmlsZSxcbiAgICByZWFkU2VjdGlvbixcbiAgICB3cml0ZUJpZ0ludCxcbiAgICBzdGFydFdyaXRlU2VjdGlvbixcbiAgICBlbmRXcml0ZVNlY3Rpb24sXG59IGZyb20gXCJAaWRlbjMvYmluZmlsZXV0aWxzXCI7XG5pbXBvcnQgeyBsb2cyICB9IGZyb20gXCIuL21pc2MuanNcIjtcbmltcG9ydCB7IFNjYWxhciwgQmlnQnVmZmVyIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IEJsYWtlMmIgZnJvbSBcImJsYWtlMmItd2FzbVwiO1xuaW1wb3J0IEJpZ0FycmF5IGZyb20gXCIuL2JpZ2FycmF5LmpzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGxvbmtTZXR1cChyMWNzTmFtZSwgcHRhdU5hbWUsIHprZXlOYW1lLCBsb2dnZXIpIHtcblxuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cblxuICAgIGF3YWl0IEJsYWtlMmIucmVhZHkoKTtcblxuICAgIGNvbnN0IHtmZDogZmRQVGF1LCBzZWN0aW9uczogc2VjdGlvbnNQVGF1fSA9IGF3YWl0IHJlYWRCaW5GaWxlKHB0YXVOYW1lLCBcInB0YXVcIiwgMSwgMTw8MjIsIDE8PDI0KTtcbiAgICBjb25zdCB7Y3VydmUsIHBvd2VyfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkUFRhdSwgc2VjdGlvbnNQVGF1KTtcbiAgICBjb25zdCB7ZmQ6IGZkUjFjcywgc2VjdGlvbnM6IHNlY3Rpb25zUjFjc30gPSBhd2FpdCByZWFkQmluRmlsZShyMWNzTmFtZSwgXCJyMWNzXCIsIDEsIDE8PDIyLCAxPDwyNCk7XG5cbiAgICBjb25zdCByMWNzID0gYXdhaXQgcmVhZFIxY3NGZChmZFIxY3MsIHNlY3Rpb25zUjFjcywge2xvYWRDb25zdHJhaW50czogdHJ1ZSwgbG9hZEN1c3RvbUdhdGVzOiB0cnVlfSk7XG5cbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44KjI7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44KjI7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBuOHIgPSBjdXJ2ZS5Gci5uODtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiUmVhZGluZyByMWNzXCIpO1xuICAgIGxldCBzUjFjcyA9IGF3YWl0IHJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcblxuICAgIGNvbnN0IHBsb25rQ29uc3RyYWludHMgPSBuZXcgQmlnQXJyYXkoKTtcbiAgICBjb25zdCBwbG9ua0FkZGl0aW9ucyA9IG5ldyBCaWdBcnJheSgpO1xuICAgIGxldCBwbG9ua05WYXJzID0gcjFjcy5uVmFycztcblxuICAgIGNvbnN0IG5QdWJsaWMgPSByMWNzLm5PdXRwdXRzICsgcjFjcy5uUHViSW5wdXRzO1xuXG4gICAgYXdhaXQgcHJvY2Vzc0NvbnN0cmFpbnRzKGN1cnZlLkZyLCByMWNzLCBsb2dnZXIpO1xuXG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG4gICAgY29uc3QgZmRaS2V5ID0gYXdhaXQgY3JlYXRlQmluRmlsZSh6a2V5TmFtZSwgXCJ6a2V5XCIsIDEsIDE0LCAxPDwyMiwgMTw8MjQpO1xuXG5cbiAgICBpZiAocjFjcy5wcmltZSAhPSBjdXJ2ZS5yKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5lcnJvcihcInIxY3MgY3VydmUgZG9lcyBub3QgbWF0Y2ggcG93ZXJzIG9mIHRhdSBjZXJlbW9ueSBjdXJ2ZVwiKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGxldCBjaXJQb3dlciA9IGxvZzIocGxvbmtDb25zdHJhaW50cy5sZW5ndGggLTEpICsxO1xuICAgIGlmIChjaXJQb3dlciA8IDMpIGNpclBvd2VyID0gMzsgICAvLyBBcyB0aGUgdCBwb2xpbm9tYWwgaXMgbis1IHdoZSBuZWVkIGF0IGxlYXN0IGEgcG93ZXIgb2YgNFxuICAgIGNvbnN0IGRvbWFpblNpemUgPSAyICoqIGNpclBvd2VyO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJQbG9uayBjb25zdHJhaW50czogXCIgKyBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCk7XG4gICAgaWYgKGNpclBvd2VyID4gcG93ZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKGBjaXJjdWl0IHRvbyBiaWcgZm9yIHRoaXMgcG93ZXIgb2YgdGF1IGNlcmVtb255LiAke3Bsb25rQ29uc3RyYWludHMubGVuZ3RofSA+IDIqKiR7cG93ZXJ9YCk7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpZiAoIXNlY3Rpb25zUFRhdVsxMl0pIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUG93ZXJzIG9mIHRhdSBpcyBub3QgcHJlcGFyZWQuXCIpO1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG5cbiAgICBjb25zdCBMUG9pbnRzID0gbmV3IEJpZ0J1ZmZlcihkb21haW5TaXplKnNHMSk7XG4gICAgY29uc3QgbyA9IHNlY3Rpb25zUFRhdVsxMl1bMF0ucCArICgoMiAqKiAoY2lyUG93ZXIpKSAtMSkqc0cxO1xuICAgIGF3YWl0IGZkUFRhdS5yZWFkVG9CdWZmZXIoTFBvaW50cywgMCwgZG9tYWluU2l6ZSpzRzEsIG8pO1xuXG4gICAgY29uc3QgW2sxLCBrMl0gPSBnZXRLMUsyKCk7XG5cbiAgICBjb25zdCB2ayA9IHt9O1xuXG5cbiAgICBhd2FpdCB3cml0ZUFkZGl0aW9ucygzLCBcIkFkZGl0aW9uc1wiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDQsIDAsIFwiQW1hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDUsIDEsIFwiQm1hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKDYsIDIsIFwiQ21hcFwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVRTWFwKDcsIDMsIFwiUW1cIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlUU1hcCg4LCA0LCBcIlFsXCIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICBhd2FpdCB3cml0ZVFNYXAoOSwgNSwgXCJRclwiKTtcbiAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgYXdhaXQgd3JpdGVRTWFwKDEwLCA2LCBcIlFvXCIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICBhd2FpdCB3cml0ZVFNYXAoMTEsIDcsIFwiUWNcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlU2lnbWEoMTIsIFwic2lnbWFcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgIGF3YWl0IHdyaXRlTHMoMTMsIFwibGFncmFuZ2UgcG9seW5vbWlhbHNcIik7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG4gICAgLy8gV3JpdGUgUFRhdSBwb2ludHNcbiAgICAvLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMTQpO1xuICAgIGNvbnN0IGJ1ZmZPdXQgPSBuZXcgQmlnQnVmZmVyKChkb21haW5TaXplKzYpKnNHMSk7XG4gICAgYXdhaXQgZmRQVGF1LnJlYWRUb0J1ZmZlcihidWZmT3V0LCAwLCAoZG9tYWluU2l6ZSs2KSpzRzEsIHNlY3Rpb25zUFRhdVsyXVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkud3JpdGUoYnVmZk91dCk7XG4gICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuXG5cbiAgICBhd2FpdCB3cml0ZUhlYWRlcnMoKTtcblxuICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIGF3YWl0IGZkUjFjcy5jbG9zZSgpO1xuICAgIGF3YWl0IGZkUFRhdS5jbG9zZSgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJTZXR1cCBGaW5pc2hlZFwiKTtcblxuICAgIHJldHVybiA7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ29uc3RyYWludHMoRnIsIHIxY3MsIGxvZ2dlcikge1xuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShsaW5lYXJDb21iKSB7XG4gICAgICAgICAgICBjb25zdCBzcyA9IE9iamVjdC5rZXlzKGxpbmVhckNvbWIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lYXJDb21iW3NzW2ldXSA9PSAwbikgZGVsZXRlIGxpbmVhckNvbWJbc3NbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gam9pbihsaW5lYXJDb21iMSwgaywgbGluZWFyQ29tYjIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGxldCBzIGluIGxpbmVhckNvbWIxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNbc10gPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXNbc10gPSBGci5tdWwoaywgbGluZWFyQ29tYjFbc10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1tzXSA9IEZyLmFkZChyZXNbc10sIEZyLm11bChrLCBsaW5lYXJDb21iMVtzXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgcyBpbiBsaW5lYXJDb21iMikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzW3NdID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3NdID0gbGluZWFyQ29tYjJbc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3NdID0gRnIuYWRkKHJlc1tzXSwgbGluZWFyQ29tYjJbc10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vcm1hbGl6ZShyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlZHVjZUNvZWZzKGxpbmVhckNvbWIsIG1heEMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBrOiBGci56ZXJvLFxuICAgICAgICAgICAgICAgIHM6IFtdLFxuICAgICAgICAgICAgICAgIGNvZWZzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IHMgaW4gbGluZWFyQ29tYikge1xuICAgICAgICAgICAgICAgIGlmIChzID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmsgPSBGci5hZGQocmVzLmssIGxpbmVhckNvbWJbc10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZWFyQ29tYltzXSAhPSAwbikge1xuICAgICAgICAgICAgICAgICAgICBjcy5wdXNoKFtOdW1iZXIocyksIGxpbmVhckNvbWJbc11dKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjcy5sZW5ndGggPiBtYXhDKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYzEgPSBjcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGMyID0gY3Muc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNsID0gYzFbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSBjMlswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbyA9IHBsb25rTlZhcnMrKztcbiAgICAgICAgICAgICAgICBjb25zdCBxbSA9IEZyLnplcm87XG4gICAgICAgICAgICAgICAgY29uc3QgcWwgPSBGci5uZWcoYzFbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHFyID0gRnIubmVnKGMyWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxbyA9IEZyLm9uZTtcbiAgICAgICAgICAgICAgICBjb25zdCBxYyA9IEZyLnplcm87XG5cbiAgICAgICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goW3NsLCBzciwgc28sIHFtLCBxbCwgcXIsIHFvLCBxY10pO1xuXG4gICAgICAgICAgICAgICAgcGxvbmtBZGRpdGlvbnMucHVzaChbc2wsIHNyLCBjMVsxXSwgYzJbMV1dKTtcblxuICAgICAgICAgICAgICAgIGNzLnB1c2goW3NvLCBGci5vbmVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMuc1tpXSA9IGNzW2ldWzBdO1xuICAgICAgICAgICAgICAgIHJlcy5jb2Vmc1tpXSA9IGNzW2ldWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHJlcy5jb2Vmcy5sZW5ndGggPCBtYXhDKSB7XG4gICAgICAgICAgICAgICAgcmVzLnMucHVzaCgwKTtcbiAgICAgICAgICAgICAgICByZXMuY29lZnMucHVzaChGci56ZXJvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRDb25zdHJhaW50U3VtKGxjKSB7XG4gICAgICAgICAgICBjb25zdCBDID0gcmVkdWNlQ29lZnMobGMsIDMpO1xuICAgICAgICAgICAgY29uc3Qgc2wgPSBDLnNbMF07XG4gICAgICAgICAgICBjb25zdCBzciA9IEMuc1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHNvID0gQy5zWzJdO1xuICAgICAgICAgICAgY29uc3QgcW0gPSBGci56ZXJvO1xuICAgICAgICAgICAgY29uc3QgcWwgPSBDLmNvZWZzWzBdO1xuICAgICAgICAgICAgY29uc3QgcXIgPSBDLmNvZWZzWzFdO1xuICAgICAgICAgICAgY29uc3QgcW8gPSBDLmNvZWZzWzJdO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBDLms7XG4gICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goW3NsLCBzciwgc28sIHFtLCBxbCwgcXIsIHFvLCBxY10pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkQ29uc3RyYWludE11bChsY0EsIGxjQiwgbGNDKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gcmVkdWNlQ29lZnMobGNBLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IEIgPSByZWR1Y2VDb2VmcyhsY0IsIDEpO1xuICAgICAgICAgICAgY29uc3QgQyA9IHJlZHVjZUNvZWZzKGxjQywgMSk7XG5cblxuICAgICAgICAgICAgY29uc3Qgc2wgPSBBLnNbMF07XG4gICAgICAgICAgICBjb25zdCBzciA9IEIuc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHNvID0gQy5zWzBdO1xuICAgICAgICAgICAgY29uc3QgcW0gPSBGci5tdWwoQS5jb2Vmc1swXSwgQi5jb2Vmc1swXSk7XG4gICAgICAgICAgICBjb25zdCBxbCA9IEZyLm11bChBLmNvZWZzWzBdLCBCLmspO1xuICAgICAgICAgICAgY29uc3QgcXIgPSBGci5tdWwoQS5rLCBCLmNvZWZzWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHFvID0gRnIubmVnKEMuY29lZnNbMF0pO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBGci5zdWIoRnIubXVsKEEuaywgQi5rKSwgQy5rKTtcbiAgICAgICAgICAgIHBsb25rQ29uc3RyYWludHMucHVzaChbc2wsIHNyLCBzbywgcW0sIHFsLCBxciwgcW8sIHFjXSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGMpIHtcbiAgICAgICAgICAgIGxldCBrID0gRnIuemVybztcbiAgICAgICAgICAgIGxldCBuID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHNzID0gT2JqZWN0LmtleXMobGMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsY1tzc1tpXV0gPT0gMG4pIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxjW3NzW2ldXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNzW2ldID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IEZyLmFkZChrLCBsY1tzc1tpXV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG4rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobiA+IDApIHJldHVybiBuLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoayAhPSBGci56ZXJvKSByZXR1cm4gXCJrXCI7XG4gICAgICAgICAgICByZXR1cm4gXCIwXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzKGxjQSwgbGNCLCBsY0MpIHtcbiAgICAgICAgICAgIGNvbnN0IGxjdEEgPSBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGNBKTtcbiAgICAgICAgICAgIGNvbnN0IGxjdEIgPSBnZXRMaW5lYXJDb21iaW5hdGlvblR5cGUobGNCKTtcbiAgICAgICAgICAgIGlmICgobGN0QSA9PT0gXCIwXCIpIHx8IChsY3RCID09PSBcIjBcIikpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemUobGNDKTtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50U3VtKGxjQyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxjdEEgPT09IFwia1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGNDQyA9IGpvaW4obGNCLCBsY0FbMF0sIGxjQyk7XG4gICAgICAgICAgICAgICAgYWRkQ29uc3RyYWludFN1bShsY0NDKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGN0QiA9PT0gXCJrXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsY0NDID0gam9pbihsY0EsIGxjQlswXSwgbGNDKTtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50U3VtKGxjQ0MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50TXVsKGxjQSwgbGNCLCBsY0MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgcyA9IDE7IHMgPD0gblB1YmxpYzsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzbCA9IHM7XG4gICAgICAgICAgICBjb25zdCBzciA9IDA7XG4gICAgICAgICAgICBjb25zdCBzbyA9IDA7XG4gICAgICAgICAgICBjb25zdCBxbSA9IEZyLnplcm87XG4gICAgICAgICAgICBjb25zdCBxbCA9IEZyLm9uZTtcbiAgICAgICAgICAgIGNvbnN0IHFyID0gRnIuemVybztcbiAgICAgICAgICAgIGNvbnN0IHFvID0gRnIuemVybztcbiAgICAgICAgICAgIGNvbnN0IHFjID0gRnIuemVybztcblxuICAgICAgICAgICAgcGxvbmtDb25zdHJhaW50cy5wdXNoKFtzbCwgc3IsIHNvLCBxbSwgcWwsIHFyLCBxbywgcWNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcjFjcy5jb25zdHJhaW50cy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChjICUgMTAwMDAgPT09IDApKSBsb2dnZXIuZGVidWcoYHByb2Nlc3NpbmcgY29uc3RyYWludHM6ICR7Y30vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIHByb2Nlc3MoLi4ucjFjcy5jb25zdHJhaW50c1tjXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVdpdG5lc3NNYXAoc2VjdGlvbk51bSwgcG9zQ29uc3RyYWludCwgbmFtZSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8cGxvbmtDb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtDb25zdHJhaW50c1tpXVtwb3NDb25zdHJhaW50XSk7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikmJihpJTEwMDAwMDAgPT0gMCkpIGxvZ2dlci5kZWJ1Zyhgd3JpdGluZyAke25hbWV9OiAke2l9LyR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVRTWFwKHNlY3Rpb25OdW0sIHBvc0NvbnN0cmFpbnQsIG5hbWUpIHtcbiAgICAgICAgbGV0IFEgPSBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUqbjhyKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHBsb25rQ29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFEuc2V0KHBsb25rQ29uc3RyYWludHNbaV1bcG9zQ29uc3RyYWludF0sIGkqbjhyKTtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKGklMTAwMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGB3cml0aW5nICR7bmFtZX06ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFEpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICAgICAgUSA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUSk7XG4gICAgICAgIHZrW25hbWVdPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBRLCBsb2dnZXIsIFwibXVsdGlleHAgXCIrbmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVQNChidWZmKSB7XG4gICAgICAgIGNvbnN0IHEgPSBhd2FpdCBGci5pZmZ0KGJ1ZmYpO1xuICAgICAgICBjb25zdCBxNCA9IG5ldyBCaWdCdWZmZXIoZG9tYWluU2l6ZSpuOHIqNCk7XG4gICAgICAgIHE0LnNldChxLCAwKTtcbiAgICAgICAgY29uc3QgUTQgPSBhd2FpdCBGci5mZnQocTQpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUocSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShRNCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVBZGRpdGlvbnMoc2VjdGlvbk51bSwgbmFtZSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25OdW0pO1xuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoKDIqNCsyKm44cikpO1xuICAgICAgICBjb25zdCBidWZmT3V0ViA9IG5ldyBEYXRhVmlldyhidWZmT3V0LmJ1ZmZlcik7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxwbG9ua0FkZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb249cGxvbmtBZGRpdGlvbnNbaV07XG4gICAgICAgICAgICBsZXQgbz0wO1xuICAgICAgICAgICAgYnVmZk91dFYuc2V0VWludDMyKG8sIGFkZGl0aW9uWzBdLCB0cnVlKTsgbys9NDtcbiAgICAgICAgICAgIGJ1ZmZPdXRWLnNldFVpbnQzMihvLCBhZGRpdGlvblsxXSwgdHJ1ZSk7IG8rPTQ7XG4gICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgc3RvcmVuIGluICBNb250Z29tZXJ5LiBzdG9yZWQgPSB2KlJcbiAgICAgICAgICAgIC8vIHNvIHdoZW4gbW9udGdvbWVyeSBtdWx0aXBsaWNhdGVkIGJ5IHRoZSB3aXRuZXNzICBpdCByZXN1bHQgPSB2KlIqdy9SID0gdip3IFxuICAgICAgICAgICAgYnVmZk91dC5zZXQoYWRkaXRpb25bMl0sIG8pOyBvKz0gbjhyO1xuICAgICAgICAgICAgYnVmZk91dC5zZXQoYWRkaXRpb25bM10sIG8pOyBvKz0gbjhyO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJ1ZmZPdXQpO1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgJHtuYW1lfTogJHtpfS8ke3Bsb25rQWRkaXRpb25zLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVNpZ21hKHNlY3Rpb25OdW0sIG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2lnbWEgPSBuZXcgQmlnQnVmZmVyKG44cipkb21haW5TaXplKjMpO1xuICAgICAgICBjb25zdCBsYXN0QXBhcmVuY2UgPSAgbmV3IEJpZ0FycmF5KHBsb25rTlZhcnMpO1xuICAgICAgICBjb25zdCBmaXJzdFBvcyA9IG5ldyBCaWdBcnJheShwbG9ua05WYXJzKTtcbiAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxkb21haW5TaXplO2krKykge1xuICAgICAgICAgICAgaWYgKGk8cGxvbmtDb25zdHJhaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBidWlsZFNpZ21hKHBsb25rQ29uc3RyYWludHNbaV1bMF0sIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVsxXSwgZG9tYWluU2l6ZSArIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVsyXSwgZG9tYWluU2l6ZSoyICsgaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYSgwLCBkb21haW5TaXplICsgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYSgwLCBkb21haW5TaXplKjIgKyBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1tjaXJQb3dlcl0pO1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpJiYoaSUxMDAwMDAwID09IDApKSBsb2dnZXIuZGVidWcoYHdyaXRpbmcgJHtuYW1lfSBwaGFzZTE6ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBzPTA7IHM8cGxvbmtOVmFyczsgcysrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpcnN0UG9zW3NdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KGxhc3RBcGFyZW5jZVtzXSwgZmlyc3RQb3Nbc10qbjhyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiVmFyaWFibGUgbm90IHVzZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJWYXJpYWJsZSBub3QgdXNlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSYmKHMlMTAwMDAwMCA9PSAwKSkgbG9nZ2VyLmRlYnVnKGB3cml0aW5nICR7bmFtZX0gcGhhc2UyOiAke3N9LyR7cGxvbmtOVmFyc31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbG9iYWxUaGlzLmdjKSB7Z2xvYmFsVGhpcy5nYygpO31cbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uTnVtKTtcbiAgICAgICAgbGV0IFMxID0gc2lnbWEuc2xpY2UoMCwgZG9tYWluU2l6ZSpuOHIpO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFMxKTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgICAgICBsZXQgUzIgPSBzaWdtYS5zbGljZShkb21haW5TaXplKm44ciwgZG9tYWluU2l6ZSpuOHIqMik7XG4gICAgICAgIGF3YWl0IHdyaXRlUDQoUzIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIGxldCBTMyA9IHNpZ21hLnNsaWNlKGRvbWFpblNpemUqbjhyKjIsIGRvbWFpblNpemUqbjhyKjMpO1xuICAgICAgICBhd2FpdCB3cml0ZVA0KFMzKTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIHtnbG9iYWxUaGlzLmdjKCk7fVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICBTMSA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzEpO1xuICAgICAgICBTMiA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzIpO1xuICAgICAgICBTMyA9IGF3YWl0IEZyLmJhdGNoRnJvbU1vbnRnb21lcnkoUzMpO1xuXG4gICAgICAgIHZrLlMxPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMSwgbG9nZ2VyLCBcIm11bHRpZXhwIFMxXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIHZrLlMyPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMiwgbG9nZ2VyLCBcIm11bHRpZXhwIFMyXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG4gICAgICAgIHZrLlMzPSBhd2FpdCBjdXJ2ZS5HMS5tdWx0aUV4cEFmZmluZShMUG9pbnRzLCBTMywgbG9nZ2VyLCBcIm11bHRpZXhwIFMzXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykge2dsb2JhbFRoaXMuZ2MoKTt9XG5cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRTaWdtYShzLCBwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhc3RBcGFyZW5jZVtzXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGZpcnN0UG9zW3NdID0gcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KGxhc3RBcGFyZW5jZVtzXSwgcCpuOHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHY7XG4gICAgICAgICAgICBpZiAocDxkb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IHc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHA8Mipkb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IEZyLm11bCh3LCBrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHYgPSBGci5tdWwodywgazIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdEFwYXJlbmNlW3NdPXY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZUxzKHNlY3Rpb25OdW0sIG5hbWUpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBzZWN0aW9uTnVtKTtcbiAgICAgICAgY29uc3QgbD1NYXRoLm1heChuUHVibGljLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUqbjhyKTtcbiAgICAgICAgICAgIGJ1ZmYuc2V0KEZyLm9uZSwgaSpuOHIpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVQNChidWZmKTtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1Zyhgd3JpdGluZyAke25hbWV9ICR7aX0vJHtsfWApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlSGVhZGVycygpIHtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgaGVhZGVyXG4gICAgICAgIC8vLy8vLy8vLy8vXG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKDIpOyAvLyBQbG9ua1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgUGxvbmsgaGVhZGVyIHNlY3Rpb25cbiAgICAgICAgLy8vLy8vLy8vLy9cblxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIDIpO1xuICAgICAgICBjb25zdCBwcmltZVEgPSBjdXJ2ZS5xO1xuICAgICAgICBjb25zdCBuOHEgPSAoTWF0aC5mbG9vciggKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsxKSo4O1xuXG4gICAgICAgIGNvbnN0IHByaW1lUiA9IGN1cnZlLnI7XG4gICAgICAgIGNvbnN0IG44ciA9IChNYXRoLmZsb29yKCAoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKzEpKjg7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIobjhxKTtcbiAgICAgICAgYXdhaXQgd3JpdGVCaWdJbnQoZmRaS2V5LCBwcmltZVEsIG44cSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVSLCBuOHIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihwbG9ua05WYXJzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG90YWwgbnVtYmVyIG9mIGJhcnNcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoblB1YmxpYyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcHVibGljIHZhcnMgKG5vdCBpbmNsdWRpbmcgT05FKVxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihkb21haW5TaXplKTsgICAgICAgICAgICAgICAgICAvLyBkb21haW5TaXplXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHBsb25rQWRkaXRpb25zLmxlbmd0aCk7ICAgICAgICAgICAgICAgICAgLy8gZG9tYWluU2l6ZVxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCk7IFxuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMik7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlFtKSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5RbCkpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoRzEudG9BZmZpbmUodmsuUXIpKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlFvKSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5RYykpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShHMS50b0FmZmluZSh2ay5TMSkpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoRzEudG9BZmZpbmUodmsuUzIpKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKEcxLnRvQWZmaW5lKHZrLlMzKSk7XG5cbiAgICAgICAgbGV0IGJYXzI7XG4gICAgICAgIGJYXzIgPSBhd2FpdCBmZFBUYXUucmVhZChzRzIsIHNlY3Rpb25zUFRhdVszXVswXS5wICsgc0cyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGJYXzIpO1xuXG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEsxSzIoKSB7XG4gICAgICAgIGxldCBrMSA9IEZyLnR3bztcbiAgICAgICAgd2hpbGUgKGlzSW5jbHVkZWQoazEsIFtdLCBjaXJQb3dlcikpIEZyLmFkZChrMSwgRnIub25lKTtcbiAgICAgICAgbGV0IGsyID0gRnIuYWRkKGsxLCBGci5vbmUpO1xuICAgICAgICB3aGlsZSAoaXNJbmNsdWRlZChrMiwgW2sxXSwgY2lyUG93ZXIpKSBGci5hZGQoazIsIEZyLm9uZSk7XG4gICAgICAgIHJldHVybiBbazEsIGsyXTtcblxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSW5jbHVkZWQoaywga0FyciwgcG93KSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW5TaXplPSAyKipwb3c7XG4gICAgICAgICAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxkb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgdykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajxrQXJyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGci5lcShrLCBGci5tdWwoa0FycltqXSwgdykpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3Bvd10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmV4cG9ydCBjbGFzcyBQcm9vZiB7XG4gICAgY29uc3RydWN0b3IoY3VydmUsIGxvZ2dlcikge1xuICAgICAgICB0aGlzLmN1cnZlID0gY3VydmU7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuXG4gICAgICAgIHRoaXMucmVzZXRQcm9vZigpO1xuICAgIH1cblxuICAgIHJlc2V0UHJvb2YoKSB7XG4gICAgICAgIHRoaXMucG9seW5vbWlhbHMgPSB7fTtcbiAgICAgICAgdGhpcy5ldmFsdWF0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGFkZFBvbHlub21pYWwoa2V5LCBwb2x5bm9taWFsKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGhpcy5wb2x5bm9taWFscykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcHJvb2Y6IHBvbHlub21pYWwuJHtrZXl9IGFscmVhZHkgZXhpc3QgaW4gcHJvb2ZgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvbHlub21pYWxzW2tleV0gPSBwb2x5bm9taWFsO1xuICAgIH1cblxuICAgIGdldFBvbHlub21pYWwoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLnBvbHlub21pYWxzKSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcHJvb2Y6IHBvbHlub21pYWwgJHtrZXl9IGRvZXMgbm90IGV4aXN0IGluIHByb29mYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9seW5vbWlhbHNba2V5XTtcbiAgICB9XG5cbiAgICBhZGRFdmFsdWF0aW9uKGtleSwgZXZhbHVhdGlvbikge1xuICAgICAgICBpZiAoa2V5IGluIHRoaXMuZXZhbHVhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYHByb29mOiBldmFsdWF0aW9ucy4ke2tleX0gYWxyZWFkeSBleGlzdCBpbiBwcm9vZmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZhbHVhdGlvbnNba2V5XSA9IGV2YWx1YXRpb247XG4gICAgfVxuXG4gICAgZ2V0RXZhbHVhdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRoaXMuZXZhbHVhdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBwcm9vZjogZXZhbHVhdGlvbiAke2tleX0gZG9lcyBub3QgZXhpc3QgaW4gcHJvb2ZgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ldmFsdWF0aW9uc1trZXldO1xuICAgIH1cblxuICAgIHRvT2JqZWN0UHJvb2Yoc3BsaXRGaWVsZHMgPSB0cnVlKSB7XG4gICAgICAgIGxldCByZXMgPSBzcGxpdEZpZWxkcyA/IHtwb2x5bm9taWFsczoge30sIGV2YWx1YXRpb25zOiB7fX0gOiB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnBvbHlub21pYWxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3VydmUuRzEudG9PYmplY3QodGhpcy5wb2x5bm9taWFsc1trZXldKTtcbiAgICAgICAgICAgIGlmKHNwbGl0RmllbGRzKSB7XG4gICAgICAgICAgICAgICAgcmVzLnBvbHlub21pYWxzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5ldmFsdWF0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmN1cnZlLkZyLnRvT2JqZWN0KHRoaXMuZXZhbHVhdGlvbnNba2V5XSk7XG4gICAgICAgICAgICBpZihzcGxpdEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHJlcy5ldmFsdWF0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnJvbU9iamVjdFByb29mKG9iamVjdFByb29mKSB7XG4gICAgICAgIHRoaXMucmVzZXRQcm9vZigpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdFByb29mLnBvbHlub21pYWxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbHlub21pYWxzW2tleV0gPSB0aGlzLmN1cnZlLkcxLmZyb21PYmplY3Qob2JqZWN0UHJvb2YucG9seW5vbWlhbHNba2V5XSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdFByb29mLmV2YWx1YXRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRpb25zW2tleV0gPSB0aGlzLmN1cnZlLkZyLmZyb21PYmplY3Qob2JqZWN0UHJvb2YuZXZhbHVhdGlvbnNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCIvKipcbiAqIFtqcy1zaGEzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2pzLXNoYTN9XG4gKlxuICogQHZlcnNpb24gMC44LjBcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXG4gKiBAY29weXJpZ2h0IENoZW4sIFlpLUN5dWFuIDIwMTUtMjAxOFxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbi8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgSU5QVVRfRVJST1IgPSAnaW5wdXQgaXMgaW52YWxpZCB0eXBlJztcbiAgdmFyIEZJTkFMSVpFX0VSUk9SID0gJ2ZpbmFsaXplIGFscmVhZHkgY2FsbGVkJztcbiAgdmFyIFdJTkRPVyA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB2YXIgcm9vdCA9IFdJTkRPVyA/IHdpbmRvdyA6IHt9O1xuICBpZiAocm9vdC5KU19TSEEzX05PX1dJTkRPVykge1xuICAgIFdJTkRPVyA9IGZhbHNlO1xuICB9XG4gIHZhciBXRUJfV09SS0VSID0gIVdJTkRPVyAmJiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCc7XG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSlNfU0hBM19OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgaWYgKE5PREVfSlMpIHtcbiAgICByb290ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFdFQl9XT1JLRVIpIHtcbiAgICByb290ID0gc2VsZjtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSlNfU0hBM19OT19DT01NT05fSlMgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHM7XG4gIHZhciBBTUQgPSB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQ7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAhcm9vdC5KU19TSEEzX05PX0FSUkFZX0JVRkZFUiAmJiB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnO1xuICB2YXIgSEVYX0NIQVJTID0gJzAxMjM0NTY3ODlhYmNkZWYnLnNwbGl0KCcnKTtcbiAgdmFyIFNIQUtFX1BBRERJTkcgPSBbMzEsIDc5MzYsIDIwMzE2MTYsIDUyMDA5MzY5Nl07XG4gIHZhciBDU0hBS0VfUEFERElORyA9IFs0LCAxMDI0LCAyNjIxNDQsIDY3MTA4ODY0XTtcbiAgdmFyIEtFQ0NBS19QQURESU5HID0gWzEsIDI1NiwgNjU1MzYsIDE2Nzc3MjE2XTtcbiAgdmFyIFBBRERJTkcgPSBbNiwgMTUzNiwgMzkzMjE2LCAxMDA2NjMyOTZdO1xuICB2YXIgU0hJRlQgPSBbMCwgOCwgMTYsIDI0XTtcbiAgdmFyIFJDID0gWzEsIDAsIDMyODk4LCAwLCAzMjkwNiwgMjE0NzQ4MzY0OCwgMjE0NzUxNjQxNiwgMjE0NzQ4MzY0OCwgMzI5MDcsIDAsIDIxNDc0ODM2NDksXG4gICAgMCwgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI3NzcsIDIxNDc0ODM2NDgsIDEzOCwgMCwgMTM2LCAwLCAyMTQ3NTE2NDI1LCAwLFxuICAgIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLFxuICAgIDIxNDc0ODM2NDgsIDMyNzcwLCAyMTQ3NDgzNjQ4LCAxMjgsIDIxNDc0ODM2NDgsIDMyNzc4LCAwLCAyMTQ3NDgzNjU4LCAyMTQ3NDgzNjQ4LFxuICAgIDIxNDc1MTY1NDUsIDIxNDc0ODM2NDgsIDMyODk2LCAyMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ5LCAwLCAyMTQ3NTE2NDI0LCAyMTQ3NDgzNjQ4XTtcbiAgdmFyIEJJVFMgPSBbMjI0LCAyNTYsIDM4NCwgNTEyXTtcbiAgdmFyIFNIQUtFX0JJVFMgPSBbMTI4LCAyNTZdO1xuICB2YXIgT1VUUFVUX1RZUEVTID0gWydoZXgnLCAnYnVmZmVyJywgJ2FycmF5QnVmZmVyJywgJ2FycmF5JywgJ2RpZ2VzdCddO1xuICB2YXIgQ1NIQUtFX0JZVEVQQUQgPSB7XG4gICAgJzEyOCc6IDE2OCxcbiAgICAnMjU2JzogMTM2XG4gIH07XG5cbiAgaWYgKHJvb3QuSlNfU0hBM19OT19OT0RFX0pTIHx8ICFBcnJheS5pc0FycmF5KSB7XG4gICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuICB9XG5cbiAgaWYgKEFSUkFZX0JVRkZFUiAmJiAocm9vdC5KU19TSEEzX05PX0FSUkFZX0JVRkZFUl9JU19WSUVXIHx8ICFBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iai5idWZmZXIgJiYgb2JqLmJ1ZmZlci5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXI7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjcmVhdGVPdXRwdXRNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZywgb3V0cHV0VHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgYml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlU2hha2VPdXRwdXRNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZywgb3V0cHV0VHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgb3V0cHV0Qml0cykge1xuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlQ3NoYWtlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMsIG4sIHMpIHtcbiAgICAgIHJldHVybiBtZXRob2RzWydjc2hha2UnICsgYml0c10udXBkYXRlKG1lc3NhZ2UsIG91dHB1dEJpdHMsIG4sIHMpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlS21hY091dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIG1lc3NhZ2UsIG91dHB1dEJpdHMsIHMpIHtcbiAgICAgIHJldHVybiBtZXRob2RzWydrbWFjJyArIGJpdHNdLnVwZGF0ZShrZXksIG1lc3NhZ2UsIG91dHB1dEJpdHMsIHMpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlT3V0cHV0TWV0aG9kcyA9IGZ1bmN0aW9uIChtZXRob2QsIGNyZWF0ZU1ldGhvZCwgYml0cywgcGFkZGluZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgT1VUUFVUX1RZUEVTLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZU1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZDtcbiAgfTtcblxuICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgYml0cyk7XG4gICAgfTtcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKCkudXBkYXRlKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgcmV0dXJuIGNyZWF0ZU91dHB1dE1ldGhvZHMobWV0aG9kLCBjcmVhdGVPdXRwdXRNZXRob2QsIGJpdHMsIHBhZGRpbmcpO1xuICB9O1xuXG4gIHZhciBjcmVhdGVTaGFrZU1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nKSB7XG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKG91dHB1dEJpdHMpIHtcbiAgICAgIHJldHVybiBuZXcgS2VjY2FrKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpO1xuICAgIH07XG4gICAgbWV0aG9kLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvdXRwdXRCaXRzKSB7XG4gICAgICByZXR1cm4gbWV0aG9kLmNyZWF0ZShvdXRwdXRCaXRzKS51cGRhdGUobWVzc2FnZSk7XG4gICAgfTtcbiAgICByZXR1cm4gY3JlYXRlT3V0cHV0TWV0aG9kcyhtZXRob2QsIGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kLCBiaXRzLCBwYWRkaW5nKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlQ3NoYWtlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcbiAgICB2YXIgdyA9IENTSEFLRV9CWVRFUEFEW2JpdHNdO1xuICAgIHZhciBtZXRob2QgPSBjcmVhdGVDc2hha2VPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgJ2hleCcpO1xuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAob3V0cHV0Qml0cywgbiwgcykge1xuICAgICAgaWYgKCFuICYmICFzKSB7XG4gICAgICAgIHJldHVybiBtZXRob2RzWydzaGFrZScgKyBiaXRzXS5jcmVhdGUob3V0cHV0Qml0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKS5ieXRlcGFkKFtuLCBzXSwgdyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMsIG4sIHMpIHtcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKG91dHB1dEJpdHMsIG4sIHMpLnVwZGF0ZShtZXNzYWdlKTtcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVPdXRwdXRNZXRob2RzKG1ldGhvZCwgY3JlYXRlQ3NoYWtlT3V0cHV0TWV0aG9kLCBiaXRzLCBwYWRkaW5nKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlS21hY01ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nKSB7XG4gICAgdmFyIHcgPSBDU0hBS0VfQllURVBBRFtiaXRzXTtcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlS21hY091dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uIChrZXksIG91dHB1dEJpdHMsIHMpIHtcbiAgICAgIHJldHVybiBuZXcgS21hYyhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKS5ieXRlcGFkKFsnS01BQycsIHNdLCB3KS5ieXRlcGFkKFtrZXldLCB3KTtcbiAgICB9O1xuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAoa2V5LCBtZXNzYWdlLCBvdXRwdXRCaXRzLCBzKSB7XG4gICAgICByZXR1cm4gbWV0aG9kLmNyZWF0ZShrZXksIG91dHB1dEJpdHMsIHMpLnVwZGF0ZShtZXNzYWdlKTtcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVPdXRwdXRNZXRob2RzKG1ldGhvZCwgY3JlYXRlS21hY091dHB1dE1ldGhvZCwgYml0cywgcGFkZGluZyk7XG4gIH07XG5cbiAgdmFyIGFsZ29yaXRobXMgPSBbXG4gICAgeyBuYW1lOiAna2VjY2FrJywgcGFkZGluZzogS0VDQ0FLX1BBRERJTkcsIGJpdHM6IEJJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlTWV0aG9kIH0sXG4gICAgeyBuYW1lOiAnc2hhMycsIHBhZGRpbmc6IFBBRERJTkcsIGJpdHM6IEJJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlTWV0aG9kIH0sXG4gICAgeyBuYW1lOiAnc2hha2UnLCBwYWRkaW5nOiBTSEFLRV9QQURESU5HLCBiaXRzOiBTSEFLRV9CSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZVNoYWtlTWV0aG9kIH0sXG4gICAgeyBuYW1lOiAnY3NoYWtlJywgcGFkZGluZzogQ1NIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlQ3NoYWtlTWV0aG9kIH0sXG4gICAgeyBuYW1lOiAna21hYycsIHBhZGRpbmc6IENTSEFLRV9QQURESU5HLCBiaXRzOiBTSEFLRV9CSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZUttYWNNZXRob2QgfVxuICBdO1xuXG4gIHZhciBtZXRob2RzID0ge30sIG1ldGhvZE5hbWVzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGdvcml0aG1zLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGFsZ29yaXRobSA9IGFsZ29yaXRobXNbaV07XG4gICAgdmFyIGJpdHMgPSBhbGdvcml0aG0uYml0cztcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJpdHMubGVuZ3RoOyArK2opIHtcbiAgICAgIHZhciBtZXRob2ROYW1lID0gYWxnb3JpdGhtLm5hbWUgKyAnXycgKyBiaXRzW2pdO1xuICAgICAgbWV0aG9kTmFtZXMucHVzaChtZXRob2ROYW1lKTtcbiAgICAgIG1ldGhvZHNbbWV0aG9kTmFtZV0gPSBhbGdvcml0aG0uY3JlYXRlTWV0aG9kKGJpdHNbal0sIGFsZ29yaXRobS5wYWRkaW5nKTtcbiAgICAgIGlmIChhbGdvcml0aG0ubmFtZSAhPT0gJ3NoYTMnKSB7XG4gICAgICAgIHZhciBuZXdNZXRob2ROYW1lID0gYWxnb3JpdGhtLm5hbWUgKyBiaXRzW2pdO1xuICAgICAgICBtZXRob2ROYW1lcy5wdXNoKG5ld01ldGhvZE5hbWUpO1xuICAgICAgICBtZXRob2RzW25ld01ldGhvZE5hbWVdID0gbWV0aG9kc1ttZXRob2ROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykge1xuICAgIHRoaXMuYmxvY2tzID0gW107XG4gICAgdGhpcy5zID0gW107XG4gICAgdGhpcy5wYWRkaW5nID0gcGFkZGluZztcbiAgICB0aGlzLm91dHB1dEJpdHMgPSBvdXRwdXRCaXRzO1xuICAgIHRoaXMucmVzZXQgPSB0cnVlO1xuICAgIHRoaXMuZmluYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5ibG9jayA9IDA7XG4gICAgdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy5ibG9ja0NvdW50ID0gKDE2MDAgLSAoYml0cyA8PCAxKSkgPj4gNTtcbiAgICB0aGlzLmJ5dGVDb3VudCA9IHRoaXMuYmxvY2tDb3VudCA8PCAyO1xuICAgIHRoaXMub3V0cHV0QmxvY2tzID0gb3V0cHV0Qml0cyA+PiA1O1xuICAgIHRoaXMuZXh0cmFCeXRlcyA9IChvdXRwdXRCaXRzICYgMzEpID4+IDM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpIHtcbiAgICAgIHRoaXMuc1tpXSA9IDA7XG4gICAgfVxuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLmZpbmFsaXplZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKEZJTkFMSVpFX0VSUk9SKTtcbiAgICB9XG4gICAgdmFyIG5vdFN0cmluZywgdHlwZSA9IHR5cGVvZiBtZXNzYWdlO1xuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOUFVUX0VSUk9SKTtcbiAgICAgICAgfSBlbHNlIGlmIChBUlJBWV9CVUZGRVIgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcbiAgICAgICAgICBpZiAoIUFSUkFZX0JVRkZFUiB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5QVVRfRVJST1IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOUFVUX0VSUk9SKTtcbiAgICAgIH1cbiAgICAgIG5vdFN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHZhciBibG9ja3MgPSB0aGlzLmJsb2NrcywgYnl0ZUNvdW50ID0gdGhpcy5ieXRlQ291bnQsIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLFxuICAgICAgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgaW5kZXggPSAwLCBzID0gdGhpcy5zLCBpLCBjb2RlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5yZXNldCkge1xuICAgICAgICB0aGlzLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIGJsb2Nrc1swXSA9IHRoaXMuYmxvY2s7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBibG9ja0NvdW50ICsgMTsgKytpKSB7XG4gICAgICAgICAgYmxvY2tzW2ldID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdFN0cmluZykge1xuICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgYnl0ZUNvdW50OyArK2luZGV4KSB7XG4gICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gbWVzc2FnZVtpbmRleF0gPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcbiAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IGNvZGUgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweGMwIHwgKGNvZGUgPj4gNikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweGUwIHwgKGNvZGUgPj4gMTIpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZjAgfCAoY29kZSA+PiAxOCkpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gMTIpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sYXN0Qnl0ZUluZGV4ID0gaTtcbiAgICAgIGlmIChpID49IGJ5dGVDb3VudCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gaSAtIGJ5dGVDb3VudDtcbiAgICAgICAgdGhpcy5ibG9jayA9IGJsb2Nrc1tibG9ja0NvdW50XTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGYocyk7XG4gICAgICAgIHRoaXMucmVzZXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGFydCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEtlY2Nhay5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gKHgsIHJpZ2h0KSB7XG4gICAgdmFyIG8gPSB4ICYgMjU1LCBuID0gMTtcbiAgICB2YXIgYnl0ZXMgPSBbb107XG4gICAgeCA9IHggPj4gODtcbiAgICBvID0geCAmIDI1NTtcbiAgICB3aGlsZSAobyA+IDApIHtcbiAgICAgIGJ5dGVzLnVuc2hpZnQobyk7XG4gICAgICB4ID0geCA+PiA4O1xuICAgICAgbyA9IHggJiAyNTU7XG4gICAgICArK247XG4gICAgfVxuICAgIGlmIChyaWdodCkge1xuICAgICAgYnl0ZXMucHVzaChuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnl0ZXMudW5zaGlmdChuKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGUoYnl0ZXMpO1xuICAgIHJldHVybiBieXRlcy5sZW5ndGg7XG4gIH07XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIG5vdFN0cmluZywgdHlwZSA9IHR5cGVvZiBzdHI7XG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihJTlBVVF9FUlJPUik7XG4gICAgICAgIH0gZWxzZSBpZiAoQVJSQVlfQlVGRkVSICYmIHN0ci5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBzdHIgPSBuZXcgVWludDhBcnJheShzdHIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHN0cikpIHtcbiAgICAgICAgICBpZiAoIUFSUkFZX0JVRkZFUiB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihJTlBVVF9FUlJPUik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5QVVRfRVJST1IpO1xuICAgICAgfVxuICAgICAgbm90U3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGJ5dGVzID0gMCwgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICBpZiAobm90U3RyaW5nKSB7XG4gICAgICBieXRlcyA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XG4gICAgICAgICAgYnl0ZXMgKz0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICBieXRlcyArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcbiAgICAgICAgICBieXRlcyArPSAzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYnl0ZXMgKz0gNDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBieXRlcyArPSB0aGlzLmVuY29kZShieXRlcyAqIDgpO1xuICAgIHRoaXMudXBkYXRlKHN0cik7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9O1xuXG4gIEtlY2Nhay5wcm90b3R5cGUuYnl0ZXBhZCA9IGZ1bmN0aW9uIChzdHJzLCB3KSB7XG4gICAgdmFyIGJ5dGVzID0gdGhpcy5lbmNvZGUodyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcyArPSB0aGlzLmVuY29kZVN0cmluZyhzdHJzW2ldKTtcbiAgICB9XG4gICAgdmFyIHBhZGRpbmdCeXRlcyA9IHcgLSBieXRlcyAlIHc7XG4gICAgdmFyIHplcm9zID0gW107XG4gICAgemVyb3MubGVuZ3RoID0gcGFkZGluZ0J5dGVzO1xuICAgIHRoaXMudXBkYXRlKHplcm9zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBLZWNjYWsucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmZpbmFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbmFsaXplZCA9IHRydWU7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4LCBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zO1xuICAgIGJsb2Nrc1tpID4+IDJdIHw9IHRoaXMucGFkZGluZ1tpICYgM107XG4gICAgaWYgKHRoaXMubGFzdEJ5dGVJbmRleCA9PT0gdGhpcy5ieXRlQ291bnQpIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1tibG9ja0NvdW50XTtcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBibG9ja0NvdW50ICsgMTsgKytpKSB7XG4gICAgICAgIGJsb2Nrc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGJsb2Nrc1tibG9ja0NvdW50IC0gMV0gfD0gMHg4MDAwMDAwMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XG4gICAgICBzW2ldIF49IGJsb2Nrc1tpXTtcbiAgICB9XG4gICAgZihzKTtcbiAgfTtcblxuICBLZWNjYWsucHJvdG90eXBlLnRvU3RyaW5nID0gS2VjY2FrLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5maW5hbGl6ZSgpO1xuXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxuICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xuICAgIHZhciBoZXggPSAnJywgYmxvY2s7XG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XG4gICAgICAgIGJsb2NrID0gc1tpXTtcbiAgICAgICAgaGV4ICs9IEhFWF9DSEFSU1soYmxvY2sgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1tibG9jayAmIDB4MEZdICtcbiAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdICtcbiAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAxNikgJiAweDBGXSArXG4gICAgICAgICAgSEVYX0NIQVJTWyhibG9jayA+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMjQpICYgMHgwRl07XG4gICAgICB9XG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgZihzKTtcbiAgICAgICAgaSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChleHRyYUJ5dGVzKSB7XG4gICAgICBibG9jayA9IHNbaV07XG4gICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2Jsb2NrICYgMHgwRl07XG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcbiAgICAgICAgaGV4ICs9IEhFWF9DSEFSU1soYmxvY2sgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDgpICYgMHgwRl07XG4gICAgICB9XG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcbiAgICAgICAgaGV4ICs9IEhFWF9DSEFSU1soYmxvY2sgPj4gMjApICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDE2KSAmIDB4MEZdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGV4O1xuICB9O1xuXG4gIEtlY2Nhay5wcm90b3R5cGUuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5maW5hbGl6ZSgpO1xuXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxuICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xuICAgIHZhciBieXRlcyA9IHRoaXMub3V0cHV0Qml0cyA+PiAzO1xuICAgIHZhciBidWZmZXI7XG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcbiAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigob3V0cHV0QmxvY2tzICsgMSkgPDwgMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcyk7XG4gICAgfVxuICAgIHZhciBhcnJheSA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xuICAgICAgICBhcnJheVtqXSA9IHNbaV07XG4gICAgICB9XG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgZihzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcbiAgICAgIGFycmF5W2ldID0gc1tpXTtcbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCBieXRlcyk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5idWZmZXIgPSBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyO1xuXG4gIEtlY2Nhay5wcm90b3R5cGUuZGlnZXN0ID0gS2VjY2FrLnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZpbmFsaXplKCk7XG5cbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXG4gICAgICBleHRyYUJ5dGVzID0gdGhpcy5leHRyYUJ5dGVzLCBpID0gMCwgaiA9IDA7XG4gICAgdmFyIGFycmF5ID0gW10sIG9mZnNldCwgYmxvY2s7XG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XG4gICAgICAgIG9mZnNldCA9IGogPDwgMjtcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xuICAgICAgICBhcnJheVtvZmZzZXRdID0gYmxvY2sgJiAweEZGO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XG4gICAgICAgIGFycmF5W29mZnNldCArIDJdID0gKGJsb2NrID4+IDE2KSAmIDB4RkY7XG4gICAgICAgIGFycmF5W29mZnNldCArIDNdID0gKGJsb2NrID4+IDI0KSAmIDB4RkY7XG4gICAgICB9XG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgZihzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcbiAgICAgIG9mZnNldCA9IGogPDwgMjtcbiAgICAgIGJsb2NrID0gc1tpXTtcbiAgICAgIGFycmF5W29mZnNldF0gPSBibG9jayAmIDB4RkY7XG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAoYmxvY2sgPj4gOCkgJiAweEZGO1xuICAgICAgfVxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAyKSB7XG4gICAgICAgIGFycmF5W29mZnNldCArIDJdID0gKGJsb2NrID4+IDE2KSAmIDB4RkY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfTtcblxuICBmdW5jdGlvbiBLbWFjKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpIHtcbiAgICBLZWNjYWsuY2FsbCh0aGlzLCBiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKTtcbiAgfVxuXG4gIEttYWMucHJvdG90eXBlID0gbmV3IEtlY2NhaygpO1xuXG4gIEttYWMucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW5jb2RlKHRoaXMub3V0cHV0Qml0cywgdHJ1ZSk7XG4gICAgcmV0dXJuIEtlY2Nhay5wcm90b3R5cGUuZmluYWxpemUuY2FsbCh0aGlzKTtcbiAgfTtcblxuICB2YXIgZiA9IGZ1bmN0aW9uIChzKSB7XG4gICAgdmFyIGgsIGwsIG4sIGMwLCBjMSwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzgsIGM5LFxuICAgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiOCwgYjksIGIxMCwgYjExLCBiMTIsIGIxMywgYjE0LCBiMTUsIGIxNiwgYjE3LFxuICAgICAgYjE4LCBiMTksIGIyMCwgYjIxLCBiMjIsIGIyMywgYjI0LCBiMjUsIGIyNiwgYjI3LCBiMjgsIGIyOSwgYjMwLCBiMzEsIGIzMiwgYjMzLFxuICAgICAgYjM0LCBiMzUsIGIzNiwgYjM3LCBiMzgsIGIzOSwgYjQwLCBiNDEsIGI0MiwgYjQzLCBiNDQsIGI0NSwgYjQ2LCBiNDcsIGI0OCwgYjQ5O1xuICAgIGZvciAobiA9IDA7IG4gPCA0ODsgbiArPSAyKSB7XG4gICAgICBjMCA9IHNbMF0gXiBzWzEwXSBeIHNbMjBdIF4gc1szMF0gXiBzWzQwXTtcbiAgICAgIGMxID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdO1xuICAgICAgYzIgPSBzWzJdIF4gc1sxMl0gXiBzWzIyXSBeIHNbMzJdIF4gc1s0Ml07XG4gICAgICBjMyA9IHNbM10gXiBzWzEzXSBeIHNbMjNdIF4gc1szM10gXiBzWzQzXTtcbiAgICAgIGM0ID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdO1xuICAgICAgYzUgPSBzWzVdIF4gc1sxNV0gXiBzWzI1XSBeIHNbMzVdIF4gc1s0NV07XG4gICAgICBjNiA9IHNbNl0gXiBzWzE2XSBeIHNbMjZdIF4gc1szNl0gXiBzWzQ2XTtcbiAgICAgIGM3ID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddO1xuICAgICAgYzggPSBzWzhdIF4gc1sxOF0gXiBzWzI4XSBeIHNbMzhdIF4gc1s0OF07XG4gICAgICBjOSA9IHNbOV0gXiBzWzE5XSBeIHNbMjldIF4gc1szOV0gXiBzWzQ5XTtcblxuICAgICAgaCA9IGM4IF4gKChjMiA8PCAxKSB8IChjMyA+Pj4gMzEpKTtcbiAgICAgIGwgPSBjOSBeICgoYzMgPDwgMSkgfCAoYzIgPj4+IDMxKSk7XG4gICAgICBzWzBdIF49IGg7XG4gICAgICBzWzFdIF49IGw7XG4gICAgICBzWzEwXSBePSBoO1xuICAgICAgc1sxMV0gXj0gbDtcbiAgICAgIHNbMjBdIF49IGg7XG4gICAgICBzWzIxXSBePSBsO1xuICAgICAgc1szMF0gXj0gaDtcbiAgICAgIHNbMzFdIF49IGw7XG4gICAgICBzWzQwXSBePSBoO1xuICAgICAgc1s0MV0gXj0gbDtcbiAgICAgIGggPSBjMCBeICgoYzQgPDwgMSkgfCAoYzUgPj4+IDMxKSk7XG4gICAgICBsID0gYzEgXiAoKGM1IDw8IDEpIHwgKGM0ID4+PiAzMSkpO1xuICAgICAgc1syXSBePSBoO1xuICAgICAgc1szXSBePSBsO1xuICAgICAgc1sxMl0gXj0gaDtcbiAgICAgIHNbMTNdIF49IGw7XG4gICAgICBzWzIyXSBePSBoO1xuICAgICAgc1syM10gXj0gbDtcbiAgICAgIHNbMzJdIF49IGg7XG4gICAgICBzWzMzXSBePSBsO1xuICAgICAgc1s0Ml0gXj0gaDtcbiAgICAgIHNbNDNdIF49IGw7XG4gICAgICBoID0gYzIgXiAoKGM2IDw8IDEpIHwgKGM3ID4+PiAzMSkpO1xuICAgICAgbCA9IGMzIF4gKChjNyA8PCAxKSB8IChjNiA+Pj4gMzEpKTtcbiAgICAgIHNbNF0gXj0gaDtcbiAgICAgIHNbNV0gXj0gbDtcbiAgICAgIHNbMTRdIF49IGg7XG4gICAgICBzWzE1XSBePSBsO1xuICAgICAgc1syNF0gXj0gaDtcbiAgICAgIHNbMjVdIF49IGw7XG4gICAgICBzWzM0XSBePSBoO1xuICAgICAgc1szNV0gXj0gbDtcbiAgICAgIHNbNDRdIF49IGg7XG4gICAgICBzWzQ1XSBePSBsO1xuICAgICAgaCA9IGM0IF4gKChjOCA8PCAxKSB8IChjOSA+Pj4gMzEpKTtcbiAgICAgIGwgPSBjNSBeICgoYzkgPDwgMSkgfCAoYzggPj4+IDMxKSk7XG4gICAgICBzWzZdIF49IGg7XG4gICAgICBzWzddIF49IGw7XG4gICAgICBzWzE2XSBePSBoO1xuICAgICAgc1sxN10gXj0gbDtcbiAgICAgIHNbMjZdIF49IGg7XG4gICAgICBzWzI3XSBePSBsO1xuICAgICAgc1szNl0gXj0gaDtcbiAgICAgIHNbMzddIF49IGw7XG4gICAgICBzWzQ2XSBePSBoO1xuICAgICAgc1s0N10gXj0gbDtcbiAgICAgIGggPSBjNiBeICgoYzAgPDwgMSkgfCAoYzEgPj4+IDMxKSk7XG4gICAgICBsID0gYzcgXiAoKGMxIDw8IDEpIHwgKGMwID4+PiAzMSkpO1xuICAgICAgc1s4XSBePSBoO1xuICAgICAgc1s5XSBePSBsO1xuICAgICAgc1sxOF0gXj0gaDtcbiAgICAgIHNbMTldIF49IGw7XG4gICAgICBzWzI4XSBePSBoO1xuICAgICAgc1syOV0gXj0gbDtcbiAgICAgIHNbMzhdIF49IGg7XG4gICAgICBzWzM5XSBePSBsO1xuICAgICAgc1s0OF0gXj0gaDtcbiAgICAgIHNbNDldIF49IGw7XG5cbiAgICAgIGIwID0gc1swXTtcbiAgICAgIGIxID0gc1sxXTtcbiAgICAgIGIzMiA9IChzWzExXSA8PCA0KSB8IChzWzEwXSA+Pj4gMjgpO1xuICAgICAgYjMzID0gKHNbMTBdIDw8IDQpIHwgKHNbMTFdID4+PiAyOCk7XG4gICAgICBiMTQgPSAoc1syMF0gPDwgMykgfCAoc1syMV0gPj4+IDI5KTtcbiAgICAgIGIxNSA9IChzWzIxXSA8PCAzKSB8IChzWzIwXSA+Pj4gMjkpO1xuICAgICAgYjQ2ID0gKHNbMzFdIDw8IDkpIHwgKHNbMzBdID4+PiAyMyk7XG4gICAgICBiNDcgPSAoc1szMF0gPDwgOSkgfCAoc1szMV0gPj4+IDIzKTtcbiAgICAgIGIyOCA9IChzWzQwXSA8PCAxOCkgfCAoc1s0MV0gPj4+IDE0KTtcbiAgICAgIGIyOSA9IChzWzQxXSA8PCAxOCkgfCAoc1s0MF0gPj4+IDE0KTtcbiAgICAgIGIyMCA9IChzWzJdIDw8IDEpIHwgKHNbM10gPj4+IDMxKTtcbiAgICAgIGIyMSA9IChzWzNdIDw8IDEpIHwgKHNbMl0gPj4+IDMxKTtcbiAgICAgIGIyID0gKHNbMTNdIDw8IDEyKSB8IChzWzEyXSA+Pj4gMjApO1xuICAgICAgYjMgPSAoc1sxMl0gPDwgMTIpIHwgKHNbMTNdID4+PiAyMCk7XG4gICAgICBiMzQgPSAoc1syMl0gPDwgMTApIHwgKHNbMjNdID4+PiAyMik7XG4gICAgICBiMzUgPSAoc1syM10gPDwgMTApIHwgKHNbMjJdID4+PiAyMik7XG4gICAgICBiMTYgPSAoc1szM10gPDwgMTMpIHwgKHNbMzJdID4+PiAxOSk7XG4gICAgICBiMTcgPSAoc1szMl0gPDwgMTMpIHwgKHNbMzNdID4+PiAxOSk7XG4gICAgICBiNDggPSAoc1s0Ml0gPDwgMikgfCAoc1s0M10gPj4+IDMwKTtcbiAgICAgIGI0OSA9IChzWzQzXSA8PCAyKSB8IChzWzQyXSA+Pj4gMzApO1xuICAgICAgYjQwID0gKHNbNV0gPDwgMzApIHwgKHNbNF0gPj4+IDIpO1xuICAgICAgYjQxID0gKHNbNF0gPDwgMzApIHwgKHNbNV0gPj4+IDIpO1xuICAgICAgYjIyID0gKHNbMTRdIDw8IDYpIHwgKHNbMTVdID4+PiAyNik7XG4gICAgICBiMjMgPSAoc1sxNV0gPDwgNikgfCAoc1sxNF0gPj4+IDI2KTtcbiAgICAgIGI0ID0gKHNbMjVdIDw8IDExKSB8IChzWzI0XSA+Pj4gMjEpO1xuICAgICAgYjUgPSAoc1syNF0gPDwgMTEpIHwgKHNbMjVdID4+PiAyMSk7XG4gICAgICBiMzYgPSAoc1szNF0gPDwgMTUpIHwgKHNbMzVdID4+PiAxNyk7XG4gICAgICBiMzcgPSAoc1szNV0gPDwgMTUpIHwgKHNbMzRdID4+PiAxNyk7XG4gICAgICBiMTggPSAoc1s0NV0gPDwgMjkpIHwgKHNbNDRdID4+PiAzKTtcbiAgICAgIGIxOSA9IChzWzQ0XSA8PCAyOSkgfCAoc1s0NV0gPj4+IDMpO1xuICAgICAgYjEwID0gKHNbNl0gPDwgMjgpIHwgKHNbN10gPj4+IDQpO1xuICAgICAgYjExID0gKHNbN10gPDwgMjgpIHwgKHNbNl0gPj4+IDQpO1xuICAgICAgYjQyID0gKHNbMTddIDw8IDIzKSB8IChzWzE2XSA+Pj4gOSk7XG4gICAgICBiNDMgPSAoc1sxNl0gPDwgMjMpIHwgKHNbMTddID4+PiA5KTtcbiAgICAgIGIyNCA9IChzWzI2XSA8PCAyNSkgfCAoc1syN10gPj4+IDcpO1xuICAgICAgYjI1ID0gKHNbMjddIDw8IDI1KSB8IChzWzI2XSA+Pj4gNyk7XG4gICAgICBiNiA9IChzWzM2XSA8PCAyMSkgfCAoc1szN10gPj4+IDExKTtcbiAgICAgIGI3ID0gKHNbMzddIDw8IDIxKSB8IChzWzM2XSA+Pj4gMTEpO1xuICAgICAgYjM4ID0gKHNbNDddIDw8IDI0KSB8IChzWzQ2XSA+Pj4gOCk7XG4gICAgICBiMzkgPSAoc1s0Nl0gPDwgMjQpIHwgKHNbNDddID4+PiA4KTtcbiAgICAgIGIzMCA9IChzWzhdIDw8IDI3KSB8IChzWzldID4+PiA1KTtcbiAgICAgIGIzMSA9IChzWzldIDw8IDI3KSB8IChzWzhdID4+PiA1KTtcbiAgICAgIGIxMiA9IChzWzE4XSA8PCAyMCkgfCAoc1sxOV0gPj4+IDEyKTtcbiAgICAgIGIxMyA9IChzWzE5XSA8PCAyMCkgfCAoc1sxOF0gPj4+IDEyKTtcbiAgICAgIGI0NCA9IChzWzI5XSA8PCA3KSB8IChzWzI4XSA+Pj4gMjUpO1xuICAgICAgYjQ1ID0gKHNbMjhdIDw8IDcpIHwgKHNbMjldID4+PiAyNSk7XG4gICAgICBiMjYgPSAoc1szOF0gPDwgOCkgfCAoc1szOV0gPj4+IDI0KTtcbiAgICAgIGIyNyA9IChzWzM5XSA8PCA4KSB8IChzWzM4XSA+Pj4gMjQpO1xuICAgICAgYjggPSAoc1s0OF0gPDwgMTQpIHwgKHNbNDldID4+PiAxOCk7XG4gICAgICBiOSA9IChzWzQ5XSA8PCAxNCkgfCAoc1s0OF0gPj4+IDE4KTtcblxuICAgICAgc1swXSA9IGIwIF4gKH5iMiAmIGI0KTtcbiAgICAgIHNbMV0gPSBiMSBeICh+YjMgJiBiNSk7XG4gICAgICBzWzEwXSA9IGIxMCBeICh+YjEyICYgYjE0KTtcbiAgICAgIHNbMTFdID0gYjExIF4gKH5iMTMgJiBiMTUpO1xuICAgICAgc1syMF0gPSBiMjAgXiAofmIyMiAmIGIyNCk7XG4gICAgICBzWzIxXSA9IGIyMSBeICh+YjIzICYgYjI1KTtcbiAgICAgIHNbMzBdID0gYjMwIF4gKH5iMzIgJiBiMzQpO1xuICAgICAgc1szMV0gPSBiMzEgXiAofmIzMyAmIGIzNSk7XG4gICAgICBzWzQwXSA9IGI0MCBeICh+YjQyICYgYjQ0KTtcbiAgICAgIHNbNDFdID0gYjQxIF4gKH5iNDMgJiBiNDUpO1xuICAgICAgc1syXSA9IGIyIF4gKH5iNCAmIGI2KTtcbiAgICAgIHNbM10gPSBiMyBeICh+YjUgJiBiNyk7XG4gICAgICBzWzEyXSA9IGIxMiBeICh+YjE0ICYgYjE2KTtcbiAgICAgIHNbMTNdID0gYjEzIF4gKH5iMTUgJiBiMTcpO1xuICAgICAgc1syMl0gPSBiMjIgXiAofmIyNCAmIGIyNik7XG4gICAgICBzWzIzXSA9IGIyMyBeICh+YjI1ICYgYjI3KTtcbiAgICAgIHNbMzJdID0gYjMyIF4gKH5iMzQgJiBiMzYpO1xuICAgICAgc1szM10gPSBiMzMgXiAofmIzNSAmIGIzNyk7XG4gICAgICBzWzQyXSA9IGI0MiBeICh+YjQ0ICYgYjQ2KTtcbiAgICAgIHNbNDNdID0gYjQzIF4gKH5iNDUgJiBiNDcpO1xuICAgICAgc1s0XSA9IGI0IF4gKH5iNiAmIGI4KTtcbiAgICAgIHNbNV0gPSBiNSBeICh+YjcgJiBiOSk7XG4gICAgICBzWzE0XSA9IGIxNCBeICh+YjE2ICYgYjE4KTtcbiAgICAgIHNbMTVdID0gYjE1IF4gKH5iMTcgJiBiMTkpO1xuICAgICAgc1syNF0gPSBiMjQgXiAofmIyNiAmIGIyOCk7XG4gICAgICBzWzI1XSA9IGIyNSBeICh+YjI3ICYgYjI5KTtcbiAgICAgIHNbMzRdID0gYjM0IF4gKH5iMzYgJiBiMzgpO1xuICAgICAgc1szNV0gPSBiMzUgXiAofmIzNyAmIGIzOSk7XG4gICAgICBzWzQ0XSA9IGI0NCBeICh+YjQ2ICYgYjQ4KTtcbiAgICAgIHNbNDVdID0gYjQ1IF4gKH5iNDcgJiBiNDkpO1xuICAgICAgc1s2XSA9IGI2IF4gKH5iOCAmIGIwKTtcbiAgICAgIHNbN10gPSBiNyBeICh+YjkgJiBiMSk7XG4gICAgICBzWzE2XSA9IGIxNiBeICh+YjE4ICYgYjEwKTtcbiAgICAgIHNbMTddID0gYjE3IF4gKH5iMTkgJiBiMTEpO1xuICAgICAgc1syNl0gPSBiMjYgXiAofmIyOCAmIGIyMCk7XG4gICAgICBzWzI3XSA9IGIyNyBeICh+YjI5ICYgYjIxKTtcbiAgICAgIHNbMzZdID0gYjM2IF4gKH5iMzggJiBiMzApO1xuICAgICAgc1szN10gPSBiMzcgXiAofmIzOSAmIGIzMSk7XG4gICAgICBzWzQ2XSA9IGI0NiBeICh+YjQ4ICYgYjQwKTtcbiAgICAgIHNbNDddID0gYjQ3IF4gKH5iNDkgJiBiNDEpO1xuICAgICAgc1s4XSA9IGI4IF4gKH5iMCAmIGIyKTtcbiAgICAgIHNbOV0gPSBiOSBeICh+YjEgJiBiMyk7XG4gICAgICBzWzE4XSA9IGIxOCBeICh+YjEwICYgYjEyKTtcbiAgICAgIHNbMTldID0gYjE5IF4gKH5iMTEgJiBiMTMpO1xuICAgICAgc1syOF0gPSBiMjggXiAofmIyMCAmIGIyMik7XG4gICAgICBzWzI5XSA9IGIyOSBeICh+YjIxICYgYjIzKTtcbiAgICAgIHNbMzhdID0gYjM4IF4gKH5iMzAgJiBiMzIpO1xuICAgICAgc1szOV0gPSBiMzkgXiAofmIzMSAmIGIzMyk7XG4gICAgICBzWzQ4XSA9IGI0OCBeICh+YjQwICYgYjQyKTtcbiAgICAgIHNbNDldID0gYjQ5IF4gKH5iNDEgJiBiNDMpO1xuXG4gICAgICBzWzBdIF49IFJDW25dO1xuICAgICAgc1sxXSBePSBSQ1tuICsgMV07XG4gICAgfVxuICB9O1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGhvZHM7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICByb290W21ldGhvZE5hbWVzW2ldXSA9IG1ldGhvZHNbbWV0aG9kTmFtZXNbaV1dO1xuICAgIH1cbiAgICBpZiAoQU1EKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbWV0aG9kcztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcbiIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7U2NhbGFyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQganNTaGEzIGZyb20gXCJqcy1zaGEzXCI7XG5jb25zdCB7IGtlY2NhazI1NiB9ID0ganNTaGEzO1xuXG5jb25zdCBQT0xZTk9NSUFMID0gMDtcbmNvbnN0IFNDQUxBUiA9IDE7XG5cbmV4cG9ydCBjbGFzcyBLZWNjYWsyNTZUcmFuc2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihjdXJ2ZSkge1xuICAgICAgICB0aGlzLkcxID0gY3VydmUuRzE7XG4gICAgICAgIHRoaXMuRnIgPSBjdXJ2ZS5GcjtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIH1cblxuICAgIGFkZFBvbENvbW1pdG1lbnQocG9seW5vbWlhbENvbW1pdG1lbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goe3R5cGU6IFBPTFlOT01JQUwsIGRhdGE6IHBvbHlub21pYWxDb21taXRtZW50fSk7XG4gICAgfVxuXG4gICAgYWRkU2NhbGFyKHNjYWxhcikge1xuICAgICAgICB0aGlzLmRhdGEucHVzaCh7dHlwZTogU0NBTEFSLCBkYXRhOiBzY2FsYXJ9KTtcbiAgICB9XG5cbiAgICBnZXRDaGFsbGVuZ2UoKSB7XG4gICAgICAgIGlmKDAgPT09IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktlY2NhazI1NlRyYW5zY3JpcHQ6IE5vIGRhdGEgdG8gZ2VuZXJhdGUgYSB0cmFuc2NyaXB0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5Qb2x5bm9taWFscyA9IDA7XG4gICAgICAgIGxldCBuU2NhbGFycyA9IDA7XG5cbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiBQT0xZTk9NSUFMID09PSBlbGVtZW50LnR5cGUgPyBuUG9seW5vbWlhbHMrKyA6IG5TY2FsYXJzKyspO1xuXG4gICAgICAgIGxldCBidWZmZXIgPSBuZXcgVWludDhBcnJheShuU2NhbGFycyAqIHRoaXMuRnIubjggKyBuUG9seW5vbWlhbHMgKiB0aGlzLkcxLkYubjggKiAyKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChQT0xZTk9NSUFMID09PSB0aGlzLmRhdGFbaV0udHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuRzEudG9ScHJVbmNvbXByZXNzZWQoYnVmZmVyLCBvZmZzZXQsIHRoaXMuZGF0YVtpXS5kYXRhKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5HMS5GLm44ICogMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5Gci50b1JwckJFKGJ1ZmZlciwgb2Zmc2V0LCB0aGlzLmRhdGFbaV0uZGF0YSk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuRnIubjg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IFNjYWxhci5mcm9tUnByQkUobmV3IFVpbnQ4QXJyYXkoa2VjY2FrMjU2LmFycmF5QnVmZmVyKGJ1ZmZlcikpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuRnIuZSh2YWx1ZSk7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmV4cG9ydCBjbGFzcyBNdWxaIHtcbiAgICBzdGF0aWMgZ2V0WjEoRnIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEZyLnplcm8sXG4gICAgICAgICAgICBGci5hZGQoRnIuZSgtMSksIEZyLndbMl0pLFxuICAgICAgICAgICAgRnIuZSgtMiksXG4gICAgICAgICAgICBGci5zdWIoRnIuZSgtMSksIEZyLndbMl0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRaMihGcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgRnIuemVybyxcbiAgICAgICAgICAgIEZyLmFkZChGci56ZXJvLCBGci5tdWwoRnIuZSgtMiksIEZyLndbMl0pKSxcbiAgICAgICAgICAgIEZyLmUoNCksXG4gICAgICAgICAgICBGci5zdWIoRnIuemVybywgRnIubXVsKEZyLmUoLTIpLCBGci53WzJdKSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFozKEZyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBGci56ZXJvLFxuICAgICAgICAgICAgRnIuYWRkKEZyLmUoMiksIEZyLm11bChGci5lKDIpLCBGci53WzJdKSksXG4gICAgICAgICAgICBGci5lKC04KSxcbiAgICAgICAgICAgIEZyLnN1YihGci5lKDIpLCBGci5tdWwoRnIuZSgyKSwgRnIud1syXSkpLFxuICAgICAgICBdO1xuXG4gICAgfVxuXG4gICAgc3RhdGljIG11bDIoYSwgYiwgYXAsIGJwLCBwLCBGcikge1xuICAgICAgICBjb25zdCBaMSA9IHRoaXMuZ2V0WjEoRnIpO1xuICAgICAgICBsZXQgciwgcno7XG5cbiAgICAgICAgY29uc3QgYV9iID0gRnIubXVsKGEsIGIpO1xuICAgICAgICBjb25zdCBhX2JwID0gRnIubXVsKGEsIGJwKTtcbiAgICAgICAgY29uc3QgYXBfYiA9IEZyLm11bChhcCwgYik7XG4gICAgICAgIGNvbnN0IGFwX2JwID0gRnIubXVsKGFwLCBicCk7XG5cbiAgICAgICAgciA9IGFfYjtcblxuICAgICAgICBsZXQgYTAgPSBGci5hZGQoYV9icCwgYXBfYik7XG5cbiAgICAgICAgbGV0IGExID0gYXBfYnA7XG5cbiAgICAgICAgcnogPSBhMDtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIHJ6ID0gRnIuYWRkKHJ6LCBGci5tdWwoWjFbcF0sIGExKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3IsIHJ6XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbXVsMyhhLCBiLCBjLCBhcCwgYnAsIGNwLCBwLCBGcikge1xuICAgICAgICBjb25zdCBaMSA9IHRoaXMuZ2V0WjEoRnIpO1xuICAgICAgICBjb25zdCBaMiA9IHRoaXMuZ2V0WjIoRnIpO1xuICAgICAgICBsZXQgciwgcno7XG5cbiAgICAgICAgY29uc3QgYV9iID0gRnIubXVsKGEsIGIpO1xuICAgICAgICBjb25zdCBhX2JwID0gRnIubXVsKGEsIGJwKTtcbiAgICAgICAgY29uc3QgYXBfYiA9IEZyLm11bChhcCwgYik7XG4gICAgICAgIGNvbnN0IGFwX2JwID0gRnIubXVsKGFwLCBicCk7XG5cbiAgICAgICAgciA9IEZyLm11bChhX2IsIGMpO1xuXG4gICAgICAgIGxldCBhMCA9IEZyLm11bChhcF9iLCBjKTtcbiAgICAgICAgYTAgPSBGci5hZGQoYTAsIEZyLm11bChhX2JwLCBjKSk7XG4gICAgICAgIGEwID0gRnIuYWRkKGEwLCBGci5tdWwoYV9iLCBjcCkpO1xuXG4gICAgICAgIGxldCBhMSA9IEZyLm11bChhcF9icCwgYyk7XG4gICAgICAgIGExID0gRnIuYWRkKGExLCBGci5tdWwoYV9icCwgY3ApKTtcbiAgICAgICAgYTEgPSBGci5hZGQoYTEsIEZyLm11bChhcF9iLCBjcCkpO1xuXG4gICAgICAgIHJ6ID0gYTA7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBjb25zdCBhMiA9IEZyLm11bChhcF9icCwgY3ApO1xuICAgICAgICAgICAgcnogPSBGci5hZGQocnosIEZyLm11bChaMVtwXSwgYTEpKTtcbiAgICAgICAgICAgIHJ6ID0gRnIuYWRkKHJ6LCBGci5tdWwoWjJbcF0sIGEyKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3IsIHJ6XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbXVsNChhLCBiLCBjLCBkLCBhcCwgYnAsIGNwLCBkcCwgcCwgRnIpIHtcbiAgICAgICAgY29uc3QgWjEgPSB0aGlzLmdldFoxKEZyKTtcbiAgICAgICAgY29uc3QgWjIgPSB0aGlzLmdldFoyKEZyKTtcbiAgICAgICAgY29uc3QgWjMgPSB0aGlzLmdldFozKEZyKTtcblxuICAgICAgICBsZXQgciwgcno7XG5cbiAgICAgICAgY29uc3QgYV9iID0gRnIubXVsKGEsIGIpO1xuICAgICAgICBjb25zdCBhX2JwID0gRnIubXVsKGEsIGJwKTtcbiAgICAgICAgY29uc3QgYXBfYiA9IEZyLm11bChhcCwgYik7XG4gICAgICAgIGNvbnN0IGFwX2JwID0gRnIubXVsKGFwLCBicCk7XG5cbiAgICAgICAgY29uc3QgY19kID0gRnIubXVsKGMsIGQpO1xuICAgICAgICBjb25zdCBjX2RwID0gRnIubXVsKGMsIGRwKTtcbiAgICAgICAgY29uc3QgY3BfZCA9IEZyLm11bChjcCwgZCk7XG4gICAgICAgIGNvbnN0IGNwX2RwID0gRnIubXVsKGNwLCBkcCk7XG5cbiAgICAgICAgciA9IEZyLm11bChhX2IsIGNfZCk7XG5cbiAgICAgICAgbGV0IGEwID0gRnIubXVsKGFwX2IsIGNfZCk7XG4gICAgICAgIGEwID0gRnIuYWRkKGEwLCBGci5tdWwoYV9icCwgY19kKSk7XG4gICAgICAgIGEwID0gRnIuYWRkKGEwLCBGci5tdWwoYV9iLCBjcF9kKSk7XG4gICAgICAgIGEwID0gRnIuYWRkKGEwLCBGci5tdWwoYV9iLCBjX2RwKSk7XG5cbiAgICAgICAgbGV0IGExID0gRnIubXVsKGFwX2JwLCBjX2QpO1xuICAgICAgICBhMSA9IEZyLmFkZChhMSwgRnIubXVsKGFwX2IsIGNwX2QpKTtcbiAgICAgICAgYTEgPSBGci5hZGQoYTEsIEZyLm11bChhcF9iLCBjX2RwKSk7XG4gICAgICAgIGExID0gRnIuYWRkKGExLCBGci5tdWwoYV9icCwgY3BfZCkpO1xuICAgICAgICBhMSA9IEZyLmFkZChhMSwgRnIubXVsKGFfYnAsIGNfZHApKTtcbiAgICAgICAgYTEgPSBGci5hZGQoYTEsIEZyLm11bChhX2IsIGNwX2RwKSk7XG5cbiAgICAgICAgbGV0IGEyID0gRnIubXVsKGFfYnAsIGNwX2RwKTtcbiAgICAgICAgYTIgPSBGci5hZGQoYTIsIEZyLm11bChhcF9iLCBjcF9kcCkpO1xuICAgICAgICBhMiA9IEZyLmFkZChhMiwgRnIubXVsKGFwX2JwLCBjX2RwKSk7XG4gICAgICAgIGEyID0gRnIuYWRkKGEyLCBGci5tdWwoYXBfYnAsIGNwX2QpKTtcblxuICAgICAgICBsZXQgYTMgPSBGci5tdWwoYXBfYnAsIGNwX2RwKTtcblxuICAgICAgICByeiA9IGEwO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgcnogPSBGci5hZGQocnosIEZyLm11bChaMVtwXSwgYTEpKTtcbiAgICAgICAgICAgIHJ6ID0gRnIuYWRkKHJ6LCBGci5tdWwoWjJbcF0sIGEyKSk7XG4gICAgICAgICAgICByeiA9IEZyLmFkZChyeiwgRnIubXVsKFozW3BdLCBhMykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtyLCByel07XG4gICAgfVxufSIsImV4cG9ydCBjb25zdCBaS0VZX1BMX05TRUNUSU9OUyA9IDEzO1xuXG5leHBvcnQgY29uc3QgWktFWV9QTF9IRUFERVJfU0VDVElPTiA9IDI7XG5leHBvcnQgY29uc3QgWktFWV9QTF9BRERJVElPTlNfU0VDVElPTiA9IDM7XG5leHBvcnQgY29uc3QgWktFWV9QTF9BX01BUF9TRUNUSU9OID0gNDtcbmV4cG9ydCBjb25zdCBaS0VZX1BMX0JfTUFQX1NFQ1RJT04gPSA1O1xuZXhwb3J0IGNvbnN0IFpLRVlfUExfQ19NQVBfU0VDVElPTiA9IDY7XG5leHBvcnQgY29uc3QgWktFWV9QTF9RTV9TRUNUSU9OID0gNztcbmV4cG9ydCBjb25zdCBaS0VZX1BMX1FMX1NFQ1RJT04gPSA4O1xuZXhwb3J0IGNvbnN0IFpLRVlfUExfUVJfU0VDVElPTiA9IDk7XG5leHBvcnQgY29uc3QgWktFWV9QTF9RT19TRUNUSU9OID0gMTA7XG5leHBvcnQgY29uc3QgWktFWV9QTF9RQ19TRUNUSU9OID0gMTE7XG5leHBvcnQgY29uc3QgWktFWV9QTF9TSUdNQV9TRUNUSU9OID0gMTI7XG5leHBvcnQgY29uc3QgWktFWV9QTF9MQUdSQU5HRV9TRUNUSU9OID0gMTM7XG5leHBvcnQgY29uc3QgWktFWV9QTF9QVEFVX1NFQ1RJT04gPSAxNDtcblxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtCaWdCdWZmZXJ9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGNsYXNzIFBvbHlub21pYWwge1xuICAgIGNvbnN0cnVjdG9yKGNvZWZmaWNpZW50cywgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICB0aGlzLmNvZWYgPSBjb2VmZmljaWVudHM7XG4gICAgICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICAgICAgdGhpcy5GciA9IGN1cnZlLkZyO1xuICAgICAgICB0aGlzLkcxID0gY3VydmUuRzE7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBmcm9tRXZhbHVhdGlvbnMoYnVmZmVyLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgICAgIGxldCBjb2VmZmljaWVudHMgPSBhd2FpdCBjdXJ2ZS5Gci5pZmZ0KGJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bm9taWFsKGNvZWZmaWNpZW50cywgY3VydmUsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21Db2VmZmljaWVudHNBcnJheShhcnJheSwgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgICAgICBsZXQgYnVmZiA9IGFycmF5Lmxlbmd0aCA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcihhcnJheS5sZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIGJ1ZmYuc2V0KGFycmF5W2ldLCBpICogRnIubjgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUG9seW5vbWlhbChidWZmLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVBvbHlub21pYWwocG9seW5vbWlhbCwgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgbGV0IEZyID0gY3VydmUuRnI7XG5cbiAgICAgICAgbGV0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIobGVuZ3RoICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkobGVuZ3RoICogRnIubjgpO1xuICAgICAgICBidWZmLnNldChwb2x5bm9taWFsLmNvZWYuc2xpY2UoKSwgMCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bm9taWFsKGJ1ZmYsIGN1cnZlLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGlzRXF1YWwocG9seW5vbWlhbCkge1xuICAgICAgICBjb25zdCBkZWdyZWUgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBpZiAoZGVncmVlICE9PSBwb2x5bm9taWFsLmRlZ3JlZSgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWUgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5Gci5lcSh0aGlzLmdldENvZWYoaSksIHBvbHlub21pYWwuZ2V0Q29lZihpKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGJsaW5kQ29lZmZpY2llbnRzKGJsaW5kaW5nRmFjdG9ycykge1xuICAgICAgICBibGluZGluZ0ZhY3RvcnMgPSBibGluZGluZ0ZhY3RvcnMgfHwgW107XG5cbiAgICAgICAgY29uc3QgYmxpbmRlZENvZWZmaWNpZW50cyA9ICh0aGlzLmxlbmd0aCgpICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIoKHRoaXMubGVuZ3RoKCkgKyBibGluZGluZ0ZhY3RvcnMubGVuZ3RoKSAqIHRoaXMuRnIubjgpIDpcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KCh0aGlzLmxlbmd0aCgpICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgKiB0aGlzLkZyLm44KTtcblxuICAgICAgICBibGluZGVkQ29lZmZpY2llbnRzLnNldCh0aGlzLmNvZWYsIDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsaW5kaW5nRmFjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYmxpbmRlZENvZWZmaWNpZW50cy5zZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5Gci5hZGQoXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kZWRDb2VmZmljaWVudHMuc2xpY2UoKHRoaXMubGVuZ3RoKCkgKyBpKSAqIHRoaXMuRnIubjgsICh0aGlzLmxlbmd0aCgpICsgaSArIDEpICogdGhpcy5Gci5uOCksXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kaW5nRmFjdG9yc1tpXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKHRoaXMubGVuZ3RoKCkgKyBpKSAqIHRoaXMuRnIubjhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBibGluZGVkQ29lZmZpY2llbnRzLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLkZyLnN1YihcbiAgICAgICAgICAgICAgICAgICAgYmxpbmRlZENvZWZmaWNpZW50cy5zbGljZShpICogdGhpcy5Gci5uOCwgKGkgKyAxKSAqIHRoaXMuRnIubjgpLFxuICAgICAgICAgICAgICAgICAgICBibGluZGluZ0ZhY3RvcnNbaV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGkgKiB0aGlzLkZyLm44XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29lZiA9IGJsaW5kZWRDb2VmZmljaWVudHM7XG4gICAgfVxuXG4gICAgZ2V0Q29lZihpbmRleCkge1xuICAgICAgICBjb25zdCBpX244ID0gaW5kZXggKiB0aGlzLkZyLm44O1xuXG4gICAgICAgIGlmIChpX244ICsgdGhpcy5Gci5uOCA+IHRoaXMuY29lZi5ieXRlTGVuZ3RoKSByZXR1cm4gdGhpcy5Gci56ZXJvO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpO1xuICAgIH1cblxuICAgIHNldENvZWYoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpbmRleCA+ICh0aGlzLmxlbmd0aCgpIC0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZWYgaW5kZXggaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29lZi5zZXQodmFsdWUsIGluZGV4ICogdGhpcy5Gci5uOCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHRvNFQoYnVmZmVyLCBkb21haW5TaXplLCBibGluZGluZ0ZhY3RvcnMsIEZyKSB7XG4gICAgICAgIGJsaW5kaW5nRmFjdG9ycyA9IGJsaW5kaW5nRmFjdG9ycyB8fCBbXTtcbiAgICAgICAgbGV0IGEgPSBhd2FpdCBGci5pZmZ0KGJ1ZmZlcik7XG5cbiAgICAgICAgY29uc3QgYTQgPSAoZG9tYWluU2l6ZSAqIDQpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICBuZXcgQmlnQnVmZmVyKGRvbWFpblNpemUgKiA0ICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkoZG9tYWluU2l6ZSAqIDQgKiBGci5uOCk7XG4gICAgICAgIGE0LnNldChhLCAwKTtcblxuICAgICAgICBjb25zdCBBNCA9IGF3YWl0IEZyLmZmdChhNCk7XG5cbiAgICAgICAgaWYgKGJsaW5kaW5nRmFjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbYSwgQTRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYTEgPSBkb21haW5TaXplICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcigoZG9tYWluU2l6ZSArIGJsaW5kaW5nRmFjdG9ycy5sZW5ndGgpICogRnIubjgpIDpcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KChkb21haW5TaXplICsgYmxpbmRpbmdGYWN0b3JzLmxlbmd0aCkgKiBGci5uOCk7XG5cbiAgICAgICAgYTEuc2V0KGEsIDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsaW5kaW5nRmFjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYTEuc2V0KFxuICAgICAgICAgICAgICAgIEZyLmFkZChcbiAgICAgICAgICAgICAgICAgICAgYTEuc2xpY2UoKGRvbWFpblNpemUgKyBpKSAqIEZyLm44LCAoZG9tYWluU2l6ZSArIGkgKyAxKSAqIEZyLm44KSxcbiAgICAgICAgICAgICAgICAgICAgYmxpbmRpbmdGYWN0b3JzW2ldXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZG9tYWluU2l6ZSArIGkpICogRnIubjhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhMS5zZXQoXG4gICAgICAgICAgICAgICAgRnIuc3ViKFxuICAgICAgICAgICAgICAgICAgICBhMS5zbGljZShpICogRnIubjgsIChpICsgMSkgKiBGci5uOCksXG4gICAgICAgICAgICAgICAgICAgIGJsaW5kaW5nRmFjdG9yc1tpXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaSAqIEZyLm44XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFthMSwgQTRdO1xuICAgIH1cblxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuY29lZi5ieXRlTGVuZ3RoIC8gdGhpcy5Gci5uODtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gTWF0aC5mbG9vcih0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2x5bm9taWFsIGNvZWZmaWNpZW50cyBidWZmZXIgaGFzIGluY29ycmVjdCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJQb2x5bm9taWFsIGhhcyBsZW5ndGggemVyb1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cblxuICAgIGRlZ3JlZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoKCkgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICBpZiAoIXRoaXMuRnIuZXEodGhpcy5Gci56ZXJvLCB0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUocG9pbnQpIHtcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuRnIuemVybztcblxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kZWdyZWUoKSArIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29lZmZpY2llbnQgPSB0aGlzLmNvZWYuc2xpY2UoaV9uOCAtIHRoaXMuRnIubjgsIGlfbjgpO1xuICAgICAgICAgICAgcmVzID0gdGhpcy5Gci5hZGQoY3VycmVudENvZWZmaWNpZW50LCB0aGlzLkZyLm11bChyZXMsIHBvaW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZhc3RFdmFsdWF0ZShwb2ludCkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGxldCBuVGhyZWFkcyA9IDM7XG5cbiAgICAgICAgbGV0IG5Db2VmcyA9IHRoaXMuZGVncmVlKCkgKyAxO1xuICAgICAgICBsZXQgY29lZnNUaHJlYWQgPSBwYXJzZUludChuQ29lZnMgLyBuVGhyZWFkcyk7XG4gICAgICAgIGxldCByZXNpZHVhbENvZWZzID0gbkNvZWZzIC0gY29lZnNUaHJlYWQgKiBuVGhyZWFkcztcblxuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGxldCB4TiA9IFtdO1xuXG4gICAgICAgIHhOWzBdID0gRnIub25lO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblRocmVhZHM7IGkrKykge1xuICAgICAgICAgICAgcmVzW2ldID0gRnIuemVybztcblxuICAgICAgICAgICAgbGV0IG5Db2VmcyA9IGkgPT09IChuVGhyZWFkcyAtIDEpID8gY29lZnNUaHJlYWQgKyByZXNpZHVhbENvZWZzIDogY29lZnNUaHJlYWQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gbkNvZWZzOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgcmVzW2ldID0gRnIuYWRkKHRoaXMuZ2V0Q29lZigoaSAqIGNvZWZzVGhyZWFkKSArIGogLSAxKSwgRnIubXVsKHJlc1tpXSwgcG9pbnQpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB4TlswXSA9IEZyLm11bCh4TlswXSwgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuVGhyZWFkczsgaSsrKSB7XG4gICAgICAgICAgICByZXNbMF0gPSBGci5hZGQocmVzWzBdLCBGci5tdWwoeE5baSAtIDFdLCByZXNbaV0pKTtcbiAgICAgICAgICAgIHhOW2ldID0gRnIubXVsKHhOW2kgLSAxXSwgeE5bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc1swXTtcbiAgICB9XG5cbiAgICBhZGQocG9seW5vbWlhbCwgYmxpbmRpbmdWYWx1ZSkge1xuICAgICAgICBsZXQgb3RoZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG9seW5vbWlhbC5sZW5ndGgoKSA+IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIG90aGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRoaXNMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICBjb25zdCBwb2x5TGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh0aGlzTGVuZ3RoLCBwb2x5TGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSBpIDwgdGhpc0xlbmd0aCA/IHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkgOiB0aGlzLkZyLnplcm87XG4gICAgICAgICAgICBsZXQgYiA9IGkgPCBwb2x5TGVuZ3RoID8gcG9seW5vbWlhbC5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KSA6IHRoaXMuRnIuemVybztcblxuICAgICAgICAgICAgaWYgKGJsaW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLkZyLm11bChiLCBibGluZGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgICAgIHBvbHlub21pYWwuY29lZi5zZXQodGhpcy5Gci5hZGQoYSwgYiksIGlfbjgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuYWRkKGEsIGIpLCBpX244KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvZWY7XG4gICAgICAgICAgICB0aGlzLmNvZWYgPSBwb2x5bm9taWFsLmNvZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdWIocG9seW5vbWlhbCwgYmxpbmRpbmdWYWx1ZSkge1xuICAgICAgICBsZXQgb3RoZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG9seW5vbWlhbC5sZW5ndGgoKSA+IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIG90aGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRoaXNMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICBjb25zdCBwb2x5TGVuZ3RoID0gcG9seW5vbWlhbC5sZW5ndGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh0aGlzTGVuZ3RoLCBwb2x5TGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSBpIDwgdGhpc0xlbmd0aCA/IHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkgOiB0aGlzLkZyLnplcm87XG4gICAgICAgICAgICBsZXQgYiA9IGkgPCBwb2x5TGVuZ3RoID8gcG9seW5vbWlhbC5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KSA6IHRoaXMuRnIuemVybztcblxuICAgICAgICAgICAgaWYgKGJsaW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLkZyLm11bChiLCBibGluZGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgICAgIHBvbHlub21pYWwuY29lZi5zZXQodGhpcy5Gci5zdWIoYSwgYiksIGlfbjgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuc3ViKGEsIGIpLCBpX244KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvZWY7XG4gICAgICAgICAgICB0aGlzLmNvZWYgPSBwb2x5bm9taWFsLmNvZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdWxTY2FsYXIodmFsdWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlfbjggPSBpICogdGhpcy5Gci5uODtcblxuICAgICAgICAgICAgdGhpcy5jb2VmLnNldCh0aGlzLkZyLm11bCh0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpLCB2YWx1ZSksIGlfbjgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2NhbGFyKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IDAgPT09IHRoaXMubGVuZ3RoKCkgPyB0aGlzLkZyLnplcm8gOiB0aGlzLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCk7XG4gICAgICAgIHRoaXMuY29lZi5zZXQodGhpcy5Gci5hZGQoY3VycmVudFZhbHVlLCB2YWx1ZSksIDApO1xuICAgIH1cblxuICAgIHN1YlNjYWxhcih2YWx1ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAwID09PSB0aGlzLmxlbmd0aCgpID8gdGhpcy5Gci56ZXJvIDogdGhpcy5jb2VmLnNsaWNlKDAsIHRoaXMuRnIubjgpO1xuICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIuc3ViKGN1cnJlbnRWYWx1ZSwgdmFsdWUpLCAwKTtcbiAgICB9XG5cbiAgICAvLyBNdWx0aXBseSBjdXJyZW50IHBvbHlub21pYWwgYnkgdGhlIHBvbHlub21pYWwgKFggLSB2YWx1ZSlcbiAgICBieVhTdWJWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGNvbnN0IHJlc2l6ZSA9ICFGci5lcShGci56ZXJvLCB0aGlzLmdldENvZWYodGhpcy5sZW5ndGgoKSAtIDEpKTtcblxuICAgICAgICBjb25zdCBsZW5ndGggPSByZXNpemUgPyB0aGlzLmxlbmd0aCgpICsgMSA6IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID8gbmV3IEJpZ0J1ZmZlcihsZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShsZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGxldCBwb2wgPSBuZXcgUG9seW5vbWlhbChidWZmLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgLy8gU3RlcCAwOiBTZXQgY3VycmVudCBjb2VmZmljaWVudHMgdG8gdGhlIG5ldyBidWZmZXIgc2hpZnRlZCBvbmUgcG9zaXRpb25cbiAgICAgICAgcG9sLmNvZWYuc2V0KHRoaXMuY29lZi5zbGljZSgwLCAobGVuZ3RoIC0gMSkgKiBGci5uOCksIDMyKTtcblxuICAgICAgICAvLyBTdGVwIDE6IG11bHRpcGx5IGVhY2ggY29lZmZpY2llbnQgYnkgKC12YWx1ZSlcbiAgICAgICAgdGhpcy5tdWxTY2FsYXIoRnIubmVnKHZhbHVlKSk7XG5cbiAgICAgICAgLy8gU3RlcCAyOiBBZGQgY3VycmVudCBwb2x5bm9taWFsIHRvIGRlc3RpbmF0aW9uIHBvbHlub21pYWxcbiAgICAgICAgcG9sLmFkZCh0aGlzKTtcblxuICAgICAgICAvLyBTd2FwIGJ1ZmZlcnNcbiAgICAgICAgdGhpcy5jb2VmID0gcG9sLmNvZWY7XG4gICAgfVxuXG4gICAgLy8gTXVsdGlwbHkgY3VycmVudCBwb2x5bm9taWFsIGJ5IHRoZSBwb2x5bm9taWFsIChYXm4gKyB2YWx1ZSlcbiAgICBieVhOU3ViVmFsdWUobiwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgRnIgPSB0aGlzLkZyO1xuICAgICAgICBjb25zdCByZXNpemUgPSAhKHRoaXMubGVuZ3RoKCkgLSBuIC0gMSA+PSB0aGlzLmRlZ3JlZSgpKTtcblxuICAgICAgICBjb25zdCBsZW5ndGggPSByZXNpemUgPyB0aGlzLmxlbmd0aCgpICsgbiA6IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBsZW5ndGggPiAyIDw8IDE0ID8gbmV3IEJpZ0J1ZmZlcihsZW5ndGggKiBGci5uOCkgOiBuZXcgVWludDhBcnJheShsZW5ndGggKiBGci5uOCk7XG4gICAgICAgIGxldCBwb2wgPSBuZXcgUG9seW5vbWlhbChidWZmLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgLy8gU3RlcCAwOiBTZXQgY3VycmVudCBjb2VmZmljaWVudHMgdG8gdGhlIG5ldyBidWZmZXIgc2hpZnRlZCBvbmUgcG9zaXRpb25cbiAgICAgICAgcG9sLmNvZWYuc2V0KHRoaXMuY29lZi5zbGljZSgwLCAodGhpcy5kZWdyZWUoKSArIDEpICogMzIsICksIG4gKiAzMik7XG5cbiAgICAgICAgLy8gU3RlcCAxOiBtdWx0aXBseSBlYWNoIGNvZWZmaWNpZW50IGJ5ICgtIHZhbHVlKVxuICAgICAgICB0aGlzLm11bFNjYWxhcih2YWx1ZSk7XG5cbiAgICAgICAgLy8gU3RlcCAyOiBBZGQgY3VycmVudCBwb2x5bm9taWFsIHRvIGRlc3RpbmF0aW9uIHBvbHlub21pYWxcbiAgICAgICAgcG9sLmFkZCh0aGlzKTtcblxuICAgICAgICAvLyBTd2FwIGJ1ZmZlcnNcbiAgICAgICAgdGhpcy5jb2VmID0gcG9sLmNvZWY7XG4gICAgfVxuXG4gICAgLy8gRXVjbGlkZWFuIGRpdmlzaW9uXG4gICAgZGl2QnkocG9seW5vbWlhbCkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGNvbnN0IGRlZ3JlZUEgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBjb25zdCBkZWdyZWVCID0gcG9seW5vbWlhbC5kZWdyZWUoKTtcblxuICAgICAgICBsZXQgcG9sUiA9IG5ldyBQb2x5bm9taWFsKHRoaXMuY29lZiwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgIHRoaXMuY29lZiA9IHRoaXMubGVuZ3RoKCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIodGhpcy5sZW5ndGgoKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKCkgKiBGci5uOCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGRlZ3JlZUEgLSBkZWdyZWVCOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2VmKGksIEZyLmRpdihwb2xSLmdldENvZWYoaSArIGRlZ3JlZUIpLCBwb2x5bm9taWFsLmdldENvZWYoZGVncmVlQikpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IGRlZ3JlZUI7IGorKykge1xuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpICsgaiwgRnIuc3ViKHBvbFIuZ2V0Q29lZihpICsgaiksIEZyLm11bCh0aGlzLmdldENvZWYoaSksIHBvbHlub21pYWwuZ2V0Q29lZihqKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2xSO1xuICAgIH1cblxuICAgIC8vIERpdmlzaW9uIGJ5IGEgUG9seW5vbWlhbCBvZiB0aGUgZm9ybSAoeF5tIC0gYmV0YSlcbiAgICBkaXZCeU1vbmljKG0sIGJldGEpIHtcbiAgICAgICAgY29uc3QgRnIgPSB0aGlzLkZyO1xuXG4gICAgICAgIGxldCBkID0gdGhpcy5kZWdyZWUoKTtcblxuICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5sZW5ndGgoKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgoKSAqIEZyLm44KTtcbiAgICAgICAgbGV0IHF1b3RpZW50ID0gbmV3IFBvbHlub21pYWwoYnVmZmVyLCB0aGlzLmN1cnZlLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgbGV0IGJBcnIgPSBbXTtcblxuICAgICAgICAvLyBBZGQgdGhlIG0gbGVhZGluZyBjb2VmZmljaWVudHMgb2YgdGhpcyB0byBxdW90aWVudFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcXVvdGllbnQuc2V0Q29lZigoZCAtIGkpIC0gbSwgdGhpcy5nZXRDb2VmKGQgLSBpKSk7XG4gICAgICAgICAgICBiQXJyW2ldID0gdGhpcy5nZXRDb2VmKGQgLSBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuVGhyZWFkcyA9IG07XG5cbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBkIC0gMiAqIG0gLSBrOyBpID49IDA7IGkgPSBpIC0gblRocmVhZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDApIGJyZWFrO1xuICAgICAgICAgICAgICAgIGxldCBpZHggPSBrO1xuICAgICAgICAgICAgICAgIGJBcnJbaWR4XSA9IEZyLmFkZCh0aGlzLmdldENvZWYoaSArIG0pLCBGci5tdWwoYkFycltpZHhdLCBiZXRhKSk7XG5cbiAgICAgICAgICAgICAgICBxdW90aWVudC5zZXRDb2VmKGksIGJBcnJbaWR4XSk7XG4gICAgICAgICAgICAgICAgaiA9IChqICsgMSkgJSBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2VmID0gcXVvdGllbnQuY29lZjtcbiAgICB9XG5cbiAgICBkaXZCeVZhbmlzaGluZyhuLCBiZXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZ3JlZSgpIDwgbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGl2QnlWYW5pc2hpbmcgcG9seW5vbWlhbCBkaXZpc29yIG11c3QgYmUgb2YgZGVncmVlIGxvd2VyIHRoYW4gdGhlIGRpdmlkZW5kIHBvbHlub21pYWxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG5cbiAgICAgICAgbGV0IHBvbFIgPSBuZXcgUG9seW5vbWlhbCh0aGlzLmNvZWYsIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgICB0aGlzLmNvZWYgPSB0aGlzLmxlbmd0aCgpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICBuZXcgQmlnQnVmZmVyKHRoaXMubGVuZ3RoKCkgKiBGci5uOCkgOiBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpICogRnIubjgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlbmd0aCgpIC0gMTsgaSA+PSBuOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBsZWFkaW5nQ29lZiA9IHBvbFIuZ2V0Q29lZihpKTtcbiAgICAgICAgICAgIGlmIChGci5lcShGci56ZXJvLCBsZWFkaW5nQ29lZikpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBwb2xSLnNldENvZWYoaSwgRnIuemVybyk7XG4gICAgICAgICAgICBwb2xSLnNldENvZWYoaSAtIG4sIEZyLmFkZChwb2xSLmdldENvZWYoaSAtIG4pLCBGci5tdWwoYmV0YSwgbGVhZGluZ0NvZWYpKSk7XG4gICAgICAgICAgICB0aGlzLnNldENvZWYoaSAtIG4sIEZyLmFkZCh0aGlzLmdldENvZWYoaSAtIG4pLCBsZWFkaW5nQ29lZikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbFI7XG4gICAgfVxuXG4gICAgZGl2QnlWYW5pc2hpbmcyKG0sIGJldGEpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVncmVlKCkgPCBtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXZCeVZhbmlzaGluZyBwb2x5bm9taWFsIGRpdmlzb3IgbXVzdCBiZSBvZiBkZWdyZWUgbG93ZXIgdGhhbiB0aGUgZGl2aWRlbmQgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IEZyID0gdGhpcy5GcjtcblxuICAgICAgICBsZXQgcG9sUiA9IG5ldyBQb2x5bm9taWFsKHRoaXMuY29lZiwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgIHRoaXMuY29lZiA9IHRoaXMubGVuZ3RoKCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIodGhpcy5sZW5ndGgoKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKCkgKiBGci5uOCk7XG5cbiAgICAgICAgbGV0IG5UaHJlYWRzID0gMztcbiAgICAgICAgbGV0IG5Ub3RhbCA9IHRoaXMubGVuZ3RoKCkgLSBtO1xuICAgICAgICBsZXQgbkVsZW1lbnRzQ2h1bmsgPSBNYXRoLmZsb29yKG5Ub3RhbCAvIG5UaHJlYWRzKTtcbiAgICAgICAgbGV0IG5FbGVtZW50c0xhc3QgPSBuVG90YWwgLSAoblRocmVhZHMgLSAxKSAqIG5FbGVtZW50c0NodW5rO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKG5Ub3RhbCk7XG4gICAgICAgIGNvbnNvbGUubG9nKG5FbGVtZW50c0NodW5rICsgXCIgIFwiICsgbkVsZW1lbnRzTGFzdCk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgblRocmVhZHM7IGsrKykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCI+IFRocmVhZCBcIiArIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChrID09PSAwID8gbkVsZW1lbnRzTGFzdCA6IG5FbGVtZW50c0NodW5rKTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGxldCBpZHhEc3QgPSBpIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoayAhPT0gMCkgaWR4RHN0ICs9IChrIC0gMSkgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgbGV0IGlkeFNyYyA9IGlkeERzdCArIG07XG5cbiAgICAgICAgICAgICAgICBsZXQgbGVhZGluZ0NvZWYgPSBwb2xSLmdldENvZWYoaWR4U3JjKTtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoRnIuemVybywgbGVhZGluZ0NvZWYpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpZHhTcmMsIEZyLnplcm8pO1xuICAgICAgICAgICAgICAgIHBvbFIuc2V0Q29lZihpZHhEc3QsIEZyLmFkZChwb2xSLmdldENvZWYoaWR4RHN0KSwgRnIubXVsKGJldGEsIGxlYWRpbmdDb2VmKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29lZihpZHhEc3QsIEZyLmFkZCh0aGlzLmdldENvZWYoaWR4RHN0KSwgbGVhZGluZ0NvZWYpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpZHhEc3QgKyBcIiA8LS0gXCIgKyBpZHhTcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmludCgpO1xuICAgICAgICByZXR1cm4gcG9sUjtcbiAgICB9XG5cbiAgICBmYXN0RGl2QnlWYW5pc2hpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBtID0gZGF0YVtpXVswXTtcbiAgICAgICAgICAgIGxldCBiZXRhID0gZGF0YVtpXVsxXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVncmVlKCkgPCBtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGl2QnlWYW5pc2hpbmcgcG9seW5vbWlhbCBkaXZpc29yIG11c3QgYmUgb2YgZGVncmVlIGxvd2VyIHRoYW4gdGhlIGRpdmlkZW5kIHBvbHlub21pYWxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBuVGhyZWFkcyA9IDU7XG4gICAgICAgICAgICBsZXQgbkVsZW1lbnRzID0gdGhpcy5sZW5ndGgoKSAtIG07XG4gICAgICAgICAgICBsZXQgbkVsZW1lbnRzQnVja2V0ID0gTWF0aC5mbG9vcihuRWxlbWVudHMgLyBuVGhyZWFkcyAvIG0pO1xuICAgICAgICAgICAgbGV0IG5FbGVtZW50c0NodW5rID0gbkVsZW1lbnRzQnVja2V0ICogbTtcbiAgICAgICAgICAgIGxldCBuRWxlbWVudHNMYXN0ID0gbkVsZW1lbnRzIC0gblRocmVhZHMgKiBuRWxlbWVudHNDaHVuaztcblxuICAgICAgICAgICAgLy9JbiBDKysgaW1wbGVtZW50YXRpb24gdGhpcyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgb25seSBvbmNlIG91dHNpZGUgdGhlIGxvb3BcbiAgICAgICAgICAgIGxldCBwb2xUbXAgPSBuZXcgUG9seW5vbWlhbCh0aGlzLmxlbmd0aCgpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgoKSAqIEZyLm44KSwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgICAgICBsZXQgcHRyID0gdGhpcy5jb2VmO1xuICAgICAgICAgICAgdGhpcy5jb2VmID0gcG9sVG1wLmNvZWY7XG4gICAgICAgICAgICBwb2xUbXAuY29lZiA9IHB0cjtcblxuICAgICAgICAgICAgLy8gU1RFUCAxOiBTZXRlamFyIGVscyBtIHZhbG9ycyBkZWwgc2Vnw7xlbnQgYnVja2V0IGFsIGNodW5rIGFjdHVhbCwgUEFSQUxFTMK3TElUWkFSXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4MCA9IChrICsgMSkgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2VmKGlkeDAgKyBpIC0gbSwgcG9sVG1wLmdldENvZWYoaWR4MCArIGkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5FbGVtZW50c0NodW5rIC0gbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBpZHgwIC0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBGci5hZGQocG9sVG1wLmdldENvZWYob2Zmc2V0KSwgRnIubXVsKGJldGEsIHRoaXMuZ2V0Q29lZihvZmZzZXQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29lZihvZmZzZXQgLSBtLCB2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TVEVQIDI6IFNldGVqYXIgZWxzIHZhbG9ycyBkZWwgZWxlbWVudHMgbGFzdCBOTyBQQVJBTMK3TEVMSVRaQVJcbiAgICAgICAgICAgIGxldCBpZHgwID0gbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgIGxldCBwZW5kaW5nID0gbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbSAmJiBwZW5kaW5nOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvZWYoaWR4MCAtIGkgLSAxLCBwb2xUbXAuZ2V0Q29lZihpZHgwICsgbSAtIGkgLSAxKSk7XG4gICAgICAgICAgICAgICAgcGVuZGluZy0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmc7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBpZHgwIC0gaSAtIDE7XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IEZyLmFkZChwb2xUbXAuZ2V0Q29lZihvZmZzZXQpLCBGci5tdWwoYmV0YSwgdGhpcy5nZXRDb2VmKG9mZnNldCkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvZWYob2Zmc2V0IC0gbSwgdmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TdGVwIDM6IGNhbGN1bGFyIGFjdW11bGF0cyBOTyAgUEFSQUxFTMK3TElUWkFSXG5cbiAgICAgICAgICAgIGxldCBhY2MgPSBbXTtcbiAgICAgICAgICAgIGxldCBiZXRhUG93ID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuRWxlbWVudHNCdWNrZXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJldGFQb3cgPSBGci5tdWwoYmV0YVBvdywgYmV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY3VycmVudEJldGEgPSBGci5vbmU7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGsgPSBuVGhyZWFkczsgayA+IDA7IGstLSkge1xuICAgICAgICAgICAgICAgIGxldCBpZFRocmVhZCA9IGsgLSAxO1xuICAgICAgICAgICAgICAgIGxldCBpZHgwID0gaWRUaHJlYWQgKiBuRWxlbWVudHNDaHVuayArIG5FbGVtZW50c0xhc3Q7XG4gICAgICAgICAgICAgICAgYWNjW2lkVGhyZWFkXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjW2lkVGhyZWFkXVtpXSA9IHRoaXMuZ2V0Q29lZihpZHgwICsgaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09IG5UaHJlYWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NbaWRUaHJlYWRdW2ldID0gRnIuYWRkKGFjY1tpZFRocmVhZF1baV0sIEZyLm11bChiZXRhUG93LCBhY2NbaWRUaHJlYWQgKyAxXVtpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRCZXRhID0gRnIubXVsKGN1cnJlbnRCZXRhLCBiZXRhUG93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9TVEVQIDQgcmVjYWxjdWxhciAgUEFSQUxFTMK3TElUWkFSXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG5UaHJlYWRzOyBrKyspIHtcblxuICAgICAgICAgICAgICAgIGxldCBpZHgwID0gayAqIG5FbGVtZW50c0NodW5rICsgbkVsZW1lbnRzTGFzdDtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEJldGEgPSBiZXRhOyAvL1F1YW4gaG9wYXNzZW0gYSBDKysgaSBobyBwYXJhbGVsaXR6ZW0gYXF1ZXN0YSB2YXJpYWJsZSBoYSBkZSBzZXIgcHJpdmFkYVxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TSA9IG0gLSAxO1xuXG4gICAgICAgICAgICAgICAgbGV0IGxpbWl0ID0gayA9PT0gMCA/IG5FbGVtZW50c0xhc3QgOiBuRWxlbWVudHNDaHVuaztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IGlkeDAgLSBpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IEZyLmFkZCh0aGlzLmdldENvZWYob2Zmc2V0KSwgRnIubXVsKGN1cnJlbnRCZXRhLCBhY2Nba11bY3VycmVudE1dKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2VmKG9mZnNldCwgdmFsKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBtb2R1bGFyIG9wZXJhdGlvbnMgaW4gZWFjaCBsb29wLi4uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE0gPSBtIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCZXRhID0gRnIubXVsKGN1cnJlbnRCZXRhLCBiZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIERpdmlkZSBwb2x5bm9taWFsIGJ5IFggLSB2YWx1ZVxuICAgIGRpdkJ5WFN1YlZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvZWZzID0gdGhpcy5sZW5ndGgoKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCkgOiBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCk7XG5cbiAgICAgICAgY29lZnMuc2V0KHRoaXMuRnIuemVybywgKHRoaXMubGVuZ3RoKCkgLSAxKSAqIHRoaXMuRnIubjgpO1xuICAgICAgICBjb2Vmcy5zZXQodGhpcy5jb2VmLnNsaWNlKCh0aGlzLmxlbmd0aCgpIC0gMSkgKiB0aGlzLkZyLm44LCB0aGlzLmxlbmd0aCgpICogdGhpcy5Gci5uOCksICh0aGlzLmxlbmd0aCgpIC0gMikgKiB0aGlzLkZyLm44KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoKCkgLSAzOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGlfbjggPSBpICogdGhpcy5Gci5uODtcbiAgICAgICAgICAgIGNvZWZzLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLkZyLmFkZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKGlfbjggKyB0aGlzLkZyLm44LCBpX244ICsgMiAqIHRoaXMuRnIubjgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZyLm11bCh2YWx1ZSwgY29lZnMuc2xpY2UoaV9uOCArIHRoaXMuRnIubjgsIGlfbjggKyAyICogdGhpcy5Gci5uOCkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpICogdGhpcy5Gci5uOFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuRnIuZXEoXG4gICAgICAgICAgICB0aGlzLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCksXG4gICAgICAgICAgICB0aGlzLkZyLm11bCh0aGlzLkZyLm5lZyh2YWx1ZSksIGNvZWZzLnNsaWNlKDAsIHRoaXMuRnIubjgpKVxuICAgICAgICApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2x5bm9taWFsIGRvZXMgbm90IGRpdmlkZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29lZiA9IGNvZWZzO1xuICAgIH1cblxuICAgIGRpdlpoKGRvbWFpblNpemUsIGV4dGVuc2lvbnMgPSA0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICB0aGlzLmNvZWYuc2V0KHRoaXMuRnIubmVnKHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkpLCBpX244KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSB0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjg7XG4gICAgICAgIGZvciAobGV0IGkgPSBkb21haW5TaXplOyBpIDwgdXBwZXJCb3VuZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLkZyLnN1YihcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2xpY2UoKGkgLSBkb21haW5TaXplKSAqIHRoaXMuRnIubjgsIChpIC0gZG9tYWluU2l6ZSkgKiB0aGlzLkZyLm44ICsgdGhpcy5Gci5uOCksXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY29lZi5zZXQoYSwgaV9uOCk7XG4gICAgICAgICAgICBpZiAoaSA+IChkb21haW5TaXplICogKGV4dGVuc2lvbnMtMSkgLSBleHRlbnNpb25zKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5Gci5pc1plcm8oYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9seW5vbWlhbCBpcyBub3QgZGl2aXNpYmxlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGRpdkJ5WmVyb2ZpZXIobiwgYmV0YSkge1xuICAgICAgICBsZXQgRnIgPSB0aGlzLkZyO1xuICAgICAgICBjb25zdCBpbnZCZXRhID0gRnIuaW52KGJldGEpO1xuICAgICAgICBjb25zdCBpbnZCZXRhTmVnID0gRnIubmVnKGludkJldGEpO1xuXG4gICAgICAgIGxldCBpc09uZSA9IEZyLmVxKEZyLm9uZSwgaW52QmV0YU5lZyk7XG4gICAgICAgIGxldCBpc05lZ09uZSA9IEZyLmVxKEZyLm5lZ29uZSwgaW52QmV0YU5lZyk7XG5cbiAgICAgICAgaWYgKCFpc09uZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBpbnZCZXRhTmVnID09PSAtMSB3ZSdsbCBzYXZlIGEgbXVsdGlwbGljYXRpb24gY2hhbmdpbmcgaXQgYnkgYSBuZWcgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgICAgIGlmIChpc05lZ09uZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gRnIubmVnKHRoaXMuY29lZi5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBGci5tdWwoaW52QmV0YU5lZywgdGhpcy5jb2VmLnNsaWNlKGlfbjgsIGlfbjggKyB0aGlzLkZyLm44KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmLnNldChlbGVtZW50LCBpX244KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlzT25lID0gRnIuZXEoRnIub25lLCBpbnZCZXRhKTtcbiAgICAgICAgaXNOZWdPbmUgPSBGci5lcShGci5uZWdvbmUsIGludkJldGEpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBuOyBpIDwgdGhpcy5sZW5ndGgoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHRoaXMuRnIubjg7XG4gICAgICAgICAgICBjb25zdCBpX3ByZXZfbjggPSAoaSAtIG4pICogdGhpcy5Gci5uODtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLkZyLnN1YihcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2xpY2UoaV9wcmV2X244LCBpX3ByZXZfbjggKyB0aGlzLkZyLm44KSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHRoaXMuRnIubjgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBJZiBpbnZCZXRhID09PSAxIHdlJ2xsIG5vdCBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgaWYoIWlzT25lKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaW52QmV0YSA9PT0gLTEgd2UnbGwgc2F2ZSBhIG11bHRpcGxpY2F0aW9uIGNoYW5naW5nIGl0IGJ5IGEgbmVnIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgICAgICBpZihpc05lZ09uZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gRnIubmVnKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBGci5tdWwoaW52QmV0YSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvZWYuc2V0KGVsZW1lbnQsIGlfbjgpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBwb2x5bm9taWFsIGlzIGRpdmlzaWJsZSBieSBjaGVja2luZyBpZiBuIGhpZ2ggY29lZmZpY2llbnRzIGFyZSB6ZXJvXG4gICAgICAgICAgICBpZiAoaSA+IHRoaXMubGVuZ3RoKCkgLSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5Gci5pc1plcm8oZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9seW5vbWlhbCBpcyBub3QgZGl2aXNpYmxlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuLy8gZnVuY3Rpb24gZGl2aWRlQnlWYW5pc2hpbmcoZiwgbiwgcCkge1xuLy8gICAgIC8vIHBvbHlub21pYWwgZGl2aXNpb24gZihYKSAvIChYXm4gLSAxKSB3aXRoIHJlbWFpbmRlclxuLy8gICAgIC8vIHZlcnkgY2hlYXAsIDAgbXVsdGlwbGljYXRpb25zXG4vLyAgICAgLy8gc3RyYXRlZ3k6XG4vLyAgICAgLy8gc3RhcnQgd2l0aCBxKFgpID0gMCwgcihYKSA9IGYoWClcbi8vICAgICAvLyB0aGVuIHN0YXJ0IGNoYW5naW5nIHEsIHIgd2hpbGUgcHJlc2VydmluZyB0aGUgaWRlbnRpdHk6XG4vLyAgICAgLy8gZihYKSA9IHEoWCkgKiAoWF5uIC0gMSkgKyByKFgpXG4vLyAgICAgLy8gaW4gZXZlcnkgc3RlcCwgbW92ZSBoaWdoZXN0LWRlZ3JlZSB0ZXJtIG9mIHIgaW50byB0aGUgcHJvZHVjdFxuLy8gICAgIC8vID0+IHIgZXZlbnR1YWxseSBoYXMgZGVncmVlIDwgbiBhbmQgd2UncmUgZG9uZVxuLy8gICAgIGxldCBxID0gQXJyYXkoZi5sZW5ndGgpLmZpbGwoMG4pO1xuLy8gICAgIGxldCByID0gWy4uLmZdO1xuLy8gICAgIGZvciAobGV0IGkgPSBmLmxlbmd0aCAtIDE7IGkgPj0gbjsgaS0tKSB7XG4vLyAgICAgICAgIGxldCBsZWFkaW5nQ29lZmYgPSByW2ldO1xuLy8gICAgICAgICBpZiAobGVhZGluZ0NvZWZmID09PSAwbikgY29udGludWU7XG4vLyAgICAgICAgIHJbaV0gPSAwbjtcbi8vICAgICAgICAgcltpIC0gbl0gPSBtb2QocltpIC0gbl0gKyBsZWFkaW5nQ29lZmYsIHApO1xuLy8gICAgICAgICBxW2kgLSBuXSA9IG1vZChxW2kgLSBuXSArIGxlYWRpbmdDb2VmZiwgcCk7XG4vLyAgICAgfVxuLy8gICAgIHJldHVybiBbcSwgcl07XG4vLyB9XG5cbiAgICBieVgoKSB7XG4gICAgICAgIGNvbnN0IGNvZWZzID0gKHRoaXMubGVuZ3RoKCkgKyAxKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcih0aGlzLmNvZWYuYnl0ZUxlbmd0aCArIHRoaXMuRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkodGhpcy5jb2VmLmJ5dGVMZW5ndGggKyB0aGlzLkZyLm44KTtcbiAgICAgICAgY29lZnMuc2V0KHRoaXMuRnIuemVybywgMCk7XG4gICAgICAgIGNvZWZzLnNldCh0aGlzLmNvZWYsIHRoaXMuRnIubjgpO1xuXG4gICAgICAgIHRoaXMuY29lZiA9IGNvZWZzO1xuICAgIH1cblxuLy8gQ29tcHV0ZSBhIG5ldyBwb2x5bm9taWFsIGYoeF5uKSBmcm9tIGYoeClcbi8vIGYoeCkgICA9IGFfMCArIGFfMcK3eCArIGFfMsK3eF4yICsgLi4uICsgYV9qwrd4Xmpcbi8vIGYoeF5uKSA9IGFfMCArIGFfMcK3eF5uICsgYV8ywrd4XjJuICsgLi4uICsgYV9qwrd4XmpuXG4gICAgc3RhdGljXG4gICAgYXN5bmMgZXhwWChwb2x5bm9taWFsLCBuLCB0cnVuY2F0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IEZyID0gcG9seW5vbWlhbC5GcjtcblxuICAgICAgICBpZiAobiA8IDEpIHtcbiAgICAgICAgICAgIC8vIG4gPT0gMCBub3QgYWxsb3dlZCBiZWNhdXNlIGl0IGhhcyBubyBzZW5zZSwgYnV0IGlmIGl0J3MgbmVjZXNzYXJ5IHdlIGhhdmUgdG8gcmV0dXJuXG4gICAgICAgICAgICAvLyBhIHplcm8gZGVncmVlIHBvbHlub21pYWwgd2l0aCBhIGNvbnN0YW50IGNvZWZmaWNpZW50IGVxdWFscyB0byB0aGUgc3VtIG9mIGFsbCB0aGUgb3JpZ2luYWwgY29lZmZpY2llbnRzXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wdXRlIGEgbmV3IHBvbHlub21pYWwgdG8gYSB6ZXJvIG9yIG5lZ2F0aXZlIG51bWJlciBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICgxID09PSBuKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMocG9seW5vbWlhbC5jb2VmLCBjdXJ2ZSwgcG9seW5vbWlhbC5sb2dnZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2Ygbm9uLWNvbnN0YW50IGNvZWZmaWNpZW50c1xuICAgICAgICAvLyBpZiB0cnVuY2F0ZSA9PT0gdHJ1ZSwgdGhlIGhpZ2hlc3QgemVybyBjb2VmZmljaWVudHMgKGlmIGV4aXN0KSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdHJ1bmNhdGUgPyBwb2x5bm9taWFsLmRlZ3JlZSgpIDogKHBvbHlub21pYWwubGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgY29uc3QgYnVmZmVyRHN0ID0gKGxlbmd0aCAqIG4gKyAxKSA+IDIgPDwgMTQgP1xuICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcigobGVuZ3RoICogbiArIDEpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkoKGxlbmd0aCAqIG4gKyAxKSAqIEZyLm44KTtcblxuICAgICAgICAvLyBDb3B5IGNvbnN0YW50IGNvZWZmaWNpZW50IGFzIGlzIGJlY2F1c2UgaXMgbm90IHJlbGF0ZWQgdG8geFxuICAgICAgICBidWZmZXJEc3Quc2V0KHBvbHlub21pYWwuZ2V0Q29lZigwKSwgMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIEZyLm44O1xuXG4gICAgICAgICAgICBjb25zdCBjb2VmID0gcG9seW5vbWlhbC5nZXRDb2VmKGkpO1xuICAgICAgICAgICAgYnVmZmVyRHN0LnNldChjb2VmLCBpX3NGciAqIG4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bm9taWFsKGJ1ZmZlckRzdCwgcG9seW5vbWlhbC5jdXJ2ZSwgcG9seW5vbWlhbC5sb2dnZXIpO1xuICAgIH1cblxuICAgIHNwbGl0KG51bVBvbHMsIGRlZ1BvbHMsIGJsaW5kaW5nRmFjdG9ycykge1xuICAgICAgICBpZiAobnVtUG9scyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9seW5vbWlhbHMgY2FuJ3QgYmUgc3BsaXQgaW4gJHtudW1Qb2xzfSBwYXJ0c2ApO1xuICAgICAgICB9IGVsc2UgaWYgKDEgPT09IG51bVBvbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpc107XG4gICAgICAgIH1cblxuICAgICAgICAvL2JsaW5kaW5nIGZhY3RvcnMgY2FuIGJlIHZvaWQgb3IgbXVzdCBoYXZlIGEgbGVuZ3RoIG9mIG51bVBvbHMgLSAxXG4gICAgICAgIGlmICgwICE9PSBibGluZGluZ0ZhY3RvcnMubGVuZ3RoICYmIGJsaW5kaW5nRmFjdG9ycy5sZW5ndGggPCBudW1Qb2xzIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCbGluZGluZyBmYWN0b3JzIGxlbmd0aCBtdXN0IGJlICR7bnVtUG9scyAtIDF9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaHVua0J5dGVMZW5ndGggPSAoZGVnUG9scyArIDEpICogdGhpcy5Gci5uODtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuXG4gICAgICAgIC8vIENoZWNrIHBvbHlub21pYWwgY2FuIGJlIHNwbGl0IGluIG51bUNodW5rcyBwYXJ0cyBvZiBjaHVua1NpemUgYnl0ZXMuLi5cbiAgICAgICAgY29uc3QgbnVtUmVhbFBvbHMgPSBNYXRoLmNlaWwoKHRoaXMuZGVncmVlKCkgKyAxKSAqIHRoaXMuRnIubjggLyBjaHVua0J5dGVMZW5ndGgpO1xuICAgICAgICBpZiAobnVtUmVhbFBvbHMgPCBudW1Qb2xzKSB7XG4gICAgICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihgUG9seW5vbWlhbCBpcyBzaG9ydCB0byBiZSBzcGxpdCBpbiAke251bVBvbHN9IHBhcnRzIG9mICR7ZGVnUG9sc30gY29lZmZpY2llbnRzIGVhY2guYCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbnVtUmVhbFBvbHM7IGkgPCBudW1Qb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXNbaV0gPSBuZXcgUG9seW5vbWlhbChuZXcgVWludDhBcnJheSh0aGlzLkZyLm44KSwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbnVtUG9scyA9IE1hdGgubWluKG51bVBvbHMsIG51bVJlYWxQb2xzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb2xzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IChudW1Qb2xzIC0gMSkgPT09IGk7XG4gICAgICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gaXNMYXN0ID8gdGhpcy5jb2VmLmJ5dGVMZW5ndGggLSAoKG51bVBvbHMgLSAxKSAqIGNodW5rQnl0ZUxlbmd0aCkgOiBjaHVua0J5dGVMZW5ndGggKyB0aGlzLkZyLm44O1xuXG4gICAgICAgICAgICBsZXQgYnVmZiA9IChieXRlTGVuZ3RoIC8gdGhpcy5Gci5uOCkgPiAyIDw8IDE0ID8gbmV3IEJpZ0J1ZmZlcihieXRlTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgcmVzW2ldID0gbmV3IFBvbHlub21pYWwoYnVmZiwgdGhpcy5jdXJ2ZSwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICAgICAgICBjb25zdCBmciA9IGkgKiBjaHVua0J5dGVMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCB0byA9IGlzTGFzdCA/IHRoaXMuY29lZi5ieXRlTGVuZ3RoIDogKGkgKyAxKSAqIGNodW5rQnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIHJlc1tpXS5jb2VmLnNldCh0aGlzLmNvZWYuc2xpY2UoZnIsIHRvKSwgMCk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBhIGJsaW5kaW5nIGZhY3RvciBhcyBoaWdoZXIgZGVncmVlXG4gICAgICAgICAgICBpZiAoIWlzTGFzdCkge1xuICAgICAgICAgICAgICAgIHJlc1tpXS5jb2VmLnNldChibGluZGluZ0ZhY3RvcnNbaV0sIGNodW5rQnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN1YiBibGluZGluZyBmYWN0b3IgdG8gdGhlIGxvd2VzdCBkZWdyZWVcbiAgICAgICAgICAgIGlmICgwICE9PSBpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG93ZXN0RGVncmVlID0gdGhpcy5Gci5zdWIocmVzW2ldLmNvZWYuc2xpY2UoMCwgdGhpcy5Gci5uOCksIGJsaW5kaW5nRmFjdG9yc1tpIC0gMV0pO1xuICAgICAgICAgICAgICAgIHJlc1tpXS5jb2VmLnNldChsb3dlc3REZWdyZWUsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgICAgICAgcmVzW2ldLnRydW5jYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICAgIC8vIC8vIGNvbXB1dGUgdF9sb3coWClcbiAgICAgICAgLy8gbGV0IHBvbFRMb3cgPSBuZXcgQmlnQnVmZmVyKChjaHVua1NpemUgKyAxKSAqIG44cik7XG4gICAgICAgIC8vIHBvbFRMb3cuc2V0KHQuc2xpY2UoMCwgemtleS5kb21haW5TaXplICogbjhyKSwgMCk7XG4gICAgICAgIC8vIC8vIEFkZCBibGluZGluZyBzY2FsYXIgYl8xMCBhcyBhIG5ldyBjb2VmZmljaWVudCBuXG4gICAgICAgIC8vIHBvbFRMb3cuc2V0KGNoLmJbMTBdLCB6a2V5LmRvbWFpblNpemUgKiBuOHIpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAvLyBjb21wdXRlIHRfbWlkKFgpXG4gICAgICAgIC8vIGxldCBwb2xUTWlkID0gbmV3IEJpZ0J1ZmZlcigoemtleS5kb21haW5TaXplICsgMSkgKiBuOHIpO1xuICAgICAgICAvLyBwb2xUTWlkLnNldCh0LnNsaWNlKHprZXkuZG9tYWluU2l6ZSAqIG44ciwgemtleS5kb21haW5TaXplICogMiAqIG44ciksIDApO1xuICAgICAgICAvLyAvLyBTdWJ0cmFjdCBibGluZGluZyBzY2FsYXIgYl8xMCB0byB0aGUgbG93ZXN0IGNvZWZmaWNpZW50IG9mIHRfbWlkXG4gICAgICAgIC8vIGNvbnN0IGxvd2VzdE1pZCA9IEZyLnN1Yihwb2xUTWlkLnNsaWNlKDAsIG44ciksIGNoLmJbMTBdKTtcbiAgICAgICAgLy8gcG9sVE1pZC5zZXQobG93ZXN0TWlkLCAwKTtcbiAgICAgICAgLy8gLy8gQWRkIGJsaW5kaW5nIHNjYWxhciBiXzExIGFzIGEgbmV3IGNvZWZmaWNpZW50IG5cbiAgICAgICAgLy8gcG9sVE1pZC5zZXQoY2guYlsxMV0sIHprZXkuZG9tYWluU2l6ZSAqIG44cik7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIC8vIGNvbXB1dGUgdF9oaWdoKFgpXG4gICAgICAgIC8vIGxldCBwb2xUSGlnaCA9IG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDYpICogbjhyKTtcbiAgICAgICAgLy8gcG9sVEhpZ2guc2V0KHQuc2xpY2UoemtleS5kb21haW5TaXplICogMiAqIG44ciwgKHprZXkuZG9tYWluU2l6ZSAqIDMgKyA2KSAqIG44ciksIDApO1xuICAgICAgICAvLyAvL1N1YnRyYWN0IGJsaW5kaW5nIHNjYWxhciBiXzExIHRvIHRoZSBsb3dlc3QgY29lZmZpY2llbnQgb2YgdF9oaWdoXG4gICAgICAgIC8vIGNvbnN0IGxvd2VzdEhpZ2ggPSBGci5zdWIocG9sVEhpZ2guc2xpY2UoMCwgbjhyKSwgY2guYlsxMV0pO1xuICAgICAgICAvLyBwb2xUSGlnaC5zZXQobG93ZXN0SGlnaCwgMCk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIHByb29mLlQxID0gYXdhaXQgZXhwVGF1KHBvbFRMb3csIFwibXVsdGlleHAgVDFcIik7XG4gICAgICAgIC8vIHByb29mLlQyID0gYXdhaXQgZXhwVGF1KHBvbFRNaWQsIFwibXVsdGlleHAgVDJcIik7XG4gICAgICAgIC8vIHByb29mLlQzID0gYXdhaXQgZXhwVGF1KHBvbFRIaWdoLCBcIm11bHRpZXhwIFQzXCIpO1xuICAgIH1cblxuLy8gc3BsaXQyKGRlZ1BvbHMsIGJsaW5kaW5nRmFjdG9ycykge1xuLy8gICAgIGxldCBjdXJyZW50RGVncmVlID0gdGhpcy5kZWdyZWUoKTtcbi8vICAgICBjb25zdCBudW1GaWxsZWRQb2xzID0gTWF0aC5jZWlsKChjdXJyZW50RGVncmVlICsgMSkgLyAoZGVnUG9scyArIDEpKTtcbi8vXG4vLyAgICAgLy9ibGluZGluZyBmYWN0b3JzIGNhbiBiZSB2b2lkIG9yIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiBudW1Qb2xzIC0gMVxuLy8gICAgIGlmICgwICE9PSBibGluZGluZ0ZhY3RvcnMubGVuZ3RoICYmIGJsaW5kaW5nRmFjdG9ycy5sZW5ndGggPCBudW1GaWxsZWRQb2xzIC0gMSkge1xuLy8gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJsaW5kaW5nIGZhY3RvcnMgbGVuZ3RoIG11c3QgYmUgJHtudW1GaWxsZWRQb2xzIC0gMX1gKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIGNvbnN0IGNodW5rQnl0ZUxlbmd0aCA9IChkZWdQb2xzICsgMSkgKiB0aGlzLkZyLm44O1xuLy9cbi8vICAgICAvLyBDaGVjayBwb2x5bm9taWFsIGNhbiBiZSBzcGxpdCBpbiBudW1DaHVua3MgcGFydHMgb2YgY2h1bmtTaXplIGJ5dGVzLi4uXG4vLyAgICAgaWYgKHRoaXMuY29lZi5ieXRlTGVuZ3RoIC8gY2h1bmtCeXRlTGVuZ3RoIDw9IG51bUZpbGxlZFBvbHMgLSAxKSB7XG4vLyAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9seW5vbWlhbCBpcyBzaG9ydCB0byBiZSBzcGxpdCBpbiAke251bUZpbGxlZFBvbHN9IHBhcnRzIG9mICR7ZGVnUG9sc30gY29lZmZpY2llbnRzIGVhY2guYCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICBsZXQgcmVzID0gW107XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1GaWxsZWRQb2xzOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgaXNMYXN0ID0gKG51bUZpbGxlZFBvbHMgLSAxKSA9PT0gaTtcbi8vICAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGlzTGFzdCA/IChjdXJyZW50RGVncmVlICsgMSkgKiB0aGlzLkZyLm44IC0gKChudW1GaWxsZWRQb2xzIC0gMSkgKiBjaHVua0J5dGVMZW5ndGgpIDogY2h1bmtCeXRlTGVuZ3RoICsgdGhpcy5Gci5uODtcbi8vXG4vLyAgICAgICAgIHJlc1tpXSA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoYnl0ZUxlbmd0aCksIHRoaXMuRnIsIHRoaXMubG9nZ2VyKTtcbi8vICAgICAgICAgY29uc3QgZnIgPSBpICogY2h1bmtCeXRlTGVuZ3RoO1xuLy8gICAgICAgICBjb25zdCB0byA9IGlzTGFzdCA/IChjdXJyZW50RGVncmVlICsgMSkgKiB0aGlzLkZyLm44IDogKGkgKyAxKSAqIGNodW5rQnl0ZUxlbmd0aDtcbi8vICAgICAgICAgcmVzW2ldLmNvZWYuc2V0KHRoaXMuY29lZi5zbGljZShmciwgdG8pLCAwKTtcbi8vXG4vLyAgICAgICAgIC8vIEFkZCBhIGJsaW5kaW5nIGZhY3RvciBhcyBoaWdoZXIgZGVncmVlXG4vLyAgICAgICAgIGlmICghaXNMYXN0KSB7XG4vLyAgICAgICAgICAgICByZXNbaV0uY29lZi5zZXQoYmxpbmRpbmdGYWN0b3JzW2ldLCBjaHVua0J5dGVMZW5ndGgpO1xuLy8gICAgICAgICB9XG4vL1xuLy8gICAgICAgICAvLyBTdWIgYmxpbmRpbmcgZmFjdG9yIHRvIHRoZSBsb3dlc3QgZGVncmVlXG4vLyAgICAgICAgIGlmICgwICE9PSBpKSB7XG4vLyAgICAgICAgICAgICBjb25zdCBsb3dlc3REZWdyZWUgPSB0aGlzLkZyLnN1YihyZXNbaV0uY29lZi5zbGljZSgwLCB0aGlzLkZyLm44KSwgYmxpbmRpbmdGYWN0b3JzW2kgLSAxXSk7XG4vLyAgICAgICAgICAgICByZXNbaV0uY29lZi5zZXQobG93ZXN0RGVncmVlLCAwKTtcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vXG4vLyAgICAgcmV0dXJuIHJlcztcbi8vIH1cblxuLy8gbWVyZ2UocG9scywgb3ZlcmxhcCA9IHRydWUpIHtcbi8vICAgICBsZXQgbGVuZ3RoID0gMDtcbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgbGVuZ3RoICs9IHBvbHNbaV0ubGVuZ3RoKCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAob3ZlcmxhcCkge1xuLy8gICAgICAgICBsZW5ndGggLT0gcG9scy5sZW5ndGggLSAxO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgbGV0IHJlcyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIobGVuZ3RoICogdGhpcy5Gci5uOCkpO1xuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9scy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gcG9sc1tpXS5jb2VmLmJ5dGVMZW5ndGg7XG4vLyAgICAgICAgIGlmICgwID09PSBpKSB7XG4vLyAgICAgICAgICAgICByZXMuY29lZi5zZXQocG9sc1tpXS5jb2VmLCAwKTtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vXG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiByZXM7XG4vLyB9XG5cbiAgICB0cnVuY2F0ZSgpIHtcbiAgICAgICAgY29uc3QgZGVnID0gdGhpcy5kZWdyZWUoKTtcbiAgICAgICAgaWYgKGRlZyArIDEgPCB0aGlzLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvZWZzID0gKGRlZyArIDEpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICAgICAgbmV3IEJpZ0J1ZmZlcigoZGVnICsgMSkgKiB0aGlzLkZyLm44KSA6IG5ldyBVaW50OEFycmF5KChkZWcgKyAxKSAqIHRoaXMuRnIubjgpO1xuXG4gICAgICAgICAgICBuZXdDb2Vmcy5zZXQodGhpcy5jb2VmLnNsaWNlKDAsIChkZWcgKyAxKSAqIHRoaXMuRnIubjgpLCAwKTtcbiAgICAgICAgICAgIHRoaXMuY29lZiA9IG5ld0NvZWZzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oeEFyciwgeUFyciwgY3VydmUpIHtcbiAgICAgICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICAgICAgbGV0IHBvbHlub21pYWwgPSBjb21wdXRlTGFncmFuZ2VQb2x5bm9taWFsKDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHhBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBvbHlub21pYWwuYWRkKGNvbXB1dGVMYWdyYW5nZVBvbHlub21pYWwoaSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbHlub21pYWw7XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUxhZ3JhbmdlUG9seW5vbWlhbChpKSB7XG4gICAgICAgICAgICBsZXQgcG9seW5vbWlhbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB4QXJyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBvbHlub21pYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnVmZiA9ICh4QXJyLmxlbmd0aCkgPiAyIDw8IDE0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdCdWZmZXIoKHhBcnIubGVuZ3RoKSAqIEZyLm44KSA6IG5ldyBVaW50OEFycmF5KCh4QXJyLmxlbmd0aCkgKiBGci5uOCk7XG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWwgPSBuZXcgUG9seW5vbWlhbChidWZmLCBjdXJ2ZSk7XG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWwuc2V0Q29lZigwLCBGci5uZWcoeEFycltqXSkpO1xuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFsLnNldENvZWYoMSwgRnIub25lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFsLmJ5WFN1YlZhbHVlKHhBcnJbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRlbm9taW5hdG9yID0gcG9seW5vbWlhbC5ldmFsdWF0ZSh4QXJyW2ldKTtcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gRnIuaW52KGRlbm9taW5hdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IG11bEZhY3RvciA9IEZyLm11bCh5QXJyW2ldLCBkZW5vbWluYXRvcik7XG5cbiAgICAgICAgICAgIHBvbHlub21pYWwubXVsU2NhbGFyKG11bEZhY3Rvcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwb2x5bm9taWFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHplcm9maWVyUG9seW5vbWlhbCh4QXJyLCBjdXJ2ZSkge1xuICAgICAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgICAgICBsZXQgYnVmZiA9ICh4QXJyLmxlbmd0aCArIDEpID4gMiA8PCAxNCA/XG4gICAgICAgICAgICBuZXcgQmlnQnVmZmVyKCh4QXJyLmxlbmd0aCArIDEpICogRnIubjgpIDogbmV3IFVpbnQ4QXJyYXkoKHhBcnIubGVuZ3RoICsgMSkgKiBGci5uOCk7XG4gICAgICAgIGxldCBwb2x5bm9taWFsID0gbmV3IFBvbHlub21pYWwoYnVmZiwgY3VydmUpO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgemVyb2ZpZXIgcG9seW5vbWlhbCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICAgICAgLy8gemVyb2ZpZXIoWCkgPSAoWC14QXJyWzBdKShYLXhBcnJbMV0pLi4uKFgteEFycltuXSlcbiAgICAgICAgcG9seW5vbWlhbC5zZXRDb2VmKDAsIEZyLm5lZyh4QXJyWzBdKSk7XG4gICAgICAgIHBvbHlub21pYWwuc2V0Q29lZigxLCBGci5vbmUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgeEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcG9seW5vbWlhbC5ieVhTdWJWYWx1ZSh4QXJyW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2x5bm9taWFsO1xuICAgIH1cblxuICAgIHByaW50KCkge1xuICAgICAgICBjb25zdCBGciA9IHRoaXMuRnI7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kZWdyZWUoKTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZWYgPSB0aGlzLmdldENvZWYoaSk7XG4gICAgICAgICAgICBpZiAoIUZyLmVxKEZyLnplcm8sIGNvZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEZyLmlzTmVnYXRpdmUoY29lZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiIC0gXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICE9PSB0aGlzLmRlZ3JlZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBcIiArIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMgKz0gRnIudG9TdHJpbmcoY29lZik7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBpID4gMSA/IFwieF5cIiArIGkgOiBcInhcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICB9XG5cbiAgICBhc3luYyBtdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIG5hbWUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuY29lZi5ieXRlTGVuZ3RoIC8gdGhpcy5Gci5uODtcbiAgICAgICAgY29uc3QgUFRhdU4gPSBQVGF1LnNsaWNlKDAsIG4gKiB0aGlzLkcxLkYubjggKiAyKTtcbiAgICAgICAgY29uc3QgYm0gPSBhd2FpdCB0aGlzLkZyLmJhdGNoRnJvbU1vbnRnb21lcnkodGhpcy5jb2VmKTtcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuRzEubXVsdGlFeHBBZmZpbmUoUFRhdU4sIGJtLCB0aGlzLmxvZ2dlciwgbmFtZSk7XG4gICAgICAgIHJlcyA9IHRoaXMuRzEudG9BZmZpbmUocmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtCaWdCdWZmZXJ9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRpb25zIHtcbiAgICBjb25zdHJ1Y3RvcihldmFsdWF0aW9ucywgY3VydmUsIGxvZ2dlcikge1xuICAgICAgICB0aGlzLmV2YWwgPSBldmFsdWF0aW9ucztcbiAgICAgICAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICAgICAgICB0aGlzLkZyID0gY3VydmUuRnI7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBmcm9tUG9seW5vbWlhbChwb2x5bm9taWFsLCBleHRlbnNpb24sIGN1cnZlLCBsb2dnZXIpIHtcbiAgICAgICAgY29uc3QgY29lZmZpY2llbnRzTiA9IG5ldyBCaWdCdWZmZXIocG9seW5vbWlhbC5sZW5ndGgoKSAqIGV4dGVuc2lvbiAqIGN1cnZlLkZyLm44KTtcbiAgICAgICAgY29lZmZpY2llbnRzTi5zZXQocG9seW5vbWlhbC5jb2VmLCAwKTtcblxuICAgICAgICBjb25zdCBldmFsdWF0aW9ucyA9IGF3YWl0IGN1cnZlLkZyLmZmdChjb2VmZmljaWVudHNOKTtcblxuICAgICAgICByZXR1cm4gbmV3IEV2YWx1YXRpb25zKGV2YWx1YXRpb25zLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBnZXRFdmFsdWF0aW9uKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGlfbjggPSBpbmRleCAqIHRoaXMuRnIubjg7XG5cbiAgICAgICAgaWYgKGlfbjggKyB0aGlzLkZyLm44ID4gdGhpcy5ldmFsLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV2YWx1YXRpb25zLmdldEV2YWx1YXRpb24oKSBvdXQgb2YgYm91bmRzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbC5zbGljZShpX244LCBpX244ICsgdGhpcy5Gci5uOCk7XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5ldmFsLmJ5dGVMZW5ndGggLyB0aGlzLkZyLm44O1xuICAgICAgICBpZiAobGVuZ3RoICE9PSBNYXRoLmZsb29yKHRoaXMuZXZhbC5ieXRlTGVuZ3RoIC8gdGhpcy5Gci5uOCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbHlub21pYWwgZXZhbHVhdGlvbnMgYnVmZmVyIGhhcyBpbmNvcnJlY3Qgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoMCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiUG9seW5vbWlhbCBoYXMgbGVuZ3RoIHplcm9cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG59IiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMSAwa2ltcyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuLyogSW1wbGVtZW50YXRpb24gb2YgdGhpcyBwYXBlcjogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxOS85NTMucGRmIHNlY3Rpb24gOC40ICovXG5cbmltcG9ydCAqIGFzIGJpbkZpbGVVdGlscyBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0ICogYXMgemtleVV0aWxzIGZyb20gXCIuL3prZXlfdXRpbHMuanNcIjtcbmltcG9ydCAqIGFzIHd0bnNVdGlscyBmcm9tIFwiLi93dG5zX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTY2FsYXIsIHV0aWxzLCBCaWdCdWZmZXIgfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7c3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcbmltcG9ydCB7IFByb29mIH0gZnJvbSBcIi4vcHJvb2YuanNcIjtcbmltcG9ydCB7IEtlY2NhazI1NlRyYW5zY3JpcHQgfSBmcm9tIFwiLi9LZWNjYWsyNTZUcmFuc2NyaXB0LmpzXCI7XG5pbXBvcnQgeyBNdWxaIH0gZnJvbSBcIi4vbXVsX3ouanNcIjtcbmltcG9ydCB7ICBaS0VZX1BMX0hFQURFUl9TRUNUSU9OLFxuICAgIFpLRVlfUExfQURESVRJT05TX1NFQ1RJT04sXG4gICAgWktFWV9QTF9BX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfUExfQl9NQVBfU0VDVElPTixcbiAgICBaS0VZX1BMX0NfTUFQX1NFQ1RJT04sXG4gICAgWktFWV9QTF9RTV9TRUNUSU9OLFxuICAgIFpLRVlfUExfUUxfU0VDVElPTixcbiAgICBaS0VZX1BMX1FSX1NFQ1RJT04sXG4gICAgWktFWV9QTF9RT19TRUNUSU9OLFxuICAgIFpLRVlfUExfUUNfU0VDVElPTixcbiAgICBaS0VZX1BMX1NJR01BX1NFQ1RJT04sXG4gICAgWktFWV9QTF9MQUdSQU5HRV9TRUNUSU9OLFxuICAgIFpLRVlfUExfUFRBVV9TRUNUSU9OLFxufSBmcm9tIFwiLi9wbG9ua19jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBvbHlub21pYWwgfSBmcm9tIFwiLi9wb2x5bm9taWFsL3BvbHlub21pYWwuanNcIjtcbmltcG9ydCB7IEV2YWx1YXRpb25zIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9ldmFsdWF0aW9ucy5qc1wiO1xuICAgIFxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGxvbmsxNlByb3ZlKHprZXlGaWxlTmFtZSwgd2l0bmVzc0ZpbGVOYW1lLCBsb2dnZXIpIHtcbiAgICBjb25zdCB7ZmQ6IGZkV3Rucywgc2VjdGlvbnM6IHNlY3Rpb25zV3Ruc30gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUod2l0bmVzc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMTw8MjUsIDE8PDIzKTtcblxuICAgIC8vIFJlYWQgd2l0bmVzcyBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBSZWFkaW5nIHdpdG5lc3MgZmlsZVwiKTtcbiAgICBjb25zdCB3dG5zID0gYXdhaXQgd3Ruc1V0aWxzLnJlYWRIZWFkZXIoZmRXdG5zLCBzZWN0aW9uc1d0bnMpO1xuXG4gICAgLy8gUmVhZCB6a2V5IGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IFJlYWRpbmcgemtleSBmaWxlXCIpO1xuICAgIGNvbnN0IHtmZDogZmRaS2V5LCBzZWN0aW9uczogemtleVNlY3Rpb25zfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5RmlsZU5hbWUsIFwiemtleVwiLCAyLCAxPDwyNSwgMTw8MjMpO1xuXG4gICAgY29uc3QgemtleSA9IGF3YWl0IHprZXlVdGlscy5yZWFkSGVhZGVyKGZkWktleSwgemtleVNlY3Rpb25zKTtcbiAgICBpZiAoemtleS5wcm90b2NvbCAhPSBcInBsb25rXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiemtleSBmaWxlIGlzIG5vdCBwbG9ua1wiKTtcbiAgICB9XG5cbiAgICBpZiAoIVNjYWxhci5lcSh6a2V5LnIsICB3dG5zLnEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkN1cnZlIG9mIHRoZSB3aXRuZXNzIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJ2ZSBvZiB0aGUgcHJvdmluZyBrZXlcIik7XG4gICAgfVxuXG4gICAgaWYgKHd0bnMubldpdG5lc3MgIT0gemtleS5uVmFycyAtemtleS5uQWRkaXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRuZXNzIGxlbmd0aC4gQ2lyY3VpdDogJHt6a2V5Lm5WYXJzfSwgd2l0bmVzczogJHt3dG5zLm5XaXRuZXNzfSwgJHt6a2V5Lm5BZGRpdGlvbnN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSB6a2V5LmN1cnZlO1xuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBuOHIgPSBjdXJ2ZS5Gci5uODtcbiAgICBjb25zdCBzRG9tYWluID0gemtleS5kb21haW5TaXplICogbjhyO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCIgIFBMT05LIFBST1ZFIFNFVFRJTkdTXCIpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYCAgQ3VydmU6ICAgICAgICAgJHtjdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoYCAgQ2lyY3VpdCBwb3dlcjogJHt6a2V5LnBvd2VyfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoYCAgRG9tYWluIHNpemU6ICAgJHt6a2V5LmRvbWFpblNpemV9YCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgICBWYXJzOiAgICAgICAgICAke3prZXkublZhcnN9YCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgICBQdWJsaWMgdmFyczogICAke3prZXkublB1YmxpY31gKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGAgIENvbnN0cmFpbnRzOiAgICR7emtleS5uQ29uc3RyYWludHN9YCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgICBBZGRpdGlvbnM6ICAgICAke3prZXkubkFkZGl0aW9uc31gKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiKTtcbiAgICB9XG5cbiAgICAvL1JlYWQgd2l0bmVzcyBkYXRhXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBSZWFkaW5nIHdpdG5lc3MgZmlsZSBkYXRhXCIpO1xuICAgIGNvbnN0IGJ1ZmZXaXRuZXNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkV3Rucywgc2VjdGlvbnNXdG5zLCAyKTtcblxuICAgIC8vIEZpcnN0IGVsZW1lbnQgaW4gcGxvbmsgaXMgbm90IHVzZWQgYW5kIGNhbiBiZSBhbnkgdmFsdWUuIChCdXQgYWx3YXlzIHRoZSBzYW1lKS5cbiAgICAvLyBXZSBzZXQgaXQgdG8gemVybyB0byBnbyBmYXN0ZXIgaW4gdGhlIGV4cG9uZW50aWF0aW9ucy5cbiAgICBidWZmV2l0bmVzcy5zZXQoRnIuemVybywgMCk7XG4gICAgY29uc3QgYnVmZkludGVybmFsV2l0bmVzcyA9IG5ldyBCaWdCdWZmZXIobjhyKnprZXkubkFkZGl0aW9ucyk7XG5cbiAgICBsZXQgYnVmZmVycyA9IHt9O1xuICAgIGxldCBwb2x5bm9taWFscyA9IHt9O1xuICAgIGxldCBldmFsdWF0aW9ucyA9IHt9O1xuXG4gICAgbGV0IGNoYWxsZW5nZXMgPSB7fTtcbiAgICBsZXQgcHJvb2YgPSBuZXcgUHJvb2YoY3VydmUsIGxvZ2dlcik7XG4gICAgY29uc3QgdHJhbnNjcmlwdCA9IG5ldyBLZWNjYWsyNTZUcmFuc2NyaXB0KGN1cnZlKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhgPiBSZWFkaW5nIFNlY3Rpb24gJHtaS0VZX1BMX0FERElUSU9OU19TRUNUSU9OfS4gQWRkaXRpb25zYCk7XG4gICAgYXdhaXQgY2FsY3VsYXRlQWRkaXRpb25zKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYD4gUmVhZGluZyBTZWN0aW9uICR7WktFWV9QTF9TSUdNQV9TRUNUSU9OfS4gU2lnbWExLCBTaWdtYTIgJiBTaWdtYSAzYCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiwrfCt8K3IFJlYWRpbmcgU2lnbWEgcG9seW5vbWlhbHMgXCIpO1xuICAgIHBvbHlub21pYWxzLlNpZ21hMSA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgIHBvbHlub21pYWxzLlNpZ21hMiA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgIHBvbHlub21pYWxzLlNpZ21hMyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2x5bm9taWFscy5TaWdtYTEuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfUExfU0lHTUFfU0VDVElPTl1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2x5bm9taWFscy5TaWdtYTIuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfUExfU0lHTUFfU0VDVElPTl1bMF0ucCArIDUgKiBzRG9tYWluKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlNpZ21hMy5jb2VmLCAwLCBzRG9tYWluLCB6a2V5U2VjdGlvbnNbWktFWV9QTF9TSUdNQV9TRUNUSU9OXVswXS5wICsgMTAgKiBzRG9tYWluKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBSZWFkaW5nIFNpZ21hIGV2YWx1YXRpb25zXCIpO1xuICAgIGV2YWx1YXRpb25zLlNpZ21hMSA9IG5ldyBFdmFsdWF0aW9ucyhuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KSwgY3VydmUsIGxvZ2dlcik7XG4gICAgZXZhbHVhdGlvbnMuU2lnbWEyID0gbmV3IEV2YWx1YXRpb25zKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBldmFsdWF0aW9ucy5TaWdtYTMgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5TaWdtYTEuZXZhbCwgMCwgc0RvbWFpbiAqIDQsIHprZXlTZWN0aW9uc1taS0VZX1BMX1NJR01BX1NFQ1RJT05dWzBdLnAgKyBzRG9tYWluKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKGV2YWx1YXRpb25zLlNpZ21hMi5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfUExfU0lHTUFfU0VDVElPTl1bMF0ucCArIDYgKiBzRG9tYWluKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKGV2YWx1YXRpb25zLlNpZ21hMy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfUExfU0lHTUFfU0VDVElPTl1bMF0ucCArIDExICogc0RvbWFpbik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoYD4gUmVhZGluZyBTZWN0aW9uICR7WktFWV9QTF9QVEFVX1NFQ1RJT059LiBQb3dlcnMgb2YgVGF1YCk7XG4gICAgY29uc3QgUFRhdSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHprZXlTZWN0aW9ucywgWktFWV9QTF9QVEFVX1NFQ1RJT04pO1xuXG4gICAgbGV0IHB1YmxpY1NpZ25hbHMgPSBbXTtcblxuICAgIGZvciAobGV0IGk9MTsgaTw9IHprZXkublB1YmxpYzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHB1YiA9IGJ1ZmZXaXRuZXNzLnNsaWNlKGkqRnIubjgsIGkqRnIubjgrRnIubjgpO1xuICAgICAgICBwdWJsaWNTaWduYWxzLnB1c2goU2NhbGFyLmZyb21ScHJMRShwdWIpKTtcbiAgICB9XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJcIik7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBST1VORCAxXCIpO1xuICAgIGF3YWl0IHJvdW5kMSgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBST1VORCAyXCIpO1xuICAgIGF3YWl0IHJvdW5kMigpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBST1VORCAzXCIpO1xuICAgIGF3YWl0IHJvdW5kMygpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBST1VORCA0XCIpO1xuICAgIGF3YWl0IHJvdW5kNCgpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBST1VORCA1XCIpO1xuICAgIGF3YWl0IHJvdW5kNSgpO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBGaW5hbCBhZGp1c3RtZW50cyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBmZFpLZXkuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFd0bnMuY2xvc2UoKTtcblxuICAgIC8vIFByZXBhcmUgcHJvb2ZcbiAgICBsZXQgX3Byb29mID0gcHJvb2YudG9PYmplY3RQcm9vZihmYWxzZSk7XG4gICAgX3Byb29mLnByb3RvY29sID0gXCJwbG9ua1wiO1xuICAgIF9wcm9vZi5jdXJ2ZSA9IGN1cnZlLm5hbWU7XG4gICAgXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiUExPTksgUFJPVkVSIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvb2Y6IHN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKSxcbiAgICAgICAgcHVibGljU2lnbmFsczogc3RyaW5naWZ5QmlnSW50cyhwdWJsaWNTaWduYWxzKVxuICAgIH07XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVBZGRpdGlvbnMoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgYWRkaXRpb25zXCIpO1xuICAgICAgICBjb25zdCBhZGRpdGlvbnNCdWZmID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgemtleVNlY3Rpb25zLCBaS0VZX1BMX0FERElUSU9OU19TRUNUSU9OKTtcblxuICAgICAgICAvLyBzaXplczogd2lyZUlkX3ggPSA0IGJ5dGVzICgzMiBiaXRzKSwgZmFjdG9yX3ggPSBmaWVsZCBzaXplIGJpdHNcbiAgICAgICAgLy8gQWRkaXRpb24gZm9ybTogd2lyZUlkX2Egd2lyZUlkX2IgZmFjdG9yX2EgZmFjdG9yX2IgKHNpemUgaXMgNCArIDQgKyBzRnIgKyBzRnIpXG4gICAgICAgIGNvbnN0IHNTdW0gPSA4ICsgbjhyICogMjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkubkFkZGl0aW9uczsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyICYmICgwICE9PSBpKSAmJiAoaSAlIDEwMDAwMCA9PT0gMCkpIGxvZ2dlci5kZWJ1ZyhgICAgIGFkZGl0aW9uICR7aX0vJHt6a2V5Lm5BZGRpdGlvbnN9YCk7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgYWRkaXRpb24gdmFsdWVzXG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gaSAqIHNTdW07XG4gICAgICAgICAgICBjb25zdCBzaWduYWxJZDEgPSByZWFkVUludDMyKGFkZGl0aW9uc0J1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hbElkMiA9IHJlYWRVSW50MzIoYWRkaXRpb25zQnVmZiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgY29uc3QgZmFjdG9yMSA9IGFkZGl0aW9uc0J1ZmYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBuOHIpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG44cjtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcjIgPSBhZGRpdGlvbnNCdWZmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbjhyKTtcblxuICAgICAgICAgICAgLy8gR2V0IHdpdG5lc3MgdmFsdWVcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3MxID0gZ2V0V2l0bmVzcyhzaWduYWxJZDEpO1xuICAgICAgICAgICAgY29uc3Qgd2l0bmVzczIgPSBnZXRXaXRuZXNzKHNpZ25hbElkMik7XG5cbiAgICAgICAgICAgIC8vQ2FsY3VsYXRlIGZpbmFsIHJlc3VsdFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gRnIuYWRkKEZyLm11bChmYWN0b3IxLCB3aXRuZXNzMSksIEZyLm11bChmYWN0b3IyLCB3aXRuZXNzMikpO1xuXG4gICAgICAgICAgICBidWZmSW50ZXJuYWxXaXRuZXNzLnNldChyZXN1bHQsIG44ciAqIGkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZFVJbnQzMihiLCBvKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmYgPSBiLnNsaWNlKG8sIG8rNCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiBidWZmVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2l0bmVzcyhpZHgpIHtcbiAgICAgICAgaWYgKGlkeCA8IHprZXkublZhcnMtemtleS5uQWRkaXRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmZldpdG5lc3Muc2xpY2UoaWR4Km44ciwgaWR4Km44cituOHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkeCA8IHprZXkublZhcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBidWZmSW50ZXJuYWxXaXRuZXNzLnNsaWNlKChpZHggLSAoemtleS5uVmFycy16a2V5Lm5BZGRpdGlvbnMpKSpuOHIsIChpZHgtKHprZXkublZhcnMtemtleS5uQWRkaXRpb25zKSkqbjhyICsgbjhyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5Gci56ZXJvO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQxKCkge1xuICAgICAgICAvLyBTVEVQIDEuMSAtIEdlbmVyYXRlIHJhbmRvbSBibGluZGluZyBzY2FsYXJzIChiMSwgLi4uLCBiMTEpIOKIiCBGXG4gICAgICAgIGNoYWxsZW5nZXMuYiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpPTE7IGk8PTExOyBpKyspIHtcbiAgICAgICAgICAgIGNoYWxsZW5nZXMuYltpXSA9IGN1cnZlLkZyLnJhbmRvbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1RFUCAxLjIgLSBDb21wdXRlIHdpcmUgcG9seW5vbWlhbHMgYShYKSwgYihYKSBhbmQgYyhYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBBLCBCLCBDIHdpcmUgcG9seW5vbWlhbHNcIik7XG4gICAgICAgIGF3YWl0IGNvbXB1dGVXaXJlUG9seW5vbWlhbHMoKTtcblxuICAgICAgICAvLyBTVEVQIDEuMyAtIENvbXB1dGUgW2FdXzEsIFtiXV8xLCBbY11fMVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBBLCBCLCBDIE1TTVwiKTtcbiAgICAgICAgbGV0IGNvbW1pdEEgPSBhd2FpdCBwb2x5bm9taWFscy5BLm11bHRpRXhwb25lbnRpYXRpb24oUFRhdSwgXCJBXCIpO1xuICAgICAgICBsZXQgY29tbWl0QiA9IGF3YWl0IHBvbHlub21pYWxzLkIubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIkJcIik7XG4gICAgICAgIGxldCBjb21taXRDID0gYXdhaXQgcG9seW5vbWlhbHMuQy5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiQ1wiKTtcblxuICAgICAgICAvLyBGaXJzdCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW0FdXzEsIFtCXV8xLCBbQ11fMSlcbiAgICAgICAgcHJvb2YuYWRkUG9seW5vbWlhbChcIkFcIiwgY29tbWl0QSk7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJCXCIsIGNvbW1pdEIpO1xuICAgICAgICBwcm9vZi5hZGRQb2x5bm9taWFsKFwiQ1wiLCBjb21taXRDKTtcblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlV2lyZVBvbHlub21pYWxzKCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgUmVhZGluZyBkYXRhIGZyb20gemtleSBmaWxlXCIpO1xuXG4gICAgICAgIC8vIEJ1aWxkIEEsIEIgYW5kIEMgZXZhbHVhdGlvbnMgYnVmZmVyIGZyb20gemtleSBhbmQgd2l0bmVzcyBmaWxlc1xuICAgICAgICBidWZmZXJzLkEgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuICAgICAgICBidWZmZXJzLkIgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuICAgICAgICBidWZmZXJzLkMgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuXG4gICAgICAgIC8vIFJlYWQgemtleSBmaWxlIHRvIHRoZSBidWZmZXJzXG4gICAgICAgIGNvbnN0IGFNYXBCdWZmID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgemtleVNlY3Rpb25zLCBaS0VZX1BMX0FfTUFQX1NFQ1RJT04pO1xuICAgICAgICBjb25zdCBiTWFwQnVmZiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHprZXlTZWN0aW9ucywgWktFWV9QTF9CX01BUF9TRUNUSU9OKTtcbiAgICAgICAgY29uc3QgY01hcEJ1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfUExfQ19NQVBfU0VDVElPTik7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBhbGwgd2l0bmVzcyBmcm9tIHNpZ25hbCBpZHMgYW5kIHNldCB0aGVtIHRvIEEsQiAmIEMgYnVmZmVyc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkubkNvbnN0cmFpbnRzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIG44cjtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGkgKiA0O1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIEEgdmFsdWUgZnJvbSBhIHNpZ25hbCBpZFxuICAgICAgICAgICAgY29uc3Qgc2lnbmFsSWRBID0gcmVhZFVJbnQzMihhTWFwQnVmZiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQS5zZXQoZ2V0V2l0bmVzcyhzaWduYWxJZEEpLCBpX3NGcik7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgQiB2YWx1ZSBmcm9tIGEgc2lnbmFsIGlkXG4gICAgICAgICAgICBjb25zdCBzaWduYWxJZEIgPSByZWFkVUludDMyKGJNYXBCdWZmLCBvZmZzZXQpO1xuICAgICAgICAgICAgYnVmZmVycy5CLnNldChnZXRXaXRuZXNzKHNpZ25hbElkQiksIGlfc0ZyKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSBDIHZhbHVlIGZyb20gYSBzaWduYWwgaWRcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hbElkQyA9IHJlYWRVSW50MzIoY01hcEJ1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICBidWZmZXJzLkMuc2V0KGdldFdpdG5lc3Moc2lnbmFsSWRDKSwgaV9zRnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVycy5BID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZmVycy5BKTtcbiAgICAgICAgYnVmZmVycy5CID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZmVycy5CKTtcbiAgICAgICAgYnVmZmVycy5DID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZmVycy5DKTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHdpcmUgcG9seW5vbWlhbHMgYShYKSwgYihYKSBhbmQgYyhYKSBmcm9tIEEsQiAmIEMgYnVmZmVyc1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIEEgaWZmdFwiKTtcbiAgICAgICAgcG9seW5vbWlhbHMuQSA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQSwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgQiBpZmZ0XCIpO1xuICAgICAgICBwb2x5bm9taWFscy5CID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5CLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiwrfCt8K3IENvbXB1dGluZyBDIGlmZnRcIik7XG4gICAgICAgIHBvbHlub21pYWxzLkMgPSBhd2FpdCBQb2x5bm9taWFsLmZyb21FdmFsdWF0aW9ucyhidWZmZXJzLkMsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgZXh0ZW5kZWQgZXZhbHVhdGlvbnMgb2YgYShYKSwgYihYKSBhbmQgYyhYKSBwb2x5bm9taWFsc1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIEEgZmZ0XCIpO1xuICAgICAgICBldmFsdWF0aW9ucy5BID0gYXdhaXQgRXZhbHVhdGlvbnMuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQSwgNCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgQiBmZnRcIik7XG4gICAgICAgIGV2YWx1YXRpb25zLkIgPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5CLCA0LCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiwrfCt8K3IENvbXB1dGluZyBDIGZmdFwiKTtcbiAgICAgICAgZXZhbHVhdGlvbnMuQyA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMsIDQsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIEJsaW5kIGEoWCksIGIoWCkgYW5kIGMoWCkgcG9seW5vbWlhbHMgY29lZmZpY2llbnRzIHdpdGggYmxpbmRpbmcgc2NhbGFycyBiXG4gICAgICAgIHBvbHlub21pYWxzLkEuYmxpbmRDb2VmZmljaWVudHMoW2NoYWxsZW5nZXMuYlsyXSwgY2hhbGxlbmdlcy5iWzFdXSk7XG4gICAgICAgIHBvbHlub21pYWxzLkIuYmxpbmRDb2VmZmljaWVudHMoW2NoYWxsZW5nZXMuYls0XSwgY2hhbGxlbmdlcy5iWzNdXSk7XG4gICAgICAgIHBvbHlub21pYWxzLkMuYmxpbmRDb2VmZmljaWVudHMoW2NoYWxsZW5nZXMuYls2XSwgY2hhbGxlbmdlcy5iWzVdXSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZGVncmVlc1xuICAgICAgICBpZiAocG9seW5vbWlhbHMuQS5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9seW5vbWlhbHMuQi5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9seW5vbWlhbHMuQy5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgfSAgICAgICAgXG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQyKCkge1xuICAgICAgICAvLyBTVEVQIDIuMSAtIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGEgYW5kIGdhbW1hIOKIiCBGXG4gICAgICAgIC8vIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGFcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBDb21wdXRpbmcgY2hhbGxlbmdlcyBiZXRhIGFuZCBnYW1tYVwiKTtcbiAgICAgICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuXG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh6a2V5LlFtKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHprZXkuUWwpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQoemtleS5Rcik7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh6a2V5LlFvKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHprZXkuUWMpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQoemtleS5TMSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh6a2V5LlMyKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHprZXkuUzMpO1xuXG4gICAgICAgIC8vIEFkZCBBIHRvIHRoZSB0cmFuc2NyaXB0XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5uUHVibGljOyBpKyspIHtcbiAgICAgICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKGJ1ZmZlcnMuQS5zbGljZShpICogbjhyLCBpICogbjhyICsgbjhyKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgQSwgQiwgQyB0byB0aGUgdHJhbnNjcmlwdFxuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIkFcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIkJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIkNcIikpO1xuXG4gICAgICAgIGNoYWxsZW5nZXMuYmV0YSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBjaGFsbGVuZ2VzLmJldGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5iZXRhLCAxNikpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGdhbW1hXG4gICAgICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5iZXRhKTtcbiAgICAgICAgY2hhbGxlbmdlcy5nYW1tYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBjaGFsbGVuZ2VzLmdhbW1hOiBcIiArIEZyLnRvU3RyaW5nKGNoYWxsZW5nZXMuZ2FtbWEsIDE2KSk7XG4gICAgXG4gICAgICAgIC8vIFNURVAgMi4yIC0gQ29tcHV0ZSBwZXJtdXRhdGlvbiBwb2x5bm9taWFsIHooWClcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBDb21wdXRpbmcgWiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlWigpO1xuXG4gICAgICAgIC8vIFNURVAgMi4zIC0gQ29tcHV0ZSBwZXJtdXRhdGlvbiBbel1fMVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBaIE1TTVwiKTtcbiAgICAgICAgbGV0IGNvbW1pdFogPSBhd2FpdCBwb2x5bm9taWFscy5aLm11bHRpRXhwb25lbnRpYXRpb24oUFRhdSwgXCJaXCIpO1xuXG4gICAgICAgIC8vIFNlY29uZCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW1pdXzEpXG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJaXCIsIGNvbW1pdFopO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVaKCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIFogZXZhbHVhdGlvbnNcIik7XG5cbiAgICAgICAgbGV0IG51bUFyciA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbik7XG4gICAgICAgIGxldCBkZW5BcnIgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgZmlyc3QgdmFsdWVzIHRvIDFcbiAgICAgICAgbnVtQXJyLnNldChGci5vbmUsIDApO1xuICAgICAgICBkZW5BcnIuc2V0KEZyLm9uZSwgMCk7XG5cbiAgICAgICAgLy8gU2V0IGluaXRpYWwgb21lZ2FcbiAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlfbjhyID0gaSAqIG44cjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgYSA9IGJ1ZmZlcnMuQS5zbGljZShpX244ciwgaV9uOHIgKyBuOHIpO1xuICAgICAgICAgICAgY29uc3QgYiA9IGJ1ZmZlcnMuQi5zbGljZShpX244ciwgaV9uOHIgKyBuOHIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IGJ1ZmZlcnMuQy5zbGljZShpX244ciwgaV9uOHIgKyBuOHIpO1xuXG4gICAgICAgICAgICAvLyBaKFgpIDo9IG51bUFyciAvIGRlbkFyclxuICAgICAgICAgICAgLy8gbnVtQXJyIDo9IChhICsgYmV0YcK3z4kgKyBnYW1tYSkoYiArIGJldGHCt8+JwrdrMSArIGdhbW1hKShjICsgYmV0YcK3z4nCt2syICsgZ2FtbWEpXG4gICAgICAgICAgICBjb25zdCBiZXRhdyA9IEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIHcpO1xuXG4gICAgICAgICAgICBsZXQgbjEgPSBGci5hZGQoYSwgYmV0YXcpO1xuICAgICAgICAgICAgbjEgPSBGci5hZGQobjEsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgbjIgPSBGci5hZGQoYiwgRnIubXVsKHprZXkuazEsIGJldGF3KSk7XG4gICAgICAgICAgICBuMiA9IEZyLmFkZChuMiwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBuMyA9IEZyLmFkZChjLCBGci5tdWwoemtleS5rMiwgYmV0YXcpKTtcbiAgICAgICAgICAgIG4zID0gRnIuYWRkKG4zLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IG51bSA9IEZyLm11bChuMSwgRnIubXVsKG4yLCBuMykpO1xuXG4gICAgICAgICAgICAvLyBkZW5BcnIgOj0gKGEgKyBiZXRhwrdzaWdtYTEgKyBnYW1tYSkoYiArIGJldGHCt3NpZ21hMiArIGdhbW1hKShjICsgYmV0YcK3c2lnbWEzICsgZ2FtbWEpXG4gICAgICAgICAgICBsZXQgZDEgPSBGci5hZGQoYSwgRnIubXVsKGV2YWx1YXRpb25zLlNpZ21hMS5nZXRFdmFsdWF0aW9uKGkgKiA0KSwgY2hhbGxlbmdlcy5iZXRhKSk7XG4gICAgICAgICAgICBkMSA9IEZyLmFkZChkMSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBkMiA9IEZyLmFkZChiLCBGci5tdWwoZXZhbHVhdGlvbnMuU2lnbWEyLmdldEV2YWx1YXRpb24oaSAqIDQpLCBjaGFsbGVuZ2VzLmJldGEpKTtcbiAgICAgICAgICAgIGQyID0gRnIuYWRkKGQyLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IGQzID0gRnIuYWRkKGMsIEZyLm11bChldmFsdWF0aW9ucy5TaWdtYTMuZ2V0RXZhbHVhdGlvbihpICogNCksIGNoYWxsZW5nZXMuYmV0YSkpO1xuICAgICAgICAgICAgZDMgPSBGci5hZGQoZDMsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZGVuID0gRnIubXVsKGQxLCBGci5tdWwoZDIsIGQzKSk7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IGN1cnJlbnQgbnVtIHZhbHVlIHdpdGggdGhlIHByZXZpb3VzIG9uZSBzYXZlZCBpbiBudW1BcnJcbiAgICAgICAgICAgIG51bSA9IEZyLm11bChudW1BcnIuc2xpY2UoaV9uOHIsIGlfbjhyICsgbjhyKSwgbnVtKTtcbiAgICAgICAgICAgIG51bUFyci5zZXQobnVtLCAoKGkgKyAxKSAlIHprZXkuZG9tYWluU2l6ZSkgKiBuOHIpO1xuXG4gICAgICAgICAgICAvLyBNdWx0aXBseSBjdXJyZW50IGRlbiB2YWx1ZSB3aXRoIHRoZSBwcmV2aW91cyBvbmUgc2F2ZWQgaW4gZGVuQXJyXG4gICAgICAgICAgICBkZW4gPSBGci5tdWwoZGVuQXJyLnNsaWNlKGlfbjhyLCBpX244ciArIG44ciksIGRlbik7XG4gICAgICAgICAgICBkZW5BcnIuc2V0KGRlbiwgKChpICsgMSkgJSB6a2V5LmRvbWFpblNpemUpICogbjhyKTtcblxuICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3prZXkucG93ZXJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGludmVyc2Ugb2YgZGVuQXJyIHRvIGNvbXB1dGUgaW4gdGhlIG5leHQgY29tbWFuZCB0aGVcbiAgICAgICAgLy8gZGl2aXNpb24gbnVtQXJyL2RlbkFyciBieSBtdWx0aXBseWluZyBudW0gwrcgMS9kZW5BcnJcbiAgICAgICAgZGVuQXJyID0gYXdhaXQgRnIuYmF0Y2hJbnZlcnNlKGRlbkFycik7XG5cbiAgICAgICAgLy8gVE9ETzogRG8gaXQgaW4gYXNzZW1ibHkgYW5kIGluIHBhcmFsbGVsXG4gICAgICAgIC8vIE11bHRpcGx5IG51bUFyciDCtyBkZW5BcnIgd2hlcmUgZGVuQXJyIHdhcyBpbnZlcnRlZCBpbiB0aGUgcHJldmlvdXMgY29tbWFuZFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBuOHI7XG5cbiAgICAgICAgICAgIGNvbnN0IHogPSBGci5tdWwobnVtQXJyLnNsaWNlKGlfc0ZyLCBpX3NGciArIG44ciksIGRlbkFyci5zbGljZShpX3NGciwgaV9zRnIgKyBuOHIpKTtcbiAgICAgICAgICAgIG51bUFyci5zZXQoeiwgaV9zRnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRnJvbSBub3cgb24gdGhlIHZhbHVlcyBzYXZlZCBvbiBudW1BcnIgd2lsbCBiZSBaKFgpIGJ1ZmZlclxuICAgICAgICBidWZmZXJzLlogPSBudW1BcnI7XG5cbiAgICAgICAgaWYgKCFGci5lcShudW1BcnIuc2xpY2UoMCwgbjhyKSwgRnIub25lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29weSBjb25zdHJhaW50cyBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgcG9seW5vbWlhbCBjb2VmZmljaWVudHMgeihYKSBmcm9tIGJ1ZmZlcnMuWlxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIFogaWZmdFwiKTtcbiAgICAgICAgcG9seW5vbWlhbHMuWiA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuWiwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBleHRlbmRlZCBldmFsdWF0aW9ucyBvZiB6KFgpIHBvbHlub21pYWxcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiwrfCt8K3IENvbXB1dGluZyBaIGZmdFwiKTtcbiAgICAgICAgZXZhbHVhdGlvbnMuWiA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLlosIDQsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIEJsaW5kIHooWCkgcG9seW5vbWlhbCBjb2VmZmljaWVudHMgd2l0aCBibGluZGluZyBzY2FsYXJzIGJcbiAgICAgICAgcG9seW5vbWlhbHMuWi5ibGluZENvZWZmaWNpZW50cyhbY2hhbGxlbmdlcy5iWzldLCBjaGFsbGVuZ2VzLmJbOF0sIGNoYWxsZW5nZXMuYls3XV0pO1xuXG4gICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICBpZiAocG9seW5vbWlhbHMuWi5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJaIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBidWZmZXJzLlo7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQzKCkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBjaGFsbGVuZ2UgYWxwaGFcIik7XG5cbiAgICAgICAgLy8gU1RFUCAzLjEgLSBDb21wdXRlIGV2YWx1YXRpb24gY2hhbGxlbmdlIGFscGhhIOKIiCBGXG4gICAgICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5iZXRhKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5nYW1tYSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5nZXRQb2x5bm9taWFsKFwiWlwiKSk7XG5cbiAgICAgICAgY2hhbGxlbmdlcy5hbHBoYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGNoYWxsZW5nZXMuYWxwaGEyID0gRnIuc3F1YXJlKGNoYWxsZW5nZXMuYWxwaGEpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgY2hhbGxlbmdlcy5hbHBoYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmFscGhhLCAxNikpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgcXVvdGllbnQgcG9seW5vbWlhbCBUKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIj4gQ29tcHV0aW5nIFQgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVQoKTtcblxuICAgICAgICAvLyBDb21wdXRlIFtUMV1fMSwgW1QyXV8xLCBbVDNdXzFcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBDb21wdXRpbmcgVCBNU01cIik7XG4gICAgICAgIGxldCBjb21taXRUMSA9IGF3YWl0IHBvbHlub21pYWxzLlQxLm11bHRpRXhwb25lbnRpYXRpb24oUFRhdSwgXCJUMVwiKTtcbiAgICAgICAgbGV0IGNvbW1pdFQyID0gYXdhaXQgcG9seW5vbWlhbHMuVDIubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIlQyXCIpO1xuICAgICAgICBsZXQgY29tbWl0VDMgPSBhd2FpdCBwb2x5bm9taWFscy5UMy5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiVDNcIik7XG5cbiAgICAgICAgLy8gVGhpcmQgb3V0cHV0IG9mIHRoZSBwcm92ZXIgaXMgKFtUMV1fMSwgW1QyXV8xLCBbVDNdXzEpXG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJUMVwiLCBjb21taXRUMSk7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJUMlwiLCBjb21taXRUMik7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJUM1wiLCBjb21taXRUMyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlVCgpIHtcbiAgICAgICAgaWYgKGxvZ2dlcilcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgwrfCt8K3IFJlYWRpbmcgc2VjdGlvbnMgJHtaS0VZX1BMX1FMX1NFQ1RJT059LCAke1pLRVlfUExfUVJfU0VDVElPTn1gICtcbiAgICAgICAgICAgICAgICBgLCAke1pLRVlfUExfUU1fU0VDVElPTn0sICR7WktFWV9QTF9RT19TRUNUSU9OfSwgJHtaS0VZX1BMX1FDX1NFQ1RJT059LiBRIHNlbGVjdG9yc2ApO1xuICAgICAgICAvLyBSZXNlcnZlIG1lbW9yeSBmb3IgUSdzIGV2YWx1YXRpb25zXG4gICAgICAgIGV2YWx1YXRpb25zLlFMID0gbmV3IEV2YWx1YXRpb25zKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgZXZhbHVhdGlvbnMuUVIgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBldmFsdWF0aW9ucy5RTSA9IG5ldyBFdmFsdWF0aW9ucyhuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KSwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgIGV2YWx1YXRpb25zLlFPID0gbmV3IEV2YWx1YXRpb25zKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgZXZhbHVhdGlvbnMuUUMgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIFJlYWQgUSdzIGV2YWx1YXRpb25zIGZyb20gemtleSBmaWxlXG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuUUwuZXZhbCwgMCwgc0RvbWFpbiAqIDQsIHprZXlTZWN0aW9uc1taS0VZX1BMX1FMX1NFQ1RJT05dWzBdLnAgKyBzRG9tYWluKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RUi5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfUExfUVJfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKGV2YWx1YXRpb25zLlFNLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9QTF9RTV9TRUNUSU9OXVswXS5wICsgc0RvbWFpbik7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuUU8uZXZhbCwgMCwgc0RvbWFpbiAqIDQsIHprZXlTZWN0aW9uc1taS0VZX1BMX1FPX1NFQ1RJT05dWzBdLnAgKyBzRG9tYWluKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RQy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfUExfUUNfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuXG4gICAgICAgIC8vIFJlYWQgTGFncmFuZ2UgcG9seW5vbWlhbHMgJiBldmFsdWF0aW9ucyBmcm9tIHprZXkgZmlsZVxuICAgICAgICBldmFsdWF0aW9ucy5MYWdyYW5nZSA9IG5ldyBFdmFsdWF0aW9ucyhuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0ICogemtleS5uUHVibGljKSwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5MYWdyYW5nZS5ldmFsLCBpICogc0RvbWFpbiAqIDQsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9QTF9MQUdSQU5HRV9TRUNUSU9OXVswXS5wICsgaSAqIDUgKiBzRG9tYWluICsgc0RvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXJzLlQgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KTtcbiAgICAgICAgYnVmZmVycy5UeiA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgVCBldmFsdWF0aW9uc1wiKTtcblxuICAgICAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5LmRvbWFpblNpemUgKiA0OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIgJiYgKDAgIT09IGkpICYmIChpICUgMTAwMDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYCAgICAgIFQgZXZhbHVhdGlvbiAke2l9LyR7emtleS5kb21haW5TaXplICogNH1gKTtcblxuICAgICAgICAgICAgY29uc3QgYSA9IGV2YWx1YXRpb25zLkEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBldmFsdWF0aW9ucy5CLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBjID0gZXZhbHVhdGlvbnMuQy5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgeiA9IGV2YWx1YXRpb25zLlouZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgIGNvbnN0IHp3ID0gZXZhbHVhdGlvbnMuWi5nZXRFdmFsdWF0aW9uKCh6a2V5LmRvbWFpblNpemUgKiA0ICsgNCArIGkpICUgKHprZXkuZG9tYWluU2l6ZSAqIDQpKTtcblxuICAgICAgICAgICAgY29uc3QgcW0gPSBldmFsdWF0aW9ucy5RTS5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgcWwgPSBldmFsdWF0aW9ucy5RTC5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgcXIgPSBldmFsdWF0aW9ucy5RUi5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgcW8gPSBldmFsdWF0aW9ucy5RTy5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgcWMgPSBldmFsdWF0aW9ucy5RQy5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3QgczEgPSBldmFsdWF0aW9ucy5TaWdtYTEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgIGNvbnN0IHMyID0gZXZhbHVhdGlvbnMuU2lnbWEyLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBzMyA9IGV2YWx1YXRpb25zLlNpZ21hMy5nZXRFdmFsdWF0aW9uKGkpO1xuXG4gICAgICAgICAgICBjb25zdCBhcCA9IEZyLmFkZChjaGFsbGVuZ2VzLmJbMl0sIEZyLm11bChjaGFsbGVuZ2VzLmJbMV0sIHcpKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gRnIuYWRkKGNoYWxsZW5nZXMuYls0XSwgRnIubXVsKGNoYWxsZW5nZXMuYlszXSwgdykpO1xuICAgICAgICAgICAgY29uc3QgY3AgPSBGci5hZGQoY2hhbGxlbmdlcy5iWzZdLCBGci5tdWwoY2hhbGxlbmdlcy5iWzVdLCB3KSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHcyID0gRnIuc3F1YXJlKHcpO1xuICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaGFsbGVuZ2VzLmJbN10sIHcyKSwgRnIubXVsKGNoYWxsZW5nZXMuYls4XSwgdykpLCBjaGFsbGVuZ2VzLmJbOV0pO1xuICAgICAgICAgICAgY29uc3Qgd1cgPSBGci5tdWwodywgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgICAgICBjb25zdCB3VzIgPSBGci5zcXVhcmUod1cpO1xuICAgICAgICAgICAgY29uc3QgeldwID0gRnIuYWRkKEZyLmFkZChGci5tdWwoY2hhbGxlbmdlcy5iWzddLCB3VzIpLCBGci5tdWwoY2hhbGxlbmdlcy5iWzhdLCB3VykpLCBjaGFsbGVuZ2VzLmJbOV0pO1xuXG4gICAgICAgICAgICBsZXQgcGkgPSBGci56ZXJvO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB6a2V5Lm5QdWJsaWM7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IChqICogNCAqIHprZXkuZG9tYWluU2l6ZSkgKyBpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbFBvbCA9IGV2YWx1YXRpb25zLkxhZ3JhbmdlLmdldEV2YWx1YXRpb24ob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhVmFsID0gYnVmZmVycy5BLnNsaWNlKGogKiBuOHIsIChqICsgMSkgKiBuOHIpO1xuXG4gICAgICAgICAgICAgICAgcGkgPSBGci5zdWIocGksIEZyLm11bChsUG9sLCBhVmFsKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGUxIDo9IGEoWCliKFgpcU0oWCkgKyBhKFgpcUwoWCkgKyBiKFgpcVIoWCkgKyBjKFgpcU8oWCkgKyBQSShYKSArIHFDKFgpXG4gICAgICAgICAgICBsZXQgW2UxLCBlMXpdID0gTXVsWi5tdWwyKGEsIGIsIGFwLCBicCwgaSAlIDQsIEZyKTtcbiAgICAgICAgICAgIGUxID0gRnIubXVsKGUxLCBxbSk7XG4gICAgICAgICAgICBlMXogPSBGci5tdWwoZTF6LCBxbSk7XG5cbiAgICAgICAgICAgIGUxID0gRnIuYWRkKGUxLCBGci5tdWwoYSwgcWwpKTtcbiAgICAgICAgICAgIGUxeiA9IEZyLmFkZChlMXosIEZyLm11bChhcCwgcWwpKTtcblxuICAgICAgICAgICAgZTEgPSBGci5hZGQoZTEsIEZyLm11bChiLCBxcikpO1xuICAgICAgICAgICAgZTF6ID0gRnIuYWRkKGUxeiwgRnIubXVsKGJwLCBxcikpO1xuXG4gICAgICAgICAgICBlMSA9IEZyLmFkZChlMSwgRnIubXVsKGMsIHFvKSk7XG4gICAgICAgICAgICBlMXogPSBGci5hZGQoZTF6LCBGci5tdWwoY3AsIHFvKSk7XG5cbiAgICAgICAgICAgIGUxID0gRnIuYWRkKGUxLCBwaSk7XG4gICAgICAgICAgICBlMSA9IEZyLmFkZChlMSwgcWMpO1xuXG4gICAgICAgICAgICAvLyBlMiA6PSDOsVsoYShYKSArIM6yWCArIM6zKShiKFgpICsgzrJrMVggKyDOsykoYyhYKSArIM6yazJYICsgzrMpeihYKV1cbiAgICAgICAgICAgIGNvbnN0IGJldGF3ID0gRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgdyk7XG4gICAgICAgICAgICBsZXQgZTJhID0gYTtcbiAgICAgICAgICAgIGUyYSA9IEZyLmFkZChlMmEsIGJldGF3KTtcbiAgICAgICAgICAgIGUyYSA9IEZyLmFkZChlMmEsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZTJiID0gYjtcbiAgICAgICAgICAgIGUyYiA9IEZyLmFkZChlMmIsIEZyLm11bChiZXRhdywgemtleS5rMSkpO1xuICAgICAgICAgICAgZTJiID0gRnIuYWRkKGUyYiwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBlMmMgPSBjO1xuICAgICAgICAgICAgZTJjID0gRnIuYWRkKGUyYywgRnIubXVsKGJldGF3LCB6a2V5LmsyKSk7XG4gICAgICAgICAgICBlMmMgPSBGci5hZGQoZTJjLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IGUyZCA9IHo7XG5cbiAgICAgICAgICAgIGxldCBbZTIsIGUyel0gPSBNdWxaLm11bDQoZTJhLCBlMmIsIGUyYywgZTJkLCBhcCwgYnAsIGNwLCB6cCwgaSAlIDQsIEZyKTtcbiAgICAgICAgICAgIGUyID0gRnIubXVsKGUyLCBjaGFsbGVuZ2VzLmFscGhhKTtcbiAgICAgICAgICAgIGUyeiA9IEZyLm11bChlMnosIGNoYWxsZW5nZXMuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyBlMyA6PSDOsVsoYShYKSArIM6yU8+DMShYKSArIM6zKShiKFgpICsgzrJTz4MyKFgpICsgzrMpKGMoWCkgKyDOslPPgzMoWCkgKyDOsyl6KFjPiSldXG4gICAgICAgICAgICBsZXQgZTNhID0gYTtcbiAgICAgICAgICAgIGUzYSA9IEZyLmFkZChlM2EsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIHMxKSk7XG4gICAgICAgICAgICBlM2EgPSBGci5hZGQoZTNhLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgbGV0IGUzYiA9IGI7XG4gICAgICAgICAgICBlM2IgPSBGci5hZGQoZTNiLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBzMikpO1xuICAgICAgICAgICAgZTNiID0gRnIuYWRkKGUzYiwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgIGxldCBlM2MgPSBjO1xuICAgICAgICAgICAgZTNjID0gRnIuYWRkKGUzYywgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgczMpKTtcbiAgICAgICAgICAgIGUzYyA9IEZyLmFkZChlM2MsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICBsZXQgZTNkID0genc7XG4gICAgICAgICAgICBsZXQgW2UzLCBlM3pdID0gTXVsWi5tdWw0KGUzYSwgZTNiLCBlM2MsIGUzZCwgYXAsIGJwLCBjcCwgeldwLCBpICUgNCwgRnIpO1xuXG4gICAgICAgICAgICBlMyA9IEZyLm11bChlMywgY2hhbGxlbmdlcy5hbHBoYSk7XG4gICAgICAgICAgICBlM3ogPSBGci5tdWwoZTN6LCBjaGFsbGVuZ2VzLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gZTQgOj0gzrFeMih6KFgp4oiSMSlMMShYKVxuICAgICAgICAgICAgbGV0IGU0ID0gRnIuc3ViKHosIEZyLm9uZSk7XG4gICAgICAgICAgICBlNCA9IEZyLm11bChlNCwgZXZhbHVhdGlvbnMuTGFncmFuZ2UuZ2V0RXZhbHVhdGlvbihpKSk7XG4gICAgICAgICAgICBlNCA9IEZyLm11bChlNCwgY2hhbGxlbmdlcy5hbHBoYTIpO1xuXG4gICAgICAgICAgICBsZXQgZTR6ID0gRnIubXVsKHpwLCBldmFsdWF0aW9ucy5MYWdyYW5nZS5nZXRFdmFsdWF0aW9uKGkpKTtcbiAgICAgICAgICAgIGU0eiA9IEZyLm11bChlNHosIGNoYWxsZW5nZXMuYWxwaGEyKTtcblxuXG4gICAgICAgICAgICBsZXQgdCA9IEZyLmFkZChGci5zdWIoRnIuYWRkKGUxLCBlMiksIGUzKSwgZTQpO1xuICAgICAgICAgICAgbGV0IHR6ID0gRnIuYWRkKEZyLnN1YihGci5hZGQoZTF6LCBlMnopLCBlM3opLCBlNHopO1xuXG4gICAgICAgICAgICBidWZmZXJzLlQuc2V0KHQsIGkgKiBuOHIpO1xuICAgICAgICAgICAgYnVmZmVycy5Uei5zZXQodHosIGkgKiBuOHIpO1xuXG4gICAgICAgICAgICB3ID0gRnIubXVsKHcsIEZyLndbemtleS5wb3dlciArIDJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcG9seW5vbWlhbCBUMChYKSBmcm9tIGJ1ZmZlcnMuVDBcbiAgICAgICAgaWYgKGxvZ2dlcilcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgVCBpZmZ0XCIpO1xuICAgICAgICBwb2x5bm9taWFscy5UID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5ULCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAvLyBEaXZpZGUgdGhlIHBvbHlub21pYWwgVDAgYnkgWl9IKFgpXG4gICAgICAgIGlmIChsb2dnZXIpXG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIFQgLyBaSFwiKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVC5kaXZaaCh6a2V5LmRvbWFpblNpemUsIDQpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcG9seW5vbWlhbCBUeihYKSBmcm9tIGJ1ZmZlcnMuVHpcbiAgICAgICAgaWYgKGxvZ2dlcilcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIsK3wrfCtyBDb21wdXRpbmcgVHogaWZmdFwiKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVHogPSBhd2FpdCBQb2x5bm9taWFsLmZyb21FdmFsdWF0aW9ucyhidWZmZXJzLlR6LCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAvLyBBZGQgdGhlIHBvbHlub21pYWwgVDF6IHRvIFQxIHRvIGdldCB0aGUgZmluYWwgcG9seW5vbWlhbCBUMVxuICAgICAgICBwb2x5bm9taWFscy5ULmFkZChwb2x5bm9taWFscy5Ueik7XG5cbiAgICAgICAgLy8gQ2hlY2sgZGVncmVlXG4gICAgICAgIGlmIChwb2x5bm9taWFscy5ULmRlZ3JlZSgpID49IHprZXkuZG9tYWluU2l6ZSAqIDMgKyA2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHQoeCkgaGFzIGRlZ3JlZSAzbiArIDUsIHdlIGFyZSBnb2luZyB0byBzcGxpdCB0KHgpIGludG8gdGhyZWUgc21hbGxlciBwb2x5bm9taWFsczpcbiAgICAgICAgLy8gVDEnIGFuZCBUMicgIHdpdGggYSBkZWdyZWUgPCBuIGFuZCBUMycgd2l0aCBhIGRlZ3JlZSBuKzVcbiAgICAgICAgLy8gc3VjaCB0aGF0IHQoeCkgPSBUMScoWCkgKyBYXm4gVDInKFgpICsgWF57Mm59IFQzJyhYKVxuICAgICAgICAvLyBUbyByYW5kb21pemUgdGhlIHBhcnRzIHdlIHVzZSBibGluZGluZyBzY2FsYXJzIGJfMTAgYW5kIGJfMTEgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IGNoYW5nZSB0KFgpOlxuICAgICAgICAvLyBUMShYKSA9IFQxJyhYKSArIGJfMTAgWF5uXG4gICAgICAgIC8vIFQyKFgpID0gVDInKFgpIC0gYl8xMCArIGJfMTEgWF5uXG4gICAgICAgIC8vIFQzKFgpID0gVDMnKFgpIC0gYl8xMVxuICAgICAgICAvLyBzdWNoIHRoYXRcbiAgICAgICAgLy8gdChYKSA9IFQxKFgpICsgWF5uIFQyKFgpICsgWF4ybiBUMyhYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgQ29tcHV0aW5nIFQxLCBUMiwgVDMgcG9seW5vbWlhbHNcIik7XG4gICAgICAgIHBvbHlub21pYWxzLlQxID0gbmV3IFBvbHlub21pYWwobmV3IEJpZ0J1ZmZlcigoemtleS5kb21haW5TaXplICsgMSkgKiBuOHIpLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVDIgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKCh6a2V5LmRvbWFpblNpemUgKyAxKSAqIG44ciksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5UMyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoKHprZXkuZG9tYWluU2l6ZSArIDYpICogbjhyKSwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgcG9seW5vbWlhbHMuVDEuY29lZi5zZXQocG9seW5vbWlhbHMuVC5jb2VmLnNsaWNlKDAsIHNEb21haW4pLCAwKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVDIuY29lZi5zZXQocG9seW5vbWlhbHMuVC5jb2VmLnNsaWNlKHNEb21haW4sIHNEb21haW4gKiAyKSwgMCk7XG4gICAgICAgIHBvbHlub21pYWxzLlQzLmNvZWYuc2V0KHBvbHlub21pYWxzLlQuY29lZi5zbGljZShzRG9tYWluICogMiwgc0RvbWFpbiAqIDMgKyA2ICogbjhyKSwgMCk7XG5cbiAgICAgICAgLy8gQWRkIGJsaW5kaW5nIHNjYWxhciBiXzEwIGFzIGEgbmV3IGNvZWZmaWNpZW50IG5cbiAgICAgICAgcG9seW5vbWlhbHMuVDEuc2V0Q29lZih6a2V5LmRvbWFpblNpemUsIGNoYWxsZW5nZXMuYlsxMF0pO1xuXG4gICAgICAgIC8vIGNvbXB1dGUgdF9taWQoWClcbiAgICAgICAgLy8gU3VidHJhY3QgYmxpbmRpbmcgc2NhbGFyIGJfMTAgdG8gdGhlIGxvd2VzdCBjb2VmZmljaWVudCBvZiB0X21pZFxuICAgICAgICBjb25zdCBsb3dlc3RNaWQgPSBGci5zdWIocG9seW5vbWlhbHMuVDIuZ2V0Q29lZigwKSwgY2hhbGxlbmdlcy5iWzEwXSk7XG4gICAgICAgIHBvbHlub21pYWxzLlQyLnNldENvZWYoMCwgbG93ZXN0TWlkKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVDIuc2V0Q29lZih6a2V5LmRvbWFpblNpemUsIGNoYWxsZW5nZXMuYlsxMV0pO1xuXG4gICAgICAgIC8vIGNvbXB1dGUgdF9oaWdoKFgpXG4gICAgICAgIC8vU3VidHJhY3QgYmxpbmRpbmcgc2NhbGFyIGJfMTEgdG8gdGhlIGxvd2VzdCBjb2VmZmljaWVudCBvZiB0X2hpZ2hcbiAgICAgICAgY29uc3QgbG93ZXN0SGlnaCA9IEZyLnN1Yihwb2x5bm9taWFscy5UMy5nZXRDb2VmKDApLCBjaGFsbGVuZ2VzLmJbMTFdKTtcbiAgICAgICAgcG9seW5vbWlhbHMuVDMuc2V0Q29lZigwLCBsb3dlc3RIaWdoKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDQoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIj4gQ29tcHV0aW5nIGNoYWxsZW5nZSB4aVwiKTtcblxuICAgICAgICAvLyBTVEVQIDQuMSAtIENvbXB1dGUgZXZhbHVhdGlvbiBjaGFsbGVuZ2UgeGkg4oiIIEZcbiAgICAgICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmFscGhhKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLmdldFBvbHlub21pYWwoXCJUMVwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5nZXRQb2x5bm9taWFsKFwiVDJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIlQzXCIpKTtcblxuICAgICAgICBjaGFsbGVuZ2VzLnhpID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgY2hhbGxlbmdlcy54aXcgPSBGci5tdWwoY2hhbGxlbmdlcy54aSwgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCLCt8K3wrcgY2hhbGxlbmdlcy54aTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnhpLCAxNikpOyAgXG5cbiAgICAgICAgLy8gRm91cnRoIG91dHB1dCBvZiB0aGUgcHJvdmVyIGlzICggYSh4aSksIGIoeGkpLCBjKHhpKSwgczEoeGkpLCBzMih4aSksIHooeGl3KSApXG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX2FcIiwgcG9seW5vbWlhbHMuQS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX2JcIiwgcG9seW5vbWlhbHMuQi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX2NcIiwgcG9seW5vbWlhbHMuQy5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX3MxXCIsIHBvbHlub21pYWxzLlNpZ21hMS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX3MyXCIsIHBvbHlub21pYWxzLlNpZ21hMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJldmFsX3p3XCIsIHBvbHlub21pYWxzLlouZXZhbHVhdGUoY2hhbGxlbmdlcy54aXcpKTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDUoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5kZWJ1ZyhcIj4gQ29tcHV0aW5nIGNoYWxsZW5nZSB2XCIpO1xuICAgICAgICBcbiAgICAgICAgLy8gU1RFUCA1LjEgLSBDb21wdXRlIGV2YWx1YXRpb24gY2hhbGxlbmdlIHYg4oiIIEZcbiAgICAgICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLnhpKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZ2V0RXZhbHVhdGlvbihcImV2YWxfYVwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJldmFsX2JcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiZXZhbF9jXCIpKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZ2V0RXZhbHVhdGlvbihcImV2YWxfczFcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiZXZhbF9zMlwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJldmFsX3p3XCIpKTtcblxuICAgICAgICBjaGFsbGVuZ2VzLnYgPSBbXTtcbiAgICAgICAgY2hhbGxlbmdlcy52WzFdID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiwrfCt8K3IGNoYWxsZW5nZXMudjogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnZbMV0sIDE2KSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIGNoYWxsZW5nZXMudltpXSA9IEZyLm11bChjaGFsbGVuZ2VzLnZbaSAtIDFdLCBjaGFsbGVuZ2VzLnZbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1RFUCA1LjIgQ29tcHV0ZSBsaW5lYXJpc2F0aW9uIHBvbHlub21pYWwgcihYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBsaW5lYXJpc2F0aW9uIHBvbHlub21pYWwgUihYKVwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVIoKTtcblxuICAgICAgICAvL1NURVAgNS4zIENvbXB1dGUgb3BlbmluZyBwcm9vZiBwb2x5bm9taWFsIFd4aShYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBvcGVuaW5nIHByb29mIHBvbHlub21pYWwgV3hpKFgpIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVXeGkoKTtcblxuICAgICAgICAvL1NURVAgNS40IENvbXB1dGUgb3BlbmluZyBwcm9vZiBwb2x5bm9taWFsIFd4aXcoWClcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwiPiBDb21wdXRpbmcgb3BlbmluZyBwcm9vZiBwb2x5bm9taWFsIFd4aXcoWCkgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgY29tcHV0ZVd4aXcoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCI+IENvbXB1dGluZyBXeGksIFd4aXcgTVNNXCIpO1xuICAgICAgICBsZXQgY29tbWl0V3hpID0gYXdhaXQgcG9seW5vbWlhbHMuV3hpLm11bHRpRXhwb25lbnRpYXRpb24oUFRhdSwgXCJXeGlcIik7XG4gICAgICAgIGxldCBjb21taXRXeGl3ID0gYXdhaXQgcG9seW5vbWlhbHMuV3hpdy5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiV3hpd1wiKTtcblxuICAgICAgICAvLyBGaWZ0aCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW1d4aV1fMSwgW1d4aXddXzEpXG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJXeGlcIiwgY29tbWl0V3hpKTtcbiAgICAgICAgcHJvb2YuYWRkUG9seW5vbWlhbChcIld4aXdcIiwgY29tbWl0V3hpdyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVIoKSB7XG4gICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgXG4gICAgICAgIC8vIFJlc2VydmUgbWVtb3J5IGZvciBRJ3MgcG9seW5vbWlhbHNcbiAgICAgICAgcG9seW5vbWlhbHMuUUwgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUVIgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUU0gPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUU8gPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUUMgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAvLyBSZWFkIFEncyBldmFsdWF0aW9ucyBmcm9tIHprZXkgZmlsZVxuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlFMLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX1BMX1FMX1NFQ1RJT05dWzBdLnApO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlFSLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX1BMX1FSX1NFQ1RJT05dWzBdLnApO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlFNLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX1BMX1FNX1NFQ1RJT05dWzBdLnApO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlFPLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX1BMX1FPX1NFQ1RJT05dWzBdLnApO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlFDLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX1BMX1FDX1NFQ1RJT05dWzBdLnApOyAgIFxuICAgICAgICBcbiAgICAgICAgY2hhbGxlbmdlcy54aW4gPSBjaGFsbGVuZ2VzLnhpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkucG93ZXI7IGkrKykge1xuICAgICAgICAgICAgY2hhbGxlbmdlcy54aW4gPSBGci5zcXVhcmUoY2hhbGxlbmdlcy54aW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhbGxlbmdlcy56aCA9IEZyLnN1YihjaGFsbGVuZ2VzLnhpbiwgRnIub25lKTtcblxuICAgICAgICBjb25zdCBMID0gW107XG5cbiAgICAgICAgY29uc3QgbiA9IEZyLmUoemtleS5kb21haW5TaXplKTtcbiAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE1hdGgubWF4KDEsIHprZXkublB1YmxpYyk7IGkrKykge1xuICAgICAgICAgICAgTFtpXSA9IEZyLmRpdihGci5tdWwodywgY2hhbGxlbmdlcy56aCksIEZyLm11bChuLCBGci5zdWIoY2hhbGxlbmdlcy54aSwgdykpKTtcbiAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmFsX2wxID0gRnIuZGl2KFxuICAgICAgICAgICAgRnIuc3ViKGNoYWxsZW5nZXMueGluLCBGci5vbmUpLFxuICAgICAgICAgICAgRnIubXVsKG4sIEZyLnN1YihjaGFsbGVuZ2VzLnhpLCBGci5vbmUpKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkxhZ3JhbmdlIEV2YWx1YXRpb25zOiBcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTE7IGk8TC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTCR7aX0oeGkpPWAgKyBGci50b1N0cmluZyhMW2ldLCAxNikpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldmFsX3BpID0gRnIuemVybztcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHB1YmxpY1NpZ25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBGci5lKHB1YmxpY1NpZ25hbHNbaV0pO1xuICAgICAgICAgICAgZXZhbF9waSA9IEZyLnN1YihldmFsX3BpLCBGci5tdWwodywgTFtpKzFdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZGVidWcoXCJQSTogXCIgKyBGci50b1N0cmluZyhldmFsX3BpLCAxNikpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgY29uc3RhbnQgcGFydHMgb2YgUihYKVxuICAgICAgICBjb25zdCBjb2VmX2FiID0gRnIubXVsKHByb29mLmV2YWx1YXRpb25zLmV2YWxfYSwgcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9iKTtcblxuICAgICAgICBsZXQgZTJhID0gcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9hO1xuICAgICAgICBjb25zdCBiZXRheGkgPSBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICAgICAgZTJhID0gRnIuYWRkKGUyYSwgYmV0YXhpKTtcbiAgICAgICAgZTJhID0gRnIuYWRkKGUyYSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgbGV0IGUyYiA9IHByb29mLmV2YWx1YXRpb25zLmV2YWxfYjtcbiAgICAgICAgZTJiID0gRnIuYWRkKGUyYiwgRnIubXVsKGJldGF4aSwgemtleS5rMSkpO1xuICAgICAgICBlMmIgPSBGci5hZGQoZTJiLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICBsZXQgZTJjID0gcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9jO1xuICAgICAgICBlMmMgPSBGci5hZGQoZTJjLCBGci5tdWwoYmV0YXhpLCB6a2V5LmsyKSk7XG4gICAgICAgIGUyYyA9IEZyLmFkZChlMmMsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgIGNvbnN0IGUyID0gRnIubXVsKEZyLm11bChGci5tdWwoZTJhLCBlMmIpLCBlMmMpLCBjaGFsbGVuZ2VzLmFscGhhKTtcblxuICAgICAgICBsZXQgZTNhID0gcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9hO1xuICAgICAgICBlM2EgPSBGci5hZGQoZTNhLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX3MxKSk7XG4gICAgICAgIGUzYSA9IEZyLmFkZChlM2EsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgIGxldCBlM2IgPSBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2I7XG4gICAgICAgIGUzYiA9IEZyLmFkZChlM2IsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIHByb29mLmV2YWx1YXRpb25zLmV2YWxfczIpKTtcbiAgICAgICAgZTNiID0gRnIuYWRkKGUzYiwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgbGV0IGUzID0gRnIubXVsKGUzYSwgZTNiKTtcbiAgICAgICAgZTMgPSBGci5tdWwoZTMsIHByb29mLmV2YWx1YXRpb25zLmV2YWxfencpO1xuICAgICAgICBlMyA9IEZyLm11bChlMywgY2hhbGxlbmdlcy5hbHBoYSk7XG5cbiAgICAgICAgY29uc3QgZTQgPSBGci5tdWwoZXZhbF9sMSwgY2hhbGxlbmdlcy5hbHBoYTIpO1xuXG4gICAgICAgIHBvbHlub21pYWxzLlIgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKCh6a2V5LmRvbWFpblNpemUgKyA2KSAqIG44ciksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIHBvbHlub21pYWxzLlIuYWRkKHBvbHlub21pYWxzLlFNLCBjb2VmX2FiKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUi5hZGQocG9seW5vbWlhbHMuUUwsIHByb29mLmV2YWx1YXRpb25zLmV2YWxfYSk7XG4gICAgICAgIHBvbHlub21pYWxzLlIuYWRkKHBvbHlub21pYWxzLlFSLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2IpO1xuICAgICAgICBwb2x5bm9taWFscy5SLmFkZChwb2x5bm9taWFscy5RTywgcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9jKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUi5hZGQocG9seW5vbWlhbHMuUUMpO1xuICAgICAgICBwb2x5bm9taWFscy5SLmFkZChwb2x5bm9taWFscy5aLCBlMik7XG4gICAgICAgIHBvbHlub21pYWxzLlIuc3ViKHBvbHlub21pYWxzLlNpZ21hMywgRnIubXVsKGUzLCBjaGFsbGVuZ2VzLmJldGEpKTtcbiAgICAgICAgcG9seW5vbWlhbHMuUi5hZGQocG9seW5vbWlhbHMuWiwgZTQpO1xuXG4gICAgICAgIGxldCB0bXAgPSBQb2x5bm9taWFsLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLlQzLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgdG1wLm11bFNjYWxhcihGci5zcXVhcmUoY2hhbGxlbmdlcy54aW4pKTtcbiAgICAgICAgdG1wLmFkZChwb2x5bm9taWFscy5UMiwgY2hhbGxlbmdlcy54aW4pO1xuICAgICAgICB0bXAuYWRkKHBvbHlub21pYWxzLlQxKTtcbiAgICAgICAgdG1wLm11bFNjYWxhcihjaGFsbGVuZ2VzLnpoKTtcblxuICAgICAgICBwb2x5bm9taWFscy5SLnN1Yih0bXApO1xuXG4gICAgICAgIGxldCByMCA9IEZyLnN1YihldmFsX3BpLCBGci5tdWwoZTMsIEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2MsIGNoYWxsZW5nZXMuZ2FtbWEpKSk7XG4gICAgICAgIHIwID0gRnIuc3ViKHIwLCBlNCk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwicjA6IFwiICsgRnIudG9TdHJpbmcocjAsIDE2KSk7XG5cbiAgICAgICAgcG9seW5vbWlhbHMuUi5hZGRTY2FsYXIocjApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXeGkoKSB7XG4gICAgICAgIHBvbHlub21pYWxzLld4aSA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiArIDYgKiBuOHIpLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICBwb2x5bm9taWFscy5XeGkuYWRkKHBvbHlub21pYWxzLlIpO1xuICAgICAgICBwb2x5bm9taWFscy5XeGkuYWRkKHBvbHlub21pYWxzLkEsIGNoYWxsZW5nZXMudlsxXSk7XG4gICAgICAgIHBvbHlub21pYWxzLld4aS5hZGQocG9seW5vbWlhbHMuQiwgY2hhbGxlbmdlcy52WzJdKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLmFkZChwb2x5bm9taWFscy5DLCBjaGFsbGVuZ2VzLnZbM10pO1xuICAgICAgICBwb2x5bm9taWFscy5XeGkuYWRkKHBvbHlub21pYWxzLlNpZ21hMSwgY2hhbGxlbmdlcy52WzRdKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLmFkZChwb2x5bm9taWFscy5TaWdtYTIsIGNoYWxsZW5nZXMudls1XSk7XG5cbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLnN1YlNjYWxhcihGci5tdWwoY2hhbGxlbmdlcy52WzFdLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2EpKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLnN1YlNjYWxhcihGci5tdWwoY2hhbGxlbmdlcy52WzJdLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2IpKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLnN1YlNjYWxhcihGci5tdWwoY2hhbGxlbmdlcy52WzNdLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX2MpKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpLnN1YlNjYWxhcihGci5tdWwoY2hhbGxlbmdlcy52WzRdLCBwcm9vZi5ldmFsdWF0aW9ucy5ldmFsX3MxKSk7XG4gICAgICAgIHBvbHlub21pYWxzLld4aS5zdWJTY2FsYXIoRnIubXVsKGNoYWxsZW5nZXMudls1XSwgcHJvb2YuZXZhbHVhdGlvbnMuZXZhbF9zMikpO1xuXG4gICAgICAgIHBvbHlub21pYWxzLld4aS5kaXZCeVplcm9maWVyKDEsIGNoYWxsZW5nZXMueGkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVXeGl3KCkge1xuICAgICAgICBwb2x5bm9taWFscy5XeGl3ID0gUG9seW5vbWlhbC5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5aLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgcG9seW5vbWlhbHMuV3hpdy5zdWJTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuZXZhbF96dyk7XG5cbiAgICAgICAgcG9seW5vbWlhbHMuV3hpdy5kaXZCeVplcm9maWVyKDEsIGNoYWxsZW5nZXMueGl3KTtcbiAgICB9XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgcGxvbmtfcHJvdmUgZnJvbSBcIi4vcGxvbmtfcHJvdmUuanNcIjtcbmltcG9ydCB3dG5zX2NhbGN1bGF0ZSBmcm9tIFwiLi93dG5zX2NhbGN1bGF0ZS5qc1wiO1xuaW1wb3J0IHt1dGlsc30gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcGxvbmtGdWxsUHJvdmUoX2lucHV0LCB3YXNtRmlsZSwgemtleUZpbGVOYW1lLCBsb2dnZXIpIHtcbiAgICBjb25zdCBpbnB1dCA9IHVuc3RyaW5naWZ5QmlnSW50cyhfaW5wdXQpO1xuXG4gICAgY29uc3Qgd3Rucz0ge1xuICAgICAgICB0eXBlOiBcIm1lbVwiXG4gICAgfTtcbiAgICBhd2FpdCB3dG5zX2NhbGN1bGF0ZShpbnB1dCwgd2FzbUZpbGUsIHd0bnMpO1xuICAgIHJldHVybiBhd2FpdCBwbG9ua19wcm92ZSh6a2V5RmlsZU5hbWUsIHd0bnMsIGxvZ2dlcik7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBraW1zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHBhcGVyOiBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDE5Lzk1My5wZGYgKi9cbmltcG9ydCAqIGFzIGN1cnZlcyBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7ICB1dGlscyB9ICAgZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcbmltcG9ydCB7IEtlY2NhazI1NlRyYW5zY3JpcHQgfSBmcm9tIFwiLi9LZWNjYWsyNTZUcmFuc2NyaXB0LmpzXCI7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwbG9ua1ZlcmlmeShfdmtfdmVyaWZpZXIsIF9wdWJsaWNTaWduYWxzLCBfcHJvb2YsIGxvZ2dlcikge1xuICAgIGxldCB2a192ZXJpZmllciA9IHVuc3RyaW5naWZ5QmlnSW50cyhfdmtfdmVyaWZpZXIpO1xuICAgIF9wcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuICAgIGxldCBwdWJsaWNTaWduYWxzID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wdWJsaWNTaWduYWxzKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgY3VydmVzLmdldEN1cnZlRnJvbU5hbWUodmtfdmVyaWZpZXIuY3VydmUpO1xuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJQTE9OSyBWRVJJRklFUiBTVEFSVEVEXCIpO1xuXG4gICAgbGV0IHByb29mID0gZnJvbU9iamVjdFByb29mKGN1cnZlLF9wcm9vZik7XG4gICAgdmtfdmVyaWZpZXIgPSBmcm9tT2JqZWN0VmsoY3VydmUsIHZrX3ZlcmlmaWVyKTtcblxuICAgIGlmICghaXNXZWxsQ29uc3RydWN0ZWQoY3VydmUsIHByb29mKSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJQcm9vZiBpcyBub3Qgd2VsbCBjb25zdHJ1Y3RlZFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwdWJsaWNTaWduYWxzLmxlbmd0aCAhPSB2a192ZXJpZmllci5uUHVibGljKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIHB1YmxpYyBpbnB1dHNcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlcyA9IGNhbGN1bGF0ZWNoYWxsZW5nZXMoY3VydmUsIHByb29mLCBwdWJsaWNTaWduYWxzLCB2a192ZXJpZmllcik7XG4gICAgXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJiZXRhOiBcIiArIEZyLnRvU3RyaW5nKGNoYWxsZW5nZXMuYmV0YSwgMTYpKTsgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImdhbW1hOiBcIiArIEZyLnRvU3RyaW5nKGNoYWxsZW5nZXMuZ2FtbWEsIDE2KSk7ICAgIFxuICAgICAgICBsb2dnZXIuZGVidWcoXCJhbHBoYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmFscGhhLCAxNikpOyAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwieGk6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy54aSwgMTYpKTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTw2O2krKykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmRlYnVnKFwidjogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnZbaV0sIDE2KSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwidTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnUsIDE2KSk7ICAgIFxuICAgIH1cbiAgICBjb25zdCBMID0gY2FsY3VsYXRlTGFncmFuZ2VFdmFsdWF0aW9ucyhjdXJ2ZSwgY2hhbGxlbmdlcywgdmtfdmVyaWZpZXIpO1xuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgZm9yIChsZXQgaT0xOyBpPEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTCR7aX0oeGkpPWAgKyBGci50b1N0cmluZyhMW2ldLCAxNikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChwdWJsaWNTaWduYWxzLmxlbmd0aCAhPSB2a192ZXJpZmllci5uUHVibGljKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk51bWJlciBvZiBwdWJsaWMgc2lnbmFscyBkb2VzIG5vdCBtYXRjaCB3aXRoIHZrXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGkgPSBjYWxjdWxhdGVQSShjdXJ2ZSwgcHVibGljU2lnbmFscywgTCk7XG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJQSSh4aSk6IFwiICsgRnIudG9TdHJpbmcocGksIDE2KSk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHIwID0gY2FsY3VsYXRlUjAoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCBwaSwgTFsxXSk7XG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJyMDogXCIgKyBGci50b1N0cmluZyhyMCwgMTYpKTtcbiAgICB9XG5cbiAgICBjb25zdCBEID0gY2FsY3VsYXRlRChjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrX3ZlcmlmaWVyLCBMWzFdKTtcbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkQ6IFwiICsgRzEudG9TdHJpbmcoRzEudG9BZmZpbmUoRCksIDE2KSk7XG4gICAgfVxuXG4gICAgY29uc3QgRiA9IGNhbGN1bGF0ZUYoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2a192ZXJpZmllciwgRCk7XG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJGOiBcIiArIEcxLnRvU3RyaW5nKEcxLnRvQWZmaW5lKEYpLCAxNikpO1xuICAgIH1cblxuICAgIGNvbnN0IEUgPSBjYWxjdWxhdGVFKGN1cnZlLCBwcm9vZiwgY2hhbGxlbmdlcywgcjApO1xuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiRTogXCIgKyBHMS50b1N0cmluZyhHMS50b0FmZmluZShFKSwgMTYpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBpc1ZhbGlkUGFpcmluZyhjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrX3ZlcmlmaWVyLCBFLCBGKTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJPSyFcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIkludmFsaWQgUHJvb2ZcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbmZ1bmN0aW9uIGZyb21PYmplY3RQcm9vZihjdXJ2ZSwgcHJvb2YpIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgcmVzLkEgPSBHMS5mcm9tT2JqZWN0KHByb29mLkEpO1xuICAgIHJlcy5CID0gRzEuZnJvbU9iamVjdChwcm9vZi5CKTtcbiAgICByZXMuQyA9IEcxLmZyb21PYmplY3QocHJvb2YuQyk7XG4gICAgcmVzLlogPSBHMS5mcm9tT2JqZWN0KHByb29mLlopO1xuICAgIHJlcy5UMSA9IEcxLmZyb21PYmplY3QocHJvb2YuVDEpO1xuICAgIHJlcy5UMiA9IEcxLmZyb21PYmplY3QocHJvb2YuVDIpO1xuICAgIHJlcy5UMyA9IEcxLmZyb21PYmplY3QocHJvb2YuVDMpO1xuICAgIHJlcy5ldmFsX2EgPSBGci5mcm9tT2JqZWN0KHByb29mLmV2YWxfYSk7XG4gICAgcmVzLmV2YWxfYiA9IEZyLmZyb21PYmplY3QocHJvb2YuZXZhbF9iKTtcbiAgICByZXMuZXZhbF9jID0gRnIuZnJvbU9iamVjdChwcm9vZi5ldmFsX2MpO1xuICAgIHJlcy5ldmFsX3p3ID0gRnIuZnJvbU9iamVjdChwcm9vZi5ldmFsX3p3KTtcbiAgICByZXMuZXZhbF9zMSA9IEZyLmZyb21PYmplY3QocHJvb2YuZXZhbF9zMSk7XG4gICAgcmVzLmV2YWxfczIgPSBGci5mcm9tT2JqZWN0KHByb29mLmV2YWxfczIpO1xuICAgIHJlcy5XeGkgPSBHMS5mcm9tT2JqZWN0KHByb29mLld4aSk7XG4gICAgcmVzLld4aXcgPSBHMS5mcm9tT2JqZWN0KHByb29mLld4aXcpO1xuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3RWayhjdXJ2ZSwgdmspIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IEcyID0gY3VydmUuRzI7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICBjb25zdCByZXMgPSB2aztcbiAgICByZXMuUW0gPSBHMS5mcm9tT2JqZWN0KHZrLlFtKTtcbiAgICByZXMuUWwgPSBHMS5mcm9tT2JqZWN0KHZrLlFsKTtcbiAgICByZXMuUXIgPSBHMS5mcm9tT2JqZWN0KHZrLlFyKTtcbiAgICByZXMuUW8gPSBHMS5mcm9tT2JqZWN0KHZrLlFvKTtcbiAgICByZXMuUWMgPSBHMS5mcm9tT2JqZWN0KHZrLlFjKTtcbiAgICByZXMuUzEgPSBHMS5mcm9tT2JqZWN0KHZrLlMxKTtcbiAgICByZXMuUzIgPSBHMS5mcm9tT2JqZWN0KHZrLlMyKTtcbiAgICByZXMuUzMgPSBHMS5mcm9tT2JqZWN0KHZrLlMzKTtcbiAgICByZXMuazEgPSBGci5mcm9tT2JqZWN0KHZrLmsxKTtcbiAgICByZXMuazIgPSBGci5mcm9tT2JqZWN0KHZrLmsyKTtcbiAgICByZXMuWF8yID0gRzIuZnJvbU9iamVjdCh2ay5YXzIpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gaXNXZWxsQ29uc3RydWN0ZWQoY3VydmUsIHByb29mKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuQSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuQikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuQykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuWikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuVDEpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFHMS5pc1ZhbGlkKHByb29mLlQyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5UMykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIUcxLmlzVmFsaWQocHJvb2YuV3hpKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghRzEuaXNWYWxpZChwcm9vZi5XeGl3KSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVjaGFsbGVuZ2VzKGN1cnZlLCBwcm9vZiwgcHVibGljU2lnbmFscywgdmspIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGNvbnN0IHRyYW5zY3JpcHQgPSBuZXcgS2VjY2FrMjU2VHJhbnNjcmlwdChjdXJ2ZSk7XG5cbiAgICAvLyBDaGFsbGVuZ2Ugcm91bmQgMjogYmV0YSBhbmQgZ2FtbWFcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQodmsuUW0pO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh2ay5RbCk7XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHZrLlFyKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQodmsuUW8pO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh2ay5RYyk7XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHZrLlMxKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQodmsuUzIpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudCh2ay5TMyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY1NpZ25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoRnIuZShwdWJsaWNTaWduYWxzW2ldKSk7XG4gICAgfVxuXG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLkEpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5CKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuQyk7XG5cbiAgICByZXMuYmV0YSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICB0cmFuc2NyaXB0LnJlc2V0KCk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocmVzLmJldGEpO1xuICAgIHJlcy5nYW1tYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICAvLyBDaGFsbGVuZ2Ugcm91bmQgMzogYWxwaGFcbiAgICB0cmFuc2NyaXB0LnJlc2V0KCk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocmVzLmJldGEpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHJlcy5nYW1tYSk7XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLlopO1xuICAgIHJlcy5hbHBoYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICAvLyBDaGFsbGVuZ2Ugcm91bmQgNDogeGlcbiAgICB0cmFuc2NyaXB0LnJlc2V0KCk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocmVzLmFscGhhKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuVDEpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5UMik7XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLlQzKTtcbiAgICByZXMueGkgPSB0cmFuc2NyaXB0LmdldENoYWxsZW5nZSgpO1xuICAgIFxuICAgIC8vIENoYWxsZW5nZSByb3VuZCA1OiB2XG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHJlcy54aSk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbF9hKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsX2IpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWxfYyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbF9zMSk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbF9zMik7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbF96dyk7XG4gICAgcmVzLnYgPSBbXTtcbiAgICByZXMudlsxXSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICBmb3IgKGxldCBpPTI7IGk8NjsgaSsrICkgcmVzLnZbaV0gPSBGci5tdWwocmVzLnZbaS0xXSwgcmVzLnZbMV0pO1xuXG4gICAgLy8gQ2hhbGxlbmdlOiB1XG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5XeGkpO1xuICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5XeGl3KTtcbiAgICByZXMudSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVMYWdyYW5nZUV2YWx1YXRpb25zKGN1cnZlLCBjaGFsbGVuZ2VzLCB2aykge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBsZXQgeGluID0gY2hhbGxlbmdlcy54aTtcbiAgICBsZXQgZG9tYWluU2l6ZSA9IDE7XG4gICAgZm9yIChsZXQgaT0wOyBpPHZrLnBvd2VyOyBpKyspIHtcbiAgICAgICAgeGluID0gRnIuc3F1YXJlKHhpbik7XG4gICAgICAgIGRvbWFpblNpemUgKj0gMjtcbiAgICB9XG4gICAgY2hhbGxlbmdlcy54aW4gPSB4aW47XG5cbiAgICBjaGFsbGVuZ2VzLnpoID0gRnIuc3ViKHhpbiwgRnIub25lKTtcblxuICAgIGNvbnN0IEwgPSBbXTtcblxuICAgIGNvbnN0IG4gPSBGci5lKGRvbWFpblNpemUpO1xuICAgIGxldCB3ID0gRnIub25lO1xuICAgIGZvciAobGV0IGk9MTsgaTw9TWF0aC5tYXgoMSwgdmsublB1YmxpYyk7IGkrKykge1xuICAgICAgICBMW2ldID0gRnIuZGl2KEZyLm11bCh3LCBjaGFsbGVuZ2VzLnpoKSwgRnIubXVsKG4sIEZyLnN1YihjaGFsbGVuZ2VzLnhpLCB3KSkpO1xuICAgICAgICB3ID0gRnIubXVsKHcsIEZyLndbdmsucG93ZXJdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTDtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlUEkoY3VydmUsIHB1YmxpY1NpZ25hbHMsIEwpIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IHBpID0gRnIuemVybztcbiAgICBmb3IgKGxldCBpPTA7IGk8cHVibGljU2lnbmFscy5sZW5ndGg7IGkrKykgeyAgICAgICAgXG4gICAgICAgIGNvbnN0IHcgPSBGci5lKHB1YmxpY1NpZ25hbHNbaV0pO1xuICAgICAgICBwaSA9IEZyLnN1YihwaSwgRnIubXVsKHcsIExbaSsxXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVIwKGN1cnZlLCBwcm9vZiwgY2hhbGxlbmdlcywgcGksIGwxKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IGUxID0gcGk7XG5cbiAgICBjb25zdCBlMiA9IEZyLm11bChsMSwgRnIuc3F1YXJlKGNoYWxsZW5nZXMuYWxwaGEpKTtcblxuICAgIGxldCBlM2EgPSBGci5hZGQocHJvb2YuZXZhbF9hLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBwcm9vZi5ldmFsX3MxKSk7XG4gICAgZTNhID0gRnIuYWRkKGUzYSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICBsZXQgZTNiID0gRnIuYWRkKHByb29mLmV2YWxfYiwgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbF9zMikpO1xuICAgIGUzYiA9IEZyLmFkZChlM2IsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgbGV0IGUzYyA9IEZyLmFkZChwcm9vZi5ldmFsX2MsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgbGV0IGUzID0gRnIubXVsKEZyLm11bChlM2EsIGUzYiksIGUzYyk7XG4gICAgZTMgPSBGci5tdWwoZTMsIHByb29mLmV2YWxfencpO1xuICAgIGUzID0gRnIubXVsKGUzLCBjaGFsbGVuZ2VzLmFscGhhKTtcblxuICAgIGNvbnN0IHIwID0gRnIuc3ViKEZyLnN1YihlMSwgZTIpLCBlMyk7XG5cbiAgICByZXR1cm4gcjA7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUQoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgbDEpIHtcbiAgICBjb25zdCBHMSA9IGN1cnZlLkcxO1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgXG4gICAgbGV0IGQxID0gRzEudGltZXNGcih2ay5RbSwgRnIubXVsKHByb29mLmV2YWxfYSwgcHJvb2YuZXZhbF9iKSk7XG4gICAgZDEgPSBHMS5hZGQoZDEsIEcxLnRpbWVzRnIodmsuUWwsIHByb29mLmV2YWxfYSkpO1xuICAgIGQxID0gRzEuYWRkKGQxLCBHMS50aW1lc0ZyKHZrLlFyLCBwcm9vZi5ldmFsX2IpKTtcbiAgICBkMSA9IEcxLmFkZChkMSwgRzEudGltZXNGcih2ay5RbywgcHJvb2YuZXZhbF9jKSk7XG4gICAgZDEgPSBHMS5hZGQoZDEsIHZrLlFjKTtcblxuICAgIGNvbnN0IGJldGF4aSA9IEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIGNoYWxsZW5nZXMueGkpO1xuXG4gICAgY29uc3QgZDJhMSA9IEZyLmFkZChGci5hZGQocHJvb2YuZXZhbF9hLCBiZXRheGkpLCBjaGFsbGVuZ2VzLmdhbW1hKTtcbiAgICBjb25zdCBkMmEyID0gRnIuYWRkKEZyLmFkZChwcm9vZi5ldmFsX2IsIEZyLm11bChiZXRheGksIHZrLmsxKSksIGNoYWxsZW5nZXMuZ2FtbWEpO1xuICAgIGNvbnN0IGQyYTMgPSBGci5hZGQoRnIuYWRkKHByb29mLmV2YWxfYywgRnIubXVsKGJldGF4aSwgdmsuazIpKSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICBjb25zdCBkMmEgPSBGci5tdWwoRnIubXVsKEZyLm11bChkMmExLCBkMmEyKSwgZDJhMyksIGNoYWxsZW5nZXMuYWxwaGEpO1xuXG4gICAgY29uc3QgZDJiID0gRnIubXVsKGwxLCBGci5zcXVhcmUoY2hhbGxlbmdlcy5hbHBoYSkpO1xuXG4gICAgY29uc3QgZDIgPSBHMS50aW1lc0ZyKHByb29mLlosIEZyLmFkZChGci5hZGQoZDJhLCBkMmIpLCBjaGFsbGVuZ2VzLnUpKTtcblxuICAgIGNvbnN0IGQzYSA9IEZyLmFkZChGci5hZGQocHJvb2YuZXZhbF9hLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBwcm9vZi5ldmFsX3MxKSksIGNoYWxsZW5nZXMuZ2FtbWEpO1xuICAgIGNvbnN0IGQzYiA9IEZyLmFkZChGci5hZGQocHJvb2YuZXZhbF9iLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBwcm9vZi5ldmFsX3MyKSksIGNoYWxsZW5nZXMuZ2FtbWEpO1xuICAgIGNvbnN0IGQzYyA9IEZyLm11bChGci5tdWwoY2hhbGxlbmdlcy5hbHBoYSwgY2hhbGxlbmdlcy5iZXRhKSwgcHJvb2YuZXZhbF96dyk7XG5cbiAgICBjb25zdCBkMyA9IEcxLnRpbWVzRnIodmsuUzMsIEZyLm11bChGci5tdWwoZDNhLCBkM2IpLCBkM2MpKTtcbiAgICBcbiAgICBjb25zdCBkNGxvdyA9IHByb29mLlQxO1xuICAgIGNvbnN0IGQ0bWlkID0gRzEudGltZXNGcihwcm9vZi5UMiwgY2hhbGxlbmdlcy54aW4pO1xuICAgIGNvbnN0IGQ0aGlnaCA9IEcxLnRpbWVzRnIocHJvb2YuVDMsIEZyLnNxdWFyZShjaGFsbGVuZ2VzLnhpbikpO1xuICAgIGxldCBkNCA9IEcxLmFkZChkNGxvdywgRzEuYWRkKGQ0bWlkLCBkNGhpZ2gpKTtcbiAgICBkNCA9IEcxLnRpbWVzRnIoZDQsIGNoYWxsZW5nZXMuemgpO1xuXG4gICAgY29uc3QgZCA9IEcxLnN1YihHMS5zdWIoRzEuYWRkKGQxLCBkMiksIGQzKSwgZDQpO1xuXG4gICAgcmV0dXJuIGQ7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUYoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgRCkge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG5cbiAgICBsZXQgcmVzID0gRzEuYWRkKEQsIEcxLnRpbWVzRnIocHJvb2YuQSwgY2hhbGxlbmdlcy52WzFdKSk7XG4gICAgcmVzID0gRzEuYWRkKHJlcywgRzEudGltZXNGcihwcm9vZi5CLCBjaGFsbGVuZ2VzLnZbMl0pKTtcbiAgICByZXMgPSBHMS5hZGQocmVzLCBHMS50aW1lc0ZyKHByb29mLkMsIGNoYWxsZW5nZXMudlszXSkpO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIodmsuUzEsIGNoYWxsZW5nZXMudls0XSkpO1xuICAgIHJlcyA9IEcxLmFkZChyZXMsIEcxLnRpbWVzRnIodmsuUzIsIGNoYWxsZW5nZXMudls1XSkpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRShjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHIwKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IGUgPSBGci5hZGQoRnIubmVnKHIwKSwgRnIubXVsKGNoYWxsZW5nZXMudlsxXSwgcHJvb2YuZXZhbF9hKSk7XG4gICAgZSA9IEZyLmFkZChlLCBGci5tdWwoY2hhbGxlbmdlcy52WzJdLCBwcm9vZi5ldmFsX2IpKTtcbiAgICBlID0gRnIuYWRkKGUsIEZyLm11bChjaGFsbGVuZ2VzLnZbM10sIHByb29mLmV2YWxfYykpO1xuICAgIGUgPSBGci5hZGQoZSwgRnIubXVsKGNoYWxsZW5nZXMudls0XSwgcHJvb2YuZXZhbF9zMSkpO1xuICAgIGUgPSBGci5hZGQoZSwgRnIubXVsKGNoYWxsZW5nZXMudls1XSwgcHJvb2YuZXZhbF9zMikpO1xuICAgIGUgPSBGci5hZGQoZSwgRnIubXVsKGNoYWxsZW5nZXMudSwgcHJvb2YuZXZhbF96dykpO1xuXG4gICAgY29uc3QgcmVzID0gRzEudGltZXNGcihHMS5vbmUsIGUpO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNWYWxpZFBhaXJpbmcoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgRSwgRikge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBBMSA9IHByb29mLld4aTtcbiAgICBBMSA9IEcxLmFkZChBMSwgRzEudGltZXNGcihwcm9vZi5XeGl3LCBjaGFsbGVuZ2VzLnUpKTtcblxuICAgIGxldCBCMSA9IEcxLnRpbWVzRnIocHJvb2YuV3hpLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICBjb25zdCBzID0gRnIubXVsKEZyLm11bChjaGFsbGVuZ2VzLnUsIGNoYWxsZW5nZXMueGkpLCBGci53W3ZrLnBvd2VyXSk7XG4gICAgQjEgPSBHMS5hZGQoQjEsIEcxLnRpbWVzRnIocHJvb2YuV3hpdywgcykpO1xuICAgIEIxID0gRzEuYWRkKEIxLCBGKTtcbiAgICBCMSA9IEcxLnN1YihCMSwgRSk7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjdXJ2ZS5wYWlyaW5nRXEoXG4gICAgICAgIEcxLm5lZyhBMSkgLCB2ay5YXzIsXG4gICAgICAgIEIxICwgY3VydmUuRzIub25lXG4gICAgKTtcblxuICAgIHJldHVybiByZXM7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIxIDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgeyBnZXRDdXJ2ZUZyb21OYW1lIH0gZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyAgdXRpbHMgfSAgIGZyb20gXCJmZmphdmFzY3JpcHRcIjtcbmNvbnN0IHsgdW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5mdW5jdGlvbiBpMmhleChpKSB7XG4gICAgcmV0dXJuIChcIjBcIiArIGkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG59XG5cbmZ1bmN0aW9uIHAyNTYobikge1xuICAgIGxldCBuc3RyID0gbi50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKG5zdHIubGVuZ3RoIDwgNjQpIG5zdHIgPSBcIjBcIituc3RyO1xuICAgIG5zdHIgPSBgXCIweCR7bnN0cn1cImA7XG4gICAgcmV0dXJuIG5zdHI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHBsb25rRXhwb3J0U29saWRpdHlDYWxsRGF0YShfcHJvb2YsIF9wdWIpIHtcbiAgICBjb25zdCBwcm9vZiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHJvb2YpO1xuICAgIGNvbnN0IHB1YiA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHViKTtcblxuICAgIGNvbnN0IGN1cnZlID0gYXdhaXQgZ2V0Q3VydmVGcm9tTmFtZShwcm9vZi5jdXJ2ZSk7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IGlucHV0cyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaT0wOyBpPHB1Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5wdXRzICE9IFwiXCIpIGlucHV0cyA9IGlucHV0cyArIFwiLFwiO1xuICAgICAgICBpbnB1dHMgPSBpbnB1dHMgKyBwMjU2KHB1YltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBbJHtwMjU2KHByb29mLkFbMF0pfSwgJHtwMjU2KHByb29mLkFbMV0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLkJbMF0pfSwke3AyNTYocHJvb2YuQlsxXSl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuQ1swXSl9LCR7cDI1Nihwcm9vZi5DWzFdKX0sYCArXG4gICAgYCR7cDI1Nihwcm9vZi5aWzBdKX0sJHtwMjU2KHByb29mLlpbMV0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLlQxWzBdKX0sJHtwMjU2KHByb29mLlQxWzFdKX0sYCArXG4gICAgYCR7cDI1Nihwcm9vZi5UMlswXSl9LCR7cDI1Nihwcm9vZi5UMlsxXSl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuVDNbMF0pfSwke3AyNTYocHJvb2YuVDNbMV0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLld4aVswXSl9LCR7cDI1Nihwcm9vZi5XeGlbMV0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLld4aXdbMF0pfSwke3AyNTYocHJvb2YuV3hpd1sxXSl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuZXZhbF9hKX0sYCArIFxuICAgIGAke3AyNTYocHJvb2YuZXZhbF9iKX0sYCArIFxuICAgIGAke3AyNTYocHJvb2YuZXZhbF9jKX0sYCArIFxuICAgIGAke3AyNTYocHJvb2YuZXZhbF9zMSl9LGAgKyBcbiAgICBgJHtwMjU2KHByb29mLmV2YWxfczIpfSxgICsgXG4gICAgYCR7cDI1Nihwcm9vZi5ldmFsX3p3KX1dYCArIFxuICAgIGBbJHtpbnB1dHN9XWA7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDE4IDBLSU1TIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtKUy5cblxuICAgIHNuYXJrSlMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya0pTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljXG4gICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAgICBhbG9uZyB3aXRoIHNuYXJrSlMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBaS0VZIGNvbnN0YW50c1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNldHVwfSBmcm9tIFwiLi9wbG9ua19zZXR1cC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZ1bGxQcm92ZX0gZnJvbSBcIi4vcGxvbmtfZnVsbHByb3ZlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJvdmV9IGZyb20gXCIuL3Bsb25rX3Byb3ZlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmVyaWZ5fSBmcm9tIFwiLi9wbG9ua192ZXJpZnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHBvcnRTb2xpZGl0eUNhbGxEYXRhfSBmcm9tIFwiLi9wbG9ua19leHBvcnRzb2xpZGl0eWNhbGxkYXRhLmpzXCI7XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG4vLyBXZSBleHBvcnQgdG8gemtleSB0aGUgc2lnbmFscyBhbmQgdmFsdWVzIG9mIHRoZSBhLCBiLCBjLCBxbCwgcXIsIHFtLCBxbyBhbmQgcWNcblxuLy8gYSwgYiBhbmQgYyBhcmUgc2lnbmFscyBpZCAoMzItYml0IGludGVnZXJzKVxuLy8gcWwsIHFyLCBxbSwgcW8gYW5kIHFjIGFyZSBmaWVsZCB2YWx1ZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZGbG9ua0NvbnN0YW50Q29uc3RyYWludChzaWduYWwxLCBGcikge1xuICAgIHJldHVybiBbc2lnbmFsMSwgMCwgMCwgRnIub25lLCBGci56ZXJvLCBGci56ZXJvLCBGci56ZXJvLCBGci56ZXJvXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZGbG9ua0FkZGl0aW9uQ29uc3RyYWludChzaWduYWwxLCBzaWduYWwyLCBzaWduYWxPdXQsIHFsLCBxciwgcW0sIHFvLCBxYykge1xuICAgIHJldHVybiBbc2lnbmFsMSwgc2lnbmFsMiwgc2lnbmFsT3V0LCBxbCwgcXIsIHFtLCBxbywgcWNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RkZsb25rTXVsdGlwbGljYXRpb25Db25zdHJhaW50KHNpZ25hbDEsIHNpZ25hbDIsIHNpZ25hbE91dCwgcWwsIHFyLCBxbSwgcW8sIHFjLCBGcikge1xuICAgIHJldHVybiBbc2lnbmFsMSwgc2lnbmFsMiwgc2lnbmFsT3V0LCBxbCwgcXIsIHFtLCBxbywgcWNdO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMiBpZGVuMyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuY29uc3QgTElORUFSX0NPTUJJTkFUSU9OX05VTExBQkxFID0gMDtcbmNvbnN0IExJTkVBUl9DT01CSU5BVElPTl9DT05TVEFOVCA9IDE7XG5jb25zdCBMSU5FQVJfQ09NQklOQVRJT05fVkFSSUFCTEUgPSAyO1xuXG5leHBvcnQgY2xhc3MgcjFjc0NvbnN0cmFpbnRQcm9jZXNzb3Ige1xuICAgIGNvbnN0cnVjdG9yKEZyLCBmbkdldENvbnN0YW50Q29uc3RyYWludCwgZm5HZXRBZGRpdGlvbkNvbnN0cmFpbnQsIGZuR2V0TXVsdGlwbGljYXRpb25Db25zdHJhaW50LCBsb2dnZXIpIHtcbiAgICAgICAgdGhpcy5GciA9IEZyO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICAgICAgdGhpcy5mbkdldEFkZGl0aW9uQ29uc3RyYWludCA9IGZuR2V0QWRkaXRpb25Db25zdHJhaW50O1xuICAgICAgICB0aGlzLmZuR2V0TXVsdGlwbGljYXRpb25Db25zdHJhaW50ID0gZm5HZXRNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnQ7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1IxY3NDb25zdHJhaW50KHNldHRpbmdzLCBsY0EsIGxjQiwgbGNDKSB7XG4gICAgICAgIHRoaXMubm9ybWFsaXplTGluZWFyQ29tYmluYXRpb24obGNBKTtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVMaW5lYXJDb21iaW5hdGlvbihsY0IpO1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZUxpbmVhckNvbWJpbmF0aW9uKGxjQyk7XG5cbiAgICAgICAgY29uc3QgbGN0QSA9IHRoaXMuZ2V0TGluZWFyQ29tYmluYXRpb25UeXBlKGxjQSk7XG4gICAgICAgIGNvbnN0IGxjdEIgPSB0aGlzLmdldExpbmVhckNvbWJpbmF0aW9uVHlwZShsY0IpO1xuXG4gICAgICAgIGlmICgobGN0QSA9PT0gTElORUFSX0NPTUJJTkFUSU9OX05VTExBQkxFKSB8fCAobGN0QiA9PT0gTElORUFSX0NPTUJJTkFUSU9OX05VTExBQkxFKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1IxY3NBZGRpdGlvbkNvbnN0cmFpbnQoc2V0dGluZ3MsIGxjQyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGN0QSA9PT0gTElORUFSX0NPTUJJTkFUSU9OX0NPTlNUQU5UKSB7XG4gICAgICAgICAgICBjb25zdCBsY0NDID0gdGhpcy5qb2luTGluZWFyQ29tYmluYXRpb25zKGxjQiwgbGNDLCBsY0FbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1IxY3NBZGRpdGlvbkNvbnN0cmFpbnQoc2V0dGluZ3MsIGxjQ0MpO1xuICAgICAgICB9IGVsc2UgaWYgKGxjdEIgPT09IExJTkVBUl9DT01CSU5BVElPTl9DT05TVEFOVCkge1xuICAgICAgICAgICAgY29uc3QgbGNDQyA9IHRoaXMuam9pbkxpbmVhckNvbWJpbmF0aW9ucyhsY0EsIGxjQywgbGNCWzBdKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSMWNzQWRkaXRpb25Db25zdHJhaW50KHNldHRpbmdzLCBsY0NDKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSMWNzTXVsdGlwbGljYXRpb25Db25zdHJhaW50KHNldHRpbmdzLCBsY0EsIGxjQiwgbGNDKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmVhckNvbWJpbmF0aW9uVHlwZShsaW5Db20pIHtcbiAgICAgICAgLy8gbGV0IGsgPSB0aGlzLkZyLnplcm87XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGNvbnN0IHNpZ25hbElkcyA9IE9iamVjdC5rZXlzKGxpbkNvbSk7XG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmFsSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgICBpZiAoc2lnbmFsSWRzW2ldID09PSBcIjBcIikge1xuICAgICAgICAvLyAgICAgICAgIGsgPSB0aGlzLkZyLmFkZChrLCBsaW5Db21bc2lnbmFsSWRzW2ldXSk7XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fVkFSSUFCTEU7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKCF0aGlzLkZyLmVxKGssIHRoaXMuRnIuemVybykpIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fQ09OU1RBTlQ7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIHJldHVybiBMSU5FQVJfQ09NQklOQVRJT05fTlVMTEFCTEU7XG5cbiAgICAgICAgbGV0IGsgPSB0aGlzLkZyLnplcm87XG4gICAgICAgIGxldCBuID0gMDtcbiAgICAgICAgY29uc3Qgc3MgPSBPYmplY3Qua2V5cyhsaW5Db20pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGluQ29tW3NzW2ldXSA9PSAwbikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsaW5Db21bc3NbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzc1tpXSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgayA9IHRoaXMuRnIuYWRkKGssIGxpbkNvbVtzc1tpXV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG4gPiAwKSByZXR1cm4gTElORUFSX0NPTUJJTkFUSU9OX1ZBUklBQkxFO1xuICAgICAgICBpZiAoIXRoaXMuRnIuaXNaZXJvKGspKSByZXR1cm4gTElORUFSX0NPTUJJTkFUSU9OX0NPTlNUQU5UO1xuICAgICAgICByZXR1cm4gTElORUFSX0NPTUJJTkFUSU9OX05VTExBQkxFO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUxpbmVhckNvbWJpbmF0aW9uKGxpbkNvbSkge1xuICAgICAgICBjb25zdCBzaWduYWxJZHMgPSBPYmplY3Qua2V5cyhsaW5Db20pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpZ25hbElkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuRnIuaXNaZXJvKGxpbkNvbVtzaWduYWxJZHNbaV1dKSkgZGVsZXRlIGxpbkNvbVtzaWduYWxJZHNbaV1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpbkNvbTtcbiAgICB9XG5cbiAgICBqb2luTGluZWFyQ29tYmluYXRpb25zKGxpbkNvbTEsIGxpbkNvbTIsIGspIHtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG5cbiAgICAgICAgLy8gZm9yIChsZXQgcyBpbiBsaW5Db20xKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB2YWwgPSB0aGlzLkZyLm11bChrLCBsaW5Db20xW3NdKTtcbiAgICAgICAgLy8gICAgIHJlc1tzXSA9ICEocyBpbiByZXMpID8gdmFsIDogdGhpcy5Gci5hZGQodmFsLCByZXNbc10pO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciAobGV0IHMgaW4gbGluQ29tMikge1xuICAgICAgICAvLyAgICAgY29uc3QgdmFsID0gdGhpcy5Gci5tdWwoaywgbGluQ29tMltzXSk7XG4gICAgICAgIC8vICAgICByZXNbc10gPSAhKHMgaW4gcmVzKSA/IHZhbCA6IHRoaXMuRnIuYWRkKHZhbCwgcmVzW3NdKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGZvciAobGV0IHMgaW4gbGluQ29tMSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNbc10gPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHJlc1tzXSA9IHRoaXMuRnIubXVsKGssIGxpbkNvbTFbc10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNbc10gPSB0aGlzLkZyLmFkZChyZXNbc10sIHRoaXMuRnIubXVsKGssIGxpbkNvbTFbc10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHMgaW4gbGluQ29tMikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNbc10gPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHJlc1tzXSA9IGxpbkNvbTJbc107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc1tzXSA9IHRoaXMuRnIuYWRkKHJlc1tzXSwgbGluQ29tMltzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVMaW5lYXJDb21iaW5hdGlvbihyZXMpO1xuICAgIH1cblxuICAgIHJlZHVjZUNvZWZzKHNldHRpbmdzLCBjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyLCBsaW5Db20sIG1heEMpIHtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgazogdGhpcy5Gci56ZXJvLFxuICAgICAgICAgICAgc2lnbmFsczogW10sXG4gICAgICAgICAgICBjb2VmczogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY3MgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBzaWduYWxJZCBpbiBsaW5Db20pIHtcbiAgICAgICAgICAgIGlmIChzaWduYWxJZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzLmsgPSB0aGlzLkZyLmFkZChyZXMuaywgbGluQ29tW3NpZ25hbElkXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpbkNvbVtzaWduYWxJZF0gIT0gMG4pIHtcbiAgICAgICAgICAgICAgICBjcy5wdXNoKFtOdW1iZXIoc2lnbmFsSWQpLCBsaW5Db21bc2lnbmFsSWRdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoY3MubGVuZ3RoID4gbWF4Qykge1xuICAgICAgICAgICAgY29uc3QgYzEgPSBjcy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgYzIgPSBjcy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgc28gPSBzZXR0aW5ncy5uVmFycysrO1xuXG4gICAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuZm5HZXRBZGRpdGlvbkNvbnN0cmFpbnQoXG4gICAgICAgICAgICAgICAgYzFbMF0sIGMyWzBdLCBzbyxcbiAgICAgICAgICAgICAgICB0aGlzLkZyLm5lZyhjMVsxXSksIHRoaXMuRnIubmVnKGMyWzFdKSwgdGhpcy5Gci56ZXJvLCB0aGlzLkZyLm9uZSwgdGhpcy5Gci56ZXJvKTtcblxuICAgICAgICAgICAgY29uc3RyYWludHNBcnIucHVzaChjb25zdHJhaW50cyk7XG4gICAgICAgICAgICBhZGRpdGlvbnNBcnIucHVzaChbYzFbMF0sIGMyWzBdLCBjMVsxXSwgYzJbMV1dKTtcblxuICAgICAgICAgICAgY3MucHVzaChbc28sIHRoaXMuRnIub25lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuc2lnbmFsc1tpXSA9IGNzW2ldWzBdO1xuICAgICAgICAgICAgcmVzLmNvZWZzW2ldID0gY3NbaV1bMV07XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAocmVzLmNvZWZzLmxlbmd0aCA8IG1heEMpIHtcbiAgICAgICAgICAgIHJlcy5zaWduYWxzLnB1c2goMCk7XG4gICAgICAgICAgICByZXMuY29lZnMucHVzaCh0aGlzLkZyLnplcm8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcm9jZXNzUjFjc0FkZGl0aW9uQ29uc3RyYWludChzZXR0aW5ncywgbGluQ29tKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzQXJyID0gW107XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uc0FyciA9IFtdO1xuXG4gICAgICAgIGNvbnN0IEMgPSB0aGlzLnJlZHVjZUNvZWZzKHNldHRpbmdzLCBjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyLCBsaW5Db20sIDMpO1xuXG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5mbkdldEFkZGl0aW9uQ29uc3RyYWludChcbiAgICAgICAgICAgIEMuc2lnbmFsc1swXSwgQy5zaWduYWxzWzFdLCBDLnNpZ25hbHNbMl0sXG4gICAgICAgICAgICBDLmNvZWZzWzBdLCBDLmNvZWZzWzFdLCB0aGlzLkZyLnplcm8sIEMuY29lZnNbMl0sIEMuayk7XG5cbiAgICAgICAgY29uc3RyYWludHNBcnIucHVzaChjb25zdHJhaW50cyk7XG5cbiAgICAgICAgcmV0dXJuIFtjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyXTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUjFjc011bHRpcGxpY2F0aW9uQ29uc3RyYWludChzZXR0aW5ncywgbGNBLCBsY0IsIGxjQykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50c0FyciA9IFtdO1xuICAgICAgICBjb25zdCBhZGRpdGlvbnNBcnIgPSBbXTtcblxuICAgICAgICBjb25zdCBBID0gdGhpcy5yZWR1Y2VDb2VmcyhzZXR0aW5ncywgY29uc3RyYWludHNBcnIsIGFkZGl0aW9uc0FyciwgbGNBLCAxKTtcbiAgICAgICAgY29uc3QgQiA9IHRoaXMucmVkdWNlQ29lZnMoc2V0dGluZ3MsIGNvbnN0cmFpbnRzQXJyLCBhZGRpdGlvbnNBcnIsIGxjQiwgMSk7XG4gICAgICAgIGNvbnN0IEMgPSB0aGlzLnJlZHVjZUNvZWZzKHNldHRpbmdzLCBjb25zdHJhaW50c0FyciwgYWRkaXRpb25zQXJyLCBsY0MsIDEpO1xuXG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5mbkdldE11bHRpcGxpY2F0aW9uQ29uc3RyYWludChcbiAgICAgICAgICAgIEEuc2lnbmFsc1swXSwgQi5zaWduYWxzWzBdLCBDLnNpZ25hbHNbMF0sXG4gICAgICAgICAgICB0aGlzLkZyLm11bChBLmNvZWZzWzBdLCBCLmspLFxuICAgICAgICAgICAgdGhpcy5Gci5tdWwoQS5rLCBCLmNvZWZzWzBdKSxcbiAgICAgICAgICAgIHRoaXMuRnIubXVsKEEuY29lZnNbMF0sIEIuY29lZnNbMF0pLFxuICAgICAgICAgICAgdGhpcy5Gci5uZWcoQy5jb2Vmc1swXSksXG4gICAgICAgICAgICB0aGlzLkZyLnN1Yih0aGlzLkZyLm11bChBLmssIEIuayksIEMuaykpO1xuXG4gICAgICAgIGNvbnN0cmFpbnRzQXJyLnB1c2goY29uc3RyYWludHMpO1xuXG4gICAgICAgIHJldHVybiBbY29uc3RyYWludHNBcnIsIGFkZGl0aW9uc0Fycl07XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbi8vIENQb2x5bm9taWFsIGlzIGEgQ29tYmluZWQgUG9seW5vbWlhbCBvZiB0aGUgdHlwZSA6XG4vLyBDUG9seW5vbWlhbChYKSA6PSBQXzAoWF5uKSArIFjCt1BfMShYXm4pICsgLi4uICsgWF57bi0xfcK3UF97bi0xfShYXm4pXG4vLyBXZSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSBiaWcgbWVtb3J5IGJ1ZmZlclxuLy8gZm9yIHRoZSBjb2VmZmljaWVudHMgYmVjYXVzZSBpbiBzb21lIGNhc2VzIGEgYmlnIG51bWJlciBvZiB0aGUgY29lZmZpY2llbnRzIGFyZSB6ZXJvXG5cbmltcG9ydCB7QmlnQnVmZmVyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQge2xvZzJ9IGZyb20gXCIuLi9taXNjLmpzXCI7XG5pbXBvcnQge1BvbHlub21pYWx9IGZyb20gXCIuL3BvbHlub21pYWwuanNcIjtcblxuZXhwb3J0IGNsYXNzIENQb2x5bm9taWFsIHtcbiAgICBjb25zdHJ1Y3RvcihuLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgICAgIHRoaXMubiA9IG47XG4gICAgICAgIHRoaXMucG9seW5vbWlhbHMgPSBBcnJheShuKS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICAgICAgdGhpcy5GciA9IGN1cnZlLkZyO1xuICAgICAgICB0aGlzLkcxID0gY3VydmUuRzE7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cblxuICAgIGFkZFBvbHlub21pYWwocG9zaXRpb24sIHBvbHlub21pYWwpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID4gdGhpcy5uIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ1BvbHlub21pYWw6YWRkUG9seW5vbWlhbCwgY2Fubm90IGFkZCBhIHBvbHlub21pYWwgdG8gYSBwb3NpdGlvbiBncmVhdGVyIHRoYW4gbi0xXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb2x5bm9taWFsc1twb3NpdGlvbl0gPSBwb2x5bm9taWFsO1xuICAgIH1cblxuICAgIGRlZ3JlZSgpIHtcbiAgICAgICAgbGV0IGRlZ3JlZXMgPSB0aGlzLnBvbHlub21pYWxzLm1hcChcbiAgICAgICAgICAgIChwb2x5bm9taWFsLCBpbmRleCkgPT4gcG9seW5vbWlhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBvbHlub21pYWwuZGVncmVlKCkgKiB0aGlzLm4gKyBpbmRleCk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi5kZWdyZWVzKTtcbiAgICB9XG5cbiAgICBnZXRQb2x5bm9taWFsKCkge1xuICAgICAgICBsZXQgZGVncmVlcyA9IHRoaXMucG9seW5vbWlhbHMubWFwKHBvbHlub21pYWwgPT4gcG9seW5vbWlhbCA9PT0gdW5kZWZpbmVkID8gMCA6IHBvbHlub21pYWwuZGVncmVlKCkpO1xuICAgICAgICBjb25zdCBtYXhEZWdyZWUgPSB0aGlzLmRlZ3JlZSgpO1xuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXIgPSAyICoqIChsb2cyKG1heERlZ3JlZSAtIDEpICsgMSk7XG4gICAgICAgIGNvbnN0IHNGciA9IHRoaXMuRnIubjg7XG5cbiAgICAgICAgbGV0IHBvbHlub21pYWwgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKGxlbmd0aEJ1ZmZlciAqIHNGciksIHRoaXMuY3VydmUsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heERlZ3JlZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpX244ID0gaSAqIHNGcjtcbiAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaV9uOCAqIHRoaXMubjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLm47IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvbHlub21pYWxzW2pdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPD0gZGVncmVlc1tqXSkgcG9seW5vbWlhbC5jb2VmLnNldCh0aGlzLnBvbHlub21pYWxzW2pdLmNvZWYuc2xpY2UoaV9uOCwgaV9uOCArIHNGciksIGlfc0ZyICsgaiAqIHNGcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBvbHlub21pYWw7XG4gICAgfVxuXG4gICAgYXN5bmMgbXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBuYW1lKSB7XG4gICAgICAgIGxldCBwb2x5bm9taWFsID0gdGhpcy5nZXRQb2x5bm9taWFsKCk7XG4gICAgICAgIGNvbnN0IG4gPSBwb2x5bm9taWFsLmNvZWYuYnl0ZUxlbmd0aCAvIHRoaXMuRnIubjg7XG4gICAgICAgIGNvbnN0IFBUYXVOID0gUFRhdS5zbGljZSgwLCBuICogdGhpcy5HMS5GLm44ICogMik7XG4gICAgICAgIGNvbnN0IGJtID0gYXdhaXQgdGhpcy5Gci5iYXRjaEZyb21Nb250Z29tZXJ5KHBvbHlub21pYWwuY29lZik7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLkcxLm11bHRpRXhwQWZmaW5lKFBUYXVOLCBibSwgdGhpcy5sb2dnZXIsIG5hbWUpO1xuICAgICAgICByZXMgPSB0aGlzLkcxLnRvQWZmaW5lKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufSIsIi8qXG4gICAgQ29weXJpZ2h0IDIwMjIgaWRlbjMgYXNzb2NpYXRpb24uXG5cbiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBzbmFya2pzLlxuXG4gICAgc25hcmtqcyBpcyBhIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGVcbiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbilcbiAgICBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgIHNuYXJranMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFlcbiAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3JcbiAgICBtb3JlIGRldGFpbHMuXG5cbiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gICAgc25hcmtqcy4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbmltcG9ydCB7cmVhZFIxY3NGZH0gZnJvbSBcInIxY3NmaWxlXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi9wb3dlcnNvZnRhdV91dGlscy5qc1wiO1xuaW1wb3J0IHtjcmVhdGVCaW5GaWxlLCBlbmRXcml0ZVNlY3Rpb24sIHJlYWRCaW5GaWxlLCBzdGFydFdyaXRlU2VjdGlvbiwgd3JpdGVCaWdJbnQsfSBmcm9tIFwiQGlkZW4zL2JpbmZpbGV1dGlsc1wiO1xuaW1wb3J0IHtsb2cyfSBmcm9tIFwiLi9taXNjLmpzXCI7XG5pbXBvcnQge0JpZ0J1ZmZlciwgU2NhbGFyfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5pbXBvcnQgQmlnQXJyYXkgZnJvbSBcIi4vYmlnYXJyYXkuanNcIjtcbmltcG9ydCB7XG4gICAgWktFWV9GRl9IRUFERVJfU0VDVElPTixcbiAgICBaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OLFxuICAgIFpLRVlfRkZfQV9NQVBfU0VDVElPTixcbiAgICBaS0VZX0ZGX0JfTUFQX1NFQ1RJT04sXG4gICAgWktFWV9GRl9DX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUUxfU0VDVElPTixcbiAgICBaS0VZX0ZGX1FSX1NFQ1RJT04sXG4gICAgWktFWV9GRl9RTV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUU9fU0VDVElPTixcbiAgICBaS0VZX0ZGX1FDX1NFQ1RJT04sXG4gICAgWktFWV9GRl9TSUdNQTFfU0VDVElPTixcbiAgICBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OLFxuICAgIFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04sXG4gICAgWktFWV9GRl9MQUdSQU5HRV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUFRBVV9TRUNUSU9OLFxuICAgIEZGX1RfUE9MX0RFR19NSU4sXG4gICAgWktFWV9GRl9OU0VDVElPTlMsXG4gICAgWktFWV9GRl9DMF9TRUNUSU9OLFxufSBmcm9tIFwiLi9mZmxvbmtfY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQge0ZGTE9OS19QUk9UT0NPTF9JRCwgSEVBREVSX1pLRVlfU0VDVElPTn0gZnJvbSBcIi4vemtleV9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7XG4gICAgZ2V0RkZsb25rQWRkaXRpb25Db25zdHJhaW50LFxuICAgIGdldEZGbG9ua0NvbnN0YW50Q29uc3RyYWludCxcbiAgICBnZXRGRmxvbmtNdWx0aXBsaWNhdGlvbkNvbnN0cmFpbnRcbn0gZnJvbSBcIi4vcGxvbmtfZXF1YXRpb24uanNcIjtcbmltcG9ydCB7cjFjc0NvbnN0cmFpbnRQcm9jZXNzb3J9IGZyb20gXCIuL3IxY3NfY29uc3RyYWludF9wcm9jZXNzb3IuanNcIjtcbmltcG9ydCB7UG9seW5vbWlhbH0gZnJvbSBcIi4vcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzXCI7XG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCB7RXZhbHVhdGlvbnN9IGZyb20gXCIuL3BvbHlub21pYWwvZXZhbHVhdGlvbnMuanNcIjtcbmltcG9ydCB7Q1BvbHlub21pYWx9IGZyb20gXCIuL3BvbHlub21pYWwvY3BvbHlub21pYWwuanNcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBmZmxvbmtTZXR1cChyMWNzRmlsZW5hbWUsIHB0YXVGaWxlbmFtZSwgemtleUZpbGVuYW1lLCBsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBTRVRVUCBTVEFSVEVEXCIpO1xuXG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgIC8vIFJlYWQgUFRhdSBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgUFRhdSBmaWxlXCIpO1xuICAgIGNvbnN0IHtmZDogZmRQVGF1LCBzZWN0aW9uczogcFRhdVNlY3Rpb25zfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHB0YXVGaWxlbmFtZSwgXCJwdGF1XCIsIDEsIDEgPDwgMjIsIDEgPDwgMjQpO1xuICAgIGlmICghcFRhdVNlY3Rpb25zWzEyXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3dlcnMgb2YgVGF1IGlzIG5vdCB3ZWxsIHByZXBhcmVkLiBTZWN0aW9uIDEyIG1pc3NpbmcuXCIpO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJ2ZSBkZWZpbmVkIGluIFBUYXVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gR2V0dGluZyBjdXJ2ZSBmcm9tIFBUYXUgc2V0dGluZ3NcIik7XG4gICAgY29uc3Qge2N1cnZlfSA9IGF3YWl0IHV0aWxzLnJlYWRQVGF1SGVhZGVyKGZkUFRhdSwgcFRhdVNlY3Rpb25zKTtcblxuICAgIC8vIFJlYWQgcjFjcyBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgcjFjcyBmaWxlXCIpO1xuICAgIGNvbnN0IHtmZDogZmRSMWNzLCBzZWN0aW9uczogc2VjdGlvbnNSMWNzfSA9IGF3YWl0IHJlYWRCaW5GaWxlKHIxY3NGaWxlbmFtZSwgXCJyMWNzXCIsIDEsIDEgPDwgMjIsIDEgPDwgMjQpO1xuICAgIGNvbnN0IHIxY3MgPSBhd2FpdCByZWFkUjFjc0ZkKGZkUjFjcywgc2VjdGlvbnNSMWNzLCB7bG9hZENvbnN0cmFpbnRzOiBmYWxzZSwgbG9hZEN1c3RvbUdhdGVzOiB0cnVlfSk7XG5cbiAgICAvLyBQb3RlbnRpYWwgZXJyb3IgY2hlY2tzXG4gICAgaWYgKHIxY3MucHJpbWUgIT09IGN1cnZlLnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicjFjcyBjdXJ2ZSBkb2VzIG5vdCBtYXRjaCBwb3dlcnMgb2YgdGF1IGNlcmVtb255IGN1cnZlXCIpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemF0aW9uc1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBzRnIgPSBjdXJ2ZS5Gci5uODtcbiAgICBjb25zdCBzRzEgPSBjdXJ2ZS5HMS5GLm44ICogMjtcbiAgICBjb25zdCBzRzIgPSBjdXJ2ZS5HMi5GLm44ICogMjtcblxuICAgIGxldCBwb2x5bm9taWFscyA9IHt9O1xuICAgIGxldCBldmFsdWF0aW9ucyA9IHt9O1xuICAgIGxldCBQVGF1O1xuXG4gICAgbGV0IHNldHRpbmdzID0ge1xuICAgICAgICBuVmFyczogcjFjcy5uVmFycyxcbiAgICAgICAgblB1YmxpYzogcjFjcy5uT3V0cHV0cyArIHIxY3MublB1YklucHV0c1xuICAgIH07XG5cbiAgICBjb25zdCBwbG9ua0NvbnN0cmFpbnRzID0gbmV3IEJpZ0FycmF5KCk7XG4gICAgbGV0IHBsb25rQWRkaXRpb25zID0gbmV3IEJpZ0FycmF5KCk7XG5cbiAgICAvLyBQcm9jZXNzIGNvbnN0cmFpbnRzIGluc2lkZSByMWNzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFByb2Nlc3NpbmcgRkZsb25rIGNvbnN0cmFpbnRzXCIpO1xuICAgIGF3YWl0IGNvbXB1dGVGRkNvbnN0cmFpbnRzKGN1cnZlLkZyLCByMWNzLCBsb2dnZXIpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBBcyB0aGUgdCBwb2x5bm9taWFsIGlzIG4rNSB3aGUgbmVlZCBhdCBsZWFzdCBhIHBvd2VyIG9mIDRcbiAgICAvL1RPRE8gY2hlY2shISEhXG4gICAgLy8gTk9URSA6IHBsb25rQ29uc3RyYWludHMgKyAyID0gI2NvbnN0cmFpbnRzICsgYmxpbmRpbmcgY29lZmZpY2llbnRzIGZvciBlYWNoIHdpcmUgcG9seW5vbWlhbFxuICAgIHNldHRpbmdzLmNpclBvd2VyID0gTWF0aC5tYXgoRkZfVF9QT0xfREVHX01JTiwgbG9nMigocGxvbmtDb25zdHJhaW50cy5sZW5ndGggKyAyKSAtIDEpICsgMSk7XG4gICAgc2V0dGluZ3MuZG9tYWluU2l6ZSA9IDIgKiogc2V0dGluZ3MuY2lyUG93ZXI7XG5cbiAgICBpZiAocFRhdVNlY3Rpb25zWzJdWzBdLnNpemUgPCAoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDkgKyAxOCkgKiBzRzEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG93ZXJzIG9mIFRhdSBpcyBub3QgYmlnIGVub3VnaCBmb3IgdGhpcyBjaXJjdWl0IHNpemUuIFNlY3Rpb24gMiB0b28gc21hbGwuXCIpO1xuICAgIH1cbiAgICBpZiAocFRhdVNlY3Rpb25zWzNdWzBdLnNpemUgPCBzRzIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG93ZXJzIG9mIFRhdSBpcyBub3Qgd2VsbCBwcmVwYXJlZC4gU2VjdGlvbiAzIHRvbyBzbWFsbC5cIik7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiICBGRkxPTksgU0VUVVAgU0VUVElOR1NcIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIEN1cnZlOiAgICAgICAgICR7Y3VydmUubmFtZX1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ2lyY3VpdCBwb3dlcjogJHtzZXR0aW5ncy5jaXJQb3dlcn1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgRG9tYWluIHNpemU6ICAgJHtzZXR0aW5ncy5kb21haW5TaXplfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzOiAgICAgICAgICAke3NldHRpbmdzLm5WYXJzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBQdWJsaWMgdmFyczogICAke3NldHRpbmdzLm5QdWJsaWN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIENvbnN0cmFpbnRzOiAgICR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIEFkZGl0aW9uczogICAgICR7cGxvbmtBZGRpdGlvbnMubGVuZ3RofWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBrMSBhbmQgazIgdG8gYmUgdXNlZCBpbiB0aGUgcGVybXV0YXRpb24gY2hlY2tzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IGNvbXB1dGluZyBrMSBhbmQgazJcIik7XG4gICAgY29uc3QgW2sxLCBrMl0gPSBjb21wdXRlSzFLMigpO1xuXG4gICAgLy8gQ29tcHV0ZSBvbWVnYSAzICh3MykgYW5kIG9tZWdhIDQgKHc0KSB0byBiZSB1c2VkIGluIHRoZSBwcm92ZXIgYW5kIHRoZSB2ZXJpZmllclxuICAgIC8vIHczXjMgPSAxIGFuZCAgdzReNCA9IDFcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gY29tcHV0aW5nIHczXCIpO1xuICAgIGNvbnN0IHczID0gY29tcHV0ZVczKCk7XG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IGNvbXB1dGluZyB3NFwiKTtcbiAgICBjb25zdCB3NCA9IGNvbXB1dGVXNCgpO1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBjb21wdXRpbmcgdzhcIik7XG4gICAgY29uc3QgdzggPSBjb21wdXRlVzgoKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gY29tcHV0aW5nIHdyXCIpO1xuICAgIGNvbnN0IHdyID0gZ2V0T21lZ2FDdWJpY1Jvb3Qoc2V0dGluZ3MuY2lyUG93ZXIsIGN1cnZlLkZyKTtcblxuICAgIC8vIFdyaXRlIG91dHB1dCB6a2V5IGZpbGVcbiAgICBhd2FpdCB3cml0ZVprZXlGaWxlKCk7XG5cbiAgICBhd2FpdCBmZFIxY3MuY2xvc2UoKTtcbiAgICBhd2FpdCBmZFBUYXUuY2xvc2UoKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiRkZMT05LIFNFVFVQIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIDA7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlRkZDb25zdHJhaW50cyhGciwgcjFjcywgbG9nZ2VyKSB7XG4gICAgICAgIC8vIEFkZCBwdWJsaWMgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MublB1YmxpYzsgaSsrKSB7XG4gICAgICAgICAgICBwbG9ua0NvbnN0cmFpbnRzLnB1c2goZ2V0RkZsb25rQ29uc3RhbnRDb25zdHJhaW50KGkgKyAxLCBGcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGFsbCBjb25zdHJhaW50cyBmcm9tIHIxY3MgZmlsZVxuICAgICAgICBjb25zdCByMWNzUHJvY2Vzc29yID0gbmV3IHIxY3NDb25zdHJhaW50UHJvY2Vzc29yKEZyLCBnZXRGRmxvbmtDb25zdGFudENvbnN0cmFpbnQsIGdldEZGbG9ua0FkZGl0aW9uQ29uc3RyYWludCwgZ2V0RkZsb25rTXVsdGlwbGljYXRpb25Db25zdHJhaW50LCBsb2dnZXIpO1xuXG4gICAgICAgIGNvbnN0IGJSMWNzID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkUjFjcywgc2VjdGlvbnNSMWNzLCAyKTtcbiAgICAgICAgbGV0IGJSMWNzUG9zID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByMWNzLm5Db25zdHJhaW50czsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKGxvZ2dlcikgJiYgKGkgIT09IDApICYmIChpICUgNTAwMDAwID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGAgICAgcHJvY2Vzc2luZyByMWNzIGNvbnN0cmFpbnRzICR7aX0vJHtyMWNzLm5Db25zdHJhaW50c31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtjb25zdHJhaW50cywgYWRkaXRpb25zXSA9IHIxY3NQcm9jZXNzb3IucHJvY2Vzc1IxY3NDb25zdHJhaW50KHNldHRpbmdzLCAuLi5yZWFkQ29uc3RyYWludCgpKTtcblxuICAgICAgICAgICAgcGxvbmtDb25zdHJhaW50cy5wdXNoKC4uLmNvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIHBsb25rQWRkaXRpb25zLnB1c2goLi4uYWRkaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRDb25zdHJhaW50KCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IFtdO1xuICAgICAgICAgICAgY1swXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgY1sxXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgY1syXSA9IHJlYWRMQygpO1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkTEMoKSB7XG4gICAgICAgICAgICBjb25zdCBsYyA9IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBidWZmVUwzMiA9IGJSMWNzLnNsaWNlKGJSMWNzUG9zLCBiUjFjc1BvcyArIDQpO1xuICAgICAgICAgICAgYlIxY3NQb3MgKz0gNDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZVTDMyViA9IG5ldyBEYXRhVmlldyhidWZmVUwzMi5idWZmZXIpO1xuICAgICAgICAgICAgY29uc3QgbklkeCA9IGJ1ZmZVTDMyVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBiUjFjcy5zbGljZShiUjFjc1BvcywgYlIxY3NQb3MgKyAoNCArIHIxY3MubjgpICogbklkeCk7XG4gICAgICAgICAgICBiUjFjc1BvcyArPSAoNCArIHIxY3MubjgpICogbklkeDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbklkeDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gYnVmZlYuZ2V0VWludDMyKGkgKiAoNCArIHIxY3MubjgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSByMWNzLkYuZnJvbVJwckxFKGJ1ZmYsIGkgKiAoNCArIHIxY3MubjgpICsgNCk7XG4gICAgICAgICAgICAgICAgbGNbaWR4XSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlWmtleUZpbGUoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBXcml0aW5nIHRoZSB6a2V5IGZpbGVcIik7XG4gICAgICAgIGNvbnN0IGZkWktleSA9IGF3YWl0IGNyZWF0ZUJpbkZpbGUoemtleUZpbGVuYW1lLCBcInprZXlcIiwgMSwgWktFWV9GRl9OU0VDVElPTlMsIDEgPDwgMjIsIDEgPDwgMjQpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7SEVBREVSX1pLRVlfU0VDVElPTn0uIFprZXkgSGVhZGVyYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlWmtleUhlYWRlcihmZFpLZXkpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9BRERJVElPTlNfU0VDVElPTn0uIEFkZGl0aW9uc2ApO1xuICAgICAgICBhd2FpdCB3cml0ZUFkZGl0aW9ucyhmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9BX01BUF9TRUNUSU9OfS4gQSBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9BX01BUF9TRUNUSU9OLCAwLCBcIkEgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9CX01BUF9TRUNUSU9OfS4gQiBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9CX01BUF9TRUNUSU9OLCAxLCBcIkIgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9DX01BUF9TRUNUSU9OfS4gQyBNYXBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVXaXRuZXNzTWFwKGZkWktleSwgWktFWV9GRl9DX01BUF9TRUNUSU9OLCAyLCBcIkMgbWFwXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RTF9TRUNUSU9OfS4gUUxgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RTF9TRUNUSU9OLCAzLCBcIlFMXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RUl9TRUNUSU9OfS4gUVJgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RUl9TRUNUSU9OLCA0LCBcIlFSXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RTV9TRUNUSU9OfS4gUU1gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RTV9TRUNUSU9OLCA1LCBcIlFNXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RT19TRUNUSU9OfS4gUU9gKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RT19TRUNUSU9OLCA2LCBcIlFPXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9RQ19TRUNUSU9OfS4gUUNgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVRTWFwKGZkWktleSwgWktFWV9GRl9RQ19TRUNUSU9OLCA3LCBcIlFDXCIpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9ucyAke1pLRVlfRkZfU0lHTUExX1NFQ1RJT059LCR7WktFWV9GRl9TSUdNQTJfU0VDVElPTn0sJHtaS0VZX0ZGX1NJR01BM19TRUNUSU9OfS4gU2lnbWExLCBTaWdtYTIgJiBTaWdtYSAzYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlU2lnbWEoZmRaS2V5KTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgwrfCt8K3IFdyaXRpbmcgU2VjdGlvbiAke1pLRVlfRkZfTEFHUkFOR0VfU0VDVElPTn0uIExhZ3JhbmdlIFBvbHlub21pYWxzYCk7XG4gICAgICAgIGF3YWl0IHdyaXRlTGFncmFuZ2VQb2x5bm9taWFscyhmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9QVEFVX1NFQ1RJT059LiBQb3dlcnMgb2YgVGF1YCk7XG4gICAgICAgIGF3YWl0IHdyaXRlUHRhdShmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9DMF9TRUNUSU9OfS4gQzBgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDMChmZFpLZXkpO1xuICAgICAgICBpZiAoZ2xvYmFsVGhpcy5nYykgZ2xvYmFsVGhpcy5nYygpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKGDCt8K3wrcgV3JpdGluZyBTZWN0aW9uICR7WktFWV9GRl9IRUFERVJfU0VDVElPTn0uIEZGbG9uayBIZWFkZXJgKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGRmxvbmtIZWFkZXIoZmRaS2V5KTtcbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gV3JpdGluZyB0aGUgemtleSBmaWxlIGZpbmlzaGVkXCIpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlWmtleUhlYWRlcihmZFpLZXkpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBIRUFERVJfWktFWV9TRUNUSU9OKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoRkZMT05LX1BST1RPQ09MX0lEKTtcbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVBZGRpdGlvbnMoZmRaS2V5KSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgWktFWV9GRl9BRERJVElPTlNfU0VDVElPTik7XG5cbiAgICAgICAgLy8gV3JpdHRlbiB2YWx1ZXMgYXJlIDIgKiAzMiBiaXQgaW50ZWdlcnMgKDIgKiA0IGJ5dGVzKSArIDIgZmllbGQgc2l6ZSB2YWx1ZXMgKCAyICogc0ZyIGJ5dGVzKVxuICAgICAgICBjb25zdCBidWZmT3V0ID0gbmV3IFVpbnQ4QXJyYXkoOCArIDIgKiBzRnIpO1xuICAgICAgICBjb25zdCBidWZmT3V0ViA9IG5ldyBEYXRhVmlldyhidWZmT3V0LmJ1ZmZlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbG9ua0FkZGl0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIGxvZ2dlci5pbmZvKGAgICAgICB3cml0aW5nIEFkZGl0aW9uczogJHtpfS8ke3Bsb25rQWRkaXRpb25zLmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb24gPSBwbG9ua0FkZGl0aW9uc1tpXTtcblxuICAgICAgICAgICAgYnVmZk91dFYuc2V0VWludDMyKDAsIGFkZGl0aW9uWzBdLCB0cnVlKTtcbiAgICAgICAgICAgIGJ1ZmZPdXRWLnNldFVpbnQzMig0LCBhZGRpdGlvblsxXSwgdHJ1ZSk7XG4gICAgICAgICAgICBidWZmT3V0LnNldChhZGRpdGlvblsyXSwgOCk7XG4gICAgICAgICAgICBidWZmT3V0LnNldChhZGRpdGlvblszXSwgOCArIHNGcik7XG5cbiAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZShidWZmT3V0KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVdpdG5lc3NNYXAoZmRaS2V5LCBzZWN0aW9uTnVtLCBwb3NDb25zdHJhaW50LCBuYW1lKSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgc2VjdGlvbk51bSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxvbmtDb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoaSAhPT0gMCkgJiYgKGkgJSA1MDAwMDAgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYCAgICAgIHdyaXRpbmcgd2l0bmVzcyAke25hbWV9OiAke2l9LyR7cGxvbmtDb25zdHJhaW50cy5sZW5ndGh9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHBsb25rQ29uc3RyYWludHNbaV1bcG9zQ29uc3RyYWludF0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUU1hcChmZFpLZXksIHNlY3Rpb25OdW0sIHBvc0NvbnN0cmFpbnQsIG5hbWUpIHtcbiAgICAgICAgLy8gQ29tcHV0ZSBRIGZyb20gcSBldmFsdWF0aW9uc1xuICAgICAgICBsZXQgUSA9IG5ldyBCaWdCdWZmZXIoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIHNGcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBRLnNldChwbG9ua0NvbnN0cmFpbnRzW2ldW3Bvc0NvbnN0cmFpbnRdLCBpICogc0ZyKTtcbiAgICAgICAgICAgIGlmICgobG9nZ2VyKSAmJiAoaSAhPT0gMCkgJiYgKGkgJSA1MDAwMDAgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYCAgICAgIHdyaXRpbmcgJHtuYW1lfTogJHtpfS8ke3Bsb25rQ29uc3RyYWludHMubGVuZ3RofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9seW5vbWlhbHNbbmFtZV0gPSBhd2FpdCBQb2x5bm9taWFsLmZyb21FdmFsdWF0aW9ucyhRLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgZXZhbHVhdGlvbnNbbmFtZV0gPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFsc1tuYW1lXSwgNCwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgLy8gV3JpdGUgUSBjb2VmZmljaWVudHMgYW5kIGV2YWx1YXRpb25zXG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgc2VjdGlvbk51bSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShwb2x5bm9taWFsc1tuYW1lXS5jb2VmKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGV2YWx1YXRpb25zW25hbWVdLmV2YWwpO1xuICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVNpZ21hKGZkWktleSkge1xuICAgICAgICAvLyBDb21wdXRlIHNpZ21hXG4gICAgICAgIGNvbnN0IHNpZ21hID0gbmV3IEJpZ0J1ZmZlcihzRnIgKiBzZXR0aW5ncy5kb21haW5TaXplICogMyk7XG4gICAgICAgIGNvbnN0IGxhc3RTZWVuID0gbmV3IEJpZ0FycmF5KHNldHRpbmdzLm5WYXJzKTtcbiAgICAgICAgY29uc3QgZmlyc3RQb3MgPSBuZXcgQmlnQXJyYXkoc2V0dGluZ3MublZhcnMpO1xuXG4gICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmRvbWFpblNpemU7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCBwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEocGxvbmtDb25zdHJhaW50c1tpXVswXSwgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYShwbG9ua0NvbnN0cmFpbnRzW2ldWzFdLCBzZXR0aW5ncy5kb21haW5TaXplICsgaSk7XG4gICAgICAgICAgICAgICAgYnVpbGRTaWdtYShwbG9ua0NvbnN0cmFpbnRzW2ldWzJdLCBzZXR0aW5ncy5kb21haW5TaXplICogMiArIGkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgc2V0dGluZ3MuZG9tYWluU2l6ZSAtIDIpIHtcbiAgICAgICAgICAgICAgICBidWlsZFNpZ21hKDAsIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgc2V0dGluZ3MuZG9tYWluU2l6ZSArIGkpO1xuICAgICAgICAgICAgICAgIGJ1aWxkU2lnbWEoMCwgc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDIgKyBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbWEuc2V0KHcsIGkgKiBzRnIpO1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChGci5tdWwodywgazEpLCAoc2V0dGluZ3MuZG9tYWluU2l6ZSArIGkpICogc0ZyKTtcbiAgICAgICAgICAgICAgICBzaWdtYS5zZXQoRnIubXVsKHcsIGsyKSwgKHNldHRpbmdzLmRvbWFpblNpemUgKiAyICsgaSkgKiBzRnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3ID0gRnIubXVsKHcsIEZyLndbc2V0dGluZ3MuY2lyUG93ZXJdKTtcblxuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgICAgICAgd3JpdGluZyBzaWdtYSBwaGFzZTE6ICR7aX0vJHtwbG9ua0NvbnN0cmFpbnRzLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MublZhcnM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFBvc1tpXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChsYXN0U2VlbltpXSwgZmlyc3RQb3NbaV0gKiBzRnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJWYXJpYWJsZSBub3QgdXNlZFwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZhcmlhYmxlIG5vdCB1c2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChsb2dnZXIpICYmIChpICE9PSAwKSAmJiAoaSAlIDUwMDAwMCA9PT0gMCkpIGxvZ2dlci5pbmZvKGAgICAgICB3cml0aW5nIHNpZ21hIHBoYXNlMjogJHtpfS8ke3NldHRpbmdzLm5WYXJzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgICAgICAvLyBXcml0ZSBzaWdtYSBjb2VmZmljaWVudHMgYW5kIGV2YWx1YXRpb25zXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSWQgPSAwID09PSBpID8gWktFWV9GRl9TSUdNQTFfU0VDVElPTiA6IDEgPT09IGkgPyBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OIDogWktFWV9GRl9TSUdNQTNfU0VDVElPTjtcblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBcIlNcIiArIChpICsgMSk7XG4gICAgICAgICAgICBwb2x5bm9taWFsc1tuYW1lXSA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKHNpZ21hLnNsaWNlKHNldHRpbmdzLmRvbWFpblNpemUgKiBzRnIgKiBpLCBzZXR0aW5ncy5kb21haW5TaXplICogc0ZyICogKGkgKyAxKSksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnNbbmFtZV0gPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFsc1tuYW1lXSwgNCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIHNlY3Rpb25JZCk7XG4gICAgICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUocG9seW5vbWlhbHNbbmFtZV0uY29lZik7XG4gICAgICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoZXZhbHVhdGlvbnNbbmFtZV0uZXZhbCk7XG4gICAgICAgICAgICBhd2FpdCBlbmRXcml0ZVNlY3Rpb24oZmRaS2V5KTtcblxuICAgICAgICAgICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkU2lnbWEoc2lnbmFsSWQsIGlkeCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0U2VlbltzaWduYWxJZF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFBvc1tzaWduYWxJZF0gPSBpZHg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZ21hLnNldChsYXN0U2VlbltzaWduYWxJZF0sIGlkeCAqIHNGcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdjtcbiAgICAgICAgICAgIGlmIChpZHggPCBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IHc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkeCA8IDIgKiBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdiA9IEZyLm11bCh3LCBrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHYgPSBGci5tdWwodywgazIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0U2VlbltzaWduYWxJZF0gPSB2O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVMYWdyYW5nZVBvbHlub21pYWxzKGZkWktleSkge1xuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIFpLRVlfRkZfTEFHUkFOR0VfU0VDVElPTik7XG5cbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWF4KHNldHRpbmdzLm5QdWJsaWMsIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJ1ZmYgPSBuZXcgQmlnQnVmZmVyKHNldHRpbmdzLmRvbWFpblNpemUgKiBzRnIpO1xuICAgICAgICAgICAgYnVmZi5zZXQoRnIub25lLCBpICogc0ZyKTtcblxuICAgICAgICAgICAgYXdhaXQgd3JpdGVQNChmZFpLZXksIGJ1ZmYpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHRhdShmZFpLZXkpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRXcml0ZVNlY3Rpb24oZmRaS2V5LCBaS0VZX0ZGX1BUQVVfU0VDVElPTik7XG5cbiAgICAgICAgLy8gZG9tYWluU2l6ZSAqIDkgKyAxOCA9IG1heGltdW0gU1JTIGxlbmd0aCBuZWVkZWQsIHNwZWNpZmljYWxseSB0byBjb21taXQgQzJcbiAgICAgICAgUFRhdSA9IG5ldyBCaWdCdWZmZXIoKHNldHRpbmdzLmRvbWFpblNpemUgKiA5ICsgMTgpICogc0cxKTtcbiAgICAgICAgYXdhaXQgZmRQVGF1LnJlYWRUb0J1ZmZlcihQVGF1LCAwLCAoc2V0dGluZ3MuZG9tYWluU2l6ZSAqIDkgKyAxOCkgKiBzRzEsIHBUYXVTZWN0aW9uc1syXVswXS5wKTtcblxuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoUFRhdSk7XG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQzAoZmRaS2V5KSB7XG4gICAgICAgIC8vIEMwKFgpIDo9IFFMKFheOCkgKyBYIMK3IFFSKFheOCkgKyBYXjIgwrcgUU8oWF44KSArIFheMyDCtyBRTShYXjgpICsgWF40IMK3IFFDKFheOClcbiAgICAgICAgLy8gICAgICAgICAgICArIFheNSDCtyBTSUdNQTEoWF44KSArIFheNiDCtyBTSUdNQTIoWF44KSArIFheNyDCtyBTSUdNQTMoWF44KVxuICAgICAgICBsZXQgQzAgPSBuZXcgQ1BvbHlub21pYWwoOCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoMCwgcG9seW5vbWlhbHMuUUwpO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDEsIHBvbHlub21pYWxzLlFSKTtcbiAgICAgICAgQzAuYWRkUG9seW5vbWlhbCgyLCBwb2x5bm9taWFscy5RTyk7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoMywgcG9seW5vbWlhbHMuUU0pO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDQsIHBvbHlub21pYWxzLlFDKTtcbiAgICAgICAgQzAuYWRkUG9seW5vbWlhbCg1LCBwb2x5bm9taWFscy5TMSk7XG4gICAgICAgIEMwLmFkZFBvbHlub21pYWwoNiwgcG9seW5vbWlhbHMuUzIpO1xuICAgICAgICBDMC5hZGRQb2x5bm9taWFsKDcsIHBvbHlub21pYWxzLlMzKTtcblxuICAgICAgICBwb2x5bm9taWFscy5DMCA9IEMwLmdldFBvbHlub21pYWwoKTtcblxuICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgaWYgKHBvbHlub21pYWxzLkMwLmRlZ3JlZSgpID49IDggKiBzZXR0aW5ncy5kb21haW5TaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDMCBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzdGFydFdyaXRlU2VjdGlvbihmZFpLZXksIFpLRVlfRkZfQzBfU0VDVElPTik7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShwb2x5bm9taWFscy5DMC5jb2VmKTtcbiAgICAgICAgYXdhaXQgZW5kV3JpdGVTZWN0aW9uKGZkWktleSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVGRmxvbmtIZWFkZXIoZmRaS2V5KSB7XG4gICAgICAgIGF3YWl0IHN0YXJ0V3JpdGVTZWN0aW9uKGZkWktleSwgWktFWV9GRl9IRUFERVJfU0VDVElPTik7XG5cbiAgICAgICAgY29uc3QgcHJpbWVRID0gY3VydmUucTtcbiAgICAgICAgY29uc3QgbjhxID0gKE1hdGguZmxvb3IoKFNjYWxhci5iaXRMZW5ndGgocHJpbWVRKSAtIDEpIC8gNjQpICsgMSkgKiA4O1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihuOHEpO1xuICAgICAgICBhd2FpdCB3cml0ZUJpZ0ludChmZFpLZXksIHByaW1lUSwgbjhxKTtcblxuICAgICAgICBjb25zdCBwcmltZVIgPSBjdXJ2ZS5yO1xuICAgICAgICBjb25zdCBuOHIgPSAoTWF0aC5mbG9vcigoU2NhbGFyLmJpdExlbmd0aChwcmltZVIpIC0gMSkgLyA2NCkgKyAxKSAqIDg7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKG44cik7XG4gICAgICAgIGF3YWl0IHdyaXRlQmlnSW50KGZkWktleSwgcHJpbWVSLCBuOHIpO1xuXG4gICAgICAgIC8vIFRvdGFsIG51bWJlciBvZiByMWNzIHZhcnNcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIoc2V0dGluZ3MublZhcnMpO1xuICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgcjFjcyBwdWJsaWMgdmFycyA9IG91dHB1dHMgKyBwdWJsaWMgaW5wdXRzXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZVVMRTMyKHNldHRpbmdzLm5QdWJsaWMpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGVVTEUzMihzZXR0aW5ncy5kb21haW5TaXplKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtBZGRpdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlVUxFMzIocGxvbmtDb25zdHJhaW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMSk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShrMik7XG5cbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHczKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHc0KTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHc4KTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKHdyKTtcblxuICAgICAgICBsZXQgYlhfMjtcbiAgICAgICAgYlhfMiA9IGF3YWl0IGZkUFRhdS5yZWFkKHNHMiwgcFRhdVNlY3Rpb25zWzNdWzBdLnAgKyBzRzIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoYlhfMik7XG5cbiAgICAgICAgbGV0IGNvbW1pdEMwID0gYXdhaXQgcG9seW5vbWlhbHMuQzAubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIkMwXCIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkud3JpdGUoY29tbWl0QzApO1xuXG4gICAgICAgIGF3YWl0IGVuZFdyaXRlU2VjdGlvbihmZFpLZXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlUDQoZmRaS2V5LCBidWZmKSB7XG4gICAgICAgIGNvbnN0IFtjb2VmZmljaWVudHMsIGV2YWx1YXRpb25zNF0gPSBhd2FpdCBQb2x5bm9taWFsLnRvNFQoYnVmZiwgc2V0dGluZ3MuZG9tYWluU2l6ZSwgW10sIEZyKTtcbiAgICAgICAgYXdhaXQgZmRaS2V5LndyaXRlKGNvZWZmaWNpZW50cyk7XG4gICAgICAgIGF3YWl0IGZkWktleS53cml0ZShldmFsdWF0aW9uczQpO1xuXG4gICAgICAgIHJldHVybiBbY29lZmZpY2llbnRzLCBldmFsdWF0aW9uczRdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVLMUsyKCkge1xuICAgICAgICBsZXQgazEgPSBGci50d287XG4gICAgICAgIHdoaWxlIChpc0luY2x1ZGVkKGsxLCBbXSwgc2V0dGluZ3MuY2lyUG93ZXIpKSBGci5hZGQoazEsIEZyLm9uZSk7XG4gICAgICAgIGxldCBrMiA9IEZyLmFkZChrMSwgRnIub25lKTtcbiAgICAgICAgd2hpbGUgKGlzSW5jbHVkZWQoazIsIFtrMV0sIHNldHRpbmdzLmNpclBvd2VyKSkgRnIuYWRkKGsyLCBGci5vbmUpO1xuICAgICAgICByZXR1cm4gW2sxLCBrMl07XG5cbiAgICAgICAgZnVuY3Rpb24gaXNJbmNsdWRlZChrLCBrQXJyLCBwb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpblNpemUgPSAyICoqIHBvdztcbiAgICAgICAgICAgIGxldCB3ID0gRnIub25lO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgdykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga0Fyci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRnIuZXEoaywgRnIubXVsKGtBcnJbal0sIHcpKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHcgPSBGci5tdWwodywgRnIud1twb3ddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXMygpIHtcbiAgICAgICAgbGV0IGdlbmVyYXRvciA9IEZyLmUoMzE2MjQpO1xuXG4gICAgICAgIC8vIEV4cG9uZW50IGlzIG9yZGVyKHIgLSAxKSAvIDNcbiAgICAgICAgbGV0IG9yZGVyUnN1YjEgPSAzNjQ4MDQwNDc4NjM5ODc5MjAzNzA3NzM0MjkwODc2MjEyNTE0NzU4MDYwNzMzNDAyNjcyMzkwNjE2MzY3MzY0NDI5MzAxNDE1OTM2bjtcbiAgICAgICAgbGV0IGV4cG9uZW50ID0gU2NhbGFyLmRpdihvcmRlclJzdWIxLCBTY2FsYXIuZSgzKSk7XG5cbiAgICAgICAgcmV0dXJuIEZyLmV4cChnZW5lcmF0b3IsIGV4cG9uZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlVzQoKSB7XG4gICAgICAgIHJldHVybiBGci53WzJdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXOCgpIHtcbiAgICAgICAgcmV0dXJuIEZyLndbM107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0T21lZ2FDdWJpY1Jvb3QocG93ZXIsIEZyKSB7XG4gICAgICAgIC8vIEhhcmRjb3JkZWQgM3RoLXJvb3Qgb2YgRnIud1syOF1cbiAgICAgICAgY29uc3QgZmlyc3RSb290ID0gRnIuZSg0Njc3OTkxNjU4ODYwNjk2MTAwMzYwNDY4NjY3OTkyNjQwMjY0ODEzNDQyOTkwNzkwMTE3NjIwMjY3NzQ1MzM3NzQzNDU5ODgwODBuKTtcblxuICAgICAgICByZXR1cm4gRnIuZXhwKGZpcnN0Um9vdCwgMiAqKiAoMjggLSBwb3dlcikpO1xuICAgIH1cbn1cblxuXG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBiaW5GaWxlVXRpbHMgZnJvbSBcIkBpZGVuMy9iaW5maWxldXRpbHNcIjtcbmltcG9ydCAqIGFzIHprZXlVdGlscyBmcm9tIFwiLi96a2V5X3V0aWxzLmpzXCI7XG5pbXBvcnQgKiBhcyB3dG5zVXRpbHMgZnJvbSBcIi4vd3Ruc191dGlscy5qc1wiO1xuaW1wb3J0IHsgQmlnQnVmZmVyLCBTY2FsYXIsIHV0aWxzIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRkZMT05LX1BST1RPQ09MX0lEIH0gZnJvbSBcIi4vemtleV9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7XG4gICAgWktFWV9GRl9BX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfQURESVRJT05TX1NFQ1RJT04sXG4gICAgWktFWV9GRl9CX01BUF9TRUNUSU9OLFxuICAgIFpLRVlfRkZfQzBfU0VDVElPTixcbiAgICBaS0VZX0ZGX0NfTUFQX1NFQ1RJT04sXG4gICAgWktFWV9GRl9MQUdSQU5HRV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUFRBVV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUUNfU0VDVElPTixcbiAgICBaS0VZX0ZGX1FMX1NFQ1RJT04sXG4gICAgWktFWV9GRl9RTV9TRUNUSU9OLFxuICAgIFpLRVlfRkZfUU9fU0VDVElPTixcbiAgICBaS0VZX0ZGX1FSX1NFQ1RJT04sXG4gICAgWktFWV9GRl9TSUdNQTFfU0VDVElPTixcbiAgICBaS0VZX0ZGX1NJR01BMl9TRUNUSU9OLFxuICAgIFpLRVlfRkZfU0lHTUEzX1NFQ1RJT04sXG59IGZyb20gXCIuL2ZmbG9ua19jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEtlY2NhazI1NlRyYW5zY3JpcHQgfSBmcm9tIFwiLi9LZWNjYWsyNTZUcmFuc2NyaXB0LmpzXCI7XG5pbXBvcnQgeyBQcm9vZiB9IGZyb20gXCIuL3Byb29mLmpzXCI7XG5pbXBvcnQgeyBQb2x5bm9taWFsIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9wb2x5bm9taWFsLmpzXCI7XG5pbXBvcnQgeyBFdmFsdWF0aW9ucyB9IGZyb20gXCIuL3BvbHlub21pYWwvZXZhbHVhdGlvbnMuanNcIjtcbmltcG9ydCB7IENQb2x5bm9taWFsIH0gZnJvbSBcIi4vcG9seW5vbWlhbC9jcG9seW5vbWlhbC5qc1wiO1xuXG5jb25zdCB7IHN0cmluZ2lmeUJpZ0ludHMgfSA9IHV0aWxzO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZmbG9ua1Byb3ZlKHprZXlGaWxlTmFtZSwgd2l0bmVzc0ZpbGVOYW1lLCBsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBQUk9WRVIgU1RBUlRFRFwiKTtcblxuICAgIC8vIFJlYWQgd2l0bmVzcyBmaWxlXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IFJlYWRpbmcgd2l0bmVzcyBmaWxlXCIpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZmQ6IGZkV3RucyxcbiAgICAgICAgc2VjdGlvbnM6IHd0bnNTZWN0aW9uc1xuICAgIH0gPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZEJpbkZpbGUod2l0bmVzc0ZpbGVOYW1lLCBcInd0bnNcIiwgMiwgMSA8PCAyNSwgMSA8PCAyMyk7XG4gICAgY29uc3Qgd3RucyA9IGF3YWl0IHd0bnNVdGlscy5yZWFkSGVhZGVyKGZkV3Rucywgd3Ruc1NlY3Rpb25zKTtcblxuICAgIC8vUmVhZCB6a2V5IGZpbGVcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB6a2V5IGZpbGVcIik7XG4gICAgY29uc3Qge1xuICAgICAgICBmZDogZmRaS2V5LFxuICAgICAgICBzZWN0aW9uczogemtleVNlY3Rpb25zXG4gICAgfSA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSh6a2V5RmlsZU5hbWUsIFwiemtleVwiLCAyLCAxIDw8IDI1LCAxIDw8IDIzKTtcbiAgICBjb25zdCB6a2V5ID0gYXdhaXQgemtleVV0aWxzLnJlYWRIZWFkZXIoZmRaS2V5LCB6a2V5U2VjdGlvbnMpO1xuXG4gICAgaWYgKHprZXkucHJvdG9jb2xJZCAhPT0gRkZMT05LX1BST1RPQ09MX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInprZXkgZmlsZSBpcyBub3QgZmZsb25rXCIpO1xuICAgIH1cblxuICAgIGlmICghU2NhbGFyLmVxKHprZXkuciwgd3Rucy5xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDdXJ2ZSBvZiB0aGUgd2l0bmVzcyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIHByb3Zpbmcga2V5XCIpO1xuICAgIH1cblxuICAgIGlmICh3dG5zLm5XaXRuZXNzICE9PSB6a2V5Lm5WYXJzIC0gemtleS5uQWRkaXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRuZXNzIGxlbmd0aC4gQ2lyY3VpdDogJHt6a2V5Lm5WYXJzfSwgd2l0bmVzczogJHt3dG5zLm5XaXRuZXNzfSwgJHt6a2V5Lm5BZGRpdGlvbnN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VydmUgPSB6a2V5LmN1cnZlO1xuXG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IHNGciA9IGN1cnZlLkZyLm44O1xuICAgIGNvbnN0IHNHMSA9IGN1cnZlLkcxLkYubjggKiAyO1xuICAgIGNvbnN0IHNEb21haW4gPSB6a2V5LmRvbWFpblNpemUgKiBzRnI7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCIgIEZGTE9OSyBQUk9WRSBTRVRUSU5HU1wiKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgQ3VydmU6ICAgICAgICAgJHtjdXJ2ZS5uYW1lfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDaXJjdWl0IHBvd2VyOiAke3prZXkucG93ZXJ9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIERvbWFpbiBzaXplOiAgICR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBWYXJzOiAgICAgICAgICAke3prZXkublZhcnN9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIFB1YmxpYyB2YXJzOiAgICR7emtleS5uUHVibGljfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDb25zdHJhaW50czogICAke3prZXkubkNvbnN0cmFpbnRzfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBBZGRpdGlvbnM6ICAgICAke3prZXkubkFkZGl0aW9uc31gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIpO1xuICAgIH1cblxuICAgIC8vUmVhZCB3aXRuZXNzIGRhdGFcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUmVhZGluZyB3aXRuZXNzIGZpbGUgZGF0YVwiKTtcbiAgICBjb25zdCBidWZmV2l0bmVzcyA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFd0bnMsIHd0bnNTZWN0aW9ucywgMik7XG4gICAgYXdhaXQgZmRXdG5zLmNsb3NlKCk7XG5cbiAgICAvLyBGaXJzdCBlbGVtZW50IGluIHBsb25rIGlzIG5vdCB1c2VkIGFuZCBjYW4gYmUgYW55IHZhbHVlLiAoQnV0IGFsd2F5cyB0aGUgc2FtZSkuXG4gICAgLy8gV2Ugc2V0IGl0IHRvIHplcm8gdG8gZ28gZmFzdGVyIGluIHRoZSBleHBvbmVudGlhdGlvbnMuXG4gICAgYnVmZldpdG5lc3Muc2V0KEZyLnplcm8sIDApO1xuICAgIGNvbnN0IGJ1ZmZJbnRlcm5hbFdpdG5lc3MgPSBuZXcgQmlnQnVmZmVyKHprZXkubkFkZGl0aW9ucyAqIHNGcik7XG5cbiAgICBsZXQgYnVmZmVycyA9IHt9O1xuICAgIGxldCBwb2x5bm9taWFscyA9IHt9O1xuICAgIGxldCBldmFsdWF0aW9ucyA9IHt9O1xuXG4gICAgLy8gVG8gZGl2aWRlIHByaW1lIGZpZWxkcyB0aGUgRXh0ZW5kZWQgRXVjbGlkZWFuIEFsZ29yaXRobSBmb3IgY29tcHV0aW5nIG1vZHVsYXIgaW52ZXJzZXMgaXMgbmVlZGVkLlxuICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY29tcHV0ZSAxL2Rlbm9taW5hdG9yIGFuZCB0aGVuIG11bHRpcGx5IGl0IGJ5IHRoZSBudW1lcmF0b3IuXG4gICAgLy8gVGhlIEV4dGVuZGVkIEV1Y2xpZGVhbiBBbGdvcml0aG0gaXMgZXhwZW5zaXZlIGluIHRlcm1zIG9mIGNvbXB1dGF0aW9uLlxuICAgIC8vIEZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gZG8gbWFueSBtb2R1bGFyIGludmVyc2VzLCB0aGVyZSdzIGEgc2ltcGxlIG1hdGhlbWF0aWNhbCB0cmlja1xuICAgIC8vIHRoYXQgYWxsb3dzIHVzIHRvIGNvbXB1dGUgbWFueSBpbnZlcnNlcywgY2FsbGVkIE1vbnRnb21lcnkgYmF0Y2ggaW52ZXJzaW9uLlxuICAgIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly92aXRhbGlrLmNhL2dlbmVyYWwvMjAxOC8wNy8yMS9zdGFya3NfcGFydF8zLmh0bWxcbiAgICAvLyBNb250Z29tZXJ5IGJhdGNoIGludmVyc2lvbiByZWR1Y2VzIHRoZSBuIGludmVyc2UgY29tcHV0YXRpb25zIHRvIGEgc2luZ2xlIG9uZVxuICAgIC8vIFRvIHNhdmUgdGhpcyAoc2luZ2xlKSBpbnZlcnNlIGNvbXB1dGF0aW9uIG9uLWNoYWluLCB3aWxsIGNvbXB1dGUgaXQgaW4gcHJvdmluZyB0aW1lIGFuZCBzZW5kIGl0IHRvIHRoZSB2ZXJpZmllci5cbiAgICAvLyBUaGUgdmVyaWZpZXIgd2lsbCBoYXZlIHRvIGNoZWNrOlxuICAgIC8vIDEpIHRoZSBkZW5vbWluYXRvciBpcyBjb3JyZWN0IG11bHRpcGx5aW5nIGJ5IGhpbXNlbGYgbm9uLWludmVydGVkIC0+IGEgKiAxL2EgPT0gMVxuICAgIC8vIDIpIGNvbXB1dGUgdGhlIHJlc3Qgb2YgdGhlIGRlbm9taW5hdG9ycyB1c2luZyB0aGUgTW9udGdvbWVyeSBiYXRjaCBpbnZlcnNpb25cbiAgICAvLyBUaGUgaW52ZXJzaW9ucyBhcmU6XG4gICAgLy8gICDCtyBkZW5vbWluYXRvciBuZWVkZWQgaW4gc3RlcCA4IGFuZCA5IG9mIHRoZSB2ZXJpZmllciB0byBtdWx0aXBseSBieSAxL1pfSCh4aSlcbiAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiBzdGVwIDEwIGFuZCAxMSBvZiB0aGUgdmVyaWZpZXJcbiAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiB0aGUgdmVyaWZpZXIgd2hlbiBjb21wdXRpbmcgTF9pXntTMX0oWCkgYW5kIExfaV57UzJ9KFgpXG4gICAgLy8gICDCtyBMX2kgaT0xIHRvIG51bSBwdWJsaWMgaW5wdXRzLCBuZWVkZWQgaW4gc3RlcCA2IGFuZCA3IG9mIHRoZSB2ZXJpZmllciB0byBjb21wdXRlIExfMSh4aSkgYW5kIFBJKHhpKVxuICAgIGxldCB0b0ludmVyc2UgPSB7fTtcblxuICAgIGxldCBjaGFsbGVuZ2VzID0ge307XG4gICAgbGV0IHJvb3RzID0ge307XG5cbiAgICBsZXQgcHJvb2YgPSBuZXcgUHJvb2YoY3VydmUsIGxvZ2dlcik7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgPiBSZWFkaW5nIFNlY3Rpb24gJHtaS0VZX0ZGX0FERElUSU9OU19TRUNUSU9OfS4gQWRkaXRpb25zYCk7XG4gICAgYXdhaXQgY2FsY3VsYXRlQWRkaXRpb25zKCk7XG5cbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgPiBSZWFkaW5nIFNlY3Rpb25zICR7WktFWV9GRl9TSUdNQTFfU0VDVElPTn0sJHtaS0VZX0ZGX1NJR01BMl9TRUNUSU9OfSwke1pLRVlfRkZfU0lHTUEzX1NFQ1RJT059LiBTaWdtYTEsIFNpZ21hMiAmIFNpZ21hIDNgKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBSZWFkaW5nIFNpZ21hIHBvbHlub21pYWxzIFwiKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTEgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTIgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICBwb2x5bm9taWFscy5TaWdtYTMgPSBuZXcgUG9seW5vbWlhbChuZXcgQmlnQnVmZmVyKHNEb21haW4pLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuU2lnbWExLmNvZWYsIDAsIHNEb21haW4sIHprZXlTZWN0aW9uc1taS0VZX0ZGX1NJR01BMV9TRUNUSU9OXVswXS5wKTtcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLlNpZ21hMi5jb2VmLCAwLCBzRG9tYWluLCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTJfU0VDVElPTl1bMF0ucCk7XG4gICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihwb2x5bm9taWFscy5TaWdtYTMuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfU0lHTUEzX1NFQ1RJT05dWzBdLnApO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgUmVhZGluZyBTaWdtYSBldmFsdWF0aW9uc1wiKTtcbiAgICBldmFsdWF0aW9ucy5TaWdtYTEgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgIGV2YWx1YXRpb25zLlNpZ21hMiA9IG5ldyBFdmFsdWF0aW9ucyhuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KSwgY3VydmUsIGxvZ2dlcik7XG4gICAgZXZhbHVhdGlvbnMuU2lnbWEzID0gbmV3IEV2YWx1YXRpb25zKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDQpLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWExLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTFfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWEyLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTJfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIoZXZhbHVhdGlvbnMuU2lnbWEzLmV2YWwsIDAsIHNEb21haW4gKiA0LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9TSUdNQTNfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oYD4gUmVhZGluZyBTZWN0aW9uICR7WktFWV9GRl9QVEFVX1NFQ1RJT059LiBQb3dlcnMgb2YgVGF1YCk7XG4gICAgY29uc3QgUFRhdSA9IG5ldyBCaWdCdWZmZXIoemtleS5kb21haW5TaXplICogMTYgKiBzRzEpO1xuICAgIC8vIGRvbWFpblNpemUgKiA5ICsgMTggPSBTUlMgbGVuZ3RoIGluIHRoZSB6a2V5IHNhdmVkIGluIHNldHVwIHByb2Nlc3MuXG4gICAgLy8gaXQgY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gU1JTIGxlbmd0aCBuZWVkZWQsIHNwZWNpZmljYWxseSB0byBjb21taXQgQzJcbiAgICAvLyBub3RpY2UgdGhhdCB0aGUgcmVzZXJ2ZWQgYnVmZmVycyBzaXplIGlzIHprZXkuZG9tYWluU2l6ZSAqIDE2ICogc0cxIGJlY2F1c2UgYSBwb3dlciBvZiB0d28gYnVmZmVyIHNpemUgaXMgbmVlZGVkXG4gICAgLy8gdGhlIHJlbWFpbmluZyBidWZmZXIgbm90IGZpbGxlZCBmcm9tIFNSUyBhcmUgc2V0IHRvIDBcbiAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKFBUYXUsIDAsICh6a2V5LmRvbWFpblNpemUgKiA5ICsgMTgpICogc0cxLCB6a2V5U2VjdGlvbnNbWktFWV9GRl9QVEFVX1NFQ1RJT05dWzBdLnApO1xuXG4gICAgLy8gU1RBUlQgRkZMT05LIFBST1ZFUiBQUk9UT0NPTFxuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCAxLiBDb21wdXRlIEMxKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlwiKTtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgMVwiKTtcbiAgICBhd2FpdCByb3VuZDEoKTtcblxuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMDtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuUUw7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlFSO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5RTTtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuUU87XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlFDO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCAyLiBDb21wdXRlIEMyKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgMlwiKTtcbiAgICBhd2FpdCByb3VuZDIoKTtcblxuICAgIGRlbGV0ZSBidWZmZXJzLkE7XG4gICAgZGVsZXRlIGJ1ZmZlcnMuQjtcbiAgICBkZWxldGUgYnVmZmVycy5DO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5BO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5CO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5DO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5TaWdtYTE7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlNpZ21hMjtcbiAgICBkZWxldGUgZXZhbHVhdGlvbnMuU2lnbWEzO1xuICAgIGRlbGV0ZSBldmFsdWF0aW9ucy5sYWdyYW5nZTE7XG4gICAgZGVsZXRlIGV2YWx1YXRpb25zLlo7XG4gICAgaWYgKGdsb2JhbFRoaXMuZ2MpIGdsb2JhbFRoaXMuZ2MoKTtcblxuICAgIC8vIFJPVU5EIDMuIENvbXB1dGUgb3BlbmluZyBldmFsdWF0aW9uc1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBST1VORCAzXCIpO1xuICAgIGF3YWl0IHJvdW5kMygpO1xuXG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkE7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkM7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlo7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlQxO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMjtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuU2lnbWExO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5TaWdtYTI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlNpZ21hMztcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUUw7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlFSO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5RTTtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUUM7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlFPO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCA0LiBDb21wdXRlIFcoWCkgcG9seW5vbWlhbFxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBST1VORCA0XCIpO1xuICAgIGF3YWl0IHJvdW5kNCgpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICAvLyBST1VORCA1LiBDb21wdXRlIFcnKFgpIHBvbHlub21pYWxcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gUk9VTkQgNVwiKTtcbiAgICBhd2FpdCByb3VuZDUoKTtcblxuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5DMDtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuQzE7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkMyO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5SMTtcbiAgICBkZWxldGUgcG9seW5vbWlhbHMuUjI7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkY7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLkw7XG4gICAgZGVsZXRlIHBvbHlub21pYWxzLlpUO1xuICAgIGRlbGV0ZSBwb2x5bm9taWFscy5aVFMyO1xuICAgIGF3YWl0IGZkWktleS5jbG9zZSgpO1xuICAgIGlmIChnbG9iYWxUaGlzLmdjKSBnbG9iYWxUaGlzLmdjKCk7XG5cbiAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiaW52XCIsIGdldE1vbnRnb21lcnlCYXRjaGVkSW52ZXJzZSgpKTtcblxuICAgIC8vIFByZXBhcmUgcHJvb2ZcbiAgICBsZXQgX3Byb29mID0gcHJvb2YudG9PYmplY3RQcm9vZigpO1xuICAgIF9wcm9vZi5wcm90b2NvbCA9IFwiZmZsb25rXCI7XG4gICAgX3Byb29mLmN1cnZlID0gY3VydmUubmFtZTtcblxuICAgIC8vIFByZXBhcmUgcHVibGljIGlucHV0c1xuICAgIGxldCBwdWJsaWNTaWduYWxzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBzRnI7XG5cbiAgICAgICAgY29uc3QgcHViID0gYnVmZldpdG5lc3Muc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgcHVibGljU2lnbmFscy5wdXNoKFNjYWxhci5mcm9tUnByTEUocHViKSk7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgUFJPVkVSIEZJTklTSEVEXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvb2Y6IHN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKSxcbiAgICAgICAgcHVibGljU2lnbmFsczogc3RyaW5naWZ5QmlnSW50cyhwdWJsaWNTaWduYWxzKVxuICAgIH07XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVBZGRpdGlvbnMoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBhZGRpdGlvbnNcIik7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uc0J1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfQURESVRJT05TX1NFQ1RJT04pO1xuXG4gICAgICAgIC8vIHNpemVzOiB3aXJlSWRfeCA9IDQgYnl0ZXMgKDMyIGJpdHMpLCBmYWN0b3JfeCA9IGZpZWxkIHNpemUgYml0c1xuICAgICAgICAvLyBBZGRpdGlvbiBmb3JtOiB3aXJlSWRfYSB3aXJlSWRfYiBmYWN0b3JfYSBmYWN0b3JfYiAoc2l6ZSBpcyA0ICsgNCArIHNGciArIHNGcilcbiAgICAgICAgY29uc3Qgc1N1bSA9IDggKyBzRnIgKiAyO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5uQWRkaXRpb25zOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIgJiYgKDAgIT09IGkpICYmIChpICUgMTAwMDAwID09PSAwKSkgbG9nZ2VyLmluZm8oYCAgICBhZGRpdGlvbiAke2l9LyR7emtleS5uQWRkaXRpb25zfWApO1xuXG4gICAgICAgICAgICAvLyBSZWFkIGFkZGl0aW9uIHZhbHVlc1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IGkgKiBzU3VtO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsSWQxID0gcmVhZFVJbnQzMihhZGRpdGlvbnNCdWZmLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICBjb25zdCBzaWduYWxJZDIgPSByZWFkVUludDMyKGFkZGl0aW9uc0J1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcjEgPSBhZGRpdGlvbnNCdWZmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc0ZyKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBzRnI7XG4gICAgICAgICAgICBjb25zdCBmYWN0b3IyID0gYWRkaXRpb25zQnVmZi5zbGljZShvZmZzZXQsIG9mZnNldCArIHNGcik7XG5cbiAgICAgICAgICAgIC8vIEdldCB3aXRuZXNzIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzMSA9IGdldFdpdG5lc3Moc2lnbmFsSWQxKTtcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3MyID0gZ2V0V2l0bmVzcyhzaWduYWxJZDIpO1xuXG4gICAgICAgICAgICAvL0NhbGN1bGF0ZSBmaW5hbCByZXN1bHRcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEZyLmFkZChGci5tdWwoZmFjdG9yMSwgd2l0bmVzczEpLCBGci5tdWwoZmFjdG9yMiwgd2l0bmVzczIpKTtcblxuICAgICAgICAgICAgYnVmZkludGVybmFsV2l0bmVzcy5zZXQocmVzdWx0LCBzRnIgKiBpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRVSW50MzIoYiwgbykge1xuICAgICAgICBjb25zdCBidWZmID0gYi5zbGljZShvLCBvICsgNCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZWID0gbmV3IERhdGFWaWV3KGJ1ZmYuYnVmZmVyLCBidWZmLmJ5dGVPZmZzZXQsIGJ1ZmYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiBidWZmVi5nZXRVaW50MzIoMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2l0bmVzcyhpZHgpIHtcbiAgICAgICAgbGV0IGRpZmYgPSB6a2V5Lm5WYXJzIC0gemtleS5uQWRkaXRpb25zO1xuICAgICAgICBpZiAoaWR4IDwgZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZXaXRuZXNzLnNsaWNlKGlkeCAqIHNGciwgaWR4ICogc0ZyICsgc0ZyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZHggPCB6a2V5Lm5WYXJzKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoaWR4IC0gZGlmZikgKiBzRnI7XG4gICAgICAgICAgICByZXR1cm4gYnVmZkludGVybmFsV2l0bmVzcy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNGcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRnIuemVybztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDEoKSB7XG4gICAgICAgIC8vIFNURVAgMS4xIC0gR2VuZXJhdGUgcmFuZG9tIGJsaW5kaW5nIHNjYWxhcnMgKGJfMSwgLi4uLCBiOSkg4oiIIEZcbiAgICAgICAgY2hhbGxlbmdlcy5iID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDk7IGkrKykge1xuICAgICAgICAgICAgY2hhbGxlbmdlcy5iW2ldID0gRnIucmFuZG9tKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTVEVQIDEuMiAtIENvbXB1dGUgd2lyZSBwb2x5bm9taWFscyBhKFgpLCBiKFgpIGFuZCBjKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgQSwgQiwgQyB3aXJlIHBvbHlub21pYWxzXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlV2lyZVBvbHlub21pYWxzKCk7XG5cbiAgICAgICAgLy8gU1RFUCAxLjMgLSBDb21wdXRlIHRoZSBxdW90aWVudCBwb2x5bm9taWFsIFQwKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVDAgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVQwKCk7XG5cbiAgICAgICAgLy8gU1RFUCAxLjQgLSBDb21wdXRlIHRoZSBGRlQtc3R5bGUgY29tYmluYXRpb24gcG9seW5vbWlhbCBDMShYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMxIHBvbHlub21pYWxcIik7XG4gICAgICAgIGF3YWl0IGNvbXB1dGVDMSgpO1xuXG4gICAgICAgIC8vIFRoZSBmaXJzdCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW0MxXV8xKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMxIG11bHRpIGV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBsZXQgY29tbWl0QzEgPSBhd2FpdCBwb2x5bm9taWFscy5DMS5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiQzFcIik7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJDMVwiLCBjb21taXRDMSk7XG5cbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVdpcmVQb2x5bm9taWFscygpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IFJlYWRpbmcgZGF0YSBmcm9tIHprZXkgZmlsZVwiKTtcbiAgICAgICAgICAgIC8vIEJ1aWxkIEEsIEIgYW5kIEMgZXZhbHVhdGlvbnMgYnVmZmVyIGZyb20gemtleSBhbmQgd2l0bmVzcyBmaWxlc1xuICAgICAgICAgICAgYnVmZmVycy5BID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQiA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbik7XG4gICAgICAgICAgICBidWZmZXJzLkMgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4pO1xuXG4gICAgICAgICAgICAvLyBSZWFkIHprZXkgc2VjdGlvbnMgYW5kIGZpbGwgdGhlIGJ1ZmZlcnNcbiAgICAgICAgICAgIGNvbnN0IGFNYXBCdWZmID0gYXdhaXQgYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uKGZkWktleSwgemtleVNlY3Rpb25zLCBaS0VZX0ZGX0FfTUFQX1NFQ1RJT04pO1xuICAgICAgICAgICAgY29uc3QgYk1hcEJ1ZmYgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfQl9NQVBfU0VDVElPTik7XG4gICAgICAgICAgICBjb25zdCBjTWFwQnVmZiA9IGF3YWl0IGJpbkZpbGVVdGlscy5yZWFkU2VjdGlvbihmZFpLZXksIHprZXlTZWN0aW9ucywgWktFWV9GRl9DX01BUF9TRUNUSU9OKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSBhbGwgd2l0bmVzcyBmcm9tIHNpZ25hbCBpZHMgYW5kIHNldCB0aGVtIHRvIEEsQiAmIEMgYnVmZmVyc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5Lm5Db25zdHJhaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaV9zRnIgPSBpICogc0ZyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGkgKiA0O1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBBIHZhbHVlIGZyb20gYSBzaWduYWwgaWRcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYWxJZEEgPSByZWFkVUludDMyKGFNYXBCdWZmLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuQS5zZXQoZ2V0V2l0bmVzcyhzaWduYWxJZEEpLCBpX3NGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIEIgdmFsdWUgZnJvbSBhIHNpZ25hbCBpZFxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hbElkQiA9IHJlYWRVSW50MzIoYk1hcEJ1ZmYsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5CLnNldChnZXRXaXRuZXNzKHNpZ25hbElkQiksIGlfc0ZyKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgQyB2YWx1ZSBmcm9tIGEgc2lnbmFsIGlkXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsSWRDID0gcmVhZFVJbnQzMihjTWFwQnVmZiwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBidWZmZXJzLkMuc2V0KGdldFdpdG5lc3Moc2lnbmFsSWRDKSwgaV9zRnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCbGluZCBhKFgpLCBiKFgpIGFuZCBjKFgpIHBvbHlub21pYWxzIGNvZWZmaWNpZW50cyB3aXRoIGJsaW5kaW5nIHNjYWxhcnMgYlxuICAgICAgICAgICAgYnVmZmVycy5BLnNldChjaGFsbGVuZ2VzLmJbMV0sIHNEb21haW4gLSA2NCk7XG4gICAgICAgICAgICBidWZmZXJzLkEuc2V0KGNoYWxsZW5nZXMuYlsyXSwgc0RvbWFpbiAtIDMyKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQi5zZXQoY2hhbGxlbmdlcy5iWzNdLCBzRG9tYWluIC0gNjQpO1xuICAgICAgICAgICAgYnVmZmVycy5CLnNldChjaGFsbGVuZ2VzLmJbNF0sIHNEb21haW4gLSAzMik7XG4gICAgICAgICAgICBidWZmZXJzLkMuc2V0KGNoYWxsZW5nZXMuYls1XSwgc0RvbWFpbiAtIDY0KTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQy5zZXQoY2hhbGxlbmdlcy5iWzZdLCBzRG9tYWluIC0gMzIpO1xuXG4gICAgICAgICAgICBidWZmZXJzLkEgPSBhd2FpdCBGci5iYXRjaFRvTW9udGdvbWVyeShidWZmZXJzLkEpO1xuICAgICAgICAgICAgYnVmZmVycy5CID0gYXdhaXQgRnIuYmF0Y2hUb01vbnRnb21lcnkoYnVmZmVycy5CKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuQyA9IGF3YWl0IEZyLmJhdGNoVG9Nb250Z29tZXJ5KGJ1ZmZlcnMuQyk7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgd2lyZSBwb2x5bm9taWFscyBhKFgpLCBiKFgpIGFuZCBjKFgpIGZyb20gQSxCICYgQyBidWZmZXJzXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQSBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQSA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQSwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQiBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQiA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQiwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQyBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuQyA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuQywgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgZXh0ZW5kZWQgZXZhbHVhdGlvbnMgb2YgYShYKSwgYihYKSBhbmQgYyhYKSBwb2x5bm9taWFsc1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEEgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQSA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkEsIDQsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEIgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQiA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkIsIDQsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMgZmZ0XCIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuQyA9IGF3YWl0IEV2YWx1YXRpb25zLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMsIDQsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVzXG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuQS5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5CLmRlZ3JlZSgpID49IHprZXkuZG9tYWluU2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkIgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLkMuZGVncmVlKCkgPj0gemtleS5kb21haW5TaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQyBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlVDAoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhgwrfCt8K3IFJlYWRpbmcgc2VjdGlvbnMgJHtaS0VZX0ZGX1FMX1NFQ1RJT059LCAke1pLRVlfRkZfUVJfU0VDVElPTn1gICtcbiAgICAgICAgICAgICAgICBgLCAke1pLRVlfRkZfUU1fU0VDVElPTn0sICR7WktFWV9GRl9RT19TRUNUSU9OfSwgJHtaS0VZX0ZGX1FDX1NFQ1RJT059LiBRIHNlbGVjdG9yc2ApO1xuICAgICAgICAgICAgLy8gUmVzZXJ2ZSBtZW1vcnkgZm9yIFEncyBldmFsdWF0aW9uc1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUUwgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUVIgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUU0gPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUU8gPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZXZhbHVhdGlvbnMuUUMgPSBuZXcgRXZhbHVhdGlvbnMobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBSZWFkIFEncyBldmFsdWF0aW9ucyBmcm9tIHprZXkgZmlsZVxuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTC5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUxfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RUi5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUVJfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTS5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU1fU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RTy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU9fU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuICAgICAgICAgICAgYXdhaXQgZmRaS2V5LnJlYWRUb0J1ZmZlcihldmFsdWF0aW9ucy5RQy5ldmFsLCAwLCBzRG9tYWluICogNCwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUNfU0VDVElPTl1bMF0ucCArIHNEb21haW4pO1xuXG4gICAgICAgICAgICAvLyBSZWFkIExhZ3JhbmdlIHBvbHlub21pYWxzICYgZXZhbHVhdGlvbnMgZnJvbSB6a2V5IGZpbGVcbiAgICAgICAgICAgIGNvbnN0IGxhZ3JhbmdlUG9seW5vbWlhbHMgPSBhd2FpdCBiaW5GaWxlVXRpbHMucmVhZFNlY3Rpb24oZmRaS2V5LCB6a2V5U2VjdGlvbnMsIFpLRVlfRkZfTEFHUkFOR0VfU0VDVElPTik7XG4gICAgICAgICAgICBldmFsdWF0aW9ucy5sYWdyYW5nZTEgPSBuZXcgRXZhbHVhdGlvbnMobGFncmFuZ2VQb2x5bm9taWFscywgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIFJlc2VydmUgbWVtb3J5IGZvciBidWZmZXJzIFQwXG4gICAgICAgICAgICBidWZmZXJzLlQwID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCk7XG5cbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMCBldmFsdWF0aW9uc1wiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplICogNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgICAgVDAgZXZhbHVhdGlvbiAke2l9LyR7emtleS5kb21haW5TaXplICogNH1gKTtcblxuICAgICAgICAgICAgICAgIC8vIEdldCByZWxhdGVkIGV2YWx1YXRpb25zIHRvIGNvbXB1dGUgY3VycmVudCBUMCBldmFsdWF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGV2YWx1YXRpb25zLkEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gZXZhbHVhdGlvbnMuQi5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBldmFsdWF0aW9ucy5DLmdldEV2YWx1YXRpb24oaSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBxbCA9IGV2YWx1YXRpb25zLlFMLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcXIgPSBldmFsdWF0aW9ucy5RUi5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHFtID0gZXZhbHVhdGlvbnMuUU0uZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxbyA9IGV2YWx1YXRpb25zLlFPLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcWMgPSBldmFsdWF0aW9ucy5RQy5nZXRFdmFsdWF0aW9uKGkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBjdXJyZW50IHB1YmxpYyBpbnB1dFxuICAgICAgICAgICAgICAgIGxldCBwaSA9IEZyLnplcm87XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB6a2V5Lm5QdWJsaWM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoaiAqIDUgKiB6a2V5LmRvbWFpblNpemUpICsgemtleS5kb21haW5TaXplICsgaTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsUG9sID0gZXZhbHVhdGlvbnMubGFncmFuZ2UxLmdldEV2YWx1YXRpb24ob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYVZhbCA9IGJ1ZmZlcnMuQS5zbGljZShqICogc0ZyLCAoaiArIDEpICogc0ZyKTtcblxuICAgICAgICAgICAgICAgICAgICBwaSA9IEZyLnN1YihwaSwgRnIubXVsKGxQb2wsIGFWYWwpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL1QwKFgpID0gW3FfTChYKcK3YShYKSArIHFfUihYKcK3YihYKSArIHFfTShYKcK3YShYKcK3YihYKSArIHFfTyhYKcK3YyhYKSArIHFfQyhYKSArIFBJKFgpXSDCtyAxL1pfSChYKVxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgZmlyc3QgVDAoWCnCt1pfSChYKSwgc28gZGl2aWRlIGxhdGVyIHRoZSByZXN1bHRpbmcgcG9seW5vbWlhbCBieSBaX0goWClcbiAgICAgICAgICAgICAgICAvLyBleHByZXNzaW9uIDEgLT4gcV9MKFgpwrdhKFgpXG4gICAgICAgICAgICAgICAgY29uc3QgZTEgPSBGci5tdWwoYSwgcWwpO1xuXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiAyIC0+IHFfUihYKcK3YihYKVxuICAgICAgICAgICAgICAgIGNvbnN0IGUyID0gRnIubXVsKGIsIHFyKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gMyAtPiBxX00oWCnCt2EoWCnCt2IoWClcbiAgICAgICAgICAgICAgICBjb25zdCBlMyA9IEZyLm11bChGci5tdWwoYSwgYiksIHFtKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gNCAtPiBxX08oWCnCt2MoWClcbiAgICAgICAgICAgICAgICBjb25zdCBlNCA9IEZyLm11bChjLCBxbyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0MCA9IGV4cHJlc3Npb25zIDEgKyBleHByZXNzaW9uIDIgKyBleHByZXNzaW9uIDMgKyBleHByZXNzaW9uIDQgKyBxYyArIHBpXG4gICAgICAgICAgICAgICAgY29uc3QgdDAgPSBGci5hZGQoZTEsIEZyLmFkZChlMiwgRnIuYWRkKGUzLCBGci5hZGQoZTQsIEZyLmFkZChxYywgcGkpKSkpKTtcblxuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuVDAuc2V0KHQwLCBpICogc0ZyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJidWZmZXIgVDA6IFwiICsgYnVmZmVycy5UMC5ieXRlTGVuZ3RoIC8gc0ZyKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBwb2x5bm9taWFsIFQwKFgpIGZyb20gYnVmZmVycy5UMFxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQwIGlmZnRcIik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5UMCA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuVDAsIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlQwIGxlbmd0aDogXCIgKyBwb2x5bm9taWFscy5UMC5sZW5ndGgoKSk7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIlQwIGRlZ3JlZTogXCIgKyBwb2x5bm9taWFscy5UMC5kZWdyZWUoKSk7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMCBieSBaX0goWClcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMCAvIFpIXCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDAuZGl2QnlaZXJvZmllcih6a2V5LmRvbWFpblNpemUsIEZyLm9uZSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlQwLmRlZ3JlZSgpID49IDIgKiB6a2V5LmRvbWFpblNpemUgLSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUMCBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWQgKGRlZ3JlZSBpcyAke3BvbHlub21pYWxzLlQwLmRlZ3JlZSgpfSBhbmQgbXVzdCBiZSBsZXNzIHRoYW4gJHsyICogemtleS5kb21haW5TaXplICsgMn1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuVDA7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlQzEoKSB7XG4gICAgICAgICAgICBsZXQgQzEgPSBuZXcgQ1BvbHlub21pYWwoNCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBDMS5hZGRQb2x5bm9taWFsKDAsIHBvbHlub21pYWxzLkEpO1xuICAgICAgICAgICAgQzEuYWRkUG9seW5vbWlhbCgxLCBwb2x5bm9taWFscy5CKTtcbiAgICAgICAgICAgIEMxLmFkZFBvbHlub21pYWwoMiwgcG9seW5vbWlhbHMuQyk7XG4gICAgICAgICAgICBDMS5hZGRQb2x5bm9taWFsKDMsIHBvbHlub21pYWxzLlQwKTtcblxuICAgICAgICAgICAgcG9seW5vbWlhbHMuQzEgPSBDMS5nZXRQb2x5bm9taWFsKCk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLkMxLmRlZ3JlZSgpID49IDggKiB6a2V5LmRvbWFpblNpemUgLSA4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQzEgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcm91bmQyKCkge1xuICAgICAgICAvLyBTVEVQIDIuMSAtIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGEgYW5kIGdhbW1hIOKIiCBGXG4gICAgICAgIC8vIENvbXB1dGUgcGVybXV0YXRpb24gY2hhbGxlbmdlIGJldGFcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2VzIGJldGEgYW5kIGdhbW1hXCIpO1xuICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuXG4gICAgICAgIC8vIEFkZCBDMCB0byB0aGUgdHJhbnNjcmlwdFxuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQoemtleS5DMCk7XG5cbiAgICAgICAgLy8gQWRkIEEgdG8gdGhlIHRyYW5zY3JpcHRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6a2V5Lm5QdWJsaWM7IGkrKykge1xuICAgICAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoYnVmZmVycy5BLnNsaWNlKGkgKiBzRnIsIGkgKiBzRnIgKyBzRnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBDMSB0byB0aGUgdHJhbnNjcmlwdFxuICAgICAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YuZ2V0UG9seW5vbWlhbChcIkMxXCIpKTtcblxuICAgICAgICBjaGFsbGVuZ2VzLmJldGEgPSB0cmFuc2NyaXB0LmdldENoYWxsZW5nZSgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBjaGFsbGVuZ2VzLmJldGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5iZXRhKSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBwZXJtdXRhdGlvbiBjaGFsbGVuZ2UgZ2FtbWFcbiAgICAgICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmJldGEpO1xuICAgICAgICBjaGFsbGVuZ2VzLmdhbW1hID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy5nYW1tYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmdhbW1hKSk7XG5cbiAgICAgICAgLy8gU1RFUCAyLjIgLSBDb21wdXRlIHBlcm11dGF0aW9uIHBvbHlub21pYWwgeihYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFogcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVooKTtcblxuICAgICAgICAvLyBTVEVQIDIuMyAtIENvbXB1dGUgcXVvdGllbnQgcG9seW5vbWlhbCBUMShYKSBhbmQgVDIoWClcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBUMSBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlVDEoKTtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBUMiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlVDIoKTtcblxuICAgICAgICAvLyBTVEVQIDIuNCAtIENvbXB1dGUgdGhlIEZGVC1zdHlsZSBjb21iaW5hdGlvbiBwb2x5bm9taWFsIEMyKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgQzIgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZUMyKCk7XG5cbiAgICAgICAgLy8gVGhlIHNlY29uZCBvdXRwdXQgb2YgdGhlIHByb3ZlciBpcyAoW0MyXV8xKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEMyIG11bHRpIGV4cG9uZW50aWF0aW9uXCIpO1xuICAgICAgICBsZXQgY29tbWl0QzIgPSBhd2FpdCBwb2x5bm9taWFscy5DMi5tdWx0aUV4cG9uZW50aWF0aW9uKFBUYXUsIFwiQzJcIik7XG4gICAgICAgIHByb29mLmFkZFBvbHlub21pYWwoXCJDMlwiLCBjb21taXRDMik7XG5cbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVooKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgWiBldmFsdWF0aW9uc1wiKTtcblxuICAgICAgICAgICAgbGV0IG51bUFyciA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbik7XG4gICAgICAgICAgICBsZXQgZGVuQXJyID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluKTtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBmaXJzdCB2YWx1ZXMgdG8gMVxuICAgICAgICAgICAgbnVtQXJyLnNldChGci5vbmUsIDApO1xuICAgICAgICAgICAgZGVuQXJyLnNldChGci5vbmUsIDApO1xuXG4gICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCBvbWVnYVxuICAgICAgICAgICAgbGV0IHcgPSBGci5vbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgIFogZXZhbHVhdGlvbiAke2l9LyR7emtleS5kb21haW5TaXplfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlfc0ZyID0gaSAqIHNGcjtcblxuICAgICAgICAgICAgICAgIC8vIFooWCkgOj0gbnVtQXJyIC8gZGVuQXJyXG4gICAgICAgICAgICAgICAgLy8gbnVtQXJyIDo9IChhICsgYmV0YcK3z4kgKyBnYW1tYSkoYiArIGJldGHCt8+JwrdrMSArIGdhbW1hKShjICsgYmV0YcK3z4nCt2syICsgZ2FtbWEpXG4gICAgICAgICAgICAgICAgY29uc3QgYmV0YXcgPSBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCB3KTtcblxuICAgICAgICAgICAgICAgIGxldCBudW0xID0gYnVmZmVycy5BLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgbnVtMSA9IEZyLmFkZChudW0xLCBiZXRhdyk7XG4gICAgICAgICAgICAgICAgbnVtMSA9IEZyLmFkZChudW0xLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBudW0yID0gYnVmZmVycy5CLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgbnVtMiA9IEZyLmFkZChudW0yLCBGci5tdWwoemtleS5rMSwgYmV0YXcpKTtcbiAgICAgICAgICAgICAgICBudW0yID0gRnIuYWRkKG51bTIsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IG51bTMgPSBidWZmZXJzLkMuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgICAgICAgICBudW0zID0gRnIuYWRkKG51bTMsIEZyLm11bCh6a2V5LmsyLCBiZXRhdykpO1xuICAgICAgICAgICAgICAgIG51bTMgPSBGci5hZGQobnVtMywgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gRnIubXVsKG51bTEsIEZyLm11bChudW0yLCBudW0zKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBkZW5BcnIgOj0gKGEgKyBiZXRhwrdzaWdtYTEgKyBnYW1tYSkoYiArIGJldGHCt3NpZ21hMiArIGdhbW1hKShjICsgYmV0YcK3c2lnbWEzICsgZ2FtbWEpXG4gICAgICAgICAgICAgICAgbGV0IGRlbjEgPSBidWZmZXJzLkEuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKTtcbiAgICAgICAgICAgICAgICBkZW4xID0gRnIuYWRkKGRlbjEsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIGV2YWx1YXRpb25zLlNpZ21hMS5nZXRFdmFsdWF0aW9uKGkgKiA0KSkpO1xuICAgICAgICAgICAgICAgIGRlbjEgPSBGci5hZGQoZGVuMSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGVuMiA9IGJ1ZmZlcnMuQi5zbGljZShpX3NGciwgaV9zRnIgKyBzRnIpO1xuICAgICAgICAgICAgICAgIGRlbjIgPSBGci5hZGQoZGVuMiwgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgZXZhbHVhdGlvbnMuU2lnbWEyLmdldEV2YWx1YXRpb24oaSAqIDQpKSk7XG4gICAgICAgICAgICAgICAgZGVuMiA9IEZyLmFkZChkZW4yLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBkZW4zID0gYnVmZmVycy5DLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGcik7XG4gICAgICAgICAgICAgICAgZGVuMyA9IEZyLmFkZChkZW4zLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBldmFsdWF0aW9ucy5TaWdtYTMuZ2V0RXZhbHVhdGlvbihpICogNCkpKTtcbiAgICAgICAgICAgICAgICBkZW4zID0gRnIuYWRkKGRlbjMsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRlbiA9IEZyLm11bChkZW4xLCBGci5tdWwoZGVuMiwgZGVuMykpO1xuXG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbHkgY3VycmVudCBudW0gdmFsdWUgd2l0aCB0aGUgcHJldmlvdXMgb25lIHNhdmVkIGluIG51bUFyclxuICAgICAgICAgICAgICAgIG51bSA9IEZyLm11bChudW1BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKSwgbnVtKTtcbiAgICAgICAgICAgICAgICBudW1BcnIuc2V0KG51bSwgKChpICsgMSkgJSB6a2V5LmRvbWFpblNpemUpICogc0ZyKTtcblxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGx5IGN1cnJlbnQgZGVuIHZhbHVlIHdpdGggdGhlIHByZXZpb3VzIG9uZSBzYXZlZCBpbiBkZW5BcnJcbiAgICAgICAgICAgICAgICBkZW4gPSBGci5tdWwoZGVuQXJyLnNsaWNlKGlfc0ZyLCBpX3NGciArIHNGciksIGRlbik7XG4gICAgICAgICAgICAgICAgZGVuQXJyLnNldChkZW4sICgoaSArIDEpICUgemtleS5kb21haW5TaXplKSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBOZXh0IG9tZWdhXG4gICAgICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3prZXkucG93ZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGludmVyc2Ugb2YgZGVuQXJyIHRvIGNvbXB1dGUgaW4gdGhlIG5leHQgY29tbWFuZCB0aGVcbiAgICAgICAgICAgIC8vIGRpdmlzaW9uIG51bUFyci9kZW5BcnIgYnkgbXVsdGlwbHlpbmcgbnVtIMK3IDEvZGVuQXJyXG4gICAgICAgICAgICBkZW5BcnIgPSBhd2FpdCBGci5iYXRjaEludmVyc2UoZGVuQXJyKTtcblxuICAgICAgICAgICAgLy8gVE9ETzogRG8gaXQgaW4gYXNzZW1ibHkgYW5kIGluIHBhcmFsbGVsXG4gICAgICAgICAgICAvLyBNdWx0aXBseSBudW1BcnIgwrcgZGVuQXJyIHdoZXJlIGRlbkFyciB3YXMgaW52ZXJ0ZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBzRnI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB6ID0gRnIubXVsKG51bUFyci5zbGljZShpX3NGciwgaV9zRnIgKyBzRnIpLCBkZW5BcnIuc2xpY2UoaV9zRnIsIGlfc0ZyICsgc0ZyKSk7XG4gICAgICAgICAgICAgICAgbnVtQXJyLnNldCh6LCBpX3NGcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGcm9tIG5vdyBvbiB0aGUgdmFsdWVzIHNhdmVkIG9uIG51bUFyciB3aWxsIGJlIFooWCkgYnVmZmVyXG4gICAgICAgICAgICBidWZmZXJzLlogPSBudW1BcnI7XG5cbiAgICAgICAgICAgIGlmICghRnIuZXEobnVtQXJyLnNsaWNlKDAsIHNGciksIEZyLm9uZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3B5IGNvbnN0cmFpbnRzIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHBvbHlub21pYWwgY29lZmZpY2llbnRzIHooWCkgZnJvbSBidWZmZXJzLlpcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBaIGlmZnRcIik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5aID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5aLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSBleHRlbmRlZCBldmFsdWF0aW9ucyBvZiB6KFgpIHBvbHlub21pYWxcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBaIGZmdFwiKTtcbiAgICAgICAgICAgIGV2YWx1YXRpb25zLlogPSBhd2FpdCBFdmFsdWF0aW9ucy5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5aLCA0LCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQmxpbmQgeihYKSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cyB3aXRoIGJsaW5kaW5nIHNjYWxhcnMgYlxuICAgICAgICAgICAgcG9seW5vbWlhbHMuWi5ibGluZENvZWZmaWNpZW50cyhbY2hhbGxlbmdlcy5iWzldLCBjaGFsbGVuZ2VzLmJbOF0sIGNoYWxsZW5nZXMuYls3XV0pO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5aLmRlZ3JlZSgpID49IHprZXkuZG9tYWluU2l6ZSArIDMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJaIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuWjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVUMSgpIHtcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMSBldmFsdWF0aW9uc1wiKTtcblxuICAgICAgICAgICAgYnVmZmVycy5UMSA9IG5ldyBCaWdCdWZmZXIoc0RvbWFpbiAqIDIpO1xuICAgICAgICAgICAgYnVmZmVycy5UMXogPSBuZXcgQmlnQnVmZmVyKHNEb21haW4gKiAyKTtcblxuICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgb21lZ2FcbiAgICAgICAgICAgIGxldCBvbWVnYSA9IEZyLm9uZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemtleS5kb21haW5TaXplICogMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlciAmJiAoMCAhPT0gaSkgJiYgKGkgJSAxMDAwMDAgPT09IDApKSBsb2dnZXIuaW5mbyhgICAgIFQxIGV2YWx1YXRpb24gJHtpfS8ke3prZXkuZG9tYWluU2l6ZSAqIDR9YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvbWVnYTIgPSBGci5zcXVhcmUob21lZ2EpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IGV2YWx1YXRpb25zLlouZ2V0RXZhbHVhdGlvbihpICogMik7XG4gICAgICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaGFsbGVuZ2VzLmJbN10sIG9tZWdhMiksIEZyLm11bChjaGFsbGVuZ2VzLmJbOF0sIG9tZWdhKSksIGNoYWxsZW5nZXMuYls5XSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUMShYKSA6PSAoeihYKSAtIDEpIMK3IExfMShYKVxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgZmlyc3QgVDEoWCnCt1pfSChYKSwgc28gZGl2aWRlIGxhdGVyIHRoZSByZXN1bHRpbmcgcG9seW5vbWlhbCBieSBaX0goWClcbiAgICAgICAgICAgICAgICBjb25zdCBsYWdyYW5nZTEgPSBldmFsdWF0aW9ucy5sYWdyYW5nZTEuZ2V0RXZhbHVhdGlvbih6a2V5LmRvbWFpblNpemUgKyBpICogMik7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gRnIubXVsKEZyLnN1Yih6LCBGci5vbmUpLCBsYWdyYW5nZTEpO1xuICAgICAgICAgICAgICAgIGxldCB0MXogPSBGci5tdWwoenAsIGxhZ3JhbmdlMSk7XG5cbiAgICAgICAgICAgICAgICBidWZmZXJzLlQxLnNldCh0MSwgaSAqIHNGcik7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5UMXouc2V0KHQxeiwgaSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgb21lZ2FcbiAgICAgICAgICAgICAgICBvbWVnYSA9IEZyLm11bChvbWVnYSwgRnIud1t6a2V5LnBvd2VyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDEoWCkgZnJvbSBidWZmZXJzLlQxXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDEgaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMSwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMSBieSBaX0goWClcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxLmRpdkJ5WmVyb2ZpZXIoemtleS5kb21haW5TaXplLCBGci5vbmUpO1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDF6KFgpIGZyb20gYnVmZmVycy5UMXpcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMXogaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxeiA9IGF3YWl0IFBvbHlub21pYWwuZnJvbUV2YWx1YXRpb25zKGJ1ZmZlcnMuVDF6LCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBwb2x5bm9taWFsIFQxeiB0byBUMSB0byBnZXQgdGhlIGZpbmFsIHBvbHlub21pYWwgVDFcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQxLmFkZChwb2x5bm9taWFscy5UMXopO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5UMS5kZWdyZWUoKSA+PSB6a2V5LmRvbWFpblNpemUgKyAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVDEgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgYnVmZmVycy5UMTtcbiAgICAgICAgICAgIGRlbGV0ZSBidWZmZXJzLlQxejtcbiAgICAgICAgICAgIGRlbGV0ZSBwb2x5bm9taWFscy5UMXo7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjb21wdXRlVDIoKSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDIgZXZhbHVhdGlvbnNcIik7XG5cbiAgICAgICAgICAgIGJ1ZmZlcnMuVDIgPSBuZXcgQmlnQnVmZmVyKHNEb21haW4gKiA0KTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuVDJ6ID0gbmV3IEJpZ0J1ZmZlcihzRG9tYWluICogNCk7XG5cbiAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIG9tZWdhXG4gICAgICAgICAgICBsZXQgb21lZ2EgPSBGci5vbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkuZG9tYWluU2l6ZSAqIDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChsb2dnZXIgJiYgKDAgIT09IGkpICYmIChpICUgMTAwMDAwID09PSAwKSkgbG9nZ2VyLmluZm8oYCAgICBUMiBldmFsdWF0aW9uICR7aX0vJHt6a2V5LmRvbWFpblNpemUgKiA0fWApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb21lZ2EyID0gRnIuc3F1YXJlKG9tZWdhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbWVnYVcgPSBGci5tdWwob21lZ2EsIEZyLndbemtleS5wb3dlcl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9tZWdhVzIgPSBGci5zcXVhcmUob21lZ2FXKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBldmFsdWF0aW9ucy5BLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGV2YWx1YXRpb25zLkIuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZXZhbHVhdGlvbnMuQy5nZXRFdmFsdWF0aW9uKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHogPSBldmFsdWF0aW9ucy5aLmdldEV2YWx1YXRpb24oaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgelcgPSBldmFsdWF0aW9ucy5aLmdldEV2YWx1YXRpb24oKHprZXkuZG9tYWluU2l6ZSAqIDQgKyA0ICsgaSkgJSAoemtleS5kb21haW5TaXplICogNCkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgenAgPSBGci5hZGQoRnIuYWRkKEZyLm11bChjaGFsbGVuZ2VzLmJbN10sIG9tZWdhMiksIEZyLm11bChjaGFsbGVuZ2VzLmJbOF0sIG9tZWdhKSksIGNoYWxsZW5nZXMuYls5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeldwID0gRnIuYWRkKEZyLmFkZChGci5tdWwoY2hhbGxlbmdlcy5iWzddLCBvbWVnYVcyKSwgRnIubXVsKGNoYWxsZW5nZXMuYls4XSwgb21lZ2FXKSksIGNoYWxsZW5nZXMuYls5XSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTEgPSBldmFsdWF0aW9ucy5TaWdtYTEuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTIgPSBldmFsdWF0aW9ucy5TaWdtYTIuZ2V0RXZhbHVhdGlvbihpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWdtYTMgPSBldmFsdWF0aW9ucy5TaWdtYTMuZ2V0RXZhbHVhdGlvbihpKTtcblxuICAgICAgICAgICAgICAgIC8vIFQyKFgpIDo9IFsgKGEoWCkgKyBiZXRhwrdYICsgZ2FtbWEpKGIoWCkgKyBiZXRhwrdrMcK3WCArIGdhbW1hKShjKFgpICsgYmV0YcK3azLCt1ggKyBnYW1tYSl6KFgpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIC0oYShYKSArIGJldGHCt3NpZ21hMShYKSArIGdhbW1hKShiKFgpICsgYmV0YcK3c2lnbWEyKFgpICsgZ2FtbWEpKGMoWCkgKyBiZXRhwrdzaWdtYTMoWCkgKyBnYW1tYSl6KFjPiSldIMK3IDEvWl9IKFgpXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBmaXJzdCBUMihYKcK3Wl9IKFgpLCBzbyBkaXZpZGUgbGF0ZXIgdGhlIHJlc3VsdGluZyBwb2x5bm9taWFsIGJ5IFpfSChYKVxuXG4gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiAxIC0+IChhKFgpICsgYmV0YcK3WCArIGdhbW1hKShiKFgpICsgYmV0YcK3azHCt1ggKyBnYW1tYSkoYyhYKSArIGJldGHCt2sywrdYICsgZ2FtbWEpeihYKVxuICAgICAgICAgICAgICAgIGNvbnN0IGJldGFYID0gRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgb21lZ2EpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUxMSA9IEZyLmFkZChhLCBiZXRhWCk7XG4gICAgICAgICAgICAgICAgZTExID0gRnIuYWRkKGUxMSwgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZTEyID0gRnIuYWRkKGIsIEZyLm11bChiZXRhWCwgemtleS5rMSkpO1xuICAgICAgICAgICAgICAgIGUxMiA9IEZyLmFkZChlMTIsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUxMyA9IEZyLmFkZChjLCBGci5tdWwoYmV0YVgsIHprZXkuazIpKTtcbiAgICAgICAgICAgICAgICBlMTMgPSBGci5hZGQoZTEzLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBlMSA9IEZyLm11bChGci5tdWwoRnIubXVsKGUxMSwgZTEyKSwgZTEzKSwgeik7XG4gICAgICAgICAgICAgICAgbGV0IGUxeiA9IEZyLm11bChGci5tdWwoRnIubXVsKGUxMSwgZTEyKSwgZTEzKSwgenApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IFtlMSwgZTF6XSA9IE11bFoubXVsNChlMTEsIGUxMiwgZTEzLCB6LCBhcCwgYnAsIGNwLCB6cCwgaSAlIDQsIEZyKTtcblxuICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gMiAtPiAoYShYKSArIGJldGHCt3NpZ21hMShYKSArIGdhbW1hKShiKFgpICsgYmV0YcK3c2lnbWEyKFgpICsgZ2FtbWEpKGMoWCkgKyBiZXRhwrdzaWdtYTMoWCkgKyBnYW1tYSl6KFjPiSlcbiAgICAgICAgICAgICAgICBsZXQgZTIxID0gRnIuYWRkKGEsIEZyLm11bChjaGFsbGVuZ2VzLmJldGEsIHNpZ21hMSkpO1xuICAgICAgICAgICAgICAgIGUyMSA9IEZyLmFkZChlMjEsIGNoYWxsZW5nZXMuZ2FtbWEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGUyMiA9IEZyLmFkZChiLCBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBzaWdtYTIpKTtcbiAgICAgICAgICAgICAgICBlMjIgPSBGci5hZGQoZTIyLCBjaGFsbGVuZ2VzLmdhbW1hKTtcblxuICAgICAgICAgICAgICAgIGxldCBlMjMgPSBGci5hZGQoYywgRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgc2lnbWEzKSk7XG4gICAgICAgICAgICAgICAgZTIzID0gRnIuYWRkKGUyMywgY2hhbGxlbmdlcy5nYW1tYSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZTIgPSBGci5tdWwoRnIubXVsKEZyLm11bChlMjEsIGUyMiksIGUyMyksIHpXKTtcbiAgICAgICAgICAgICAgICBsZXQgZTJ6ID0gRnIubXVsKEZyLm11bChGci5tdWwoZTIxLCBlMjIpLCBlMjMpLCB6V3ApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IFtlMiwgZTJ6XSA9IE11bFoubXVsNChlMjEsIGUyMiwgZTIzLCB6VywgYXAsIGJwLCBjcCwgeldwLCBpICUgNCwgRnIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHQyID0gRnIuc3ViKGUxLCBlMik7XG4gICAgICAgICAgICAgICAgbGV0IHQyeiA9IEZyLnN1YihlMXosIGUyeik7XG5cbiAgICAgICAgICAgICAgICBidWZmZXJzLlQyLnNldCh0MiwgaSAqIHNGcik7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5UMnouc2V0KHQyeiwgaSAqIHNGcik7XG5cbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgb21lZ2FcbiAgICAgICAgICAgICAgICBvbWVnYSA9IEZyLm11bChvbWVnYSwgRnIud1t6a2V5LnBvd2VyICsgMl0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHBvbHlub21pYWwgVDIoWCkgZnJvbSBidWZmZXJzLlQyXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDIgaWZmdFwiKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlQyID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMiwgY3VydmUsIGxvZ2dlcik7XG5cbiAgICAgICAgICAgIC8vIERpdmlkZSB0aGUgcG9seW5vbWlhbCBUMiBieSBaX0goWClcbiAgICAgICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBUMiAvIFpIXCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDIuZGl2QnlaZXJvZmllcih6a2V5LmRvbWFpblNpemUsIEZyLm9uZSk7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcG9seW5vbWlhbCBUMnooWCkgZnJvbSBidWZmZXJzLlQyelxuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQyeiBpZmZ0XCIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDJ6ID0gYXdhaXQgUG9seW5vbWlhbC5mcm9tRXZhbHVhdGlvbnMoYnVmZmVycy5UMnosIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHBvbHlub21pYWwgVDJ6IHRvIFQyIHRvIGdldCB0aGUgZmluYWwgcG9seW5vbWlhbCBUMlxuICAgICAgICAgICAgcG9seW5vbWlhbHMuVDIuYWRkKHBvbHlub21pYWxzLlQyeik7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGRlZ3JlZVxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlQyLmRlZ3JlZSgpID49IDMgKiB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUMiBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSBidWZmZXJzLlQyO1xuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuVDJ6O1xuICAgICAgICAgICAgZGVsZXRlIHBvbHlub21pYWxzLlQyejtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVDMigpIHtcbiAgICAgICAgICAgIGxldCBDMiA9IG5ldyBDUG9seW5vbWlhbCgzLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIEMyLmFkZFBvbHlub21pYWwoMCwgcG9seW5vbWlhbHMuWik7XG4gICAgICAgICAgICBDMi5hZGRQb2x5bm9taWFsKDEsIHBvbHlub21pYWxzLlQxKTtcbiAgICAgICAgICAgIEMyLmFkZFBvbHlub21pYWwoMiwgcG9seW5vbWlhbHMuVDIpO1xuXG4gICAgICAgICAgICBwb2x5bm9taWFscy5DMiA9IEMyLmdldFBvbHlub21pYWwoKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZGVncmVlXG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuQzIuZGVncmVlKCkgPj0gOSAqIHprZXkuZG9tYWluU2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkMyIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kMygpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2UgeGlcIik7XG4gICAgICAgIC8vIFNURVAgMy4xIC0gQ29tcHV0ZSBldmFsdWF0aW9uIGNoYWxsZW5nZSB4aSDiiIggU1xuICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmdhbW1hKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHByb29mLmdldFBvbHlub21pYWwoXCJDMlwiKSk7XG5cbiAgICAgICAgLy8gT2J0YWluIGEgeGlfc2VlZGVyIGZyb20gdGhlIHRyYW5zY3JpcHRcbiAgICAgICAgLy8gVG8gZm9yY2UgaDFeNCA9IHhpLCBoMl4zID0geGkgYW5kIGhfM14yID0geGnPiVxuICAgICAgICAvLyB3ZSBjb21wdXRlIHhpID0geGlfc2VlZGVyXjEyLCBoMSA9IHhpX3NlZWRlcl4zLCBoMiA9IHhpX3NlZWRlcl40IGFuZCBoMyA9IHhpX3NlZWRlcl42XG4gICAgICAgIGNoYWxsZW5nZXMueGlTZWVkID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcbiAgICAgICAgY29uc3QgeGlTZWVkMiA9IEZyLnNxdWFyZShjaGFsbGVuZ2VzLnhpU2VlZCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBvbWVnYTgsIG9tZWdhNCBhbmQgb21lZ2EzXG4gICAgICAgIHJvb3RzLnc4ID0gW107XG4gICAgICAgIHJvb3RzLnc4WzBdID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICAgICAgcm9vdHMudzhbaV0gPSBGci5tdWwocm9vdHMudzhbaSAtIDFdLCB6a2V5Lnc4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RzLnc0ID0gW107XG4gICAgICAgIHJvb3RzLnc0WzBdID0gRnIub25lO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgcm9vdHMudzRbaV0gPSBGci5tdWwocm9vdHMudzRbaSAtIDFdLCB6a2V5Lnc0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RzLnczID0gW107XG4gICAgICAgIHJvb3RzLnczWzBdID0gRnIub25lO1xuICAgICAgICByb290cy53M1sxXSA9IHprZXkudzM7XG4gICAgICAgIHJvb3RzLnczWzJdID0gRnIuc3F1YXJlKHprZXkudzMpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgaDAgPSB4aVNlZWRlcl4zXG4gICAgICAgIHJvb3RzLlMwID0ge307XG4gICAgICAgIHJvb3RzLlMwLmgwdzggPSBbXTtcbiAgICAgICAgcm9vdHMuUzAuaDB3OFswXSA9IEZyLm11bCh4aVNlZWQyLCBjaGFsbGVuZ2VzLnhpU2VlZCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICByb290cy5TMC5oMHc4W2ldID0gRnIubXVsKHJvb3RzLlMwLmgwdzhbMF0sIHJvb3RzLnc4W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgaDEgPSB4aV9zZWVkZXJeNlxuICAgICAgICByb290cy5TMSA9IHt9O1xuICAgICAgICByb290cy5TMS5oMXc0ID0gW107XG4gICAgICAgIHJvb3RzLlMxLmgxdzRbMF0gPSBGci5zcXVhcmUocm9vdHMuUzAuaDB3OFswXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByb290cy5TMS5oMXc0W2ldID0gRnIubXVsKHJvb3RzLlMxLmgxdzRbMF0sIHJvb3RzLnc0W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgaDIgPSB4aV9zZWVkZXJeOFxuICAgICAgICByb290cy5TMiA9IHt9O1xuICAgICAgICByb290cy5TMi5oMnczID0gW107XG4gICAgICAgIHJvb3RzLlMyLmgydzNbMF0gPSBGci5tdWwocm9vdHMuUzEuaDF3NFswXSwgeGlTZWVkMik7XG4gICAgICAgIHJvb3RzLlMyLmgydzNbMV0gPSBGci5tdWwocm9vdHMuUzIuaDJ3M1swXSwgcm9vdHMudzNbMV0pO1xuICAgICAgICByb290cy5TMi5oMnczWzJdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHJvb3RzLnczWzJdKTtcblxuICAgICAgICByb290cy5TMi5oM3czID0gW107XG4gICAgICAgIC8vIE11bHRpcGx5IGgzIGJ5IHRoaXJkLXJvb3Qtb21lZ2EgdG8gb2J0YWluIGhfM14zID0geGnPiVxuICAgICAgICAvLyBTbywgaDMgPSB4aV9zZWVkZXJeOCDPiV57MS8zfVxuICAgICAgICByb290cy5TMi5oM3czWzBdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHprZXkud3IpO1xuICAgICAgICByb290cy5TMi5oM3czWzFdID0gRnIubXVsKHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLnczWzFdKTtcbiAgICAgICAgcm9vdHMuUzIuaDN3M1syXSA9IEZyLm11bChyb290cy5TMi5oM3czWzBdLCByb290cy53M1syXSk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB4aSA9IHhpX3NlZWRlcl4yNFxuICAgICAgICBjaGFsbGVuZ2VzLnhpID0gRnIubXVsKEZyLnNxdWFyZShyb290cy5TMi5oMnczWzBdKSwgcm9vdHMuUzIuaDJ3M1swXSk7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy54aTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnhpKSk7XG5cbiAgICAgICAgLy8gUmVzZXJ2ZSBtZW1vcnkgZm9yIFEncyBwb2x5bm9taWFsc1xuICAgICAgICBwb2x5bm9taWFscy5RTCA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RUiA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RTSA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RTyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBwb2x5bm9taWFscy5RQyA9IG5ldyBQb2x5bm9taWFsKG5ldyBCaWdCdWZmZXIoc0RvbWFpbiksIGN1cnZlLCBsb2dnZXIpO1xuXG4gICAgICAgIC8vIFJlYWQgUSdzIGV2YWx1YXRpb25zIGZyb20gemtleSBmaWxlXG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUUwuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUxfU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUVIuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUVJfU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUU0uY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU1fU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUU8uY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUU9fU0VDVElPTl1bMF0ucCk7XG4gICAgICAgIGF3YWl0IGZkWktleS5yZWFkVG9CdWZmZXIocG9seW5vbWlhbHMuUUMuY29lZiwgMCwgc0RvbWFpbiwgemtleVNlY3Rpb25zW1pLRVlfRkZfUUNfU0VDVElPTl1bMF0ucCk7XG5cbiAgICAgICAgLy8gU1RFUCAzLjIgLSBDb21wdXRlIG9wZW5pbmcgZXZhbHVhdGlvbnMgYW5kIGFkZCB0aGVtIHRvIHRoZSBwcm9vZiAodGhpcmQgb3V0cHV0IG9mIHRoZSBwcm92ZXIpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IENvbXB1dGluZyBldmFsdWF0aW9uc1wiKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFsXCIsIHBvbHlub21pYWxzLlFMLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFyXCIsIHBvbHlub21pYWxzLlFSLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFtXCIsIHBvbHlub21pYWxzLlFNLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFvXCIsIHBvbHlub21pYWxzLlFPLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInFjXCIsIHBvbHlub21pYWxzLlFDLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInMxXCIsIHBvbHlub21pYWxzLlNpZ21hMS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJzMlwiLCBwb2x5bm9taWFscy5TaWdtYTIuZXZhbHVhdGUoY2hhbGxlbmdlcy54aSkpO1xuICAgICAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiczNcIiwgcG9seW5vbWlhbHMuU2lnbWEzLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcImFcIiwgcG9seW5vbWlhbHMuQS5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJiXCIsIHBvbHlub21pYWxzLkIuZXZhbHVhdGUoY2hhbGxlbmdlcy54aSkpO1xuICAgICAgICBwcm9vZi5hZGRFdmFsdWF0aW9uKFwiY1wiLCBwb2x5bm9taWFscy5DLmV2YWx1YXRlKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInpcIiwgcG9seW5vbWlhbHMuWi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpKSk7XG5cbiAgICAgICAgY2hhbGxlbmdlcy54aXcgPSBGci5tdWwoY2hhbGxlbmdlcy54aSwgRnIud1t6a2V5LnBvd2VyXSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJ6d1wiLCBwb2x5bm9taWFscy5aLmV2YWx1YXRlKGNoYWxsZW5nZXMueGl3KSk7XG4gICAgICAgIHByb29mLmFkZEV2YWx1YXRpb24oXCJ0MXdcIiwgcG9seW5vbWlhbHMuVDEuZXZhbHVhdGUoY2hhbGxlbmdlcy54aXcpKTtcbiAgICAgICAgcHJvb2YuYWRkRXZhbHVhdGlvbihcInQyd1wiLCBwb2x5bm9taWFscy5UMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnhpdykpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJvdW5kNCgpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBjaGFsbGVuZ2UgYWxwaGFcIik7XG4gICAgICAgIC8vIFNURVAgNC4xIC0gQ29tcHV0ZSBjaGFsbGVuZ2UgYWxwaGEg4oiIIEZcbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IG5ldyBLZWNjYWsyNTZUcmFuc2NyaXB0KGN1cnZlKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy54aVNlZWQpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicWxcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicXJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicW1cIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicW9cIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwicWNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczFcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczJcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiczNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwiYVwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJiXCIpKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZ2V0RXZhbHVhdGlvbihcImNcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwielwiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJ6d1wiKSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmdldEV2YWx1YXRpb24oXCJ0MXdcIikpO1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5nZXRFdmFsdWF0aW9uKFwidDJ3XCIpKTtcbiAgICAgICAgY2hhbGxlbmdlcy5hbHBoYSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMuYWxwaGE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5hbHBoYSkpO1xuXG4gICAgICAgIC8vIFNURVAgNC4yIC0gQ29tcHV0ZSBGKFgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBSZWFkaW5nIEMwIHBvbHlub21pYWxcIik7XG4gICAgICAgIHBvbHlub21pYWxzLkMwID0gbmV3IFBvbHlub21pYWwobmV3IEJpZ0J1ZmZlcihzRG9tYWluICogOCksIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCBmZFpLZXkucmVhZFRvQnVmZmVyKHBvbHlub21pYWxzLkMwLmNvZWYsIDAsIHNEb21haW4gKiA4LCB6a2V5U2VjdGlvbnNbWktFWV9GRl9DMF9TRUNUSU9OXVswXS5wKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIwIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMCgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIxIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMSgpO1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFIyIHBvbHlub21pYWxcIik7XG4gICAgICAgIGNvbXB1dGVSMigpO1xuXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgRiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBhd2FpdCBjb21wdXRlRigpO1xuXG4gICAgICAgIC8vIFRoZSBmb3VydGggb3V0cHV0IG9mIHRoZSBwcm92ZXIgaXMgKFtXMV1fMSksIHdoZXJlIFcxOj0oZi9aX3QpKHgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVzEgbXVsdGkgZXhwb25lbnRpYXRpb25cIik7XG4gICAgICAgIGxldCBjb21taXRXMSA9IGF3YWl0IHBvbHlub21pYWxzLkYubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIlcxXCIpO1xuICAgICAgICBwcm9vZi5hZGRQb2x5bm9taWFsKFwiVzFcIiwgY29tbWl0VzEpO1xuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVSMCgpIHtcbiAgICAgICAgICAgIC8vIENPTVBVVEUgUjBcbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiBSMChYKSBmcm9tIDggZXZhbHVhdGlvbnMgdXNpbmcgbGFncmFuZ2UgaW50ZXJwb2xhdGlvbi4gUjAoWCkg4oiIIEZfezw4fVtYXVxuICAgICAgICAgICAgLy8gV2UgZGVjaWRlIHRvIHVzZSBMYWdyYW5nZSBpbnRlcnBvbGF0aW9ucyBiZWNhdXNlIHRoZSBSMCBkZWdyZWUgaXMgdmVyeSBzbWFsbCAoZGVnKFIwKT09PTcpLFxuICAgICAgICAgICAgLy8gYW5kIHdlIHdlcmUgbm90IGFibGUgdG8gY29tcHV0ZSBpdCB1c2luZyBjdXJyZW50IGlmZnQgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGUgb21lZ2EgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgcG9seW5vbWlhbHMuUjAgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMwLmgwdzhbMF0sIHJvb3RzLlMwLmgwdzhbMV0sIHJvb3RzLlMwLmgwdzhbMl0sIHJvb3RzLlMwLmgwdzhbM10sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMwLmgwdzhbNF0sIHJvb3RzLlMwLmgwdzhbNV0sIHJvb3RzLlMwLmgwdzhbNl0sIHJvb3RzLlMwLmgwdzhbN11dLFxuICAgICAgICAgICAgICAgIFtwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzBdKSwgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFsxXSksXG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWxzLkMwLmV2YWx1YXRlKHJvb3RzLlMwLmgwdzhbMl0pLCBwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzNdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFs0XSksIHBvbHlub21pYWxzLkMwLmV2YWx1YXRlKHJvb3RzLlMwLmgwdzhbNV0pLFxuICAgICAgICAgICAgICAgICAgICBwb2x5bm9taWFscy5DMC5ldmFsdWF0ZShyb290cy5TMC5oMHc4WzZdKSwgcG9seW5vbWlhbHMuQzAuZXZhbHVhdGUocm9vdHMuUzAuaDB3OFs3XSldLCBjdXJ2ZSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBkZWdyZWUgb2YgcjAoWCkgPCA4XG4gICAgICAgICAgICBpZiAocG9seW5vbWlhbHMuUjAuZGVncmVlKCkgPiA3KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUjAgUG9seW5vbWlhbCBpcyBub3Qgd2VsbCBjYWxjdWxhdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZVIxKCkge1xuICAgICAgICAgICAgLy8gQ09NUFVURSBSMVxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29lZmZpY2llbnRzIG9mIFIxKFgpIGZyb20gNCBldmFsdWF0aW9ucyB1c2luZyBsYWdyYW5nZSBpbnRlcnBvbGF0aW9uLiBSMShYKSDiiIggRl97PDR9W1hdXG4gICAgICAgICAgICAvLyBXZSBkZWNpZGUgdG8gdXNlIExhZ3JhbmdlIGludGVycG9sYXRpb25zIGJlY2F1c2UgdGhlIFIxIGRlZ3JlZSBpcyB2ZXJ5IHNtYWxsIChkZWcoUjEpPT09MyksXG4gICAgICAgICAgICAvLyBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBjb21wdXRlIGl0IHVzaW5nIGN1cnJlbnQgaWZmdCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZSBvbWVnYSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICBwb2x5bm9taWFscy5SMSA9IFBvbHlub21pYWwubGFncmFuZ2VQb2x5bm9taWFsSW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICBbcm9vdHMuUzEuaDF3NFswXSwgcm9vdHMuUzEuaDF3NFsxXSwgcm9vdHMuUzEuaDF3NFsyXSwgcm9vdHMuUzEuaDF3NFszXV0sXG4gICAgICAgICAgICAgICAgW3BvbHlub21pYWxzLkMxLmV2YWx1YXRlKHJvb3RzLlMxLmgxdzRbMF0pLCBwb2x5bm9taWFscy5DMS5ldmFsdWF0ZShyb290cy5TMS5oMXc0WzFdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzEuZXZhbHVhdGUocm9vdHMuUzEuaDF3NFsyXSksIHBvbHlub21pYWxzLkMxLmV2YWx1YXRlKHJvb3RzLlMxLmgxdzRbM10pXSwgY3VydmUpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGVncmVlIG9mIHIxKFgpIDwgNFxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlIxLmRlZ3JlZSgpID4gMykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlIxIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVSMigpIHtcbiAgICAgICAgICAgIC8vIENPTVBVVEUgUjJcbiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNvZWZmaWNpZW50cyBvZiByMihYKSBmcm9tIDYgZXZhbHVhdGlvbnMgdXNpbmcgbGFncmFuZ2UgaW50ZXJwb2xhdGlvbi4gcjIoWCkg4oiIIEZfezw2fVtYXVxuICAgICAgICAgICAgLy8gV2UgZGVjaWRlIHRvIHVzZSBMYWdyYW5nZSBpbnRlcnBvbGF0aW9ucyBiZWNhdXNlIHRoZSBSMi5kZWdyZWUgaXMgdmVyeSBzbWFsbCAoZGVnKFIyKT09PTUpLFxuICAgICAgICAgICAgLy8gYW5kIHdlIHdlcmUgbm90IGFibGUgdG8gY29tcHV0ZSBpdCB1c2luZyBjdXJyZW50IGlmZnQgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGUgb21lZ2EgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgcG9seW5vbWlhbHMuUjIgPSBQb2x5bm9taWFsLmxhZ3JhbmdlUG9seW5vbWlhbEludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMyLmgydzNbMF0sIHJvb3RzLlMyLmgydzNbMV0sIHJvb3RzLlMyLmgydzNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLlMyLmgzdzNbMV0sIHJvb3RzLlMyLmgzdzNbMl1dLFxuICAgICAgICAgICAgICAgIFtwb2x5bm9taWFscy5DMi5ldmFsdWF0ZShyb290cy5TMi5oMnczWzBdKSwgcG9seW5vbWlhbHMuQzIuZXZhbHVhdGUocm9vdHMuUzIuaDJ3M1sxXSksXG4gICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWxzLkMyLmV2YWx1YXRlKHJvb3RzLlMyLmgydzNbMl0pLCBwb2x5bm9taWFscy5DMi5ldmFsdWF0ZShyb290cy5TMi5oM3czWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgcG9seW5vbWlhbHMuQzIuZXZhbHVhdGUocm9vdHMuUzIuaDN3M1sxXSksIHBvbHlub21pYWxzLkMyLmV2YWx1YXRlKHJvb3RzLlMyLmgzdzNbMl0pXSwgY3VydmUpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGVncmVlIG9mIHIyKFgpIDwgNlxuICAgICAgICAgICAgaWYgKHBvbHlub21pYWxzLlIyLmRlZ3JlZSgpID4gNSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlIyIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVGKCkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEYgcG9seW5vbWlhbFwiKTtcblxuICAgICAgICAgICAgLy8gQ09NUFVURSBGKFgpXG4gICAgICAgICAgICBwb2x5bm9taWFscy5GID0gUG9seW5vbWlhbC5mcm9tUG9seW5vbWlhbChwb2x5bm9taWFscy5DMCwgY3VydmUsIGxvZ2dlcik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLnN1Yihwb2x5bm9taWFscy5SMCk7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmRpdkJ5WmVyb2ZpZXIoOCwgY2hhbGxlbmdlcy54aSk7XG5cbiAgICAgICAgICAgIGxldCBmMiA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzEsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZjIuc3ViKHBvbHlub21pYWxzLlIxKTtcbiAgICAgICAgICAgIGYyLm11bFNjYWxhcihjaGFsbGVuZ2VzLmFscGhhKTtcbiAgICAgICAgICAgIGYyLmRpdkJ5WmVyb2ZpZXIoNCwgY2hhbGxlbmdlcy54aSk7XG5cbiAgICAgICAgICAgIGxldCBmMyA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzIsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgZjMuc3ViKHBvbHlub21pYWxzLlIyKTtcbiAgICAgICAgICAgIGYzLm11bFNjYWxhcihGci5zcXVhcmUoY2hhbGxlbmdlcy5hbHBoYSkpO1xuICAgICAgICAgICAgZjMuZGl2QnlaZXJvZmllcigzLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICAgICAgICAgIGYzLmRpdkJ5WmVyb2ZpZXIoMywgY2hhbGxlbmdlcy54aXcpO1xuXG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmFkZChmMik7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLmFkZChmMyk7XG5cbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5GLmRlZ3JlZSgpID49IDkgKiB6a2V5LmRvbWFpblNpemUgLSA2KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRiBQb2x5bm9taWFsIGlzIG5vdCB3ZWxsIGNhbGN1bGF0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiByb3VuZDUoKSB7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgY2hhbGxlbmdlIHlcIik7XG5cbiAgICAgICAgLy8gU1RFUCA1LjEgLSBDb21wdXRlIHJhbmRvbSBldmFsdWF0aW9uIHBvaW50IHkg4oiIIEZcbiAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IG5ldyBLZWNjYWsyNTZUcmFuc2NyaXB0KGN1cnZlKTtcbiAgICAgICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5hbHBoYSk7XG4gICAgICAgIHRyYW5zY3JpcHQuYWRkUG9sQ29tbWl0bWVudChwcm9vZi5nZXRQb2x5bm9taWFsKFwiVzFcIikpO1xuXG4gICAgICAgIGNoYWxsZW5nZXMueSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMueTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLnkpKTtcblxuICAgICAgICAvLyBTVEVQIDUuMiAtIENvbXB1dGUgTChYKVxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIEwgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZUwoKTtcblxuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFpUUzIgcG9seW5vbWlhbFwiKTtcbiAgICAgICAgYXdhaXQgY29tcHV0ZVpUUzIoKTtcblxuICAgICAgICBsZXQgWlRTMlkgPSBwb2x5bm9taWFscy5aVFMyLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgIFpUUzJZID0gRnIuaW52KFpUUzJZKTtcbiAgICAgICAgcG9seW5vbWlhbHMuTC5tdWxTY2FsYXIoWlRTMlkpO1xuXG4gICAgICAgIGNvbnN0IHBvbERpdmlkZW5kID0gUG9seW5vbWlhbC5mcm9tQ29lZmZpY2llbnRzQXJyYXkoW0ZyLm5lZyhjaGFsbGVuZ2VzLnkpLCBGci5vbmVdLCBjdXJ2ZSk7XG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVycgPSBMIC8gWlRTMiBwb2x5bm9taWFsXCIpO1xuICAgICAgICBjb25zdCBwb2xSZW1haW5kZXIgPSBwb2x5bm9taWFscy5MLmRpdkJ5KHBvbERpdmlkZW5kKTtcblxuICAgICAgICAvL0NoZWNrIHBvbFJlbWluZGVyIGRlZ3JlZSBpcyBlcXVhbCB0byB6ZXJvXG4gICAgICAgIGlmIChwb2xSZW1haW5kZXIuZGVncmVlKCkgPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlZ3JlZSBvZiBMKFgpLyhaVFMyKHkpKFgteSkpIHJlbWFpbmRlciBpcyAke3BvbFJlbWFpbmRlci5kZWdyZWUoKX0gYW5kIHNob3VsZCBiZSAwYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9seW5vbWlhbHMuTC5kZWdyZWUoKSA+PSA5ICogemtleS5kb21haW5TaXplIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVncmVlIG9mIEwoWCkvKFpUUzIoeSkoWC15KSkgaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlmdGggb3V0cHV0IG9mIHRoZSBwcm92ZXIgaXMgKFtXMl1fMSksIHdoZXJlIFcyOj0oZi9aX3QpKHgpXG4gICAgICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgVycgbXVsdGkgZXhwb25lbnRpYXRpb25cIik7XG4gICAgICAgIGxldCBjb21taXRXMiA9IGF3YWl0IHBvbHlub21pYWxzLkwubXVsdGlFeHBvbmVudGlhdGlvbihQVGF1LCBcIlcyXCIpO1xuICAgICAgICBwcm9vZi5hZGRQb2x5bm9taWFsKFwiVzJcIiwgY29tbWl0VzIpO1xuXG4gICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVMKCkge1xuICAgICAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEwgcG9seW5vbWlhbFwiKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFIwWSA9IHBvbHlub21pYWxzLlIwLmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgICAgICBjb25zdCBldmFsUjFZID0gcG9seW5vbWlhbHMuUjEuZXZhbHVhdGUoY2hhbGxlbmdlcy55KTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWxSMlkgPSBwb2x5bm9taWFscy5SMi5ldmFsdWF0ZShjaGFsbGVuZ2VzLnkpO1xuXG4gICAgICAgICAgICBsZXQgbXVsTDAgPSBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMC5oMHc4WzBdKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbXVsTDAgPSBGci5tdWwobXVsTDAsIEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMwLmgwdzhbaV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG11bEwxID0gRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzEuaDF3NFswXSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIG11bEwxID0gRnIubXVsKG11bEwxLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMS5oMXc0W2ldKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtdWxMMiA9IEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMyLmgydzNbMF0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtdWxMMiA9IEZyLm11bChtdWxMMiwgRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzIuaDJ3M1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtdWxMMiA9IEZyLm11bChtdWxMMiwgRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzIuaDN3M1tpXSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcHJlTDAgPSBGci5tdWwobXVsTDEsIG11bEwyKTtcbiAgICAgICAgICAgIGxldCBwcmVMMSA9IEZyLm11bChjaGFsbGVuZ2VzLmFscGhhLCBGci5tdWwobXVsTDAsIG11bEwyKSk7XG4gICAgICAgICAgICBsZXQgcHJlTDIgPSBGci5tdWwoRnIuc3F1YXJlKGNoYWxsZW5nZXMuYWxwaGEpLCBGci5tdWwobXVsTDAsIG11bEwxKSk7XG5cbiAgICAgICAgICAgIHRvSW52ZXJzZVtcImRlbkgxXCJdID0gbXVsTDE7XG4gICAgICAgICAgICB0b0ludmVyc2VbXCJkZW5IMlwiXSA9IG11bEwyO1xuXG4gICAgICAgICAgICAvLyBDT01QVVRFIEwoWClcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwgPSBQb2x5bm9taWFsLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMwLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwuc3ViU2NhbGFyKGV2YWxSMFkpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5tdWxTY2FsYXIocHJlTDApO1xuXG4gICAgICAgICAgICBsZXQgbDIgPSBQb2x5bm9taWFsLmZyb21Qb2x5bm9taWFsKHBvbHlub21pYWxzLkMxLCBjdXJ2ZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIGwyLnN1YlNjYWxhcihldmFsUjFZKTtcbiAgICAgICAgICAgIGwyLm11bFNjYWxhcihwcmVMMSk7XG5cbiAgICAgICAgICAgIGxldCBsMyA9IFBvbHlub21pYWwuZnJvbVBvbHlub21pYWwocG9seW5vbWlhbHMuQzIsIGN1cnZlLCBsb2dnZXIpO1xuICAgICAgICAgICAgbDMuc3ViU2NhbGFyKGV2YWxSMlkpO1xuICAgICAgICAgICAgbDMubXVsU2NhbGFyKHByZUwyKTtcblxuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5hZGQobDIpO1xuICAgICAgICAgICAgcG9seW5vbWlhbHMuTC5hZGQobDMpO1xuXG4gICAgICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ29tcHV0aW5nIFpUIHBvbHlub21pYWxcIik7XG4gICAgICAgICAgICBhd2FpdCBjb21wdXRlWlQoKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFpUWSA9IHBvbHlub21pYWxzLlpULmV2YWx1YXRlKGNoYWxsZW5nZXMueSk7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5GLm11bFNjYWxhcihldmFsWlRZKTtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLkwuc3ViKHBvbHlub21pYWxzLkYpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBkZWdyZWVcbiAgICAgICAgICAgIGlmIChwb2x5bm9taWFscy5MLmRlZ3JlZSgpID49IDkgKiB6a2V5LmRvbWFpblNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMIFBvbHlub21pYWwgaXMgbm90IHdlbGwgY2FsY3VsYXRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGJ1ZmZlcnMuTDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVaVCgpIHtcbiAgICAgICAgICAgIHBvbHlub21pYWxzLlpUID0gUG9seW5vbWlhbC56ZXJvZmllclBvbHlub21pYWwoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICByb290cy5TMC5oMHc4WzBdLCByb290cy5TMC5oMHc4WzFdLCByb290cy5TMC5oMHc4WzJdLCByb290cy5TMC5oMHc4WzNdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMC5oMHc4WzRdLCByb290cy5TMC5oMHc4WzVdLCByb290cy5TMC5oMHc4WzZdLCByb290cy5TMC5oMHc4WzddLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMS5oMXc0WzBdLCByb290cy5TMS5oMXc0WzFdLCByb290cy5TMS5oMXc0WzJdLCByb290cy5TMS5oMXc0WzNdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMi5oMnczWzBdLCByb290cy5TMi5oMnczWzFdLCByb290cy5TMi5oMnczWzJdLFxuICAgICAgICAgICAgICAgICAgICByb290cy5TMi5oM3czWzBdLCByb290cy5TMi5oM3czWzFdLCByb290cy5TMi5oM3czWzJdXSwgY3VydmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVpUUzIoKSB7XG4gICAgICAgICAgICBwb2x5bm9taWFscy5aVFMyID0gUG9seW5vbWlhbC56ZXJvZmllclBvbHlub21pYWwoXG4gICAgICAgICAgICAgICAgW3Jvb3RzLlMxLmgxdzRbMF0sIHJvb3RzLlMxLmgxdzRbMV0sIHJvb3RzLlMxLmgxdzRbMl0sIHJvb3RzLlMxLmgxdzRbM10sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgydzNbMF0sIHJvb3RzLlMyLmgydzNbMV0sIHJvb3RzLlMyLmgydzNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLlMyLmgzdzNbMF0sIHJvb3RzLlMyLmgzdzNbMV0sIHJvb3RzLlMyLmgzdzNbMl1dLCBjdXJ2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNb250Z29tZXJ5QmF0Y2hlZEludmVyc2UoKSB7XG4gICAgICAgIC8vICAgwrcgZGVub21pbmF0b3IgbmVlZGVkIGluIHN0ZXAgOCBhbmQgOSBvZiB0aGUgdmVyaWZpZXIgdG8gbXVsdGlwbHkgYnkgMS9aX0goeGkpXG4gICAgICAgIGxldCB4aU4gPSBjaGFsbGVuZ2VzLnhpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHprZXkucG93ZXI7IGkrKykge1xuICAgICAgICAgICAgeGlOID0gRnIuc3F1YXJlKHhpTik7XG4gICAgICAgIH1cbiAgICAgICAgdG9JbnZlcnNlW1wiemhcIl0gPSBGci5zdWIoeGlOLCBGci5vbmUpO1xuXG4gICAgICAgIC8vICAgwrcgZGVub21pbmF0b3IgbmVlZGVkIGluIHN0ZXAgMTAgYW5kIDExIG9mIHRoZSB2ZXJpZmllclxuICAgICAgICAvLyAgICAgdG9JbnZlcnNlLmRlbkgxICYgdG9JbnZlcnNlLmRlbkgyICAtPiBDb21wdXRlZCBpbiByb3VuZDUsIGNvbXB1dGVMKClcblxuICAgICAgICAvLyAgIMK3IGRlbm9taW5hdG9yIG5lZWRlZCBpbiB0aGUgdmVyaWZpZXIgd2hlbiBjb21wdXRpbmcgTF9pXntTMH0oWCksIExfaV57UzF9KFgpIGFuZCBMX2lee1MyfShYKVxuICAgICAgICBjb21wdXRlTGlTMCh0b0ludmVyc2UsIHJvb3RzLlMwLmgwdzgsIGNoYWxsZW5nZXMueSwgY3VydmUpO1xuXG4gICAgICAgIGNvbXB1dGVMaVMxKHRvSW52ZXJzZSwgcm9vdHMuUzEuaDF3NCwgY2hhbGxlbmdlcy55LCBjdXJ2ZSk7XG5cbiAgICAgICAgY29tcHV0ZUxpUzIodG9JbnZlcnNlLCByb290cy5TMi5oMnczLCByb290cy5TMi5oM3czLCBjaGFsbGVuZ2VzLnksIGNoYWxsZW5nZXMueGksIGNoYWxsZW5nZXMueGl3LCBjdXJ2ZSk7XG5cbiAgICAgICAgLy8gICDCtyBMX2kgaT0xIHRvIG51bSBwdWJsaWMgaW5wdXRzLCBuZWVkZWQgaW4gc3RlcCA2IGFuZCA3IG9mIHRoZSB2ZXJpZmllciB0byBjb21wdXRlIExfMSh4aSkgYW5kIFBJKHhpKVxuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5tYXgoMSwgemtleS5uUHVibGljKTtcblxuICAgICAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIHRvSW52ZXJzZVtcIkxpX1wiICsgKGkgKyAxKV0gPSBGci5tdWwoRnIuZSh6a2V5LmRvbWFpblNpemUpLCBGci5zdWIoY2hhbGxlbmdlcy54aSwgdykpO1xuICAgICAgICAgICAgdyA9IEZyLm11bCh3LCBGci53W3prZXkucG93ZXJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtdWxBY2N1bXVsYXRvciA9IEZyLm9uZTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModG9JbnZlcnNlKSkge1xuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViRWxlbWVudCBvZiBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG11bEFjY3VtdWxhdG9yID0gRnIubXVsKG11bEFjY3VtdWxhdG9yLCBzdWJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG11bEFjY3VtdWxhdG9yID0gRnIubXVsKG11bEFjY3VtdWxhdG9yLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRnIuaW52KG11bEFjY3VtdWxhdG9yKTtcblxuICAgICAgICBcbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUxpUzAodG9JbnZlcnNlLCByb290cywgeCwgY3VydmUpIHtcbiAgICAgICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSByb290cy5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZGVuMSA9IEZyLm11bChGci5lKGxlbiksIEZyLmV4cChyb290c1swXSwgbGVuIC0gMikpO1xuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IExpID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVuMiA9IHJvb3RzWygobGVuIC0gMSkgKiBpKSAlIGxlbl07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVuMyA9IEZyLnN1Yih4LCByb290c1tpXSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIHRvSW52ZXJzZVtbXCJMaVMwX1wiICsgKGkgKyAxKV1dID0gRnIubXVsKEZyLm11bChkZW4xLCBkZW4yKSwgZGVuMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIExpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUxpUzEodG9JbnZlcnNlLCByb290cywgeCwgY3VydmUpIHtcbiAgICAgICAgICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSByb290cy5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZGVuMSA9IEZyLm11bChGci5lKGxlbiksIEZyLmV4cChyb290c1swXSwgbGVuIC0gMikpO1xuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IExpID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVuMiA9IHJvb3RzWygobGVuIC0gMSkgKiBpKSAlIGxlbl07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVuMyA9IEZyLnN1Yih4LCByb290c1tpXSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIHRvSW52ZXJzZVtbXCJMaVMxX1wiICsgKGkgKyAxKV1dID0gRnIubXVsKEZyLm11bChkZW4xLCBkZW4yKSwgZGVuMyk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gTGk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb21wdXRlTGlTMih0b0ludmVyc2UsIFMyLCBTMnAsIHZhbHVlLCB4aSwgeGl3LCBjdXJ2ZSkge1xuICAgICAgICAgICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBMaSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IF8zaDIgPSBGci5tdWwoRnIuZSgzKSwgUzJbMF0pO1xuICAgICAgICAgICAgY29uc3QgeGlzdWJ4aXcgPSBGci5zdWIoeGksIHhpdyk7XG4gICAgICAgICAgICBsZXQgZGVuMSA9IEZyLm11bChfM2gyLCB4aXN1Ynhpdyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbjIgPSBTMlsyICogaSAlIDNdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbjMgPSBGci5zdWIodmFsdWUsIFMyW2ldKTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgdG9JbnZlcnNlW1tcIkxpUzJfXCIgKyAoaSArIDEpXV0gPSBGci5tdWwoZGVuMSxGci5tdWwoZGVuMiwgZGVuMykpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IF8zaDMgPSBGci5tdWwoRnIuZSgzKSwgUzJwWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHhpd3N1YnhpID0gRnIuc3ViKHhpdywgeGkpO1xuICAgICAgICAgICAgZGVuMSA9IEZyLm11bChfM2gzLCB4aXdzdWJ4aSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbjIgPSBTMnBbMiAqIGkgJSAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZW4zID0gRnIuc3ViKHZhbHVlLCBTMnBbaV0pO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICB0b0ludmVyc2VbW1wiTGlTMl9cIiArIChpICsgMSArIDMpXV0gPSBGci5tdWwoZGVuMSxGci5tdWwoZGVuMiwgZGVuMykpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gTGk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKlxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJranMuXG5cbiAgICBzbmFya2pzIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZVxuICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKVxuICAgIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtqcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvclxuICAgIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGhcbiAgICBzbmFya2pzLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IGZmbG9ua1Byb3ZlIGZyb20gXCIuL2ZmbG9ua19wcm92ZS5qc1wiO1xuaW1wb3J0IHd0bnNfY2FsY3VsYXRlIGZyb20gXCIuL3d0bnNfY2FsY3VsYXRlLmpzXCI7XG5pbXBvcnQge3V0aWxzfSBmcm9tIFwiZmZqYXZhc2NyaXB0XCI7XG5jb25zdCB7dW5zdHJpbmdpZnlCaWdJbnRzfSA9IHV0aWxzO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBmZmxvbmtGdWxsUHJvdmUoX2lucHV0LCB3YXNtRmlsZW5hbWUsIHprZXlGaWxlbmFtZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgaW5wdXQgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX2lucHV0KTtcblxuICAgIGNvbnN0IHd0bnM9IHt0eXBlOiBcIm1lbVwifTtcblxuICAgIC8vIENvbXB1dGUgdGhlIHdpdG5lc3NcbiAgICBhd2FpdCB3dG5zX2NhbGN1bGF0ZShpbnB1dCwgd2FzbUZpbGVuYW1lLCB3dG5zKTtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByb29mXG4gICAgcmV0dXJuIGF3YWl0IGZmbG9ua1Byb3ZlKHprZXlGaWxlbmFtZSwgd3RucywgbG9nZ2VyKTtcbn0iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5pbXBvcnQgKiBhcyBjdXJ2ZXMgZnJvbSBcIi4vY3VydmVzLmpzXCI7XG5pbXBvcnQgeyBCaWdCdWZmZXIsIHV0aWxzIH0gZnJvbSBcImZmamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgUHJvb2YgfSBmcm9tIFwiLi9wcm9vZi5qc1wiO1xuaW1wb3J0IHsgS2VjY2FrMjU2VHJhbnNjcmlwdCB9IGZyb20gXCIuL0tlY2NhazI1NlRyYW5zY3JpcHQuanNcIjtcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuY29uc3QgeyB1bnN0cmluZ2lmeUJpZ0ludHMgfSA9IHV0aWxzO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBmZmxvbmtWZXJpZnkoX3ZrX3ZlcmlmaWVyLCBfcHVibGljU2lnbmFscywgX3Byb29mLCBsb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIkZGTE9OSyBWRVJJRklFUiBTVEFSVEVEXCIpO1xuXG4gICAgX3ZrX3ZlcmlmaWVyID0gdW5zdHJpbmdpZnlCaWdJbnRzKF92a192ZXJpZmllcik7XG4gICAgX3Byb29mID0gdW5zdHJpbmdpZnlCaWdJbnRzKF9wcm9vZik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGN1cnZlcy5nZXRDdXJ2ZUZyb21OYW1lKF92a192ZXJpZmllci5jdXJ2ZSk7XG5cbiAgICBjb25zdCB2ayA9IGZyb21PYmplY3RWayhjdXJ2ZSwgX3ZrX3ZlcmlmaWVyKTtcblxuICAgIC8vIFRPRE8gPz8/IENvbXB1dGUgd3JeMyBhbmQgY2hlY2sgaWYgaXQgbWF0Y2hlcyB3aXRoIHdcblxuICAgIGNvbnN0IHByb29mID0gbmV3IFByb29mKGN1cnZlLCBsb2dnZXIpO1xuICAgIHByb29mLmZyb21PYmplY3RQcm9vZihfcHJvb2YpO1xuXG4gICAgY29uc3QgcHVibGljU2lnbmFscyA9IHVuc3RyaW5naWZ5QmlnSW50cyhfcHVibGljU2lnbmFscyk7XG5cbiAgICBpZiAocHVibGljU2lnbmFscy5sZW5ndGggIT09IHZrLm5QdWJsaWMpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiTnVtYmVyIG9mIHB1YmxpYyBzaWduYWxzIGRvZXMgbm90IG1hdGNoIHdpdGggdmtcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiICBGRkxPTksgVkVSSUZZIFNFVFRJTkdTXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgICBDdXJ2ZTogICAgICAgICAke2N1cnZlLm5hbWV9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIENpcmN1aXQgcG93ZXI6ICR7dmsucG93ZXJ9YCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGAgIERvbWFpbiBzaXplOiAgICR7MiAqKiB2ay5wb3dlcn1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYCAgUHVibGljIHZhcnM6ICAgJHt2ay5uUHVibGljfWApO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIik7XG4gICAgfVxuXG4gICAgLy8gU1RFUCAxIC0gVmFsaWRhdGUgdGhhdCBhbGwgcG9seW5vbWlhbCBjb21taXRtZW50cyDiiIggR18xXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENoZWNraW5nIGNvbW1pdG1lbnRzIGJlbG9uZyB0byBHMVwiKTtcbiAgICBpZiAoIWNvbW1pdG1lbnRzQmVsb25nVG9HMShjdXJ2ZSwgcHJvb2YsIHZrKSkge1xuICAgICAgICBpZiAobG9nZ2VyKSBsb2dnZXIuZXJyb3IoXCJQcm9vZiBjb21taXRtZW50cyBhcmUgbm90IHZhbGlkXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU1RFUCAyIC0gVmFsaWRhdGUgdGhhdCBhbGwgZXZhbHVhdGlvbnMg4oiIIEZcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIj4gQ2hlY2tpbmcgZXZhbHVhdGlvbnMgYmVsb25nIHRvIEZcIik7XG4gICAgaWYgKCFldmFsdWF0aW9uc0FyZVZhbGlkKGN1cnZlLCBwcm9vZikpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUHJvb2YgZXZhbHVhdGlvbnMgYXJlIG5vdCB2YWxpZC5cIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTVEVQIDMgLSBWYWxpZGF0ZSB0aGF0IHdfaSDiiIggRiBmb3IgaSDiiIggW2xdXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENoZWNraW5nIHB1YmxpYyBpbnB1dHMgYmVsb25nIHRvIEZcIik7XG4gICAgaWYgKCFwdWJsaWNJbnB1dHNBcmVWYWxpZChjdXJ2ZSwgcHVibGljU2lnbmFscykpIHtcbiAgICAgICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmVycm9yKFwiUHVibGljIGlucHV0cyBhcmUgbm90IHZhbGlkLlwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNURVAgNCAtIENvbXB1dGUgdGhlIGNoYWxsZW5nZXM6IGJldGEsIGdhbW1hLCB4aSwgYWxwaGEgYW5kIHkg4oiIIEZcbiAgICAvLyBhcyBpbiBwcm92ZXIgZGVzY3JpcHRpb24sIGZyb20gdGhlIGNvbW1vbiBwcmVwcm9jZXNzZWQgaW5wdXRzLCBwdWJsaWMgaW5wdXRzIGFuZCBlbGVtZW50cyBvZiDPgF9TTkFSS1xuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgY2hhbGxlbmdlc1wiKTtcbiAgICBjb25zdCB7IGNoYWxsZW5nZXMsIHJvb3RzIH0gPSBjb21wdXRlQ2hhbGxlbmdlcyhjdXJ2ZSwgcHJvb2YsIHZrLCBwdWJsaWNTaWduYWxzLCBsb2dnZXIpO1xuXG4gICAgLy8gU1RFUCA1IC0gQ29tcHV0ZSB0aGUgemVybyBwb2x5bm9taWFsIGV2YWx1YXRpb24gWl9IKHhpKSA9IHhpXm4gLSAxXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBaZXJvIHBvbHlub21pYWwgZXZhbHVhdGlvbiBaX0goeGkpXCIpO1xuICAgIGNoYWxsZW5nZXMuemggPSBGci5zdWIoY2hhbGxlbmdlcy54aU4sIEZyLm9uZSk7XG4gICAgY2hhbGxlbmdlcy5pbnZ6aCA9IEZyLmludihjaGFsbGVuZ2VzLnpoKTtcblxuICAgIC8vIFNURVAgNiAtIENvbXB1dGUgdGhlIGxhZ3JhbmdlIHBvbHlub21pYWwgZXZhbHVhdGlvbiBMXzEoeGkpXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBMYWdyYW5nZSBldmFsdWF0aW9uc1wiKTtcbiAgICBjb25zdCBsYWdyYW5nZUV2YWxzID0gYXdhaXQgY29tcHV0ZUxhZ3JhbmdlRXZhbHVhdGlvbnMoY3VydmUsIGNoYWxsZW5nZXMsIHZrKTtcblxuICAgIC8vIFNURVAgNyAtIENvbXB1dGUgcHVibGljIGlucHV0IGV2YWx1YXRpb24gUEkoeGkpXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBwb2x5bm9taWFsIGlkZW50aXRpZXMgUEkoWClcIik7XG4gICAgY29uc3QgcGkgPSBjYWxjdWxhdGVQSShjdXJ2ZSwgcHVibGljU2lnbmFscywgbGFncmFuZ2VFdmFscyk7XG5cbiAgICAvLyBTVEVQIDggLSBDb21wdXRlIHBvbHlub21pYWwgcjAg4oiIIEZfezw0fVtYXVxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgcjAoeSlcIik7XG4gICAgY29uc3QgcjAgPSBjb21wdXRlUjAocHJvb2YsIGNoYWxsZW5nZXMsIHJvb3RzLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIC8vIFNURVAgOSAtIENvbXB1dGUgcG9seW5vbWlhbCByMSDiiIggRl97PDR9W1hdXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyByMSh5KVwiKTtcbiAgICBjb25zdCByMSA9IGNvbXB1dGVSMShwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIHBpLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIC8vIFNURVAgOSAtIENvbXB1dGUgcG9seW5vbWlhbCByMiDiiIggRl97PDZ9W1hdXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyByMih5KVwiKTtcbiAgICBjb25zdCByMiA9IGNvbXB1dGVSMihwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIGxhZ3JhbmdlRXZhbHNbMV0sIHZrLCBjdXJ2ZSwgbG9nZ2VyKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgRlwiKTtcbiAgICBjb25zdCBGID0gY29tcHV0ZUYoY3VydmUsIHByb29mLCB2aywgY2hhbGxlbmdlcywgcm9vdHMpO1xuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCI+IENvbXB1dGluZyBFXCIpO1xuICAgIGNvbnN0IEUgPSBjb21wdXRlRShjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrLCByMCwgcjEsIHIyKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBDb21wdXRpbmcgSlwiKTtcbiAgICBjb25zdCBKID0gY29tcHV0ZUooY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzKTtcblxuICAgIGlmIChsb2dnZXIpIGxvZ2dlci5pbmZvKFwiPiBWYWxpZGF0ZSBhbGwgZXZhbHVhdGlvbnMgd2l0aCBhIHBhaXJpbmdcIik7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgaXNWYWxpZFBhaXJpbmcoY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzLCB2aywgRiwgRSwgSik7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUFJPT0YgVkVSSUZJRUQgU1VDQ0VTU0ZVTExZXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIFByb29mXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCJGRkxPTksgVkVSSUZJRVIgRklOSVNIRURcIik7XG5cbiAgICByZXR1cm4gcmVzO1xuXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3RWayhjdXJ2ZSwgdmspIHtcbiAgICBjb25zdCByZXMgPSB2aztcbiAgICByZXMuazEgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLmsxKTtcbiAgICByZXMuazIgPSBjdXJ2ZS5Gci5mcm9tT2JqZWN0KHZrLmsyKTtcbiAgICByZXMudyA9IGN1cnZlLkZyLmZyb21PYmplY3Qodmsudyk7XG4gICAgLy8gcmVzLndXID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53Vyk7XG4gICAgcmVzLnczID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53Myk7XG4gICAgcmVzLnc0ID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53NCk7XG4gICAgcmVzLnc4ID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53OCk7XG4gICAgcmVzLndyID0gY3VydmUuRnIuZnJvbU9iamVjdCh2ay53cik7XG4gICAgcmVzLlhfMiA9IGN1cnZlLkcyLmZyb21PYmplY3QodmsuWF8yKTtcbiAgICByZXMuQzAgPSBjdXJ2ZS5HMS5mcm9tT2JqZWN0KHZrLkMwKTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjb21taXRtZW50c0JlbG9uZ1RvRzEoY3VydmUsIHByb29mLCB2aykge1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgcmV0dXJuIEcxLmlzVmFsaWQocHJvb2YucG9seW5vbWlhbHMuQzEpXG4gICAgICAgICYmIEcxLmlzVmFsaWQocHJvb2YucG9seW5vbWlhbHMuQzIpXG4gICAgICAgICYmIEcxLmlzVmFsaWQocHJvb2YucG9seW5vbWlhbHMuVzEpXG4gICAgICAgICYmIEcxLmlzVmFsaWQocHJvb2YucG9seW5vbWlhbHMuVzIpXG4gICAgICAgICYmIEcxLmlzVmFsaWQodmsuQzApO1xufVxuXG5mdW5jdGlvbiBjaGVja1ZhbHVlQmVsb25nVG9GaWVsZChjdXJ2ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gU2NhbGFyLmx0KHZhbHVlLCBjdXJ2ZS5yKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgZXZhbHVhdGlvbikge1xuICAgIHJldHVybiBjaGVja1ZhbHVlQmVsb25nVG9GaWVsZChjdXJ2ZSwgU2NhbGFyLmZyb21ScHJMRShldmFsdWF0aW9uKSk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRpb25zQXJlVmFsaWQoY3VydmUsIHByb29mKSB7XG4gICAgcmV0dXJuIGNoZWNrRXZhbHVhdGlvbklzVmFsaWQoY3VydmUsIHByb29mLmV2YWx1YXRpb25zLnFsKVxuICAgICAgICAmJiBjaGVja0V2YWx1YXRpb25Jc1ZhbGlkKGN1cnZlLCBwcm9vZi5ldmFsdWF0aW9ucy5xcilcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMucW0pXG4gICAgICAgICYmIGNoZWNrRXZhbHVhdGlvbklzVmFsaWQoY3VydmUsIHByb29mLmV2YWx1YXRpb25zLnFvKVxuICAgICAgICAmJiBjaGVja0V2YWx1YXRpb25Jc1ZhbGlkKGN1cnZlLCBwcm9vZi5ldmFsdWF0aW9ucy5xYylcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMuczEpXG4gICAgICAgICYmIGNoZWNrRXZhbHVhdGlvbklzVmFsaWQoY3VydmUsIHByb29mLmV2YWx1YXRpb25zLnMyKVxuICAgICAgICAmJiBjaGVja0V2YWx1YXRpb25Jc1ZhbGlkKGN1cnZlLCBwcm9vZi5ldmFsdWF0aW9ucy5zMylcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMuYSlcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMuYilcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMuYylcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMueilcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMuencpXG4gICAgICAgICYmIGNoZWNrRXZhbHVhdGlvbklzVmFsaWQoY3VydmUsIHByb29mLmV2YWx1YXRpb25zLnQxdylcbiAgICAgICAgJiYgY2hlY2tFdmFsdWF0aW9uSXNWYWxpZChjdXJ2ZSwgcHJvb2YuZXZhbHVhdGlvbnMudDJ3KTtcbn1cblxuZnVuY3Rpb24gcHVibGljSW5wdXRzQXJlVmFsaWQoY3VydmUsIHB1YmxpY0lucHV0cykge1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwdWJsaWNJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYoIWNoZWNrVmFsdWVCZWxvbmdUb0ZpZWxkKGN1cnZlLCBwdWJsaWNJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDaGFsbGVuZ2VzKGN1cnZlLCBwcm9vZiwgdmssIHB1YmxpY1NpZ25hbHMsIGxvZ2dlcikge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBjaGFsbGVuZ2VzID0ge307XG4gICAgY29uc3Qgcm9vdHMgPSB7fTtcbiAgICBjb25zdCB0cmFuc2NyaXB0ID0gbmV3IEtlY2NhazI1NlRyYW5zY3JpcHQoY3VydmUpO1xuXG4gICAgLy8gQWRkIEMwIHRvIHRoZSB0cmFuc2NyaXB0XG4gICAgdHJhbnNjcmlwdC5hZGRQb2xDb21taXRtZW50KHZrLkMwKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHVibGljU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihGci5lKHB1YmxpY1NpZ25hbHNbaV0pKTtcbiAgICB9XG5cbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YucG9seW5vbWlhbHMuQzEpO1xuICAgIGNoYWxsZW5nZXMuYmV0YSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgdHJhbnNjcmlwdC5yZXNldCgpO1xuXG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIoY2hhbGxlbmdlcy5iZXRhKTtcbiAgICBjaGFsbGVuZ2VzLmdhbW1hID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcblxuICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmdhbW1hKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YucG9seW5vbWlhbHMuQzIpO1xuICAgIGNvbnN0IHhpU2VlZCA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG4gICAgY29uc3QgeGlTZWVkMiA9IEZyLnNxdWFyZSh4aVNlZWQpO1xuXG4gICAgbGV0IHc4ID0gW107XG4gICAgdzhbMV0gPSB2ay53ODtcbiAgICB3OFsyXSA9IEZyLnNxdWFyZSh2ay53OCk7XG4gICAgdzhbM10gPSBGci5tdWwodzhbMl0sIHZrLnc4KTtcbiAgICB3OFs0XSA9IEZyLm11bCh3OFszXSwgdmsudzgpO1xuICAgIHc4WzVdID0gRnIubXVsKHc4WzRdLCB2ay53OCk7XG4gICAgdzhbNl0gPSBGci5tdWwodzhbNV0sIHZrLnc4KTtcbiAgICB3OFs3XSA9IEZyLm11bCh3OFs2XSwgdmsudzgpO1xuICAgIGxldCB3NCA9IFtdO1xuICAgIHc0WzFdID0gdmsudzQ7XG4gICAgdzRbMl0gPSBGci5zcXVhcmUodmsudzQpO1xuICAgIHc0WzNdID0gRnIubXVsKHc0WzJdLCB2ay53NCk7XG4gICAgbGV0IHczID0gW107XG4gICAgdzNbMV0gPSB2ay53MztcbiAgICB3M1syXSA9IEZyLnNxdWFyZSh2ay53Myk7XG5cbiAgICAvLyBjb25zdCB3NF8yID0gRnIuc3F1YXJlKHZrLnc0KTtcbiAgICAvLyBjb25zdCB3NF8zID0gRnIubXVsKHc0XzIsIHZrLnc0KTtcbiAgICAvLyBjb25zdCB3M18yID0gRnIuc3F1YXJlKHZrLnczKTtcblxuICAgIC8vIENvbXB1dGUgaDAgPSB4aVNlZWRlcl4zXG4gICAgcm9vdHMuUzAgPSB7fTtcbiAgICByb290cy5TMC5oMHc4ID0gW107XG4gICAgcm9vdHMuUzAuaDB3OFswXSA9IEZyLm11bCh4aVNlZWQyLCB4aVNlZWQpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIHJvb3RzLlMwLmgwdzhbaV0gPSBGci5tdWwocm9vdHMuUzAuaDB3OFswXSwgdzhbaV0pO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgaDEgPSB4aV9zZWVkZXJeNlxuICAgIHJvb3RzLlMxID0ge307XG4gICAgcm9vdHMuUzEuaDF3NCA9IFtdO1xuICAgIHJvb3RzLlMxLmgxdzRbMF0gPSBGci5zcXVhcmUocm9vdHMuUzAuaDB3OFswXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgcm9vdHMuUzEuaDF3NFtpXSA9IEZyLm11bChyb290cy5TMS5oMXc0WzBdLCB3NFtpXSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBoMiA9IHhpX3NlZWRlcl44XG4gICAgcm9vdHMuUzIgPSB7fTtcbiAgICByb290cy5TMi5oMnczID0gW107XG4gICAgcm9vdHMuUzIuaDJ3M1swXSA9IEZyLm11bChyb290cy5TMS5oMXc0WzBdLCB4aVNlZWQyKTtcbiAgICByb290cy5TMi5oMnczWzFdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHczWzFdKTtcbiAgICByb290cy5TMi5oMnczWzJdID0gRnIubXVsKHJvb3RzLlMyLmgydzNbMF0sIHczWzJdKTtcblxuICAgIHJvb3RzLlMyLmgzdzMgPSBbXTtcbiAgICAvLyBNdWx0aXBseSBoMyBieSB0aGlyZC1yb290LW9tZWdhIHRvIG9idGFpbiBoXzNeMyA9IHhpz4lcbiAgICAvLyBTbywgaDMgPSB4aV9zZWVkZXJeOCDPiV57MS8zfVxuICAgIHJvb3RzLlMyLmgzdzNbMF0gPSBGci5tdWwocm9vdHMuUzIuaDJ3M1swXSwgdmsud3IpO1xuICAgIHJvb3RzLlMyLmgzdzNbMV0gPSBGci5tdWwocm9vdHMuUzIuaDN3M1swXSwgdzNbMV0pO1xuICAgIHJvb3RzLlMyLmgzdzNbMl0gPSBGci5tdWwocm9vdHMuUzIuaDN3M1swXSwgdzNbMl0pO1xuXG4gICAgLy8gQ29tcHV0ZSB4aSA9IHhpX3NlZWRlcl4xMlxuICAgIGNoYWxsZW5nZXMueGkgPSBGci5tdWwoRnIuc3F1YXJlKHJvb3RzLlMyLmgydzNbMF0pLCByb290cy5TMi5oMnczWzBdKTtcbiAgICBjaGFsbGVuZ2VzLnhpdyA9IEZyLm11bChjaGFsbGVuZ2VzLnhpLCBGci53W3ZrLnBvd2VyXSk7XG5cbiAgICBjaGFsbGVuZ2VzLnhpTiA9IGNoYWxsZW5nZXMueGk7XG4gICAgdmsuZG9tYWluU2l6ZSA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ay5wb3dlcjsgaSsrKSB7XG4gICAgICAgIGNoYWxsZW5nZXMueGlOID0gRnIuc3F1YXJlKGNoYWxsZW5nZXMueGlOKTtcbiAgICAgICAgdmsuZG9tYWluU2l6ZSAqPSAyO1xuICAgIH1cblxuICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcih4aVNlZWQpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnFsKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5xcik7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMucW0pO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnFvKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5xYyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuczEpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnMyKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihwcm9vZi5ldmFsdWF0aW9ucy5zMyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuYSk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuYik7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuYyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMueik7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMuencpO1xuICAgIHRyYW5zY3JpcHQuYWRkU2NhbGFyKHByb29mLmV2YWx1YXRpb25zLnQxdyk7XG4gICAgdHJhbnNjcmlwdC5hZGRTY2FsYXIocHJvb2YuZXZhbHVhdGlvbnMudDJ3KTtcbiAgICBjaGFsbGVuZ2VzLmFscGhhID0gdHJhbnNjcmlwdC5nZXRDaGFsbGVuZ2UoKTtcblxuICAgIHRyYW5zY3JpcHQucmVzZXQoKTtcbiAgICB0cmFuc2NyaXB0LmFkZFNjYWxhcihjaGFsbGVuZ2VzLmFscGhhKTtcbiAgICB0cmFuc2NyaXB0LmFkZFBvbENvbW1pdG1lbnQocHJvb2YucG9seW5vbWlhbHMuVzEpO1xuICAgIGNoYWxsZW5nZXMueSA9IHRyYW5zY3JpcHQuZ2V0Q2hhbGxlbmdlKCk7XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMuYmV0YTogIFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5iZXRhKSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMuZ2FtbWE6IFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy5nYW1tYSkpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIsK3wrfCtyBjaGFsbGVuZ2VzLnhpOiAgICBcIiArIEZyLnRvU3RyaW5nKGNoYWxsZW5nZXMueGkpKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCLCt8K3wrcgY2hhbGxlbmdlcy5hbHBoYTogXCIgKyBGci50b1N0cmluZyhjaGFsbGVuZ2VzLmFscGhhKSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiwrfCt8K3IGNoYWxsZW5nZXMueTogICAgIFwiICsgRnIudG9TdHJpbmcoY2hhbGxlbmdlcy55KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2hhbGxlbmdlczogY2hhbGxlbmdlcywgcm9vdHM6IHJvb3RzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVMYWdyYW5nZUV2YWx1YXRpb25zKGN1cnZlLCBjaGFsbGVuZ2VzLCB2aykge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBzaXplID0gTWF0aC5tYXgoMSwgdmsublB1YmxpYyk7XG4gICAgY29uc3QgbnVtQXJyID0gbmV3IEJpZ0J1ZmZlcihzaXplICogRnIubjgpO1xuICAgIGxldCBkZW5BcnIgPSBuZXcgQmlnQnVmZmVyKHNpemUgKiBGci5uOCk7XG5cbiAgICBsZXQgdyA9IEZyLm9uZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBGci5uODtcbiAgICAgICAgbnVtQXJyLnNldChGci5tdWwodywgY2hhbGxlbmdlcy56aCksIGlfc0ZyKTtcbiAgICAgICAgZGVuQXJyLnNldChGci5tdWwoRnIuZSh2ay5kb21haW5TaXplKSwgRnIuc3ViKGNoYWxsZW5nZXMueGksIHcpKSwgaV9zRnIpO1xuICAgICAgICB3ID0gRnIubXVsKHcsIHZrLncpO1xuICAgIH1cblxuICAgIGRlbkFyciA9IGF3YWl0IEZyLmJhdGNoSW52ZXJzZShkZW5BcnIpO1xuXG4gICAgbGV0IEwgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBjb25zdCBpX3NGciA9IGkgKiBGci5uODtcbiAgICAgICAgTFtpICsgMV0gPSBGci5tdWwobnVtQXJyLnNsaWNlKGlfc0ZyLCBpX3NGciArIEZyLm44KSwgZGVuQXJyLnNsaWNlKGlfc0ZyLCBpX3NGciArIEZyLm44KSk7XG4gICAgfVxuICAgIHJldHVybiBMO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQSShjdXJ2ZSwgcHVibGljU2lnbmFscywgbGFncmFuZ2VFdmFscykge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBsZXQgcGkgPSBGci56ZXJvO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHVibGljU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB3ID0gRnIuZShwdWJsaWNTaWduYWxzW2ldKTtcbiAgICAgICAgcGkgPSBGci5zdWIocGksIEZyLm11bCh3LCBsYWdyYW5nZUV2YWxzW2kgKyAxXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSMChwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIGN1cnZlLCBsb2dnZXIpIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgY29uc3QgTGkgPSBjb21wdXRlTGFncmFuZ2VMaVNpKHJvb3RzLlMwLmgwdzgsIGNoYWxsZW5nZXMueSwgY2hhbGxlbmdlcy54aSwgY3VydmUpO1xuXG4gICAgLy8gcjAoeSkgPSDiiJFfMV44IENfMChoXzAgz4lfOF57aS0xfSkgTF9pKHkpLiBUbyB0aGlzIGVuZCB3ZSBuZWVkIHRvIGNvbXB1dGVcblxuICAgIC8vIENvbXB1dGUgdGhlIDggQzAgdmFsdWVzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIHIwKHkpXCIpO1xuXG4gICAgbGV0IHJlcyA9IEZyLnplcm87XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgbGV0IGNvZWZWYWx1ZXMgPSBbXTtcbiAgICAgICAgY29lZlZhbHVlc1sxXSA9IHJvb3RzLlMwLmgwdzhbaV07XG4gICAgICAgIGZvciAobGV0IGogPSAyOyBqIDwgODsgaisrKSB7XG4gICAgICAgICAgICBjb2VmVmFsdWVzW2pdID0gRnIubXVsKGNvZWZWYWx1ZXNbaiAtIDFdLCByb290cy5TMC5oMHc4W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjMCA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5xbCwgRnIubXVsKHByb29mLmV2YWx1YXRpb25zLnFyLCBjb2VmVmFsdWVzWzFdKSk7XG4gICAgICAgIGMwID0gRnIuYWRkKGMwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucW8sIGNvZWZWYWx1ZXNbMl0pKTtcbiAgICAgICAgYzAgPSBGci5hZGQoYzAsIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xbSwgY29lZlZhbHVlc1szXSkpO1xuICAgICAgICBjMCA9IEZyLmFkZChjMCwgRnIubXVsKHByb29mLmV2YWx1YXRpb25zLnFjLCBjb2VmVmFsdWVzWzRdKSk7XG4gICAgICAgIGMwID0gRnIuYWRkKGMwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMuczEsIGNvZWZWYWx1ZXNbNV0pKTtcbiAgICAgICAgYzAgPSBGci5hZGQoYzAsIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5zMiwgY29lZlZhbHVlc1s2XSkpO1xuICAgICAgICBjMCA9IEZyLmFkZChjMCwgRnIubXVsKHByb29mLmV2YWx1YXRpb25zLnMzLCBjb2VmVmFsdWVzWzddKSk7XG5cbiAgICAgICAgcmVzID0gRnIuYWRkKHJlcywgRnIubXVsKGMwLCBMaVtpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSMShwcm9vZiwgY2hhbGxlbmdlcywgcm9vdHMsIHBpLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IExpID0gY29tcHV0ZUxhZ3JhbmdlTGlTaShyb290cy5TMS5oMXc0LCBjaGFsbGVuZ2VzLnksIGNoYWxsZW5nZXMueGksIGN1cnZlKTtcblxuICAgIC8vIHIxKHkpID0g4oiRXzFeNCBDXzEoaF8xIM+JXzRee2ktMX0pIExfaSh5KS4gVG8gdGhpcyBlbmQgd2UgbmVlZCB0byBjb21wdXRlXG4gICAgLy8gWjEgPSB7QzEoaF8xfSwgQzEoaF8xIM+JXzQpLCBDMShoXzEgz4lfNF4yKSwgQzEoaF8xIM+JXzReMyl9XG4gICAgLy8gd2hlcmUgQ18xKGhfMSDPiV80XntpLTF9KSA9IGV2YWwuYSArIGhfMSDPiV80XmkgZXZhbC5iICsgKGhfMSDPiV80XmkpXjIgZXZhbC5jICsgKGhfMSDPiV80XmkpXjMgVDAoeGkpLFxuICAgIC8vIHdoZXJlIFQwKHhpKSA9IFsgcUzCt2EgKyBxUsK3YiArIHFNwrdhwrdiICsgcU/Ct2MgKyBxQyArIFBJKHhpKSBdIC8gWl9IKHhpKVxuXG4gICAgLy8gQ29tcHV0ZSBUMCh4aSlcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDAoeGkpXCIpO1xuICAgIGxldCB0MCA9IEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xbCwgcHJvb2YuZXZhbHVhdGlvbnMuYSk7XG4gICAgdDAgPSBGci5hZGQodDAsIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5xciwgcHJvb2YuZXZhbHVhdGlvbnMuYikpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucW0sIEZyLm11bChwcm9vZi5ldmFsdWF0aW9ucy5hLCBwcm9vZi5ldmFsdWF0aW9ucy5iKSkpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBGci5tdWwocHJvb2YuZXZhbHVhdGlvbnMucW8sIHByb29mLmV2YWx1YXRpb25zLmMpKTtcbiAgICB0MCA9IEZyLmFkZCh0MCwgcHJvb2YuZXZhbHVhdGlvbnMucWMpO1xuICAgIHQwID0gRnIuYWRkKHQwLCBwaSk7XG4gICAgdDAgPSBGci5tdWwodDAsIGNoYWxsZW5nZXMuaW52emgpO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgNCBDMSB2YWx1ZXNcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgQzEoaF8xz4lfNF5pKSB2YWx1ZXNcIik7XG5cbiAgICBsZXQgcmVzID0gRnIuemVybztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBsZXQgYzEgPSBwcm9vZi5ldmFsdWF0aW9ucy5hO1xuICAgICAgICBjMSA9IEZyLmFkZChjMSwgRnIubXVsKHJvb3RzLlMxLmgxdzRbaV0sIHByb29mLmV2YWx1YXRpb25zLmIpKTtcbiAgICAgICAgY29uc3QgaDF3NFNxdWFyZWQgPSBGci5zcXVhcmUocm9vdHMuUzEuaDF3NFtpXSk7XG4gICAgICAgIGMxID0gRnIuYWRkKGMxLCBGci5tdWwoaDF3NFNxdWFyZWQsIHByb29mLmV2YWx1YXRpb25zLmMpKTtcbiAgICAgICAgYzEgPSBGci5hZGQoYzEsIEZyLm11bChGci5tdWwoaDF3NFNxdWFyZWQsIHJvb3RzLlMxLmgxdzRbaV0pLCB0MCkpO1xuXG4gICAgICAgIHJlcyA9IEZyLmFkZChyZXMsIEZyLm11bChjMSwgTGlbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlUjIocHJvb2YsIGNoYWxsZW5nZXMsIHJvb3RzLCBsYWdyYW5nZTEsIHZrLCBjdXJ2ZSwgbG9nZ2VyKSB7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGNvbnN0IExpUzIgPSBjb21wdXRlTGFncmFuZ2VMaVMyKFtyb290cy5TMi5oMnczLCByb290cy5TMi5oM3czXSwgY2hhbGxlbmdlcy55LCBjaGFsbGVuZ2VzLnhpLCBjaGFsbGVuZ2VzLnhpdywgY3VydmUpO1xuXG4gICAgLy8gcjIoeSkgPSDiiJFfMV4zIENfMihoXzIgz4lfM157aS0xfSkgTF9pKHkpICsg4oiRXzFeMyBDXzIoaF8zIM+JXzNee2ktMX0pIExfe2krM30oeSkuIFRvIHRoaXMgZW5kIHdlIG5lZWQgdG8gY29tcHV0ZVxuICAgIC8vIFoyID0ge1tDMihoXzJ9LCBDMihoXzIgz4lfMyksIEMyKGhfMiDPiV8zXjIpXSwgW0MyKGhfM30sIEMyKGhfMyDPiV8zKSwgQzIoaF8zIM+JXzNeMildfVxuICAgIC8vIHdoZXJlIENfMihoXzIgz4lfM157aS0xfSkgPSBldmFsLnogKyBoXzIgz4lfMl5pIFQxKHhpKSArIChoXzIgz4lfM15pKV4yIFQyKHhpKSxcbiAgICAvLyB3aGVyZSBDXzIoaF8zIM+JXzNee2ktMX0pID0gZXZhbC56ICsgaF8zIM+JXzJeaSBUMSh4aSkgKyAoaF8zIM+JXzNeaSleMiBUMih4aSksXG4gICAgLy8gd2hlcmUgVDEoeGkpID0gWyBMXzEoeGkpKHotMSldIC8gWl9IKHhpKVxuICAgIC8vIGFuZCBUMih4aSkgPSBbICAoYSArIGJldGHCt3hpICsgZ2FtbWEpKGIgKyBiZXRhwrd4acK3azEgKyBnYW1tYSkoYyArIGJldGHCt3hpwrdrMiArIGdhbW1hKXpcbiAgICAvLyAgICAgICAgICAgICAgIC0gKGEgKyBiZXRhwrdzaWdtYTEgKyBnYW1tYSkoYiArIGJldGHCt3NpZ21hMiArIGdhbW1hKShjICsgYmV0YcK3c2lnbWEzICsgZ2FtbWEpes+JICBdIC8gWl9IKHhpKVxuXG4gICAgLy8gQ29tcHV0ZSBUMSh4aSlcbiAgICBpZiAobG9nZ2VyKSBsb2dnZXIuaW5mbyhcIsK3wrfCtyBDb21wdXRpbmcgVDEoeGkpXCIpO1xuICAgIGxldCB0MSA9IEZyLnN1Yihwcm9vZi5ldmFsdWF0aW9ucy56LCBGci5vbmUpO1xuICAgIHQxID0gRnIubXVsKHQxLCBsYWdyYW5nZTEpO1xuICAgIHQxID0gRnIubXVsKHQxLCBjaGFsbGVuZ2VzLmludnpoKTtcblxuICAgIC8vIENvbXB1dGUgVDIoeGkpXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIFQyKHhpKVwiKTtcbiAgICBjb25zdCBiZXRheGkgPSBGci5tdWwoY2hhbGxlbmdlcy5iZXRhLCBjaGFsbGVuZ2VzLnhpKTtcbiAgICBjb25zdCB0MjExID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmEsIEZyLmFkZChiZXRheGksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEyID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmIsIEZyLmFkZChGci5tdWwoYmV0YXhpLCB2ay5rMSksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEzID0gRnIuYWRkKHByb29mLmV2YWx1YXRpb25zLmMsIEZyLmFkZChGci5tdWwoYmV0YXhpLCB2ay5rMiksIGNoYWxsZW5nZXMuZ2FtbWEpKTtcbiAgICBjb25zdCB0MjEgPSBGci5tdWwodDIxMSwgRnIubXVsKHQyMTIsIEZyLm11bCh0MjEzLCBwcm9vZi5ldmFsdWF0aW9ucy56KSkpO1xuXG4gICAgY29uc3QgdDIyMSA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5hLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczEpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyMiA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5iLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczIpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyMyA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy5jLCBGci5hZGQoRnIubXVsKGNoYWxsZW5nZXMuYmV0YSwgcHJvb2YuZXZhbHVhdGlvbnMuczMpLCBjaGFsbGVuZ2VzLmdhbW1hKSk7XG4gICAgY29uc3QgdDIyID0gRnIubXVsKHQyMjEsIEZyLm11bCh0MjIyLCBGci5tdWwodDIyMywgcHJvb2YuZXZhbHVhdGlvbnMuencpKSk7XG5cbiAgICBsZXQgdDIgPSBGci5zdWIodDIxLCB0MjIpO1xuICAgIHQyID0gRnIubXVsKHQyLCBjaGFsbGVuZ2VzLmludnpoKTtcblxuICAgIC8vIENvbXB1dGUgdGhlIDYgQzIgdmFsdWVzXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMyKGhfMs+JXzNeaSkgdmFsdWVzXCIpO1xuICAgIGxldCByZXMgPSBGci56ZXJvO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIGxldCBjMiA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy56LCBGci5tdWwocm9vdHMuUzIuaDJ3M1tpXSwgdDEpKTtcbiAgICAgICAgYzIgPSBGci5hZGQoYzIsIEZyLm11bChGci5zcXVhcmUocm9vdHMuUzIuaDJ3M1tpXSksIHQyKSk7XG5cbiAgICAgICAgcmVzID0gRnIuYWRkKHJlcywgRnIubXVsKGMyLCBMaVMyW2ldKSk7XG4gICAgfVxuXG4gICAgaWYgKGxvZ2dlcikgbG9nZ2VyLmluZm8oXCLCt8K3wrcgQ29tcHV0aW5nIEMyKGhfM8+JXzNeaSkgdmFsdWVzXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIGxldCBjMiA9IEZyLmFkZChwcm9vZi5ldmFsdWF0aW9ucy56dywgRnIubXVsKHJvb3RzLlMyLmgzdzNbaV0sIHByb29mLmV2YWx1YXRpb25zLnQxdykpO1xuICAgICAgICBjMiA9IEZyLmFkZChjMiwgRnIubXVsKEZyLnNxdWFyZShyb290cy5TMi5oM3czW2ldKSwgcHJvb2YuZXZhbHVhdGlvbnMudDJ3KSk7XG5cbiAgICAgICAgcmVzID0gRnIuYWRkKHJlcywgRnIubXVsKGMyLCBMaVMyW2kgKyAzXSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGKGN1cnZlLCBwcm9vZiwgdmssIGNoYWxsZW5nZXMsIHJvb3RzKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IG11bEgwID0gRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzAuaDB3OFswXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgbXVsSDAgPSBGci5tdWwobXVsSDAsIEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMwLmgwdzhbaV0pKTtcbiAgICB9XG5cbiAgICBjaGFsbGVuZ2VzLnRlbXAgPSBtdWxIMDtcblxuICAgIGxldCBtdWxIMSA9IEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMxLmgxdzRbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIG11bEgxID0gRnIubXVsKG11bEgxLCBGci5zdWIoY2hhbGxlbmdlcy55LCByb290cy5TMS5oMXc0W2ldKSk7XG4gICAgfVxuXG4gICAgbGV0IG11bEgyID0gRnIuc3ViKGNoYWxsZW5nZXMueSwgcm9vdHMuUzIuaDJ3M1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgbXVsSDIgPSBGci5tdWwobXVsSDIsIEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMyLmgydzNbaV0pKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgbXVsSDIgPSBGci5tdWwobXVsSDIsIEZyLnN1YihjaGFsbGVuZ2VzLnksIHJvb3RzLlMyLmgzdzNbaV0pKTtcbiAgICB9XG5cbiAgICBjaGFsbGVuZ2VzLnF1b3RpZW50MSA9IEZyLm11bChjaGFsbGVuZ2VzLmFscGhhLCBGci5kaXYobXVsSDAsIG11bEgxKSk7XG4gICAgY2hhbGxlbmdlcy5xdW90aWVudDIgPSBGci5tdWwoRnIuc3F1YXJlKGNoYWxsZW5nZXMuYWxwaGEpLCBGci5kaXYobXVsSDAsIG11bEgyKSk7XG5cbiAgICBsZXQgRjIgPSBHMS50aW1lc0ZyKHByb29mLnBvbHlub21pYWxzLkMxLCBjaGFsbGVuZ2VzLnF1b3RpZW50MSk7XG4gICAgbGV0IEYzID0gRzEudGltZXNGcihwcm9vZi5wb2x5bm9taWFscy5DMiwgY2hhbGxlbmdlcy5xdW90aWVudDIpO1xuXG4gICAgcmV0dXJuIEcxLmFkZCh2ay5DMCwgRzEuYWRkKEYyLCBGMykpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRShjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrLCByMCwgcjEsIHIyKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuXG4gICAgbGV0IEUyID0gRnIubXVsKHIxLCBjaGFsbGVuZ2VzLnF1b3RpZW50MSk7XG4gICAgbGV0IEUzID0gRnIubXVsKHIyLCBjaGFsbGVuZ2VzLnF1b3RpZW50Mik7XG5cbiAgICByZXR1cm4gRzEudGltZXNGcihHMS5vbmUsIEZyLmFkZChyMCwgRnIuYWRkKEUyLCBFMykpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUooY3VydmUsIHByb29mLCBjaGFsbGVuZ2VzKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcblxuICAgIHJldHVybiBHMS50aW1lc0ZyKHByb29mLnBvbHlub21pYWxzLlcxLCBjaGFsbGVuZ2VzLnRlbXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkUGFpcmluZyhjdXJ2ZSwgcHJvb2YsIGNoYWxsZW5nZXMsIHZrLCBGLCBFLCBKKSB7XG4gICAgY29uc3QgRzEgPSBjdXJ2ZS5HMTtcblxuICAgIGxldCBBMSA9IEcxLnRpbWVzRnIocHJvb2YucG9seW5vbWlhbHMuVzIsIGNoYWxsZW5nZXMueSk7XG4gICAgQTEgPSBHMS5hZGQoRzEuc3ViKEcxLnN1YihGLCBFKSwgSiksIEExKTtcbiAgICBjb25zdCBBMiA9IGN1cnZlLkcyLm9uZTtcblxuICAgIGNvbnN0IEIxID0gcHJvb2YucG9seW5vbWlhbHMuVzI7XG4gICAgY29uc3QgQjIgPSB2ay5YXzI7XG5cbiAgICByZXR1cm4gYXdhaXQgY3VydmUucGFpcmluZ0VxKEcxLm5lZyhBMSksIEEyLCBCMSwgQjIpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFncmFuZ2VMaVNpKHJvb3RzLCB4LCB4aSwgY3VydmUpIHtcbiAgICBjb25zdCBGciA9IGN1cnZlLkZyO1xuICAgIGNvbnN0IGxlbiA9IHJvb3RzLmxlbmd0aDtcblxuICAgIGNvbnN0IG51bSA9IEZyLnN1YihGci5leHAoeCwgbGVuKSwgeGkpO1xuICAgIGNvbnN0IGRlbjEgPSBGci5tdWwoRnIuZShsZW4pLCBGci5leHAocm9vdHNbMF0sIGxlbiAtIDIpKTtcblxuICAgIGNvbnN0IExpID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBkZW4yID0gcm9vdHNbKChsZW4gLSAxKSAqIGkpICUgbGVuXTtcbiAgICAgICAgY29uc3QgZGVuMyA9IEZyLnN1Yih4LCByb290c1tpXSk7XG5cbiAgICAgICAgTGlbaV0gPSBGci5kaXYobnVtLCBGci5tdWwoRnIubXVsKGRlbjEsIGRlbjIpLCBkZW4zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIExpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUxhZ3JhbmdlTGlTMihyb290cywgdmFsdWUsIHhpMCwgeGkxLCBjdXJ2ZSkge1xuICAgIGNvbnN0IEZyID0gY3VydmUuRnI7XG5cbiAgICBjb25zdCBMaSA9IFtdO1xuXG4gICAgY29uc3QgbGVuID0gcm9vdHNbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IG4gPSBsZW4gKiByb290cy5sZW5ndGg7XG5cbiAgICBjb25zdCBudW0xID0gRnIuZXhwKHZhbHVlLCBuKTtcbiAgICBjb25zdCBudW0yID0gRnIubXVsKEZyLmFkZCh4aTAsIHhpMSksIEZyLmV4cCh2YWx1ZSwgbGVuKSk7XG4gICAgY29uc3QgbnVtMyA9IEZyLm11bCh4aTAsIHhpMSk7XG4gICAgY29uc3QgbnVtID0gRnIuYWRkKEZyLnN1YihudW0xLCBudW0yKSwgbnVtMyk7XG5cbiAgICBsZXQgZGVuMSA9IEZyLm11bChGci5tdWwoRnIuZShsZW4pLCByb290c1swXVswXSksIEZyLnN1Yih4aTAsIHhpMSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGVuMiA9IHJvb3RzWzBdWyhsZW4gLSAxKSAqIGkgJSBsZW5dO1xuICAgICAgICBjb25zdCBkZW4zID0gRnIuc3ViKHZhbHVlLCByb290c1swXVtpXSk7XG5cbiAgICAgICAgY29uc3QgZGVuID0gRnIubXVsKGRlbjEsRnIubXVsKGRlbjIsIGRlbjMpKTtcblxuICAgICAgICBMaVtpXSA9IEZyLmRpdihudW0sIGRlbik7XG4gICAgfVxuXG4gICAgZGVuMSA9IEZyLm11bChGci5tdWwoRnIuZShsZW4pLCByb290c1sxXVswXSksIEZyLnN1Yih4aTEsIHhpMCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGVuMiA9IHJvb3RzWzFdWyhsZW4gLSAxKSAqIGkgJSBsZW5dO1xuICAgICAgICBjb25zdCBkZW4zID0gRnIuc3ViKHZhbHVlLCByb290c1sxXVtpXSk7XG5cbiAgICAgICAgY29uc3QgZGVuID0gRnIubXVsKGRlbjEsRnIubXVsKGRlbjIsIGRlbjMpKTtcblxuICAgICAgICBMaVtpICsgbGVuXSA9IEZyLmRpdihudW0sIGRlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIExpO1xufVxuIiwiLypcbiAgICBDb3B5cmlnaHQgMjAyMSAwS0lNUyBhc3NvY2lhdGlvbi5cblxuICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHNuYXJrSlMuXG5cbiAgICBzbmFya0pTIGlzIGEgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICAgc25hcmtKUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWVxuICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpY1xuICAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gICAgYWxvbmcgd2l0aCBzbmFya0pTLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuKi9cblxuaW1wb3J0IHtnZXRDdXJ2ZUZyb21OYW1lfSBmcm9tIFwiLi9jdXJ2ZXMuanNcIjtcbmltcG9ydCB7dXRpbHN9IGZyb20gXCJmZmphdmFzY3JpcHRcIjtcblxuY29uc3Qge3Vuc3RyaW5naWZ5QmlnSW50c30gPSB1dGlscztcblxuZnVuY3Rpb24gaTJoZXgoaSkge1xuICAgIHJldHVybiAoXCIwXCIgKyBpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xufVxuXG5mdW5jdGlvbiBwMjU2KG4pIHtcbiAgICBsZXQgbnN0ciA9IG4udG9TdHJpbmcoMTYpO1xuICAgIHdoaWxlIChuc3RyLmxlbmd0aCA8IDY0KSBuc3RyID0gXCIwXCIgKyBuc3RyO1xuICAgIG5zdHIgPSBgMHgke25zdHJ9YDtcbiAgICByZXR1cm4gbnN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZmZsb25rRXhwb3J0Q2FsbERhdGEoX3B1YiwgX3Byb29mKSB7XG4gICAgY29uc3QgcHJvb2YgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3Byb29mKTtcbiAgICBjb25zdCBwdWIgPSB1bnN0cmluZ2lmeUJpZ0ludHMoX3B1Yik7XG5cbiAgICBjb25zdCBjdXJ2ZSA9IGF3YWl0IGdldEN1cnZlRnJvbU5hbWUocHJvb2YuY3VydmUpO1xuICAgIGNvbnN0IEcxID0gY3VydmUuRzE7XG4gICAgY29uc3QgRnIgPSBjdXJ2ZS5GcjtcblxuICAgIGxldCBpbnB1dHMgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHViLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbnB1dHMgIT09IFwiXCIpIGlucHV0cyA9IGlucHV0cyArIFwiLFwiO1xuICAgICAgICBpbnB1dHMgPSBpbnB1dHMgKyBwMjU2KHB1YltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBbJHtwMjU2KHByb29mLnBvbHlub21pYWxzLkMxWzBdKX0sICR7cDI1Nihwcm9vZi5wb2x5bm9taWFscy5DMVsxXSl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YucG9seW5vbWlhbHMuQzJbMF0pfSwke3AyNTYocHJvb2YucG9seW5vbWlhbHMuQzJbMV0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLnBvbHlub21pYWxzLlcxWzBdKX0sJHtwMjU2KHByb29mLnBvbHlub21pYWxzLlcxWzFdKX0sYCArXG4gICAgYCR7cDI1Nihwcm9vZi5wb2x5bm9taWFscy5XMlswXSl9LCR7cDI1Nihwcm9vZi5wb2x5bm9taWFscy5XMlsxXSl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMucWwpfSwke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMucXIpfSwke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMucW0pfSxgICtcbiAgICBgJHtwMjU2KHByb29mLmV2YWx1YXRpb25zLnFvKX0sJHtwMjU2KHByb29mLmV2YWx1YXRpb25zLnFjKX0sJHtwMjU2KHByb29mLmV2YWx1YXRpb25zLnMxKX0sYCArXG4gICAgYCR7cDI1Nihwcm9vZi5ldmFsdWF0aW9ucy5zMil9LCR7cDI1Nihwcm9vZi5ldmFsdWF0aW9ucy5zMyl9LCR7cDI1Nihwcm9vZi5ldmFsdWF0aW9ucy5hKX0sYCArXG4gICAgYCR7cDI1Nihwcm9vZi5ldmFsdWF0aW9ucy5iKX0sJHtwMjU2KHByb29mLmV2YWx1YXRpb25zLmMpfSwke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMueil9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMuencpfSwke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMudDF3KX0sJHtwMjU2KHByb29mLmV2YWx1YXRpb25zLnQydyl9LGAgK1xuICAgIGAke3AyNTYocHJvb2YuZXZhbHVhdGlvbnMuaW52KX1dLGAgK1xuICAgIGBbJHtpbnB1dHN9XWA7XG59XG4iLCIvKlxuICAgIENvcHlyaWdodCAyMDIyIGlkZW4zIGFzc29jaWF0aW9uLlxuXG4gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc25hcmtqcy5cblxuICAgIHNuYXJranMgaXMgYSBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlXG4gICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pXG4gICAgYW55IGxhdGVyIHZlcnNpb24uXG5cbiAgICBzbmFya2pzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZXG4gICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yXG4gICAgbW9yZSBkZXRhaWxzLlxuXG4gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuICAgIHNuYXJranMuIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldHVwIH0gZnJvbSBcIi4vZmZsb25rX3NldHVwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByb3ZlIH0gZnJvbSBcIi4vZmZsb25rX3Byb3ZlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZ1bGxQcm92ZSB9IGZyb20gXCIuL2ZmbG9ua19mdWxsX3Byb3ZlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZlcmlmeSB9IGZyb20gXCIuL2ZmbG9ua192ZXJpZnkuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXhwb3J0U29saWRpdHlWZXJpZmllciB9IGZyb20gXCIuL2ZmbG9ua19leHBvcnRfc29saWRpdHlfdmVyaWZpZXIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXhwb3J0U29saWRpdHlDYWxsRGF0YSB9IGZyb20gXCIuL2ZmbG9ua19leHBvcnRfY2FsbGRhdGEuanNcIjtcbiJdLCJuYW1lcyI6WyJoZXhMZW4iLCJmcm9tU3RyaW5nIiwiZSIsImZyb21BcnJheSIsImJpdExlbmd0aCIsImlzTmVnYXRpdmUiLCJpc1plcm8iLCJzaGlmdExlZnQiLCJzaGlmdFJpZ2h0Iiwic2hsIiwic2hyIiwiaXNPZGQiLCJuYWYiLCJiaXRzIiwidG9OdW1iZXIiLCJ0b0FycmF5IiwiYWRkIiwic3ViIiwibmVnIiwibXVsIiwic3F1YXJlIiwicG93IiwiZXhwIiwiYWJzIiwiZGl2IiwibW9kIiwiZXEiLCJuZXEiLCJsdCIsImd0IiwibGVxIiwiZ2VxIiwiYmFuZCIsImJvciIsImJ4b3IiLCJsYW5kIiwibG9yIiwibG5vdCIsInRvUnByTEUiLCJ0b1JwckJFIiwiZnJvbVJwckxFIiwiZnJvbVJwckJFIiwidG9TdHJpbmciLCJ0b0xFQnVmZiIsInplcm8iLCJvbmUiLCJTY2FsYXIuaXNaZXJvIiwiU2NhbGFyLmJpdHMiLCJidWlsZFNxcnQiLCJTY2FsYXIuZXEiLCJTY2FsYXIubW9kIiwiYWxnNV90b25lbGxpU2hhbmtzIiwiYWxnNF9rb25nIiwiYWxnM19hdGtpbiIsImFsZzJfc2hhbmtzIiwiU2NhbGFyLnBvdyIsImFsZzEwX2FkaiIsImFsZzlfYWRqIiwiYWxnOF9jb21wbGV4IiwiU2NhbGFyLnN1YiIsIlNjYWxhci5pc09kZCIsIlNjYWxhci5kaXYiLCJxdWFydGVyUm91bmQiLCJkb3VibGVSb3VuZCIsIkNoYUNoYSIsIlNjYWxhci5hZGQiLCJTY2FsYXIubXVsIiwiZ2V0UmFuZG9tQnl0ZXMiLCJnZXRSYW5kb21TZWVkIiwidGhyZWFkUm5nIiwiZ2V0VGhyZWFkUm5nIiwiRkZUIiwibG9nMiIsIl9fZmZ0IiwiWnFGaWVsZCIsIlNjYWxhci5iaXRMZW5ndGgiLCJGRkZUIiwiZnV0aWxzLmV4cCIsIlNjYWxhci50b1JwckxFIiwiU2NhbGFyLnRvUnByQkUiLCJTY2FsYXIuZnJvbVJwckxFIiwiU2NhbGFyLmZyb21ScHJCRSIsInV0aWxzIiwiYnVpbGRfaW50IiwiYnVpbGRfdGltZXNzY2FsYXIiLCJidWlsZF9iYXRjaGludmVyc2UiLCJidWlsZEJhdGNoSW52ZXJzZSIsImJ1aWxkX2JhdGNoY29udmVydGlvbiIsImJ1aWxkQmF0Y2hDb252ZXJ0aW9uIiwiYnVpbGRfYmF0Y2hvcCIsImNvbXBhcmUiLCJpc0V2ZW4iLCJpc1Bvc2l0aXZlIiwiaXNVbml0IiwibW9kSW52IiwibW9kUG93IiwiY29tcGFyZUFicyIsImlzRGl2aXNpYmxlQnkiLCJpc0Jhc2ljUHJpbWUiLCJwcmV2IiwibWlsbGVyUmFiaW5UZXN0IiwiaXNQcmltZSIsImJpZ2ludCIsImJ1aWxkSW50IiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJidWlsZEV4cCIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsImJ1aWxkQmF0Y2hPcCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwiYnVpbGRfZjFtIiwiYnVpbGRGMW0iLCJidWlsZF9mMSIsImJ1aWxkX2YybSIsImJ1aWxkX2YzbSIsImJ1aWxkX3RpbWVzc2NhbGFybmFmIiwiYnVpbGRfbXVsdGlleHAiLCJidWlsZFRpbWVzU2NhbGFyTkFGIiwiYnVpbGRNdWx0aWV4cCIsImJ1aWxkX2N1cnZlX2phY29iaWFuX2EwIiwiYnVpbGRfZmZ0IiwiYnVpbGRfcG9sIiwiYnVpbGRfcWFwIiwiYnVpbGRfYXBwbHlrZXkiLCJidWlsZEYxIiwiYnVpbGRGMm0iLCJidWlsZEYzbSIsImJ1aWxkQ3VydmUiLCJidWlsZEZGVCIsImJ1aWxkUG9sIiwicmVxdWlyZSQkNyIsImJ1aWxkUUFQIiwicmVxdWlyZSQkOCIsImJ1aWxkQXBwbHlLZXkiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJidWlsZF9ibjEyOCIsImJ1aWxkX2JsczEyMzgxIiwiYnVpbGRCbjEyOCIsImJ1aWxkQmxzMTIzODEiLCJzdHJpbmdpZnlCaWdJbnRzIiwidW5zdHJpbmdpZnlCaWdJbnRzIiwibGVJbnQyQnVmZiIsIl9yZXZUYWJsZSIsIl9yZXZTbG93IiwiYml0UmV2ZXJzZSIsImJ1ZmZSZXZlcnNlQml0cyIsImFycmF5MmJ1ZmZlciIsImJ1ZmZlcjJhcnJheSIsIlBBR0VfU0laRSIsIkJpZ0J1ZmZlciIsImJ1aWxkQmF0Y2hDb252ZXJ0IiwiV2FzbUZpZWxkMSIsIlNjYWxhci5zaGlmdFJpZ2h0IiwiU2NhbGFyLm9uZSIsIlNjYWxhci5zaGlmdExlZnQiLCJTY2FsYXIudG9MRUJ1ZmYiLCJTY2FsYXIuZSIsIlNjYWxhci5pc05lZ2F0aXZlIiwiU2NhbGFyLm5lZyIsIlNjYWxhci5ndCIsInV0aWxzLmxlSW50MkJ1ZmYiLCJTY2FsYXIudG9TdHJpbmciLCJTY2FsYXIuemVybyIsIlNjYWxhci5iYW5kIiwiU2NhbGFyLmdlcSIsInV0aWxzLmFycmF5MmJ1ZmZlciIsInV0aWxzLmJ1ZmZlcjJhcnJheSIsIldhc21GaWVsZDIiLCJXYXNtRmllbGQzIiwiV2FzbUN1cnZlIiwidGhyZWFkIiwiYnJvd3NlciIsIk1FTV9TSVpFIiwiRGVmZXJyZWQiLCJzbGVlcCIsInN0cmluZ1RvQmFzZTY0IiwidGhyZWFkU291cmNlIiwid29ya2VyU291cmNlIiwiYnVpbGRUaHJlYWRNYW5hZ2VyIiwiVGhyZWFkTWFuYWdlciIsIldvcmtlciIsImJ1aWxkQmF0Y2hBcHBseUtleSIsImJ1aWxkUGFpcmluZyIsInBUU2l6ZXMiLCJidWlsZEVuZ2luZSIsImJ1aWxkTXVsdGlFeHAiLCJ1dGlscy52YXJ1aW50MzIiLCJ1dGlscy52YXJpbnQ2NCIsInV0aWxzLnZhcmludDMyIiwidXRpbHMudTMyIiwidXRpbHMudG9IZXhTdHJpbmciLCJ1dGlscy5zdHJpbmciLCJidWlsZEJuMTI4d2FzbSIsImJ1aWxkQmxzMTIzODF3YXNtIiwiU2NhbGFyIiwiX1NjYWxhciIsImNyZWF0ZU5ldyIsInJlYWRFeGlzdGluZyIsInRtcEJ1ZmYzMiIsInRtcEJ1ZmYzMnYiLCJ0bXBCdWZmNjQiLCJ0bXBCdWZmNjR2IiwibWVtRmlsZS5jcmVhdGVOZXciLCJiaWdNZW1GaWxlLmNyZWF0ZU5ldyIsIm1lbUZpbGUucmVhZEV4aXN0aW5nIiwiYmlnTWVtRmlsZS5yZWFkRXhpc3RpbmciLCJmYXN0RmlsZS5yZWFkRXhpc3RpbmciLCJmYXN0RmlsZS5jcmVhdGVPdmVycmlkZSIsImJsczEyMzgxciIsImJuMTI4ciIsImdldEN1cnZlRnJvbVIiLCJhc3NlcnQiLCJieXRlTGVuZ3RoIiwid3JpdGUiLCJhc2NpaSIsImJhc2U2NCIsImhleCIsInV0ZjgiLCJ1dGYxNmxlIiwiYmxha2UyYldhc21Nb2R1bGUiLCJibGFrZTJiV2FzbSIsIkJsYWtlMmIiLCJzYW1lUmF0aW8iLCJiaW5GaWxlVXRpbHMuc3RhcnRXcml0ZVNlY3Rpb24iLCJiaW5GaWxlVXRpbHMuZW5kV3JpdGVTZWN0aW9uIiwiZ2V0Q3VydmUiLCJiaW5GaWxlVXRpbHMud3JpdGVCaWdJbnQiLCJyZWFkSGVhZGVyIiwiYmluRmlsZVV0aWxzLnN0YXJ0UmVhZFVuaXF1ZVNlY3Rpb24iLCJiaW5GaWxlVXRpbHMuZW5kUmVhZFNlY3Rpb24iLCJiaW5GaWxlVXRpbHMucmVhZEJpZ0ludCIsImJpbkZpbGVVdGlscy5yZWFkQmluRmlsZSIsIkYxRmllbGQiLCJyZWFkQ29udHJpYnV0aW9uIiwid3JpdGVDb250cmlidXRpb24iLCJ3dG5zVXRpbHMucmVhZEhlYWRlciIsInprZXlVdGlscy5yZWFkSGVhZGVyIiwiYmluRmlsZVV0aWxzLnJlYWRTZWN0aW9uIiwiV2l0bmVzc0NhbGN1bGF0b3JCdWlsZGVyIiwiYmluRmlsZVV0aWxzLmNyZWF0ZUJpbkZpbGUiLCJ3dG5zVXRpbHMud3JpdGVCaW4iLCJ3dG5zX2NhbGN1bGF0ZSIsImdyb3RoMTZfcHJvdmUiLCJjdXJ2ZXMuZ2V0Q3VydmVGcm9tTmFtZSIsInB1YmxpY0lucHV0c0FyZVZhbGlkIiwiaXNXZWxsQ29uc3RydWN0ZWQiLCJwMjU2IiwiYmxha2UyYiIsIm1pc2Mucm5nRnJvbUJlYWNvblBhcmFtcyIsImtleVBhaXIuY3JlYXRlUFRhdUtleSIsInB0YXVVdGlscy53cml0ZVBUYXVIZWFkZXIiLCJwdGF1VXRpbHMuY2FsY3VsYXRlRmlyc3RDaGFsbGVuZ2VIYXNoIiwibWlzYy5mb3JtYXRIYXNoIiwidXRpbHMucmVhZFBUYXVIZWFkZXIiLCJ1dGlscy5yZWFkQ29udHJpYnV0aW9ucyIsInV0aWxzLmNhbGN1bGF0ZUZpcnN0Q2hhbGxlbmdlSGFzaCIsIm1pc2MuaGFzaElzRXF1YWwiLCJ1dGlscy53cml0ZVBUYXVIZWFkZXIiLCJ1dGlscy5mcm9tUHRhdVB1YktleVJwciIsInV0aWxzLndyaXRlQ29udHJpYnV0aW9ucyIsIm1pc2Muc2FtZVJhdGlvIiwidXRpbHMua2V5RnJvbUJlYWNvbiIsImtleVBhaXIuZ2V0RzJzcCIsInV0aWxzLnRvUHRhdVB1YktleVJwciIsIm1pc2MuYnl0ZUFycmF5MmhleCIsIm1pc2MuZ2V0UmFuZG9tQnl0ZXMiLCJtaXNjLnJlYWRVSW50MzJCRSIsIm1pc2MuZ2V0UmFuZG9tUm5nIiwiYmVhY29uIiwibWlzYy5oZXgyQnl0ZUFycmF5IiwiYmluRmlsZVV0aWxzLmNvcHlTZWN0aW9uIiwiU1VCQVJSQVlfU0laRSIsIkJpZ0FycmF5SGFuZGxlciIsIl9CaWdBcnJheSIsIkJpZ0FycmF5IiwibG9hZFN5bXMiLCJ3dG5zVXRpbHMud3JpdGUiLCJjdXJ2ZXMuZ2V0Q3VydmVGcm9tUiIsInprZXlVdGlscy5yZWFkTVBDUGFyYW1zIiwiemtleVV0aWxzLndyaXRlSGVhZGVyIiwiemtleVV0aWxzLndyaXRlTVBDUGFyYW1zIiwibWlzYy5jbG9uZUhhc2hlciIsImJpbkZpbGVVdGlscy5zZWN0aW9uSXNFcXVhbCIsInV0aWxzLmhhc2hQdWJLZXkiLCJ1dGlscy5oYXNoRzEiLCJleHBvcnRWZXJpZmljYXRpb25LZXkiLCJmZmxvbmtFeHBvcnRTb2xpZGl0eVZlcmlmaWVyQ21kIiwiZ2xvYmFsIiwicGxvbmtfcHJvdmUiLCJmcm9tT2JqZWN0VmsiLCJjYWxjdWxhdGVQSSIsImlzVmFsaWRQYWlyaW5nIl0sIm1hcHBpbmdzIjoiOzs7SUFDQTtJQUNBLE1BQU1BLFFBQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0lBQ08sU0FBU0MsWUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDckMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsS0FBSyxNQUFNLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMxQixRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0lBQ2xDLFlBQVksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsU0FBUyxNQUFNO0lBQ2YsWUFB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QUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLElBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLElBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLElBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7QUFDRDtJQUNBO0lBQ08sU0FBU0MsU0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN4QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxH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LFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBR0MsS0FBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25CO0lBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM1QixRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pELEtBQUs7QUFDTDtJQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBR0EsS0FBVSxDQUFDRixLQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RDtJQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN6QixRQUFRLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0s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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBR00sS0FBVSxFQUFFRixLQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUdFLEtBQVUsRUFBRUYsS0FBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7SUFDQSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLFlBQVksT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFNBQVMsTUFBTTtJQUNmLFlBQVksT0FBTyxDQUFDLENBQUM7SUFDckIsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3pCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUNkLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDbEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsU0FBUyxNQUFNO0lBQ2YsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0IsU0FBUztJQUNULFFBQVEsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSyxDQUFDO0lBQ04sQ0FBQztBQUNEO0FBQ0E7SUFDQSxTQUFTRCxjQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXO0lBQ3hCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RELEtBQUssQ0FBQztJQUNOOztJQ2hLQSxTQUFTSSxjQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QztJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0Q7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFH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QUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkQsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLElBQUksTUFBTSxFQUFFLEdBQUdBLE9BQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLE1BQU0sRUFBRSxHQUFHQSxPQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QjtJQUNBLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RSxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ2Y7O0lDbEpBO0FBTUE7SUFDZSxNQUFNQyxTQUFPLENBQUM7SUFDN0IsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdkIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN2QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUdDLFdBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDMUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDNUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDM0MsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFNBQVM7QUFDVDtBQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElB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TUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxRQUFRLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixLQUFLO0FBQ0w7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDZCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEIsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxD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SUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDL0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ1osUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMxQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDaEI7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzdDO0lBQ0E7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztBQUMzQztJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRTtJQUNBLFFBQVEsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRztJQUNoQyxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsWUFB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QUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFD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QUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0M7SUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWjtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUN0QixZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQy9CLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsV0FBVyxHQUFHO0lBQzNCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FB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SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFF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Q0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQzdDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3REO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDMUQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ3REO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxTQUFTLENBQUM7QUFDVjtJQUNBLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxTQUFTLGlCQUFpQixHQUFHO0lBQ2pDLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFD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Q2xDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUN2QyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xFO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3BEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3BELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7QUFDaEU7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzlDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxnQkFBZ0I7SUFDaEI7SUFDQSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ3ZELG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDdEQsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCO0lBQ0Esb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRCxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0Qsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUU7SUFDQTtJQUNBLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkUsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixTQUFTLENBQUM7QUFDVjtJQUNBLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxTQUFTLGFBQWEsR0FBRztBQUM3QjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUNBLE9BQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUN2QyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFH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RUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDbEQ7SUFDQSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUN0RDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUM3QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFdBQVcsR0FBRztJQUMzQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsaUJBQWlCLEdBQUc7SUFDakMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxD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TUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzNDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFB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QyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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QUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNoRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUNoRTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxD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Q0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUs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Q2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7QUFDN0Q7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3BELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsU0FBUyxDQUFDO0FBQ1Y7SUFDQSxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxhQUFhLEdBQUc7QUFDN0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQzNELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEU7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELGdCQUFnQjtJQUNoQixvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pGLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQjtJQUNoQixvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25GLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxnQkFBZ0I7SUFDaEIsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hFLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztJQUM1RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUMxRDtJQUNBLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELGdCQUFnQixDQUFDLENBQUMsRUFBRTtJQUNwQixvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDdkQsb0JBQW9CO0lBQ3BCLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0Ysd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDcEMscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixhQUFhO0FBQ2I7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQztJQUM3RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzdEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3BELFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxTQUFTLGNBQWMsR0FBRztBQUM5QjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pE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Q0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzdEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRCxTQUFT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RyxNQUFNLENBQUMsS0FBSztJQUNoQyxRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRztJQUNsQixRQUFRO0lBQ1IsWUFBWSw4RUFBOEU7SUFDMUYsWUFBWSw4RUFBOEU7SUFDMUYsU0FBUyxDQUFDO0lBQ1YsWUFBWSw2RUFBNkU7SUFDekYsWUFBWSw2RUFBNkU7SUFDekYsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSztJQUMvQixRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRztJQUNuQixRQUFRO0lBQ1IsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSztJQUNoQyxRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9CLFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QyxPQUFPLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsUUFBUSxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5RTtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQztJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDakQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQ3BELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDO0lBQ3pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUNqRjtBQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ2pEO0lBQ0E7SUFDQTtBQUNBO0lBQ0EsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7QUFDQTtJQUNBLElBQUksU0FBUyxtQkFBbUIsR0FBRztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0lBQ0EsUUFBUSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEU7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEU7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDcEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENB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QyxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pFO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlDO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ3JELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDMUMsU0FBUyxDQUFDO0FBQ1Y7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQzFCO0lBQ0EsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM3RjtJQUNBLGdCQUFnQixDQUFDLENBQUMsRUFBRTtJQUNwQixvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQ3BFLG9CQUFvQjtJQUNwQix3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEcscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDekQsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLGFBQWEsQ0FBQztJQUNkLFNBQVMsQ0FBQztBQUNWO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDOUMsU0FBUyxDQUFDO0FBT1Y7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDaEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3pGO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6RixTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsZ0JBQWdCLEdBQUc7SUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxRQUFRLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckQsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLGFBQWEsR0FBRztJQUM3QixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7QUFDQTtBQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxRTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7QUFDQTtJQUNBLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxTQUFTLGVBQWUsR0FBRztJQUMvQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM1RTtJQUNBLFFBQVEsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsUUFBUSxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5RTtBQUNBO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN6QztJQUNBLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkY7SUFDQSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDMUI7QUFDQTtJQUNBLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRDtJQUNBLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDL0QsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNoRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM3RjtJQUNBLGdCQUFnQixDQUFDLENBQUMsRUFBRTtJQUNwQixvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQ3BFLG9CQUFvQjtJQUNwQix3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDM0Usd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQzNFO0lBQ0Esd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3hHO0lBQ0EscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDekQsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLGFBQWEsQ0FBQztBQUNkO0lBQ0EsU0FBUyxDQUFDO0FBT1Y7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQzVELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQzVELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDekY7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUM1RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUM1RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0QsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3pGO0lBQ0EsU0FBUyxDQUFDO0FBQ1Y7SUFDQSxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7SUFDbEMsUUFBUSxNQUFNLEdBQUcsR0FBRztJQUNwQixZQUFZO0lBQ1osZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsYUFBYTtJQUNiLFlBQVk7SUFDWixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLDZFQUE2RSxFQUFFLDhFQUE4RSxDQUFDO0lBQy9LLGdCQUFnQixDQUFDLDhFQUE4RSxFQUFFLEVBQUUsQ0FBQztJQUNwRyxnQkFBZ0IsQ0FBQyw4RUFBOEUsRUFBRSw0RUFBNEUsQ0FBQztJQUM5SyxnQkFBZ0IsQ0FBQyw4RUFBOEUsRUFBRSxFQUFFLENBQUM7SUFDcEcsZ0JBQWdCLENBQUMsNkVBQTZFLEVBQUUsNkVBQTZFLENBQUM7SUFDOUssZ0JBQWdCLENBQUMsOEVBQThFLEVBQUUsRUFBRSxDQUFDO0lBQ3BHLGdCQUFnQixDQUFDLDhFQUE4RSxFQUFFLDZFQUE2RSxDQUFDO0lBQy9LLGdCQUFnQixDQUFDLDJEQUEyRCxFQUFFLEVBQUUsQ0FBQztJQUNqRixnQkFBZ0IsQ0FBQyw4RUFBOEUsRUFBRSw4RUFBOEUsQ0FBQztJQUNoTCxnQkFBZ0IsQ0FBQywyREFBMkQsRUFBRSxFQUFFLENBQUM7SUFDakYsZ0JBQWdCLENBQUMsOEVBQThFLEVBQUUsOEVBQThFLENBQUM7SUFDaEwsYUFBYTtJQUNiLFNBQVMsQ0FBQztBQUNWO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRztJQUNuQixZQUFZO0lBQ1osZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEIsYUFBYTtJQUNiLFlBQVk7SUFDWixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLDhFQUE4RSxFQUFFLDhFQUE4RSxDQUFDO0lBQ2hMLGdCQUFnQixDQUFDLDhFQUE4RSxFQUFFLEVBQUUsQ0FBQztJQUNwRyxnQkFBZ0IsQ0FBQyw2RUFBNkUsRUFBRSw2RUFBNkUsQ0FBQztJQUM5SyxnQkFBZ0IsQ0FBQywyREFBMkQsRUFBRSxFQUFFLENBQUM7SUFDakYsZ0JBQWdCLENBQUMsOEVBQThFLEVBQUUsNkVBQTZFLENBQUM7SUFDL0ssYUFBYTtJQUNiLFlBQVk7SUFDWixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLDZFQUE2RSxFQUFFLDhFQUE4RSxDQUFDO0lBQy9LLGdCQUFnQixDQUFDLDJEQUEyRCxFQUFFLEVBQUUsQ0FBQztJQUNqRixnQkFBZ0IsQ0FBQyw2RUFBNkUsRUFBRSw4RUFBOEUsQ0FBQztJQUMvSyxnQkFBZ0IsQ0FBQyw4RUFBOEUsRUFBRSxFQUFFLENBQUM7SUFDcEcsZ0JBQWdCLENBQUMsOEVBQThFLEVBQUUsNkVBQTZFLENBQUM7SUFDL0ssYUFBYTtJQUNiLFNBQVMsQ0FBQztBQUNWO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25HLFlBQVksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLFlBQVksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25GLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkcsWUFBWSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsWUFBWSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkYsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsWUFBWSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLGdCQUFnQixHQUFHQSxPQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEUsZ0JBQWdCLEdBQUdBLE9BQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRSxhQUFhLENBQUMsQ0FBQztJQUNmLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUMxQixnQkFBZ0IsQ0FBQyxDQUFDLE9BQU87SUFDekIsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3pELG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxpQkFBaUIsQ0FBQztJQUNsQixhQUFhLE1BQU07SUFDbkIsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM1QixZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxZQUFZLE1BQU0sR0FBRyxHQUFHO0lBQ3hCLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDakQsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxhQUFhLENBQUM7SUFDZCxZQUFZLElBQUk3RSxZQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsWUFBWSxPQUFPLEdBQUcsQ0FBQztJQUN2QixTQUFTO0FBQ1Q7SUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0lBQ0EsSUFBSSxTQUFTLGtDQUFrQyxHQUFHO0FBQ2xEO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ2hGLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzFCLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN0QixRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLHFCQUFxQixHQUFHO0lBQ3JDLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNuRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDNUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFB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TUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtBQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBc0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQztJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxZQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxZQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0M7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQztJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENB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RDtJQUNBLElBQUlDLFVBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckQ7SUFDQSxJQUFJQyxVQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJRSxVQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQztJQUNBLElBQUksTUFBTSxTQUFTLEdBQUdOLFVBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDOUIsUUFBUSxHQUFHOUMsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELEtBQUssQ0FBQyxDQUFDO0lBQ1AsSUFBSSxNQUFNLFNBQVMsR0FBR2dELFlBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RDtBQUNBO0lBQ0EsSUFBSSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0lBQzFDLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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Qy9ILFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUs7SUFDL0IsUUFBUTtJQUNSLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3hFLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUc7SUFDbkIsUUFBUTtJQUNSLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVMsQ0FBQztJQUNWLFlBQVksRUFBRTtJQUNkLFlBQVksRUFBRTtJQUNkLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUs7SUFDaEMsUUFBUTtJQUNSLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFlBQVksR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQ3pFLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMvQixRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUdBLE9BQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxLQUFLLENBQUMsQ0FBQztBQUNQO0lBQ0EsSUFBSSxNQUFNLGNBQWMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3pDLFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lB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QyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBO0lBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQztBQUN2RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FB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SSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN4RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQzFEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztBQUMzRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzlDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJ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QUFDO0lBQ3RDLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkU7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUMzRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQjtJQUNBLElBQUksU0FBUyxZQUFZLEdBQUc7SUFDNUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUNyRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDckQ7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDdkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0FBQ0E7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0lBQ0EsSUFBSSxTQUFTLGNBQWMsR0FBRztBQUM5QjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7QUFDQTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUN0RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDdEQsU0FBUyxDQUFDO0lBQ1YsS0FBSztJQUNMLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckI7QUFDQTtJQUNBLElBQUksU0FBUyxRQUFRLEdBQUc7SUFDeEIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLFFBQVEsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFF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Q0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQzVFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNs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QUFDO0FBQ3BEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFD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LENBQUM7SUFDL0MsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxhQUFhO0lBQ2IsWUFBWSxDQUFDLENBQUMsRUFBRTtJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEYsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxhQUFhO0lBQ2IsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7SUFDeEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7QUFDeEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUM1RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUMzRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQzlELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUM5RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO0FBQ3BEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDM0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQzlELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdB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Q0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ2xDLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzFELFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBR0QsWUFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFQyxLQUFVLENBQUMsQ0FBQztJQUMxRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pDLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFD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QU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1B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QztJQUNyQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xEO0lBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FB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QUFlLENBQUNDLEdBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RHLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ1osUUFBUSxJQUFJLENBQUMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ25ELFlBQVksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxD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QUcsQ0FBQyxDQUFDLENBQUM7SUFDaEMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRDtJQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRDtJQUNBLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hGLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEYsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtJQUNuQixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RSxRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtJQUN2QixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDWixRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2IsUUFBUSxPQUFPLElBQUksQ0FB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SUFDekMsWUFBWSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsWUFBWSxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEIsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsWUFBWSxPQUFPLEdBQUcsQ0FBQztJQUN2QixTQUFTLE1BQU07SUFDZixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDdkIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0lBQ2pCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLEdBQUc7SUFDYixRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQzFGLGNBQVksRUFBRSxDQUFDLENBQUM7SUFDNUMsS0FBSztBQUNMO0lBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRTtJQUNsQixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLEtBQUs7QUFDTDtJQUNBOztJQzlMZSxNQUFNdUcsV0FBUyxDQUFDO0FBQy9CO0lBQ0EsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7SUFDcEQsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRSxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMxQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMs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Q0FBQztJQUM1QyxhQUFhLENBQUM7SUFDZCxTQUFTO0lBQ1QsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUNkLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUN6QyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFNBQVMsTUFBTTtJQUNmLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsU0FBUztJQUNULFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsS0FBSztBQUNMO0lBQ0EsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFO0lBQ2xCLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2QsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFNBQVMsTUFBTTtJQUNmLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNCLFNBQVM7SUFDVCxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDMUMsWUFBWSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDbkMsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDN0MsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFlBQVksT0FBTyxJQUFJLENBQUM7SUFDeEIsU0FBUyxNQUFNO0lBQ2YsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsWUFB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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7SUFDcEIsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsT0FBTyxPQUFPLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUM3QixRQUFRLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzdCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO0lBQ2xCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUMsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDOUIsUUFBUSxPQUFPLEdBQUcsQ0FBQztJQUNuQixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHO0lBQ3RCLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVB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QUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDNUI7SUFDQSxZQUFZLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hFO0lBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksR0FB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QUFRLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVCLFFBQVEsT0FBTyxHQUFHLENBQUM7SUFDbkIsS0FBSyxDQUFDO0FBQ047SUFDQSxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDbEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkUsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFN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QUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxSCw0QkFBNEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxSCx5QkFBeUI7SUFDekIsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekYsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekYscUJBQXFCLE1BQU07SUFDM0Isd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekYsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxD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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFlBQVksSUFBSSxRQUFRLEVBQUU7SUFDMUIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsYUFBYTtJQUNiLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxN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R0FBRyxFQUFFLENBQUM7QUFDNUI7SUFDQSxZQUFZLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzVFLFlBQVksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RixZQUFZLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkYsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1B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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRyxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBR0EsU0FBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakQsS0FBSztBQUNMO0lBQ0EsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDMUMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUMxQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDdkMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxRQUFRLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDbkMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDcEMsWUFBWSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN0QixZQUFZLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDOUIsU0FBUyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUMxQyxZQUFZLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDN0IsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFlBQVksT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUM3QixTQUFTLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQzVDLFlBQVksTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUM3QixZQUFZLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDM0IsWUFBWSxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQy9CLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxD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QUFPLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUQsUUFBUSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHQSxTQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxLQUFLO0FBQ0w7SUFDQSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMxRCxRQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUdBLFNBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUs7QUFDTDtJQUNBLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQ3ZDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFELFFBQVEsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBR0EsU0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ2xELFFBQVEsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUNuQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMs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T0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ2pELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN2RSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDdkUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN2RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUM1RCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzVELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ25ELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ25EO0lBQ0EsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDbkQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN2RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN6RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3hFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDMUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3ZFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDeEUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQzFFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMxRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFF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QUM7SUFDdEQsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRjtJQUNBLFFBQVEsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM1QjtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2hDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLFlBQVksTUFBTSxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLFlBQVksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RixZQUFZLE1BQU0sT0FBTyxHQUFH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QUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sVUFBVSxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRDtJQUNBLFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQ7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksTUFBTSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQjtJQUNBLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQ7SUFDQSxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRTtJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUN6QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUM7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQztJQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdB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O0lBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLFlBQVksSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDMUMsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUMzQixRQUFRLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQztJQUN6QixRQUFRLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RELFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUN2RTtJQUNBLFFBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMzRjtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNuRCxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RELFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0lBQzNCLFlBQVksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JGLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RjtJQUNBLFFBQVEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEM7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUM3QixLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssR0FBRztJQUNaLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtJQUN0RCxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHO0lBQ3BCLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQzdCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0lBQ0EsUUFBUUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUNELFdBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDN0IsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUI7SUFDQSxRQUFRQyxZQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUM7SUFDQSxRQUFRLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQ0QsV0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQzdCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0lBQ0EsUUFBUUcsWUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxRQUFRQSxZQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRTtJQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDRCxXQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUN6QixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUM7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQztJQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7SUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FB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RUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0FBQ0Q7SUFDTyxlQUFlLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQzNFLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUU7SUFDckMsUUFBUSxJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMzQyxLQUFLO0lBQ0wsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3RDLElBQUksTUFBTSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELElBQUksTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7SUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsUUFBUSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsS0FBSztJQUNMLElBQUksTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RTtJQUNBLENBQUM7QUFDRDtJQUNPLGVBQWUsV0FBVyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFB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RUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3hCLENBQUM7QUFDRDtJQUNBLFNBQVM5SyxVQUFRLEVBQUUsTUFBTSxFQUFFO0lBQzNCLEVBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVU7QUFDL0I7SUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLEdBQUU7QUFDakI7SUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUNuQyxJQUFJLE1BQU07SUFDVixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxNQUFLO0lBQ0wsR0FBRztBQUNIO0lBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3JCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBRztJQUN6RCxHQUFHLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUM1QixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUk7SUFDMUQsR0FBRztBQUNIO0lBQ0EsRUFBRSxPQUFPLE1BQU07SUFDZixDQUNBO0lBQ0EsU0FBUytLLE9BQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHRCxZQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDekUsRUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBQztBQUMxRDtJQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDMUMsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztJQUM3QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztJQUM3QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztBQUM3QztJQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7SUFDckMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQztJQUM1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LEdBQUUsUUFBUTtJQUNWLEdBQUUsS0FBSztJQUNQLEdBQUUsYUFBYTtJQUNmLEdBQUUsWUFBWTtJQUNkLEdBQUUsYUFBYTtJQUNmLEdBQUUsWUFBWTtJQUNkLEdBQUUsWUFBWTtJQUNkLEdBQUUsV0FBVztJQUNiLEdBQUUsWUFBWTtJQUNkLEdBQUUsV0FBVztJQUNiLEdBQUE7Ozs7Ozs7OztLQy9lQSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssU0FBUyxTQUFTLEdBQUc7SUFDbkQsR0FBRSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDL0YsRUFBQyxDQUFDO0lBQ0YsQ0FBQSxJQUFJLFVBQVUsbUJBQW1CLENBQUMsTUFBTTtPQUN0QyxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUM3QixLQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5RSxPQUFPLENBQUMsTUFBTSxLQUFLO0lBQ3JCLEtBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxD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RSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxNQUFNZ0MsV0FBd0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxJQUFJLE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsSUFBSSxNQUFNLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDO0lBQ0EsSUFBSSxNQUFNRixlQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7SUFDQSxDQUFDO0FBMEZEO0lBQ0EsZUFBZSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDRDtJQUNBLGVBQWUsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0FBQ0Q7SUFDQSxlQUFlLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUMzQyxJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsSUFBSSxPQUFPLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFD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R0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQztJQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsSUFBSSxNQUFNaUssY0FBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQztJQUNBLElBQUksT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNEO0lBQ0EsZUFBZSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtJQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDO0FBQ3pDO0lBQ0EsSUFBSSxNQUFNRCxzQkFBbUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDcEYsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNRSxVQUF1QixDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTUwsYUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QztJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTUssVUFBdUIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUdsSyxNQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDN0M7SUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakM7SUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0lBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FB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QTJCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNRCxzQkFBbUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNyQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixLQUFLO0lBQ0wsSUFBSSxNQUFNQyxjQUEyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSSxNQUFNRCxzQkFBbUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNyQyxRQUFRLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckQ7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLEtBQUs7SUFDTCxJQUFJLE1BQU1DLGNBQTJCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQTtJQUNBO0lBQ0E7SUFDQSxJQUFJLE1BQU1ELHNCQUFtQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7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QUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3hELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEU7SUFDQSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNEO0lBQ0EsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRjtBQUNBO0lBQ0EsSUFBSSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDM0I7SUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3pDLFFBQVEsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUQsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDM0MsUUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEtBQUs7QUFDTDtJQUNBLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUM3QjtJQUNBLElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QjtJQUNBLElBQUksS0FBSyxHQUFHdkQsa0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxhQUFhLEdBQUdBLGtCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtBQUNBO0lBQ0EsZUFBZSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtJQUMvRCxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzNCLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2pDLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDaEQ7SUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUlVLFdBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSUEsV0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJQSxXQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6RDtJQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDMUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELFFBQVEsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsUUFBUSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxRQUFRLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLFFBQVEsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7SUFDckIsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7SUFDeEIsZ0JBQWdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLGFBQWE7SUFDYixZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDMUMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsUUFBUSxRQUFRLENBQUMsR0FBRztJQUNwQixZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRztJQUN4QixnQkFBZ0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzdDLGdCQUFnQixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDN0MsYUFBYTtJQUNiLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxQztJQUNBLENBQUM7QUFDRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQSxlQUFlLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUNyRCxJQUFJLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkM7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzNCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Q7SUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFO0lBQ3BELFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxRQUFRLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN6RDtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDOUQsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEIsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNaLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sQ0FBQztJQUMxRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ1osUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNELFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcs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Q0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNEO0lBQ08sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3ZCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxJQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDRDtJQUNPLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNEO0lBQ08sU0FBU0csSUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNEO0lBQ08sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTRSxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTQyxNQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0Q7SUFDTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDRDtJ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QyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0FBQ0Q7SUFDQTtJQUNPLFNBQVNDLFdBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN2QyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0UsSUFBSSxPQUFPdkMsWUFB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QUFDLDRCQUE0QixDQUFDLENBQUM7SUFDdEQsS0FBSyxDQUFDO0lBQ04sQ0FBQztBQUNEO0lBQ0EsU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRTtBQUN4QjtJQUNBLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBR0MsS0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBR00sS0FBVSxFQUFFRixLQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RDtJQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN6QixRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDN0M7SUFDQTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQztJQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSyxDQUFDO0lBQ04sQ0FBQztBQUNEO0lBQ0EsU0FBU0gsV0FBUyxDQUFDLENBQUMsRUFBRTtJQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN4QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUN2RCxLQUFLLENBQUM7SUFDTixDQUFDO0FBQ0Q7SUFDQSxTQUFTQyxVQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBR0YsS0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUdNLEtBQVUsRUFBRUYsS0FBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHRSxLQUFVLEVBQUVGLEtBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0lBQ0EsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN4QixZQUFZLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxTQUFTLE1BQU07SUFDZixZQUFZLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN6QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2QixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDZCxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ2xDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFNBQVMsTUFBTTtJQUNmLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FB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QUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN2QyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUdDLFdBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFD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LEVBQUUsRUFBRTtJQUMxQixZQUFZLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFNBQVM7SUFDVCxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtJQUNyQixZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzVCLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLFNBQVMsTUFBTTtJQUNmLFlBQVksT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNyRCxTQUFTO0FBQ1Q7SUFDQSxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLFFBQVEsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ1gsUUFBUSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDYixRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNiLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxRQUFRLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixLQUFLO0FBQ0w7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2IsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJ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QUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN4RDtJQUNBLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJNEUsU0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ3ZDLEtBQUs7QUFDTDtJQUNBLElBQUksY0FBYyxHQUFH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LElBQUksT0FBTyxHQUFHO0lBQ2QsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsT0FBTyxDQUFDLENBQUM7SUFDakIsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ2IsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0I7SUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFO0lBQzVDLFlBQVksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDM0MsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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SyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDMUgsUUFBUSxDQUFDLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNELFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0lBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUNiOztJQzdDQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7Ozs7Ozs7Ozs7SUNqQkE7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0FBS0E7SUFDTyxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0lBQ3RDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDNUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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LE1BQU1ELGlCQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLE1BQU0sTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDbEMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEUsS0FBSztJQUNMLElBQUksTUFBTUMsZUFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQztJQUNBO0lBQ0E7SUFDQSxJQUFJLE1BQU1ELGlCQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdEMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsS0FBSztJQUNMLElBQUksTUFBTUMsZUFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQztJQUNBO0lBQ0E7SUFDQSxJQUFJLE1BQU1ELGlCQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNo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LEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNySSxZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7SUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUNwRSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0SSxZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ3BFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3RFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3hFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hJLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDbEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsK0RBQStELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDcEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDdEUsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkksWUFBWSxPQUFPLEtBQUssQ0FBQztJQUN6QixTQUFTO0lBQ1QsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNDLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUgsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNBLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUNBLE9BQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakk7SUFDQSxJQUFJLEVBQUUsR0FBRyxNQUFNeEMsV0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLEdBQUcsTUFBTUEsV0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwSCxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLFFB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QUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pGLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDeEUsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5RixRQUFRLE1BQU1BLFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUYsUUFBUSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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Q0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7QUFDRDtJQUNBO0lBQ08sU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ILElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztBQUNEO0lBQ0E7SUFDTyxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN2QyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0UsSUFBSSxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDRDtJQUNBO0lBQ08s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QUU7SUFDcEMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBR0MsR0FBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25CO0lBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM1QixRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pELEtBQUs7QUFDTDtJQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBR0EsR0FBVSxDQUFDRixHQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RDtJQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN6QixRQUFRLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JFLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDNUM7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QixRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDaEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUN0QyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0lBQ3BCLGFBQWE7QUFDYjtJQUNBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN4QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsYUFBYTtJQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssQ0FBQztJQUNOLENBQUM7QUFDRDtJQUNBLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRTtJQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN4QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN0RCxLQUFLLENBQUM7SUFDTixDQUFDO0FBQ0Q7SUFDQSxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVc7SUFDeEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDdEQsS0FBSyxDQUFDO0lBQ04sQ0FBQztBQUNEO0lBQ0EsU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQ3hCO0lBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHSixHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHTSxHQUFVLEVBQUVGLEdBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0lBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3pCLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUM3QztJQUNBO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0M7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRDtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDcEQ7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0lBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxLQUFLLENBQUM7SUFDTixDQUFDO0FBQ0Q7SUFDQSxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVc7SUFDeEIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkQsS0FBSyxDQUFDO0lBQ04sQ0FBQztBQUNEO0lBQ0EsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBR0osR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUdNLEdBQVUsRUFBRUYsR0FBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHRSxHQUFVLEVBQUVGLEdBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0lBQ0EsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN4QixZQUFZLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxTQUFTLE1BQU07SUFDZixZQUFZLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLFNBQVM7SUFDVCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN6QixRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2QixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDZCxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ2xDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFNBQVMsTUFBTTtJQUNmLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLFNBQVM7SUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssQ0FBQztJQUNOLENBQUM7QUFDRDtBQUNBO0lBQ0EsU0FBUyxZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXO0lBQ3hCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RELEtBQUssQ0FBQztJQUNOOztJQ2hLQSxTQUFTLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUQ7SUFDQSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pEO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQztBQUNEO0lBQ0EsU0FBUyxXQUFXLENBQUMsRUFBRSxFQUFFO0lBQ3pCLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksWUFBWSxDQUFDLEVBQUUsRUFB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Q0E7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckY7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0lBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPO0lBQ3hDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTztJQUN4QyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU87SUFDeEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELEtBQUs7SUFDTDs7SUM1Rk8sU0FBUyxj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QUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDaEIsU0FBUztBQUNUO0FBQ0E7SUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFO0lBQ2pCLFFBQVEsS0FBSyxJQUFJLENBQUMs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SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMxQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM1QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsU0FBUztBQUNUO0FBQ0E7SUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCO0lBQ0EsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7SUFDakQsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDeEMsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQ7SUFDQSxRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QjtJQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJQyxHQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdEO0lBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUM5QjtJQUNBLFFBQVEsSUFBSSxD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QUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENB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WUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0M7SUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWjtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUN0QixZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQy9CLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFD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LFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsV0FBVyxHQUFHO0lBQzNCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FB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UUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUs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LE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDN0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDdEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUMxRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDdEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsaUJBQWlCLEdBQUc7SUFDakMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNB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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3ZDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDM0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxF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QUMsTUFBTSxDQUFDLEtBQUssQ0FBQ0EsT0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkc7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3ZDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDM0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxF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TUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENB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QUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDbEQ7SUFDQSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUN0RDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUM3QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFdBQVcsR0FBRztJQUMzQixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsaUJBQWlCLEdBQUc7SUFDakMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3RCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUyxtQkFBbUIsR0FBRztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDdkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsU0FBUyxHQUFHO0lBQ3pCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM3QyxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsU0FBUyxHQUFHO0lBQ3pCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDekMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ3pDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUN6QyxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsUUFBUSxHQUFHO0lBQ3hCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDeEMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ3pDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUN6QyxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsT0FBTyxHQUFHO0lBQ3ZCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsT0FBTztJQUNyQixnQkFBZ0IsQ0FBQyxDQUFDLE9BQU87SUFDekIsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxpQkFBaUI7SUFDakIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9DLGFBQWE7SUFDYixTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsV0FBVyxHQUFHO0lBQzNCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0I7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakIsWUFBWSxDQUFDLENBQUMsT0FBTztJQUNyQixnQkFBZ0IsQ0FBQyxDQUFDLE9BQU87SUFDekIsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDbkQsaUJBQWlCO0lBQ2pCLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO0lBQy9DLGFBQWE7SUFDYixTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsWUFBWSxHQUFHO0lBQzVCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzNDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFV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QUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEU7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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QyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEU7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFT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QUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDaEUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDaEU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUN4RDtJQUNBLFlBQVksQ0FBQyxD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RUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQ3JEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7SUFDL0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDekUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDekUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDM0QsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsYUFBYSxHQUFHO0lBQzdCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENB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Q0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUs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QUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzdEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDdkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3RELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFNBQVMsQ0FBQztBQUNWO0lBQ0EsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsYUFBYSxHQUFHO0FBQzdCO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FB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QUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM3RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwRCxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxjQUFjLEdBQUc7QUFDOUI7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQzVELFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQjtJQUNoQixvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pGLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLFlBQVksQ0FBQyxDQUFDLEVBQUU7SUFDaEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQjtJQUNoQixvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pGLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxpQkFBaUI7SUFDakIsYUFBYTtBQUNiO0FBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7SUFDcEIsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELG9CQUFvQjtJQUNwQix3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9GLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3BDLHFCQUFxQjtJQUNyQixpQkFBaUI7SUFDakIsYUFBYTtBQUNiO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUM7SUFDN0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM3RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ3ZEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEQsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFFBQVEsR0FBRztJQUN4QixRQUFRLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFX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LENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2hFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEYsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLFNBQVMsY0FBYyxHQUFHO0lBQzlCLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVB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SUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSztJQUNoQyxRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDdEUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRztJQUNsQixRQUFRO0lBQ1IsWUFBWSw4RUFBOEU7SUFDMUYsWUFBWSw4RUFBOEU7SUFDMUYsU0FBUyxDQUFDO0lBQ1YsWUFBWSw2RUFBNkU7SUFDekYsWUFBWSw2RUFBNkU7SUFDekYsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSztJQUMvQixRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDeEUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRztJQUNuQixRQUFRO0lBQ1IsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUyxDQUFDO0lBQ1YsWUFBWSxFQUFFO0lBQ2QsWUFBWSxFQUFFO0lBQ2QsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSztJQUNoQyxRQUFRO0lBQ1IsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsWUFBWSxHQUFHQSxPQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDekUsU0FBUztJQUNULEtBQUssQ0FBQztBQUNOO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9CLFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzFELFFBQVEsR0FBR0EsT0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENB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QUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDekIsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakQ7QUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDcEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7SUFDekQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ2pGO0FBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7QUFDakQ7SUFDQTtJQUNBO0FBQ0E7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0lBQ0EsSUFBSSxTQUFTLG1CQUFtQixHQUFHO0lBQ25DLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkU7SUFDQSxRQUFRLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxF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QUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7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QUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEM7SUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQztJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFB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LENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxRTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0FBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25EO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtBQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUU7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7QUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0FBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtBQUNBO0lBQ0EsU0FBUyxDQUFDO0lBQ1YsS0FBSztBQUNMO0FBQ0E7SUFDQSxJQUFJLFNBQVMsZUFBZSxHQUFHO0lBQy9CLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0lBQ0EsUUFBUSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0FBQ0E7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcs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QUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxN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TSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEQsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ2pCO0FBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6RCxZQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFlBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFlBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVFO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQztJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0M7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUs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QUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN2QixJQUFJLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQy9CO0lBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN2QjtBQUNBO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDL0Q7SUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEYsSUFBSSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0Q7SUFDQSxJQUFJUCxVQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25DO0lBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDM0QsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxLQUFLLENBQUMsQ0FBQztJQUNQLElBQUksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdEO0FBQ0E7SUFDQSxJQUFJLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFD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SyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDM0QsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDM0QsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7SUFDM0QsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0lBQzNELEtBQUssQ0FBQyxDQUFDO0FBQ1A7SUFDQSxJQUFJLE1BQU0sY0FBYyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDekMsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtJQUMzRCxRQUFRLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxF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LENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBO0lBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztBQUNqQjtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQztBQUN2RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzlDO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFB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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7QUFDdkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ3hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN4RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElB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QUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtJQUNBLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkU7SUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87QUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUMzRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQjtJQUNBLElBQUksU0FBUyxZQUFZLEdBQUc7SUFDNUIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtJQUNBLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUNyRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDckQ7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDdkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ25EO0FBQ0E7SUFDQSxTQUFTLENBQUM7SUFDVixLQUFLO0lBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuQjtBQUNBO0lBQ0EsSUFBSSxTQUFTLGNBQWMsR0FBRztBQUM5QjtJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckM7QUFDQTtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RDtJQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxDQUFDLENBQUMsT0FBTztJQUNqQjtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUN4RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztJQUN0RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUN0RDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwRDtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDdEQsU0FBUyxDQUFDO0lBQ1YsS0FBSztJQUNMLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckI7QUFDQTtJQUNBLElBQUksU0FBUyxRQUFRLEdBQUc7SUFDeEIsUUFBUSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQztJQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQztJQUNBLFFBQVEsTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixRQUFRLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLFFBQVEsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QztJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLFFBQVEsQ0FBQyxDQUFDLE9BQU87SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0lBQzFELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0FBQzFEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMs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QUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0lBQ0EsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsUUFBUSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7SUFDQSxRQUFRLENBQUMsQ0FBQyxPQUFPO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ3JELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3BEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ25ELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbkQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNwRDtJQUNBO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM1RSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNuRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7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QUUsRUFBRSxFQUFFLENBQUM7SUFDbEQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEQ7SUFDQTtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xEO0lBQ0E7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRDtJQUNBO0lBQ0Es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LENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRjtJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxRQUFRLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLFFB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QUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0lBQzNELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQzlELFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7QUFDcEQ7SUFDQSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUMzRCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUM5RCxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO0FBQ3BEO0lBQ0EsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDM0QsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUQsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNwRDtJQUNBLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxF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QUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLFNBQVMsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsU0FBUyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDbkIsTUFBTTtJQUNOLENBQUM7QUFDRDtJQUNPLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUN4QixJQUFJO0lBQ0osUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLEVBQUUsSUFBSSxDQUFDO0lBQzdELFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxTQUFTLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNO0lBQ04sQ0FBQztBQUNEO0lBQ08sU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtJQUN4QixRQUFRLE1B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QUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDO0lBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDbEMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDMUQsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHRCxVQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUVDLEdBQVUsQ0FBQyxDQUFDO0lBQzFELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzVCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcs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Q0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDYixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtBQUNBO0lBQ0EsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNaLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ2QsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDYixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNYLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDWCxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSztBQUNMO0lBQ0EsSUFBSSxZQUFZLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNiLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNkLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtJQUNkLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDaEIsUUFBUSxPQUFPLElBQUks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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xEO0lBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixLQUFLO0FBQ0w7SUFDQSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ25CLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLFFBQVEsT0FBTyxJQUFJLENB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LElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RHLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ1osUUFBUSxJQUFJLENBQUMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ25ELFlBQVksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxHQUFHLENBQUMs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Q0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xEO0lBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsS0FBSztBQUNMO0lBQ0EsSUFBSSxHQUFHLENBQUMs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Q0MsQ0FBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsU0FBUztJQUNULFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEcsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsS0FBSztBQUNMO0lBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNaLFFBQVEsSUFBSSxDQUFDLFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNuRCxZQUFZLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxZQUFZLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxZQUFZLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRTtJQUNsQixRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLEtBQUs7QUFDTDtJQUNBOztJQzlMZSxNQUFNLFNBQVMsQ0FBQztBQUMvQjtJQUNBLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO0lBQ3BELFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDMUIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxJQUFJLFFBQVEsRUFBRTtJQUN0QixZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUdELFFBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hGLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLEtBQUs7QUFDTDtJQUNBLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDbkIsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0UsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtJQUN6QixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FB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QUFRLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQzdCLFFBQVEsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsS0FBSztBQUNMO0lBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUN2QixRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDekMsWUFBWSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsWUFBWSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsU0FBUyxNQUFNLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDaEQsWUFBWSxNQUFNLENB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LENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsWUFBWSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxZQUFZLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsWUFBWSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDNUI7SUFDQSxZQUFZLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckQsWUFBWSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUs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SUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEIsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0csSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxD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QU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQztJQUNmLElBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQztJQUNmLElBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRDtJQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEM7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRyxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRyxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNsRCxJQUFJLElBQUksV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFF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RUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0U7SUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDekIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMzQyxZQUFZLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLFlBQVksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEM7SUFDQSxRQUFRLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRTtJQUM5QixZQUFZLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxZQUFZLFVBQVUsQ0FBQyxTQUFTLENBQUMs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QyxVQUFVLENBQUMsQ0FBQztJQUNsRyxRQUFRLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsUUFBUSxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsUUFBUSxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDL0IsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEcsUUFBUSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekM7SUFDQSxRQUFRLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0lBQ0E7O0lDMUlBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQU9BO0lBQ2UsZUFBZSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzNHO0lBQ0EsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTU4sV0FBd0IsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlHLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTUssWUFBb0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRTtJQUMxQyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNwRCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU1YLGFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQztJQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsTUFBTXFELGFBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMxRixJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUM1QjtJQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsTUFBTXhFLFlBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkU7SUFDQSxJQUFJLFdBQVcsQ0FBQyxHQUFHO0lBQ25CLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNyQixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUs7SUFDaEMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSztJQUNoQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUs7SUFDaEMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7QUFDakM7SUFDQTtJQUNBLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQ7SUFDQSxJQUFJLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFELElBQUksWUFBWSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDcEMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzFDLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDL0IsUUFBUSxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsUUFBUSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtJQUNqRCxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEQsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLGdCQUFnQixDQUFDLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ3hFLGdCQUFnQixDQUFDLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNwRixhQUFhO0lBQ2IsWUFBWSxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO0lBQ3BELGdCQUFnQixDQUFDLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVELGFBQWE7SUFDYixTQUFTO0lBQ1QsUUFBUSxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksQ0FBQ2tELFdBQWdCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDckUsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDakcsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7SUFDL0UsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDMUYsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM1RCxRQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNoRyxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNqRixZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7SUFDVCxLQUFLO0FBQ0w7QUFDQTtJQUNBO0lBQ0EsSUFBSSxJQUFJLElBQUksRUFBRTtJQUNkLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEcsWUFBWSxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdEQsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsTUFBTWpCLGFBQTBCLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkYsSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QjtJQUNBO0lBQ0EsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMzQixJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNCLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0IsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMzQixJQUFJLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsSUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELElBQUksTUFBTXdDLFdBQXFCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZEO0lBQ0E7SUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlDLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDdEMsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxNQUFNVCxXQUF3QixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFO0lBQ0E7SUFDQSxJQUFJLE1BQU1BLFdBQXdCLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0U7SUFDQTtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0MsSUFBSSxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtJQUN2QyxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsRSxRQUFRLE1BQU0sU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztJQUNMLElBQUksSUFBSSxLQUFLLENBQUM7SUFDZCxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RCxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pGLElBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRixJQUFJLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLElBQUksTUFBTS9DLGlCQUE4QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxJQUFJLE1BQU1DLGVBQTRCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQ7SUFDQTtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0MsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdkQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbEUsUUFBUSxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLElBQUksS0FBSyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixJQUFJLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksTUFBTUQsaUJBQThCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTUMsZUFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRDtJQUNBO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxJQUFJLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7SUFDaEMsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbEUsUUFBUSxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU04QyxXQUF3QixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFO0lBQ0E7SUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlDLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtJQUNqQyxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNuRSxRQUFRLE1BQU0sU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztJQUNMLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RTtJQUNBO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5QyxJQUFJLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7SUFDakMsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDbkUsUUFBUSxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU1BLFdBQXdCLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0U7SUFDQSxJQUFJLE1BQU1VLGNBQXdCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuRTtJQUNBLElBQUksTUFBTSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUIsSUFBSSxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixJQUFJLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVCO0lBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQjtJQUNBLElBQUksZUFBZSxNQUFNLENBQUMsRUFBRSxFQUFFO0lBQzlCLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLE1BQU0sQ0FBQyxFQUFFLEVBQUU7SUFDOUIsUUFBUSxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksU0FBUyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3pDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEUsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6RSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFFLFFBQVEsSUFBSSxDQUFDeEIsV0FBZ0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxRSxRQUFRLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLEtBQUs7QUFDTDtBQUNBO0lBQ0E7O0lDM05BO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVFBLE1BQU0sU0FBUyxHQUFHSSxXQUFjLENBQUM7QUFHakM7QUFDQTtBQUNBO0lBQ2UsZUFBZSxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUU7QUFDckc7SUFDQSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ1gsSUFBSSxNQUFNdkMsbUJBQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQjtJQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNVSxXQUF3QixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkYsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNSyxZQUFvQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFO0lBQ3BDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3BELEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTVgsYUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEM7SUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLE1BQU1xRCxhQUF1QixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekU7SUFDQSxJQUFJLE1BQU0saUJBQWlCLEdBQUd6RCxtQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3pELFFBQVEsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxRQUFRLE1BQU0sU0FBUyxHQUFHNEQsV0FBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzlEO0lBQ0EsUUFBUSxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLFFBQVEsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRDtJQUNBLFFBQVEsSUFBSSxDQUFDekIsV0FBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ2pFLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFlBQVksT0FBTyxLQUFLLENBQUM7SUFDekIsU0FBUztBQUNUO0lBQ0EsUUFBUSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRDtJQUNBLFFBQVEsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RixRQUFRLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUN6QixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsQ0FBQztJQUM1RixZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7QUFDVDtJQUNBLFFBQVEsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RixRQUFRLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUN6QixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLDZDQUE2QyxDQUFDLENBQUMsQ0FBQztJQUNyRixZQUFZLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtJQUN6QixZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU1SLG1CQUF3QixDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekYsWUFBWSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxZQUFZLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsWUFBWSxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN2RyxZQUFZLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ25FLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsZ0JBQWdCLE9BQU8sS0FBSyxDQUFDO0lBQzdCLGFBQWE7SUFDYixZQUFZLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ3JFLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsZ0JBQWdCLE9BQU8sS0FBSyxDQUFDO0lBQzdCLGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLE1BQU0sa0JBQWtCLEdBQUczQixtQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsVUFBVSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRDtJQUNBLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pEO0lBQ0EsUUFBUSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNoQyxLQUFLO0FBQ0w7QUFDQTtJQUNBLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU1VLFdBQXdCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RyxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU1LLFlBQW9CLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RTtJQUNBLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRTtJQUN4QyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN4RCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDMUMsUUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekMsV0FBVyxDQUFDQSxRQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFdBQVcsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BDLFdBQVcsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BDLElBQUk7SUFDSixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMvRCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUs7SUFDdkMsV0FBVyxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0MsV0FBVyxRQUFRLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDbEQsSUFBSTtJQUNKLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0QsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDMUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDMUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0QsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtJQUNqRCxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7SUFDTCxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRixJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxhQUFhLEdBQUcsTUFBTW9GLGFBQXVCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRixJQUFJLElBQUksQ0FBQ3RCLFdBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDbkUsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDckUsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0FBQ0w7SUFDQTtJQUNBLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDaEUsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDckUsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3RELFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNYLElBQUksRUFBRSxHQUFHLE1BQU0wQixjQUEyQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDYixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMxRSxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxHQUFHLE1BQU1BLGNBQTJCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtJQUNiLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3BFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0EsSUFBSSxFQUFFLEdBQUcsTUFBTUEsY0FBMkIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ2IsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDL0QsUUFBUSxPQUFPLEtBQUssQ0FBQztJQUNyQixLQUFLO0FBQ0w7SUFDQSxJQUFJLEVBQUUsR0FBRyxNQUFNQSxjQUEyQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDYixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNoRSxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBLElBQUksRUFBRSxHQUFHLE1BQU1BLGNBQTJCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtJQUNiLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsT0FBTyxLQUFLLENBQUM7SUFDckIsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLEVBQUUsR0FBRyxNQUFNLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtJQUNuQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBO0lBQ0EsSUFBSSxFQUFFLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUM1QixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtJQUNuQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0lBQ3JCLEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQzlCLFVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNqRjtJQUNBLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QjtJQUNBLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM1RCxRQUFRLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDQSxVQUFlLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtJQUN6QixZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRVksYUFBa0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLFNBQVM7SUFDVCxLQUFLO0lBQ0wsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDekQ7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEM7SUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCO0FBQ0E7SUFDQSxJQUFJLGVBQWUsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7SUFDdkgsUUFBUSxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3JDLFFBQVEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLFFBQVEsTUFBTXBDLHNCQUFtQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0UsUUFBUSxNQUFNQSxzQkFBbUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdFO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN4QjtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDMUQ7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRTtJQUN0RCxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzVELFlBQVksTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxZQUFZLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHcUMsZ0JBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0lBQ0EsWUFBWSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFlBQVksTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRDtJQUNBLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLFNBQVM7SUFDVCxRQUFRLE1BQU1wQyxjQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsTUFBTUEsY0FBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQztJQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ3RDO0lBQ0EsUUFBUSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELFFBQVEsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDO0lBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztJQUNwQixLQUFLO0FBQ0w7SUFDQSxJQUFJLGVBQWUsVUFBVSxHQUFHO0lBQ2hDLFFBQVEsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNyQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzVCLFFBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEdBQUcsTUFBTUUsV0FBd0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdHO0lBQ0EsUUFBUSxJQUFJLE1BQU0sR0FBRyxJQUFJbEYsV0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsUUFBUSxNQUFNLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdxSCxZQUFpQixDQUFDRCxnQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxTQUFTO0lBQ1QsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJN00sUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2hELFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLFNBQVM7SUFDVCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEU7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEIsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFO0lBQzlELFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEU7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLFlBQVksTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0U7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxZQUFZLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRSxZQUFZLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0Q7SUFDQSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixTQUFTO0FBQ1Q7SUFDQTtBQUNBO0lBQ0EsUUFBUSxNQUFNLEdBQUcsTUFBTSxFQUFFLENB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QUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0lBQ0E7SUFDQSxJQUFJLE1BQU1ULFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7SUFDQTtJQUNBLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RDtJQUNBO0lBQ0EsSUFBSSxNQUFNQSxXQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlEO0lBQ0E7SUFDQSxJQUFJLE1BQU1BLFdBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7SUFDQTtJQUNBLElBQUksTUFBTUEsV0FBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RDtJQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsSCxJQUFJLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsSDtJQUNBLElBQUksTUFBTVUsY0FB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QUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRDtJQUNBO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLElBQUksRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQztJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDM0I7SUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxD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QUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNqRSxJQUFJLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7SUFDQSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDL0I7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQjtBQUNBO0lBQ0EsSUFBSSxNQUFNLGNBQWMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxPQUFPLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDOUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QztJQUNBO0lBQ0E7QUFDQTtJQUNBLElBQUksTUFBTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBSSxNQUFNLE9BQU8sR0FBRyxJ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QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxTQUFTO0FBQ1Q7SUFDQSxRQUFRLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDakQsWUFBWSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLFlBQVksTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQTtJQUNBLFlBQVksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixZQUFZLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsWUFBWSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lB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LElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkcsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxRQUFRLE1BQU0saUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELFFBQVEsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFFBQVEsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxRQUFRLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLFFBQVEsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxD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QUFPLEVBQUUsVUFBVSxFQUFFO1NBQzVELE9BQU8sVUFBVSxPQUFPLEVBQUU7SUFDOUIsT0FBTSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDM0UsTUFBSyxDQUFDO0lBQ04sSUFBRyxDQUFDO0FBQ0o7T0FDRSxJQUFJLHVCQUF1QixHQUFHLFVBQVUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7SUFDckUsS0FBSSxPQUFPLFVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRTtJQUMxQyxPQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNqRixNQUFLLENBQUM7SUFDTixJQUFHLENBQUM7QUFDSjtPQUNFLElBQUksd0JBQXdCLEdBQUcsVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtTQUNsRSxPQUFPLFVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1dBQzFDLE9BQU8sT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUN0RixNQUFLLENBQUM7SUFDTixJQUFHLENBQUM7QUFDSjtPQUNFLElBQUksc0JBQXNCLEdBQUcsVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtTQUNoRSxPQUFPLFVBQVUsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO1dBQzVDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFV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RSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNyRixLQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7V0FDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7V0FDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQ7SUFDQSxPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsT0FBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakI7SUFDQSxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEMsT0FBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdB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O0lBQ25CLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFO0lBQ3JCLFFBQVEsT0FBTztJQUNmLFlBQVksRUFBRSxDQUFDLElBQUk7SUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFNBQVMsQ0FBQztJQUNWLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFO0lBQ3JCLFFBQVEsT0FBTztJQUNmLFlBQVksRUFBRSxDQUFDLElBQUk7SUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxTQUFTLENBQUM7QUFDVjtJQUNBLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDckMsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xCO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxRQUFRLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQztJQUNBLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQjtJQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEM7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtJQUNBLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoQixRQUFRLElBQUksQ0FBQyxFQUFFO0lBQ2YsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQzVDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEI7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0I7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFFBQVEsSUFBSSxDQUFDLEVBQUU7SUFDZixZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDbkQsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEM7SUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNsQjtJQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckM7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0I7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0MsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3QyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdDO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoQixRQUFRLElBQUksQ0FBQyxFQUFFO0lBQ2YsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsU0FBUztBQUNUO0lBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEtBQUs7SUFDTDs7SUNqSk8sTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7SUFDcEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDOUIsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDakMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7SUFDcEMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFOztJQ2R0QztJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFHQTtJQUNPLE1BQU0sVUFBVSxDQUFDO0lBQ3hCLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQzdDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7SUFDakMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLEtBQUs7QUFDTDtJQUNBLElBQUksYUFBYSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDeEQsUUFBUSxJQUFJLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZEO0lBQ0EsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLHFCQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ3ZELFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM1QixRQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUU7SUFDekMsWUFBWSxJQUFJN0MsV0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztB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RCxRQUFRLElBQUksYUFBYSxHQUFHLE1BQU0sR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDO0FBQzVEO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDckIsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEI7SUFDQSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ3ZCO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzNDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDN0I7SUFDQSxZQUFZLElBQUksTUFBTSxHQUFHLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLGFBQWEsR0FBRyxXQUFXLENBQUM7SUFDMUYsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoRztJQUNBLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFR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QUFDLElBQUksRUFBRSxHQUFHLElBQUlBLFdBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkcsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEU7SUFDQTtJQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkU7SUFDQTtJQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEM7SUFDQTtJQUNBLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QjtJQUNBO0lBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDN0IsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzNCLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzQixRQUFRLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsRSxRQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUlBLFdBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkcsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEU7SUFDQTtJQUNBLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0U7SUFDQTtJQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QjtJQUNBO0lBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0lBQ0E7SUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUM3QixLQUFLO0FBQ0w7SUFDQTtJQUNBLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtJQUN0QixRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDM0IsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEMsUUFBUSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDNUM7SUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEU7SUFD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LFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDMUIsS0FBSztBQUNMO0lBQ0EsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDdEMsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLFlBQVksTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkYsU0FBUztBQUNUO0lBQ0EsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3RCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdEQsWUFBWSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEM7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRztJQUNqQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFB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LEVBQUU7SUFDNUIsWUFBWSxPQUFPLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0YsU0FBUztBQUNUO0lBQ0E7SUFDQTtJQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEYsUUFBUSxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ3BELFlBQVksSUFBSUEsV0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9GO0lBQ0E7SUFDQSxRQUFRLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRDtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMxQyxZQUFZLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BDO0lBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFlBQVksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFNBQVM7QUFDVDtJQUNBLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFB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SSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQy9ELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9FO0lBQ0EsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RyxJQUFJLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDM0gsSUFBSSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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RUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLFFBQVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUU7SUFDQTtJQUNBLFFBQVEsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO0lBQzNELFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ25FLFNBQVM7SUFDVCxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtJQUMzRCxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNuRSxTQUFTO0lBQ1QsUUFBUSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDM0QsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDbkUsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxNQUFNLEdBQUc7SUFDNUI7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzFFLFFBQVEsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNCO0lBQ0EsUUFBUSxV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Q3RDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUM7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQ7SUFDQTtJQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakcsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUM7SUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRDtJQUNBO0lBQ0EsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0lBQ0E7SUFDQSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7QUFDL0Q7SUFDQSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFNBQVM7QUFDVDtJQUNBO0lBQ0E7SUFDQSxRQUFRLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7SUFDQTtJQUNBO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsRCxZQUFZLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEM7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsU0FBUztBQUNUO0lBQ0E7SUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNCO0lBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbEQsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDL0QsU0FBUztBQUNUO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFB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Q0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0U7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFlBQVksTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsWUFBWSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFlBQVksTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRztJQUNBLFlBQVksTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsWUFBWSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxZQUFZLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFlBQVksTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsWUFBWSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxZQUFZLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELFlBQVksTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsWUFBWSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRDtJQUNBLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0lBQ0EsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLFlBQVksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEgsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFlBQVksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxZQUFZLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25IO0lBQ0EsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQzdCLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDbkQsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUM3RDtJQUNBLGdCQUFnQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckU7SUFDQSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsYUFBYTtBQUNiO0lBQ0E7SUFDQSxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztJQUNBLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0lBQ0E7SUFDQSxZQUFZLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QjtJQUNBLFlBQVksSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRCxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFV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QUFDLElBQUlBLFdBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRyxRQUFRLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSUEsV0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25HO0lBQ0EsUUFBUSxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxRQUFRLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixRQUFRLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRztJQUNBO0lBQ0EsUUFBUSxXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRTtJQUNBO0lBQ0E7SUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFB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QUc7SUFDNUIsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQ7SUFDQTtJQUNBLFFBQVEsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7SUFDQSxRQUFRLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLFFBQVEsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEQsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFGO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcs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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFNBQVM7QUFDVDtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUc7SUFDOUIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMxQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsU0FBUyxDQUFDO0FBQ1Y7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFO0lBQ3BCLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ25ELFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDM0MsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUM5QixRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25ELFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxZQUFZLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEU7SUFDQTtJQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25GO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUQsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzNDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRTtJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDM0MsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5RSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzNDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQztJQUNBLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsUUFBUSxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUlBLFdBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRztJQUNBLFFBQVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0MsUUFBUSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QztJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRCxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0lBQ0EsUUFBUSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQjtJQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsUUFBUSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLFNBQVMsVUFBVSxHQUFHO0lBQzFCLFFBQVEsV0FBVyxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUY7SUFDQSxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELFFBQVEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckYsUUFBUSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLFFBQVEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRixRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFB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QUFLO0lBQ0w7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsSUFBSSxJQUFJLE1BQU0sRUFBRTtJQUNoQixRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSztBQUNMO0lBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksSUFBSSxNQUFNLEVBQUU7SUFDaEIsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBSSxJQUFJLE1BQU0sRUFBRTtJQUNoQixRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELEtBQUs7QUFDTDtJQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksSUFBSSxNQUFNLEVBQUU7SUFDaEIsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU1DLGdCQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRjtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUU7SUFDaEIsUUFBUSxJQUFJLEdBQUcsRUFBRTtJQUNqQixZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsU0FBUyxNQUFNO0lBQ2YsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLFNBQVM7SUFDVCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNEO0FBQ0E7SUFDQSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQ3ZDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDRDtJQUNBLFNBQVNGLGNBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2pDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ25CLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEM7SUFDQSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNEO0lBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQ3pDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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R0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxLQUFLO0lBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7QUFDRDtJQUNBLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDdkQsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEI7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkQ7SUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0UsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDO0lBQ0EsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QztJQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRDtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0lBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7QUFDRDtJQUNBLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDdEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QjtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0I7SUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQ7SUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RixJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RjtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRTtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RDtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0U7SUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZHLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRjtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRTtJQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMzQixJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDO0lBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckQ7SUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztBQUNEO0lBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUNyRCxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7SUFDQSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNEO0lBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO0lBQ2xELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RDtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8s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QUMsR0FBRztJQUN4QixJQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ3hCO0lBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDcEIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNyQyxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNoRCxRQUFRLE1BQU0sR0FBRyxNQUFNLEdBQUcwRyxNQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQyxFQUFFQSxNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsRUFBRUEsTUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEVBQUVBLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCOztJQ2hFQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7Ozs7Ozs7Ozs7O0lDakJBO0lBQ0E7QUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNPLFNBQVMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRTtJQUN6RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0Q7SUFDTyxTQUFTLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDN0YsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFF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QUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RixRQUFRLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixRQUFRLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxD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QixVQUFVLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsZ0JBQWdCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsYUFBYSxNQUFNO0lBQ25CLGdCQUFnQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDdEMsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMxRSxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5RSxhQUFhO0FBQ2I7SUFDQSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0lBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQzdELGdCQUFnQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsYUFBYTtJQUNiLFNBQVM7QUFDVDtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUs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Q0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUM5RDtJQUNBO0lBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSUEsV0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLFFBQVEsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RztJQUNBLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLE9BQU8sQ0FBQyxNQUFNLEVBQUU7SUFDbkM7SUFDQTtJQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMs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T0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQ2pDLElBQUksT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QztJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUNuQjtJQUNBLElBQUksT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzFCLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QztJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxNQUFNLEVBQUUsQ0FBQztJQUNuQixJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkM7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxJQUFJLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFDbkI7SUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxQixJQUFJLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQztJQUM1QixJQUFJLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QztJQUNBLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzlCO0lBQ0E7SUFDQSxJQUFJLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUMzQjtJQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDNUMsUUFBUSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlCO0lBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUQsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDNkMsUUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsSUFBSSxPQUFPO0lBQ1gsUUFBUSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLFFBQVEsYUFBYSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztJQUN0RCxLQUFLLENBQUM7QUFDTjtJQUNBLElBQUksZUFBZSxrQkFBa0IsR0FBRztJQUN4QyxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMzRCxRQUFRLE1BQU0sYUFBYSxHQUFHLE1BQU0yQyxXQUF3QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUM5RztJQUNBO0lBQ0E7SUFDQSxRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0lBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsRCxZQUFZLElBQUksTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9HO0lBQ0E7SUFDQSxZQUFZLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDbEMsWUFBWSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN4QixZQUFZLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEUsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3hCLFlBQVksTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLFlBQVksTUFBTSxJQUFJLEdBQUcsQ0FBQztJQUMxQixZQUFZLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN0RTtJQUNBO0lBQ0EsWUFBWSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsWUFBWSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQ7SUFDQTtJQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hGO0lBQ0EsWUFBWSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxTQUFTO0lBQ1QsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRixRQUFRLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsS0FBSztBQUNMO0lBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDN0IsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEQsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUU7SUFDeEIsWUFBWSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLFNBQVMsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO0lBQ3JDLFlBQVksTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUM5QyxZQUFZLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDbkUsU0FBUztBQUNUO0lBQ0EsUUFBUSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDdkIsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLE1BQU0sR0FBRztJQUM1QjtJQUNBLFFBQVEsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3JDLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsU0FBUztBQUNUO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN4RSxRQUFRLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztBQUN2QztJQUNBO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDN0QsUUFBUSxNQUFNLFNBQVMsRUFBRSxDQUFDO0FBQzFCO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE1BQU0sU0FBUyxFQUFFLENBQUM7QUFDMUI7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3ZFLFFBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDO0lBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQjtJQUNBLFFBQVEsZUFBZSxzQkFBc0IsR0FBRztJQUNoRCxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN2RTtJQUNBLFlBQVksT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJeEYsV0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLFlBQVksT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsWUFBWSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUlBLFdBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQztJQUNBO0lBQ0EsWUFBWSxNQUFNLFFBQVEsR0FBRyxNQUFNd0YsV0FBd0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDekcsWUFBWSxNQUFNLFFBQVEsR0FBRyxNQUFNQSxXQUF3QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN6RyxZQUFZLE1BQU0sUUFBUSxHQUFHLE1BQU1BLFdBQXdCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pHO0lBQ0E7SUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3hELGdCQUFnQixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLGdCQUFnQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELGFBQWE7QUFDYjtJQUNBO0lBQ0EsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6RCxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6RCxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekQ7SUFDQSxZQUFZLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELFlBQVksT0FBTyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsWUFBWSxPQUFPLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RDtJQUNBO0lBQ0EsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDNUQsWUFBWSxXQUFXLENBQUMsQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RixZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RCxZQUFZLFdBQVcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZGLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVELFlBQVksV0FBVyxDQUFDLENBQUMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkY7SUFDQTtJQUNBLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELFlBQVksV0FBVyxDQUFDLENBQUMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELFlBQVksV0FBVyxDQUFDLENBQUMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELFlBQVksV0FBVyxDQUFDLENBQUMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlGO0lBQ0E7SUFDQSxZQUFZLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0lBQzNELGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdkUsYUFBYTtJQUNiLFlBQVksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7SUFDM0QsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN2RSxhQUFhO0lBQ2IsWUFBWSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtJQUMzRCxnQkFBZ0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3ZFLGFBQWE7SUFDYixTQUFTO0FBQ1Q7SUFDQSxRQUFRLGVBQWUsU0FBUyxHQUFHO0lBQ25DLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZHLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDdEc7SUFDQSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSXhGLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hGLFlBQVksV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RixZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSUEsV0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEYsWUFBWSxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUlBLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hGLFlBQVksV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RjtJQUNBO0lBQ0EsWUFBWSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzVILFlBQVksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUM1SCxZQUFZLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDNUgsWUFBWSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzVILFlBQVksTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUM1SDtJQUNBO0lBQ0EsWUFBWSxNQUFNLG1CQUFtQixHQUFHLE1BQU13RixXQUF3QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUN2SCxZQUFZLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hGO0lBQ0E7SUFDQSxZQUFZLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSXhGLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNwRSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMxRCxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUg7SUFDQTtJQUNBLGdCQUFnQixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0lBQ0EsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELGdCQUFnQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELGdCQUFnQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRDtJQUNBO0lBQ0EsZ0JBQWdCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDakMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZELG9CQUFvQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNuRjtJQUNBLG9CQUFvQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RSxvQkFBb0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDekU7SUFDQSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsaUJBQWlCO0FBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekM7SUFDQTtJQUNBLGdCQUFnQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BEO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekM7SUFDQTtJQUNBLGdCQUFnQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGO0lBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUMsYUFBYTtBQUNiO0lBQ0EsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqRjtJQUNBO0lBQ0EsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDN0QsWUFBWSxXQUFXLENBQUMsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RjtJQUNBLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdFO0lBQ0E7SUFDQSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3RCxZQUFZLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0E7SUFDQSxZQUFZLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDcEUsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxnREFBZ0QsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvSixhQUFhO0FBQ2I7SUFDQSxZQUFZLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5QixTQUFTO0FBQ1Q7SUFDQSxRQUFRLGVBQWUsU0FBUyxHQUFHO0lBQ25DLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RCxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtJQUNBLFlBQVksV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDaEQ7SUFDQTtJQUNBLFlBQVksSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtJQUNwRSxnQkFBZ0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3hFLGFBQWE7SUFDYixTQUFTO0lBQ1QsS0FBSztBQUNMO0lBQ0EsSUFBSSxlQUFlLE1BQU0sR0FBRztJQUM1QjtJQUNBO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDekUsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFEO0lBQ0E7SUFDQSxRQUFRLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0M7SUFDQTtJQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0MsWUFBWSxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFNBQVM7QUFDVDtJQUNBO0lBQ0EsUUFBUSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0lBQ0EsUUFBUSxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwRCxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RjtJQUNBO0lBQ0EsUUFBUSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxRQUFRLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JELFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFGO0lBQ0E7SUFDQSxRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM1RCxRQUFRLE1BQU0sUUFBUSxFQUFFLENBQUM7QUFDekI7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdELFFBQVEsTUFBTSxTQUFTLEVBQUUsQ0FBQztJQUMxQixRQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM3RCxRQUFRLE1BQU0sU0FBUyxFQUFFLENBQUM7QUFDMUI7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdELFFBQVEsTUFBTSxTQUFTLEVBQUUsQ0FBQztBQUMxQjtJQUNBO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdkUsUUFBUSxJQUFJLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUM7SUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCO0lBQ0EsUUFBUSxlQUFlLFFBQVEsR0FBRztJQUNsQyxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNuRTtJQUNBLFlBQVksSUFBSSxNQUFNLEdBQUcsSUFBSUEsV0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELFlBQVksSUFBSSxNQUFNLEdBQUcsSUFBSUEsV0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0lBQ0E7SUFDQSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQztJQUNBO0lBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNCLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdEQsZ0JBQWdCLElBQUksTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkgsZ0JBQWdCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEM7SUFDQTtJQUNBO0lBQ0EsZ0JBQWdCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RDtJQUNBLGdCQUFnQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELGdCQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsZ0JBQWdCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RDtJQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0lBQ0E7SUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLGdCQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3REO0lBQ0EsZ0JBQWdCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RyxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RDtJQUNBLGdCQUFnQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEcsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQ7SUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzRDtJQUNBO0lBQ0EsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuRTtJQUNBO0lBQ0EsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuRTtJQUNBO0lBQ0EsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELGFBQWE7SUFDYjtJQUNBO0lBQ0EsWUFBWSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0lBQ0E7SUFDQTtJQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdEQsZ0JBQWdCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEM7SUFDQSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckcsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLGFBQWE7SUFDYjtJQUNBLFlBQVksT0FBTyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0I7SUFDQSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUN0RCxnQkFBZ0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25FLGFBQWE7QUFDYjtJQUNBO0lBQ0EsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDNUQsWUFBWSxXQUFXLENBQUMsQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2RjtJQUNBO0lBQ0EsWUFBWSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0QsWUFBWSxXQUFXLENBQUMsQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUY7SUFDQTtJQUNBLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRztJQUNBO0lBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDL0QsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN2RSxhQUFhO0FBQ2I7SUFDQSxZQUFZLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3QixTQUFTO0FBQ1Q7SUFDQSxRQUFRLGVBQWUsU0FBUyxHQUFHO0lBQ25DLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUlBLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUlBLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMvQixZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMxRCxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUg7SUFDQSxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRDtJQUNBLGdCQUFnQixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVIO0lBQ0E7SUFDQTtJQUNBLGdCQUFnQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRixnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hEO0lBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUMsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUM7SUFDQTtJQUNBLGdCQUFnQixLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsYUFBYTtBQUNiO0lBQ0E7SUFDQSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3RCxZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pGO0lBQ0E7SUFDQSxZQUFZLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFO0lBQ0E7SUFDQSxZQUFZLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM5RCxZQUFZLFdBQVcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNGO0lBQ0E7SUFDQSxZQUFZLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRDtJQUNBO0lBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDaEUsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN4RSxhQUFhO0FBQ2I7SUFDQSxZQUFZLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5QixZQUFZLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMvQixZQUFZLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUNuQyxTQUFTO0FBQ1Q7SUFDQSxRQUFRLGVBQWUsU0FBUyxHQUFHO0lBQ25DLFlBQVksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUlBLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUlBLFdBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQ7SUFDQTtJQUNBLFlBQVksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMvQixZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMxRCxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUg7SUFDQSxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRDtJQUNBLGdCQUFnQixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELGdCQUFnQixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RztJQUNBLGdCQUFnQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1SCxnQkFBZ0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0g7SUFDQSxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLGdCQUFnQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQSxnQkFBZ0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdEO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVELGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVELGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0lBQ0EsZ0JBQWdCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFO0FBQ0E7SUFDQTtJQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRDtJQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRDtJQUNBLGdCQUFnQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRDtJQUNBLGdCQUFnQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxD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QyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELFNBQVM7QUFDVDtJQUNBLFFBQVEsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDN0IsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxTQUFTO0FBQ1Q7SUFDQSxRQUFRLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzdCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzlCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QztJQUNBO0lBQ0EsUUFBUSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RCxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxTQUFTO0FBQ1Q7SUFDQTtJQUNBLFFBQVEsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsU0FBUztBQUNUO0lBQ0E7SUFDQSxRQUFRLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQjtJQUNBO0lBQ0EsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RCxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakU7SUFDQTtJQUNBLFFBQVEsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0lBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEY7SUFDQTtJQUNBLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJQSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9FO0lBQ0E7SUFDQSxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFHLFFBQVEsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUcsUUFBUSxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRyxRQUFRLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFHLFFBQVEsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUc7SUFDQTtJQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0lBQ0EsUUFBUSxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxRQUFRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEtBQUs7QUFDTDtJQUNBLElBQUksZUFBZSxNQUFNLEdBQUc7SUFDNUIsUUFBUSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDL0Q7SUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxRQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFFBQVEs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QWtCO0lBQzFELGdCQUFnQjtJQUNoQixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUYsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRixvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLFNBQVM7QUFDVDtJQUNBLFFBQVEsZUFBZSxXQUFXLEdBQUc7SUFDckMsWUFBWSxXQUFXLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0I7SUFDNUQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLG9CQUFvQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsU0FBUztJQUNULEtBQUs7QUFDTDtJQUNBLElBQUksU0FBUywyQkFBMkIsR0FBRztJQUMzQztJQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsU0FBUztJQUNULFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QztJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0EsUUFBUSxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkU7SUFDQSxRQUFRLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRTtJQUNBLFFBQVEsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqSDtJQUNBO0lBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0M7SUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDdkIsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLFlBQVksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMs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QUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRTtJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakQsSUFBSSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RTtJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakQsSUFBSSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEY7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsSUFBSSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakQ7SUFDQSxJQUFJLElBQUksTUFBTSxF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QUFLLEVBQUUsS0FBSyxFQUFFO0lBQy9DLElBQUksT0FBT3NELFFBQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0FBQ0Q7SUFDQSxTQUFTLHNCQUFzQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7SUFDbkQsSUFBSSxPQUFPLHVCQUF1QixDQUFDLEtBQUssRUFBRUEsUUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDRDtJQUNBLFNBQVMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUMzQyxJQUFJLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQzlELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FB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LEVBQUUsQ0FBQztJQUNsQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0I7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsS0FBSztBQUNMO0lBQ0E7SUFDQSxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0lBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdkI7SUFDQTtJQUNBLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtJQUNBO0lBQ0EsSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBSSxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0lBQ0EsSUFBSSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDbkMsSUFBSSxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDLFFBQVEsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQzNCLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2pEO0lBQ0EsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0M7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFO0lBQ2hCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FB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Q0FBQyxFQUFFLEVBQUU7SUFDcEMsWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsU0FBUztBQUNUO0lBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRTtJQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDRDtJQUNBLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ2hFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RGO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUNqRTtJQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNyQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxRQUFRLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0U7SUFDQSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0Q7SUFDQSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDM0UsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekg7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztJQUNBO0lBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUYsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlGLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7SUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0SCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0SCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0SCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7SUFDQTtJQUNBLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ2pFLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0lBQ0EsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNqRSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDaEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9GLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRjtJQUNBLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELEtBQUs7QUFDTDtJQUNBLElBQUksT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0Q7SUFDQSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO0lBQ3ZELElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN4QixJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDNUI7SUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2hDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsS0FBSztJQUNMLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLEtBQUs7QUFDTDtJQUNBLElBQUksVUFBVSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JGO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFO0lBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7QUFDRDtJQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUM1RCxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEIsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hCO0lBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUM7SUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0Q7SUFDQSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUM1QyxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEI7SUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNEO0lBQ0EsZUFBZSxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDNUI7SUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO0lBQ3BDLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUN0QjtJQUNBLElBQUksT0FBTyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7QUFDRDtBQUNBO0lBQ08sU0FBUyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUU7SUFDekQsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM3QjtJQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RDtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxRQUFRLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEQsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztJQUNBLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLO0FBQ0w7SUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztBQUNEO0lBQ08sU0FBUyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ25FLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4QjtJQUNBLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xCO0lBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDakM7SUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pEO0lBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxRQUFRLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxLQUFLO0FBQ0w7SUFDQSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxRQUFRLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELFFBQVEsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7SUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQ7SUFDQSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNkOztJQ3BsQkE7SUFDQTtBQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0FBSUE7SUFDQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBR3ZFLE9BQUssQ0FBQztBQUtuQztJQUNBLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNqQixJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQy9DLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0Q7SUFDZSxlQUFlLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDakUsSUFBSSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDO0lBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFlLEtBQUssQ0FBQyxHQUFHO0lBQ3hCLElBQWUsS0FBSyxDQUFDLEdBQUc7QUFDeEI7SUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3pDLFFBQVEsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ2pELFFBQVEsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSztBQUNMO0lBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCOztJQzVEQTtJQUNBO0FBQ0E7SUFDQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0= diff --git a/build/snarkjs.min.js b/build/snarkjs.min.js index 8c921be..03f31e3 100644 --- a/build/snarkjs.min.js +++ b/build/snarkjs.min.js @@ -1,4 +1,4 @@ -var snarkjs=function(t){"use strict";const e=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];function a(t,e){return e&&10!=e?16==e?"0x"==t.slice(0,2)?BigInt(t):BigInt("0x"+t):void 0:BigInt(t)}const i=a;function o(t){const a=t.toString(16);return 4*(a.length-1)+e[parseInt(a[0],16)]}function n(t){return BigInt(t)>BigInt(e)}const c=r,d=s;function u(t){return(BigInt(t)&BigInt(1))==BigInt(1)}function g(t){let e=BigInt(t);const a=[];for(;e;)e&BigInt(1)?a.push(1):a.push(0),e>>=BigInt(1);return a}function f(t){if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(t)}function h(t,e){return BigInt(t)+BigInt(e)}function _(t,e){return BigInt(t)-BigInt(e)}function p(t){return-BigInt(t)}function m(t,e){return BigInt(t)*BigInt(e)}function w(t,e){return BigInt(t)**BigInt(e)}function L(t,e){return BigInt(t)/BigInt(e)}function b(t,e){return BigInt(t)%BigInt(e)}function A(t,e){return BigInt(t)==BigInt(e)}function y(t,e){return BigInt(t)>BigInt(e)}function C(t,e){return BigInt(t)>=BigInt(e)}function I(t,e){return BigInt(t)&BigInt(e)}function F(t,e,a,i){const o="0000000"+a.toString(16),n=new Uint32Array(t.buffer,e,i/4),l=1+(4*(o.length-7)-1>>5);for(let t=0;t>5);for(let t=0;tn[n.length-e-1]=t.toString(16).padStart(8,"0"))),a(n.join(""),16)}function v(t,e,i){i=i||t.byteLength,e=e||0;const o=new DataView(t.buffer,t.byteOffset+e,i),n=new Array(i/4);for(let t=0;t>=BigInt(1)}return a},bits:g,toNumber:f,toArray:function(t,e){const a=[];let i=BigInt(t);for(e=BigInt(e);i;)a.unshift(Number(i%e)),i/=e;return a},add:h,sub:_,neg:p,mul:m,square:function(t){return BigInt(t)*BigInt(t)},pow:w,exp:function(t,e){return BigInt(t)**BigInt(e)},abs:function(t){return BigInt(t)>=0?BigInt(t):-BigInt(t)},div:L,mod:b,eq:A,neq:function(t,e){return BigInt(t)!=BigInt(e)},lt:function(t,e){return BigInt(t)=0;a--)o=t.square(o),i[a]&&(o=t.mul(o,e));return o}function U(t){if(t.m%2==1)if(A(b(t.p,4),1))if(A(b(t.p,8),1))if(A(b(t.p,16),1))!function(t){t.sqrt_q=w(t.p,t.m),t.sqrt_s=0,t.sqrt_t=_(t.sqrt_q,1);for(;!u(t.sqrt_t);)t.sqrt_s=t.sqrt_s+1,t.sqrt_t=L(t.sqrt_t,2);let e=t.one;for(;t.eq(e,t.one);){const a=t.random();t.sqrt_z=t.pow(a,t.sqrt_t),e=t.pow(t.sqrt_z,2**(t.sqrt_s-1))}t.sqrt_tm1d2=L(_(t.sqrt_t,1),2),t.sqrt=function(t){const e=this;if(e.isZero(t))return e.zero;let a=e.pow(t,e.sqrt_tm1d2);const i=e.pow(e.mul(e.square(a),t),2**(e.sqrt_s-1));if(e.eq(i,e.negone))return null;let o=e.sqrt_s,n=e.mul(t,a),l=e.mul(n,a),r=e.sqrt_z;for(;!e.eq(l,e.one);){let t=e.square(l),i=1;for(;!e.eq(t,e.one);)t=e.square(t),i++;a=r;for(let t=0;t>>0,t[o]=(t[o]^t[e])>>>0,t[o]=(t[o]<<16|t[o]>>>16&65535)>>>0,t[i]=t[i]+t[o]>>>0,t[a]=(t[a]^t[i])>>>0,t[a]=(t[a]<<12|t[a]>>>20&4095)>>>0,t[e]=t[e]+t[a]>>>0,t[o]=(t[o]^t[e])>>>0,t[o]=(t[o]<<8|t[o]>>>24&255)>>>0,t[i]=t[i]+t[o]>>>0,t[a]=(t[a]^t[i])>>>0,t[a]=(t[a]<<7|t[a]>>>25&127)>>>0}class Q{constructor(t){t=t||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],0,0,0,0],this.idx=16,this.buff=new Array(16)}nextU32(){return 16==this.idx&&this.update(),this.buff[this.idx++]}nextU64(){return h(m(this.nextU32(),4294967296),this.nextU32())}nextBool(){return 1==(1&this.nextU32())}update(){for(let t=0;t<16;t++)this.buff[t]=this.state[t];for(let e=0;e<10;e++)T(t=this.buff,0,4,8,12),T(t,1,5,9,13),T(t,2,6,10,14),T(t,3,7,11,15),T(t,0,5,10,15),T(t,1,6,11,12),T(t,2,7,8,13),T(t,3,4,9,14);var t;for(let t=0;t<16;t++)this.buff[t]=this.buff[t]+this.state[t]>>>0;this.idx=0,this.state[12]=this.state[12]+1>>>0,0==this.state[12]&&(this.state[13]=this.state[13]+1>>>0,0==this.state[13]&&(this.state[14]=this.state[14]+1>>>0,0==this.state[14]&&(this.state[15]=this.state[15]+1>>>0)))}}var q={};function M(t){let e=new Uint8Array(t);if(void 0!==globalThis.crypto)globalThis.crypto.getRandomValues(e);else for(let a=0;a>>0;return e}let k=null;function R(){return k||(k=new Q(function(){const t=M(32),e=new Uint32Array(t.buffer),a=[];for(let t=0;t<8;t++)a.push(e[t]);return a}()),k)}class D{constructor(t,e,a){this.F=e,this.G=t,this.opMulGF=a;let i=e.sqrt_t||e.t,o=e.sqrt_s||e.s,n=e.one;for(;e.eq(e.pow(n,e.half),e.one);)n=e.add(n,e.one);this.w=new Array(o+1),this.wi=new Array(o+1),this.w[o]=this.F.pow(n,i),this.wi[o]=this.F.inv(this.w[o]);let l=o-1;for(;l>=0;)this.w[l]=this.F.square(this.w[l+1]),this.wi[l]=this.F.square(this.wi[l+1]),l--;this.roots=[],this._setRoots(Math.min(o,15))}_setRoots(t){for(let e=t;e>=0&&!this.roots[e];e--){let t=this.F.one;const a=1<>1,r=V(t,e,a-1,i,2*o),s=V(t,e,a-1,i+o,2*o),c=new Array(n);for(let e=0;e>this.one,this.bitLength=o(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let a=this.pow(this.nqr,e);for(;!this.eq(a,this.negone);)this.nqr=this.nqr+this.one,a=this.pow(this.nqr,e);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),U(this),this.FFT=new D(this,this,this.mul.bind(this)),this.fft=this.FFT.fft.bind(this.FFT),this.ifft=this.FFT.ifft.bind(this.FFT),this.w=this.FFT.w,this.wi=this.FFT.wi,this.shift=this.square(this.nqr),this.k=this.exp(this.nqr,2**this.s)}e(t,e){let a;if(e?16==e&&(a=BigInt("0x"+t)):a=BigInt(t),a<0){let t=-a;return t>=this.p&&(t%=this.p),this.p-t}return a>=this.p?a%this.p:a}add(t,e){const a=t+e;return a>=this.p?a-this.p:a}sub(t,e){return t>=e?t-e:this.p-e+t}neg(t){return t?this.p-t:t}mul(t,e){return t*e%this.p}mulScalar(t,e){return t*this.e(e)%this.p}square(t){return t*t%this.p}eq(t,e){return t==e}neq(t,e){return t!=e}lt(t,e){return(t>this.half?t-this.p:t)<(e>this.half?e-this.p:e)}gt(t,e){return(t>this.half?t-this.p:t)>(e>this.half?e-this.p:e)}leq(t,e){return(t>this.half?t-this.p:t)<=(e>this.half?e-this.p:e)}geq(t,e){return(t>this.half?t-this.p:t)>=(e>this.half?e-this.p:e)}div(t,e){return this.mul(t,this.inv(e))}idiv(t,e){if(!e)throw new Error("Division by zero");return t/e}inv(t){if(!t)throw new Error("Division by zero");let e=this.zero,a=this.p,i=this.one,o=t%this.p;for(;o;){let t=a/o;[e,i]=[i,e-t*i],[a,o]=[o,a-t*o]}return e=this.p?a-this.p:a}bor(t,e){const a=(t|e)&this.mask;return a>=this.p?a-this.p:a}bxor(t,e){const a=(t^e)&this.mask;return a>=this.p?a-this.p:a}bnot(t){const e=t^this.mask;return e>=this.p?e-this.p:e}shl(t,e){if(Number(e)=this.p?a-this.p:a}{const a=this.p-e;return Number(a)>a:this.zero}}shr(t,e){if(Number(e)>e;{const a=this.p-e;if(Number(a)=this.p?e-this.p:e}return 0}}land(t,e){return t&&e?this.one:this.zero}lor(t,e){return t||e?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let e=this.s,a=this.nqr_to_t,i=this.pow(t,this.t),o=this.pow(t,this.add(this.t,this.one)>>this.one);for(;i!=this.one;){let t=this.square(i),n=1;for(;t!=this.one;)n++,t=this.square(t);let l=a;for(let t=0;tthis.p>>this.one&&(o=this.neg(o)),o}normalize(t,e){if((t=BigInt(t,e))<0){let e=-t;return e>=this.p&&(e%=this.p),this.p-e}return t>=this.p?t%this.p:t}random(){const t=2*this.bitLength/8;let e=this.zero;for(let a=0;athis.half&&10==e){a="-"+(this.p-t).toString(e)}else a=t.toString(e);return a}isZero(t){return t==this.zero}fromRng(t){let e;do{e=this.zero;for(let a=0;a=this.p);return e=e*this.Ri%this.p,e}fft(t){return this.FFT.fft(t)}ifft(t){return this.FFT.ifft(t)}toRprLE(t,e,a){F(t,e,a,8*this.n64)}toRprBE(t,e,a){x(t,e,a,8*this.n64)}toRprBEM(t,e,a){return this.toRprBE(t,e,this.mul(this.R,a))}toRprLEM(t,e,a){return this.toRprLE(t,e,this.mul(this.R,a))}fromRprLE(t,e){return E(t,e,this.n8)}fromRprBE(t,e){return v(t,e,this.n8)}fromRprLEM(t,e){return this.mul(this.fromRprLE(t,e),this.Ri)}fromRprBEM(t,e){return this.mul(this.fromRprBE(t,e),this.Ri)}toObject(t){return t}}var j="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},K={bigInt2BytesLE:function(t,e){const a=Array(e);let i=BigInt(t);for(let t=0;t>=8n;return a},bigInt2U32LE:function(t,e){const a=Array(e);let i=BigInt(t);for(let t=0;t>=32n;return a},isOcamNum:function(t){return!!Array.isArray(t)&&(3==t.length&&("number"==typeof t[0]&&("number"==typeof t[1]&&!!Array.isArray(t[2]))))}},H=function(t,e,a,i,o,n,l){const r=t.addFunction(e);r.addParam("base","i32"),r.addParam("scalar","i32"),r.addParam("scalarLength","i32"),r.addParam("r","i32"),r.addLocal("i","i32"),r.addLocal("b","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(a));r.addCode(s.if(s.i32_eqz(s.getLocal("scalarLength")),[...s.call(l,s.getLocal("r")),...s.ret([])])),r.addCode(s.call(n,s.getLocal("base"),c)),r.addCode(s.call(l,s.getLocal("r"))),r.addCode(s.setLocal("i",s.getLocal("scalarLength"))),r.addCode(s.block(s.loop(s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.setLocal("b",s.i32_load8_u(s.i32_add(s.getLocal("scalar"),s.getLocal("i")))),...function(){const t=[];for(let e=0;e<8;e++)t.push(...s.call(o,s.getLocal("r"),s.getLocal("r")),...s.if(s.i32_ge_u(s.getLocal("b"),s.i32_const(128>>e)),[...s.setLocal("b",s.i32_sub(s.getLocal("b"),s.i32_const(128>>e))),...s.call(i,s.getLocal("r"),c,s.getLocal("r"))]));return t}(),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.br(0))))},Z=function(t,e){const a=8*t.modules[e].n64,i=t.addFunction(e+"_batchInverse");i.addParam("pIn","i32"),i.addParam("inStep","i32"),i.addParam("n","i32"),i.addParam("pOut","i32"),i.addParam("outStep","i32"),i.addLocal("itAux","i32"),i.addLocal("itIn","i32"),i.addLocal("itOut","i32"),i.addLocal("i","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(a));i.addCode(o.setLocal("itAux",o.i32_load(o.i32_const(0))),o.i32_store(o.i32_const(0),o.i32_add(o.getLocal("itAux"),o.i32_mul(o.i32_add(o.getLocal("n"),o.i32_const(1)),o.i32_const(a))))),i.addCode(o.call(e+"_one",o.getLocal("itAux")),o.setLocal("itIn",o.getLocal("pIn")),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.if(o.call(e+"_isZero",o.getLocal("itIn")),o.call(e+"_copy",o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),o.getLocal("itAux")),o.call(e+"_mul",o.getLocal("itIn"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),o.getLocal("itAux"))),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))),o.setLocal("itIn",o.i32_sub(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itAux",o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("itOut",o.i32_add(o.getLocal("pOut"),o.i32_mul(o.i32_sub(o.getLocal("n"),o.i32_const(1)),o.getLocal("outStep")))),o.call(e+"_inverse",o.getLocal("itAux"),o.getLocal("itAux")),o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("i"))),o.if(o.call(e+"_isZero",o.getLocal("itIn")),[...o.call(e+"_copy",o.getLocal("itAux"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),...o.call(e+"_zero",o.getLocal("itOut"))],[...o.call(e+"_copy",o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),n),...o.call(e+"_mul",o.getLocal("itAux"),o.getLocal("itIn"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),...o.call(e+"_mul",o.getLocal("itAux"),n,o.getLocal("itOut"))]),o.setLocal("itIn",o.i32_sub(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itOut",o.i32_sub(o.getLocal("itOut"),o.getLocal("outStep"))),o.setLocal("itAux",o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_sub(o.getLocal("i"),o.i32_const(1))),o.br(0)))),i.addCode(o.i32_store(o.i32_const(0),o.getLocal("itAux")))};var W=function(t,e,a,i,o,n){void 0===n&&(n=ie?1:-1}function tt(t){return t*t}function et(t){return t%2n!==0n}function at(t){return t%2n===0n}function it(t){return t<0n}function ot(t){return t>0n}function nt(t){return it(t)?t.toString(2).length-1:t.toString(2).length}function lt(t){return t<0n?-t:t}function rt(t){return 1n===lt(t)}function st(t,e){for(var a,i,o,n=0n,l=1n,r=e,s=lt(t);0n!==s;)a=r/s,i=n,o=r,n=l,r=s,l=i-a*l,s=o-a*s;if(!rt(r))throw new Error(t.toString()+" and "+e.toString()+" are not co-prime");return-1===X(n,0n)&&(n+=e),it(t)?-n:n}function ct(t,e,a){if(0n===a)throw new Error("Cannot take modPow with modulus 0");var i=1n,o=t%a;for(it(e)&&(e*=-1n,o=st(o,a));ot(e);){if(0n===o)return 0n;et(e)&&(i=i*o%a),e/=2n,o=tt(o)%a}return i}function dt(t,e){return 0n!==e&&(!!rt(e)||(0===function(t,e){return(t=t>=0n?t:-t)===(e=e>=0n?e:-e)?0:t>e?1:-1}(e,2n)?at(t):t%e===0n))}function ut(t,e){for(var a,i,o,n=function(t){return t-1n}(t),l=n,r=0;at(l);)l/=2n,r++;t:for(i=0;i>1&&i>1,t>>1)))),e.addCode(a.setLocal(s,a.i64_add(a.getLocal(s),a.i64_shr_u(a.getLocal(r),a.i64_const(32)))))),t>0&&(e.addCode(a.setLocal(r,a.i64_add(a.i64_and(a.getLocal(r),a.i64_const(4294967295)),a.i64_and(a.getLocal(c),a.i64_const(4294967295))))),e.addCode(a.setLocal(s,a.i64_add(a.i64_add(a.getLocal(s),a.i64_shr_u(a.getLocal(r),a.i64_const(32))),a.getLocal(d))))),e.addCode(a.i64_store32(a.getLocal("r"),4*t,a.getLocal(r))),e.addCode(a.setLocal(c,a.getLocal(s)),a.setLocal(d,a.i64_shr_u(a.getLocal(c),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*o*2-4,a.getLocal(c)))}(),function(){const e=t.addFunction(i+"_squareOld");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(i+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){!function(){const e=t.addFunction(i+"__mul1");e.addParam("px","i32"),e.addParam("y","i64"),e.addParam("pr","i32"),e.addLocal("c","i64");const a=e.getCodeBuilder();e.addCode(a.setLocal("c",a.i64_mul(a.i64_load32_u(a.getLocal("px"),0,0),a.getLocal("y")))),e.addCode(a.i64_store32(a.getLocal("pr"),0,0,a.getLocal("c")));for(let t=1;t>1n,p=t.alloc(r,ft.bigInt2BytesLE(_,r)),m=_+1n,w=t.alloc(r,ft.bigInt2BytesLE(m,r));t.modules[s]={pq:d,pR2:u,n64:n,q:o,pOne:g,pZero:f,pePlusOne:w};let L=2n;if(At(o))for(;bt(L,_,o)!==h;)L+=1n;let b=0,A=h;for(;!yt(A)&&0n!==A;)b++,A>>=1n;const y=t.alloc(r,ft.bigInt2BytesLE(A,r)),C=bt(L,A,o),I=t.alloc(ft.bigInt2BytesLE((C<>1n,x=t.alloc(r,ft.bigInt2BytesLE(F,r));return t.exportFunction(c+"_copy",s+"_copy"),t.exportFunction(c+"_zero",s+"_zero"),t.exportFunction(c+"_isZero",s+"_isZero"),t.exportFunction(c+"_eq",s+"_eq"),function(){const e=t.addFunction(s+"_isOne");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder();e.addCode(a.ret(a.call(c+"_eq",a.getLocal("x"),a.i32_const(g))))}(),function(){const e=t.addFunction(s+"_add");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.if(a.call(c+"_add",a.getLocal("x"),a.getLocal("y"),a.getLocal("r")),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),a.if(a.call(c+"_gte",a.getLocal("r"),a.i32_const(d)),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))))))}(),function(){const e=t.addFunction(s+"_sub");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.if(a.call(c+"_sub",a.getLocal("x"),a.getLocal("y"),a.getLocal("r")),a.drop(a.call(c+"_add",a.getLocal("r"),a.i32_const(d),a.getLocal("r")))))}(),function(){const e=t.addFunction(s+"_neg");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_sub",a.i32_const(f),a.getLocal("x"),a.getLocal("r")))}(),function(){const e=t.alloc(l*l*8),a=t.addFunction(s+"_mReduct");a.addParam("t","i32"),a.addParam("r","i32"),a.addLocal("np32","i64"),a.addLocal("c","i64"),a.addLocal("m","i64");const i=a.getCodeBuilder(),n=Number(0x100000000n-Lt(o,0x100000000n));a.addCode(i.setLocal("np32",i.i64_const(n)));for(let t=0;t=l&&e.addCode(a.i64_store32(a.getLocal("r"),4*(t-l),a.getLocal(h))),[h,_]=[_,h],e.addCode(a.setLocal(_,a.i64_shr_u(a.getLocal(h),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*l-4,a.getLocal(h))),e.addCode(a.if(a.i32_wrap_i64(a.getLocal(_)),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),a.if(a.call(c+"_gte",a.getLocal("r"),a.i32_const(d)),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))))))}(),function(){const e=t.addFunction(s+"_square");e.addParam("x","i32"),e.addParam("r","i32"),e.addLocal("c0","i64"),e.addLocal("c1","i64"),e.addLocal("c0_old","i64"),e.addLocal("c1_old","i64"),e.addLocal("np32","i64");for(let t=0;t>1&&i>1,t>>1)))),e.addCode(a.setLocal(h,a.i64_add(a.getLocal(h),a.i64_shr_u(a.getLocal(f),a.i64_const(32)))))),t>0&&(e.addCode(a.setLocal(f,a.i64_add(a.i64_and(a.getLocal(f),a.i64_const(4294967295)),a.i64_and(a.getLocal(_),a.i64_const(4294967295))))),e.addCode(a.setLocal(h,a.i64_add(a.i64_add(a.getLocal(h),a.i64_shr_u(a.getLocal(f),a.i64_const(32))),a.getLocal(p)))));for(let i=Math.max(1,t-l+1);i<=t&&i=l&&e.addCode(a.i64_store32(a.getLocal("r"),4*(t-l),a.getLocal(f))),e.addCode(a.setLocal(_,a.getLocal(h)),a.setLocal(p,a.i64_shr_u(a.getLocal(_),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*l-4,a.getLocal(_))),e.addCode(a.if(a.i32_wrap_i64(a.getLocal(p)),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),a.if(a.call(c+"_gte",a.getLocal("r"),a.i32_const(d)),a.drop(a.call(c+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))))))}(),function(){const e=t.addFunction(s+"_squareOld");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){const e=t.addFunction(s+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_mul",a.getLocal("x"),a.i32_const(u),a.getLocal("r")))}(),function(){const e=t.alloc(2*r),a=t.addFunction(s+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const i=a.getCodeBuilder();a.addCode(i.call(c+"_copy",i.getLocal("x"),i.i32_const(e))),a.addCode(i.call(c+"_zero",i.i32_const(e+r))),a.addCode(i.call(s+"_mReduct",i.i32_const(e),i.getLocal("r")))}(),function(){const e=t.addFunction(s+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(r));e.addCode(a.call(s+"_fromMontgomery",a.getLocal("x"),i),a.call(c+"_gte",i,a.i32_const(w)))}(),function(){const e=t.addFunction(s+"_sign");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(r));e.addCode(a.if(a.call(c+"_isZero",a.getLocal("x")),a.ret(a.i32_const(0))),a.call(s+"_fromMontgomery",a.getLocal("x"),i),a.if(a.call(c+"_gte",i,a.i32_const(w)),a.ret(a.i32_const(-1))),a.ret(a.i32_const(1)))}(),function(){const e=t.addFunction(s+"_inverse");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_fromMontgomery",a.getLocal("x"),a.getLocal("r"))),e.addCode(a.call(c+"_inverseMod",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),e.addCode(a.call(s+"_toMontgomery",a.getLocal("r"),a.getLocal("r")))}(),function(){const e=t.addFunction(s+"_one");e.addParam("pr","i32");const a=e.getCodeBuilder();e.addCode(a.call(c+"_copy",a.i32_const(g),a.getLocal("pr")))}(),function(){const e=t.addFunction(s+"_load");e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32"),e.addLocal("p","i32"),e.addLocal("l","i32"),e.addLocal("i","i32"),e.addLocal("j","i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(r)),o=t.alloc(r),n=a.i32_const(o);e.addCode(a.call(c+"_zero",a.getLocal("r")),a.setLocal("i",a.i32_const(r)),a.setLocal("p",a.getLocal("scalar")),a.block(a.loop(a.br_if(1,a.i32_gt_u(a.getLocal("i"),a.getLocal("scalarLen"))),a.if(a.i32_eq(a.getLocal("i"),a.i32_const(r)),a.call(s+"_one",i),a.call(s+"_mul",i,a.i32_const(u),i)),a.call(s+"_mul",a.getLocal("p"),i,n),a.call(s+"_add",a.getLocal("r"),n,a.getLocal("r")),a.setLocal("p",a.i32_add(a.getLocal("p"),a.i32_const(r))),a.setLocal("i",a.i32_add(a.getLocal("i"),a.i32_const(r))),a.br(0))),a.setLocal("l",a.i32_rem_u(a.getLocal("scalarLen"),a.i32_const(r))),a.if(a.i32_eqz(a.getLocal("l")),a.ret([])),a.call(c+"_zero",n),a.setLocal("j",a.i32_const(0)),a.block(a.loop(a.br_if(1,a.i32_eq(a.getLocal("j"),a.getLocal("l"))),a.i32_store8(a.getLocal("j"),o,a.i32_load8_u(a.getLocal("p"))),a.setLocal("p",a.i32_add(a.getLocal("p"),a.i32_const(1))),a.setLocal("j",a.i32_add(a.getLocal("j"),a.i32_const(1))),a.br(0))),a.if(a.i32_eq(a.getLocal("i"),a.i32_const(r)),a.call(s+"_one",i),a.call(s+"_mul",i,a.i32_const(u),i)),a.call(s+"_mul",n,i,n),a.call(s+"_add",a.getLocal("r"),n,a.getLocal("r")))}(),function(){const e=t.addFunction(s+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(r));e.addCode(a.call(s+"_load",a.getLocal("scalar"),a.getLocal("scalarLen"),i),a.call(s+"_toMontgomery",i,i),a.call(s+"_mul",a.getLocal("x"),i,a.getLocal("r")))}(),_t(t,s),pt(t,s+"_batchToMontgomery",s+"_toMontgomery",r,r),pt(t,s+"_batchFromMontgomery",s+"_fromMontgomery",r,r),pt(t,s+"_batchNeg",s+"_neg",r,r),mt(t,s+"_batchAdd",s+"_add",r,r),mt(t,s+"_batchSub",s+"_sub",r,r),mt(t,s+"_batchMul",s+"_mul",r,r),t.exportFunction(s+"_add"),t.exportFunction(s+"_sub"),t.exportFunction(s+"_neg"),t.exportFunction(s+"_isNegative"),t.exportFunction(s+"_isOne"),t.exportFunction(s+"_sign"),t.exportFunction(s+"_mReduct"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_squareOld"),t.exportFunction(s+"_fromMontgomery"),t.exportFunction(s+"_toMontgomery"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_one"),t.exportFunction(s+"_load"),t.exportFunction(s+"_timesScalar"),ht(t,s+"_exp",r,s+"_mul",s+"_square",c+"_copy",s+"_one"),t.exportFunction(s+"_exp"),t.exportFunction(s+"_batchInverse"),At(o)&&(!function(){const e=t.addFunction(s+"_sqrt");e.addParam("n","i32"),e.addParam("r","i32"),e.addLocal("m","i32"),e.addLocal("i","i32"),e.addLocal("j","i32");const a=e.getCodeBuilder(),i=a.i32_const(g),o=a.i32_const(t.alloc(r)),n=a.i32_const(t.alloc(r)),l=a.i32_const(t.alloc(r)),c=a.i32_const(t.alloc(r)),d=a.i32_const(t.alloc(r));e.addCode(a.if(a.call(s+"_isZero",a.getLocal("n")),a.ret(a.call(s+"_zero",a.getLocal("r")))),a.setLocal("m",a.i32_const(b)),a.call(s+"_copy",a.i32_const(I),o),a.call(s+"_exp",a.getLocal("n"),a.i32_const(y),a.i32_const(r),n),a.call(s+"_exp",a.getLocal("n"),a.i32_const(x),a.i32_const(r),l),a.block(a.loop(a.br_if(1,a.call(s+"_eq",n,i)),a.call(s+"_square",n,c),a.setLocal("i",a.i32_const(1)),a.block(a.loop(a.br_if(1,a.call(s+"_eq",c,i)),a.call(s+"_square",c,c),a.setLocal("i",a.i32_add(a.getLocal("i"),a.i32_const(1))),a.br(0))),a.call(s+"_copy",o,d),a.setLocal("j",a.i32_sub(a.i32_sub(a.getLocal("m"),a.getLocal("i")),a.i32_const(1))),a.block(a.loop(a.br_if(1,a.i32_eqz(a.getLocal("j"))),a.call(s+"_square",d,d),a.setLocal("j",a.i32_sub(a.getLocal("j"),a.i32_const(1))),a.br(0))),a.setLocal("m",a.getLocal("i")),a.call(s+"_square",d,o),a.call(s+"_mul",n,o,n),a.call(s+"_mul",l,d,l),a.br(0))),a.if(a.call(s+"_isNegative",l),a.call(s+"_neg",l,a.getLocal("r")),a.call(s+"_copy",l,a.getLocal("r"))))}(),function(){const e=t.addFunction(s+"_isSquare");e.addParam("n","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(g),o=a.i32_const(t.alloc(r));e.addCode(a.if(a.call(s+"_isZero",a.getLocal("n")),a.ret(a.i32_const(1))),a.call(s+"_exp",a.getLocal("n"),a.i32_const(p),a.i32_const(r),o),a.call(s+"_eq",o,i))}(),t.exportFunction(s+"_sqrt"),t.exportFunction(s+"_isSquare")),t.exportFunction(s+"_batchToMontgomery"),t.exportFunction(s+"_batchFromMontgomery"),s};const Ft=It,{bitLength:xt}=J;var Et=function(t,e,a,i,o){const n=BigInt(e),l=Math.floor((xt(n-1n)-1)/64)+1,r=8*l,s=a||"f1";if(t.modules[s])return s;t.modules[s]={n64:l};const c=o||"int",d=Ft(t,n,i,c),u=t.modules[d].pR2,g=t.modules[d].pq,f=t.modules[d].pePlusOne;return function(){const e=t.alloc(r),a=t.addFunction(s+"_mul");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const i=a.getCodeBuilder();a.addCode(i.call(d+"_mul",i.getLocal("x"),i.getLocal("y"),i.i32_const(e))),a.addCode(i.call(d+"_mul",i.i32_const(e),i.i32_const(u),i.getLocal("r")))}(),function(){const e=t.addFunction(s+"_square");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){const e=t.addFunction(s+"_inverse");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(c+"_inverseMod",a.getLocal("x"),a.i32_const(g),a.getLocal("r")))}(),function(){const e=t.addFunction(s+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder();e.addCode(a.call(c+"_gte",a.getLocal("x"),a.i32_const(f)))}(),t.exportFunction(d+"_add",s+"_add"),t.exportFunction(d+"_sub",s+"_sub"),t.exportFunction(d+"_neg",s+"_neg"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_isNegative"),t.exportFunction(d+"_copy",s+"_copy"),t.exportFunction(d+"_zero",s+"_zero"),t.exportFunction(d+"_one",s+"_one"),t.exportFunction(d+"_isZero",s+"_isZero"),t.exportFunction(d+"_eq",s+"_eq"),s};const vt=H,Bt=Z,St=K;var Pt=function(t,e,a,i){if(t.modules[a])return a;const o=8*t.modules[i].n64,n=t.modules[i].q;return t.modules[a]={n64:2*t.modules[i].n64},function(){const e=t.addFunction(a+"_isZero");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.i32_and(n.call(i+"_isZero",l),n.call(i+"_isZero",r)))}(),function(){const e=t.addFunction(a+"_isOne");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.ret(n.i32_and(n.call(i+"_isOne",l),n.call(i+"_isZero",r))))}(),function(){const e=t.addFunction(a+"_zero");e.addParam("x","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.call(i+"_zero",l),n.call(i+"_zero",r))}(),function(){const e=t.addFunction(a+"_one");e.addParam("x","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.call(i+"_one",l),n.call(i+"_zero",r))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_copy",l,s),n.call(i+"_copy",r,c))}(),function(){const n=t.addFunction(a+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.getLocal("y"),d=l.i32_add(l.getLocal("y"),l.i32_const(o)),u=l.getLocal("r"),g=l.i32_add(l.getLocal("r"),l.i32_const(o)),f=l.i32_const(t.alloc(o)),h=l.i32_const(t.alloc(o)),_=l.i32_const(t.alloc(o)),p=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_mul",r,c,f),l.call(i+"_mul",s,d,h),l.call(i+"_add",r,s,_),l.call(i+"_add",c,d,p),l.call(i+"_mul",_,p,_),l.call(e,h,u),l.call(i+"_add",f,u,u),l.call(i+"_add",f,h,g),l.call(i+"_sub",_,g,g))}(),function(){const e=t.addFunction(a+"_mul1");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("y"),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_mul",l,s,c),n.call(i+"_mul",r,s,d))}(),function(){const n=t.addFunction(a+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(o)),u=l.i32_const(t.alloc(o)),g=l.i32_const(t.alloc(o)),f=l.i32_const(t.alloc(o)),h=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_mul",r,s,u),l.call(i+"_add",r,s,g),l.call(e,s,f),l.call(i+"_add",r,f,f),l.call(e,u,h),l.call(i+"_add",h,u,h),l.call(i+"_mul",g,f,c),l.call(i+"_sub",c,h,c),l.call(i+"_add",u,u,d))}(),function(){const e=t.addFunction(a+"_add");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("y"),c=n.i32_add(n.getLocal("y"),n.i32_const(o)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_add",l,s,d),n.call(i+"_add",r,c,u))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("y"),c=n.i32_add(n.getLocal("y"),n.i32_const(o)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_sub",l,s,d),n.call(i+"_sub",r,c,u))}(),function(){const e=t.addFunction(a+"_neg");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_neg",l,s),n.call(i+"_neg",r,c))}(),function(){const e=t.addFunction(a+"_conjugate");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_copy",l,s),n.call(i+"_neg",r,c))}(),function(){const e=t.addFunction(a+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_toMontgomery",l,s),n.call(i+"_toMontgomery",r,c))}(),function(){const e=t.addFunction(a+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_fromMontgomery",l,s),n.call(i+"_fromMontgomery",r,c))}(),function(){const e=t.addFunction(a+"_eq");e.addParam("x","i32"),e.addParam("y","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("y"),c=n.i32_add(n.getLocal("y"),n.i32_const(o));e.addCode(n.i32_and(n.call(i+"_eq",l,s),n.call(i+"_eq",r,c)))}(),function(){const n=t.addFunction(a+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(o)),u=l.i32_const(t.alloc(o)),g=l.i32_const(t.alloc(o)),f=l.i32_const(t.alloc(o)),h=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_square",r,u),l.call(i+"_square",s,g),l.call(e,g,f),l.call(i+"_sub",u,f,f),l.call(i+"_inverse",f,h),l.call(i+"_mul",r,h,c),l.call(i+"_mul",s,h,d),l.call(i+"_neg",d,d))}(),function(){const e=t.addFunction(a+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.getLocal("r"),c=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),s),n.call(i+"_timesScalar",r,n.getLocal("scalar"),n.getLocal("scalarLen"),c))}(),function(){const e=t.addFunction(a+"_sign");e.addParam("x","i32"),e.addLocal("s","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.setLocal("s",n.call(i+"_sign",r)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(i+"_sign",l)))}(),function(){const e=t.addFunction(a+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.if(n.call(i+"_isZero",r),n.ret(n.call(i+"_isNegative",l))),n.ret(n.call(i+"_isNegative",r)))}(),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isOne"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_one"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_mul"),t.exportFunction(a+"_mul1"),t.exportFunction(a+"_square"),t.exportFunction(a+"_add"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_sign"),t.exportFunction(a+"_conjugate"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_inverse"),Bt(t,a),vt(t,a+"_exp",2*o,a+"_mul",a+"_square",a+"_copy",a+"_one"),function(){const e=t.addFunction(a+"_sqrt");e.addParam("a","i32"),e.addParam("pr","i32");const l=e.getCodeBuilder(),r=l.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-3n)/4n,o))),s=l.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-1n)/2n,o))),c=l.getLocal("a"),d=l.i32_const(t.alloc(2*o)),u=l.i32_const(t.alloc(2*o)),g=l.i32_const(t.alloc(2*o)),f=t.alloc(2*o),h=l.i32_const(f),_=l.i32_const(f),p=l.i32_const(f+o),m=l.i32_const(t.alloc(2*o)),w=l.i32_const(t.alloc(2*o));e.addCode(l.call(a+"_one",h),l.call(a+"_neg",h,h),l.call(a+"_exp",c,r,l.i32_const(o),d),l.call(a+"_square",d,u),l.call(a+"_mul",c,u,u),l.call(a+"_conjugate",u,g),l.call(a+"_mul",g,u,g),l.if(l.call(a+"_eq",g,h),l.unreachable()),l.call(a+"_mul",d,c,m),l.if(l.call(a+"_eq",u,h),[...l.call(i+"_zero",_),...l.call(i+"_one",p),...l.call(a+"_mul",h,m,l.getLocal("pr"))],[...l.call(a+"_one",w),...l.call(a+"_add",w,u,w),...l.call(a+"_exp",w,s,l.i32_const(o),w),...l.call(a+"_mul",w,m,l.getLocal("pr"))]))}(),function(){const e=t.addFunction(a+"_isSquare");e.addParam("a","i32"),e.setReturnType("i32");const i=e.getCodeBuilder(),l=i.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-3n)/4n,o))),r=i.getLocal("a"),s=i.i32_const(t.alloc(2*o)),c=i.i32_const(t.alloc(2*o)),d=i.i32_const(t.alloc(2*o)),u=t.alloc(2*o),g=i.i32_const(u);e.addCode(i.call(a+"_one",g),i.call(a+"_neg",g,g),i.call(a+"_exp",r,l,i.i32_const(o),s),i.call(a+"_square",s,c),i.call(a+"_mul",r,c,c),i.call(a+"_conjugate",c,d),i.call(a+"_mul",d,c,d),i.if(i.call(a+"_eq",d,g),i.ret(i.i32_const(0))),i.ret(i.i32_const(1)))}(),t.exportFunction(a+"_exp"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_batchInverse"),t.exportFunction(a+"_sqrt"),t.exportFunction(a+"_isSquare"),t.exportFunction(a+"_isNegative"),a};const Gt=H,zt=Z;var Ot=function(t,e,a,i){if(t.modules[a])return a;const o=8*t.modules[i].n64;return t.modules[a]={n64:3*t.modules[i].n64},function(){const e=t.addFunction(a+"_isZero");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.i32_and(n.i32_and(n.call(i+"_isZero",l),n.call(i+"_isZero",r)),n.call(i+"_isZero",s)))}(),function(){const e=t.addFunction(a+"_isOne");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.ret(n.i32_and(n.i32_and(n.call(i+"_isOne",l),n.call(i+"_isZero",r)),n.call(i+"_isZero",s))))}(),function(){const e=t.addFunction(a+"_zero");e.addParam("x","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.call(i+"_zero",l),n.call(i+"_zero",r),n.call(i+"_zero",s))}(),function(){const e=t.addFunction(a+"_one");e.addParam("x","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.call(i+"_one",l),n.call(i+"_zero",r),n.call(i+"_zero",s))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_copy",l,c),n.call(i+"_copy",r,d),n.call(i+"_copy",s,u))}(),function(){const n=t.addFunction(a+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.i32_add(l.getLocal("x"),l.i32_const(2*o)),d=l.getLocal("y"),u=l.i32_add(l.getLocal("y"),l.i32_const(o)),g=l.i32_add(l.getLocal("y"),l.i32_const(2*o)),f=l.getLocal("r"),h=l.i32_add(l.getLocal("r"),l.i32_const(o)),_=l.i32_add(l.getLocal("r"),l.i32_const(2*o)),p=l.i32_const(t.alloc(o)),m=l.i32_const(t.alloc(o)),w=l.i32_const(t.alloc(o)),L=l.i32_const(t.alloc(o)),b=l.i32_const(t.alloc(o)),A=l.i32_const(t.alloc(o)),y=l.i32_const(t.alloc(o)),C=l.i32_const(t.alloc(o)),I=l.i32_const(t.alloc(o)),F=l.i32_const(t.alloc(o)),x=l.i32_const(t.alloc(o)),E=l.i32_const(t.alloc(o)),v=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_mul",r,d,p),l.call(i+"_mul",s,u,m),l.call(i+"_mul",c,g,w),l.call(i+"_add",r,s,L),l.call(i+"_add",d,u,b),l.call(i+"_add",r,c,A),l.call(i+"_add",d,g,y),l.call(i+"_add",s,c,C),l.call(i+"_add",u,g,I),l.call(i+"_add",p,m,F),l.call(i+"_add",p,w,x),l.call(i+"_add",m,w,E),l.call(i+"_mul",C,I,f),l.call(i+"_sub",f,E,f),l.call(e,f,f),l.call(i+"_add",p,f,f),l.call(i+"_mul",L,b,h),l.call(i+"_sub",h,F,h),l.call(e,w,v),l.call(i+"_add",h,v,h),l.call(i+"_mul",A,y,_),l.call(i+"_sub",_,x,_),l.call(i+"_add",_,m,_))}(),function(){const n=t.addFunction(a+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.i32_add(l.getLocal("x"),l.i32_const(2*o)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(o)),g=l.i32_add(l.getLocal("r"),l.i32_const(2*o)),f=l.i32_const(t.alloc(o)),h=l.i32_const(t.alloc(o)),_=l.i32_const(t.alloc(o)),p=l.i32_const(t.alloc(o)),m=l.i32_const(t.alloc(o)),w=l.i32_const(t.alloc(o)),L=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_square",r,f),l.call(i+"_mul",r,s,h),l.call(i+"_add",h,h,_),l.call(i+"_sub",r,s,p),l.call(i+"_add",p,c,p),l.call(i+"_square",p,p),l.call(i+"_mul",s,c,m),l.call(i+"_add",m,m,w),l.call(i+"_square",c,L),l.call(e,w,d),l.call(i+"_add",f,d,d),l.call(e,L,u),l.call(i+"_add",_,u,u),l.call(i+"_add",f,L,g),l.call(i+"_sub",w,g,g),l.call(i+"_add",p,g,g),l.call(i+"_add",_,g,g))}(),function(){const e=t.addFunction(a+"_add");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o)),g=n.getLocal("r"),f=n.i32_add(n.getLocal("r"),n.i32_const(o)),h=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_add",l,c,g),n.call(i+"_add",r,d,f),n.call(i+"_add",s,u,h))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o)),g=n.getLocal("r"),f=n.i32_add(n.getLocal("r"),n.i32_const(o)),h=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_sub",l,c,g),n.call(i+"_sub",r,d,f),n.call(i+"_sub",s,u,h))}(),function(){const e=t.addFunction(a+"_neg");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_neg",l,c),n.call(i+"_neg",r,d),n.call(i+"_neg",s,u))}(),function(){const e=t.addFunction(a+"_sign");e.addParam("x","i32"),e.addLocal("s","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.setLocal("s",n.call(i+"_sign",s)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.setLocal("s",n.call(i+"_sign",r)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(i+"_sign",l)))}(),function(){const e=t.addFunction(a+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_toMontgomery",l,c),n.call(i+"_toMontgomery",r,d),n.call(i+"_toMontgomery",s,u))}(),function(){const e=t.addFunction(a+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_fromMontgomery",l,c),n.call(i+"_fromMontgomery",r,d),n.call(i+"_fromMontgomery",s,u))}(),function(){const e=t.addFunction(a+"_eq");e.addParam("x","i32"),e.addParam("y","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o));e.addCode(n.i32_and(n.i32_and(n.call(i+"_eq",l,c),n.call(i+"_eq",r,d)),n.call(i+"_eq",s,u)))}(),function(){const n=t.addFunction(a+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),r=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(o)),c=l.i32_add(l.getLocal("x"),l.i32_const(2*o)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(o)),g=l.i32_add(l.getLocal("r"),l.i32_const(2*o)),f=l.i32_const(t.alloc(o)),h=l.i32_const(t.alloc(o)),_=l.i32_const(t.alloc(o)),p=l.i32_const(t.alloc(o)),m=l.i32_const(t.alloc(o)),w=l.i32_const(t.alloc(o)),L=l.i32_const(t.alloc(o)),b=l.i32_const(t.alloc(o)),A=l.i32_const(t.alloc(o)),y=l.i32_const(t.alloc(o)),C=l.i32_const(t.alloc(o));n.addCode(l.call(i+"_square",r,f),l.call(i+"_square",s,h),l.call(i+"_square",c,_),l.call(i+"_mul",r,s,p),l.call(i+"_mul",r,c,m),l.call(i+"_mul",s,c,w),l.call(e,w,L),l.call(i+"_sub",f,L,L),l.call(e,_,b),l.call(i+"_sub",b,p,b),l.call(i+"_sub",h,m,A),l.call(i+"_mul",c,b,y),l.call(i+"_mul",s,A,C),l.call(i+"_add",y,C,y),l.call(e,y,y),l.call(i+"_mul",r,L,C),l.call(i+"_add",C,y,y),l.call(i+"_inverse",y,y),l.call(i+"_mul",y,L,d),l.call(i+"_mul",y,b,u),l.call(i+"_mul",y,A,g))}(),function(){const e=t.addFunction(a+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),c=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),c),n.call(i+"_timesScalar",r,n.getLocal("scalar"),n.getLocal("scalarLen"),d),n.call(i+"_timesScalar",s,n.getLocal("scalar"),n.getLocal("scalarLen"),u))}(),function(){const e=t.addFunction(a+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),l=n.getLocal("x"),r=n.i32_add(n.getLocal("x"),n.i32_const(o)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.if(n.call(i+"_isZero",s),n.if(n.call(i+"_isZero",r),n.ret(n.call(i+"_isNegative",l)),n.ret(n.call(i+"_isNegative",r)))),n.ret(n.call(i+"_isNegative",s)))}(),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isOne"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_one"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_mul"),t.exportFunction(a+"_square"),t.exportFunction(a+"_add"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_sign"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_inverse"),zt(t,a),Gt(t,a+"_exp",3*o,a+"_mul",a+"_square",a+"_copy",a+"_one"),t.exportFunction(a+"_exp"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_batchInverse"),t.exportFunction(a+"_isNegative"),a};const Ut=function(t,e,a,i,o,n,l,r){const s=t.addFunction(e);s.addParam("base","i32"),s.addParam("scalar","i32"),s.addParam("scalarLength","i32"),s.addParam("r","i32"),s.addLocal("old0","i32"),s.addLocal("nbits","i32"),s.addLocal("i","i32"),s.addLocal("last","i32"),s.addLocal("cur","i32"),s.addLocal("carry","i32"),s.addLocal("p","i32");const c=s.getCodeBuilder(),d=c.i32_const(t.alloc(a));function u(t){return c.i32_and(c.i32_shr_u(c.i32_load(c.i32_add(c.getLocal("scalar"),c.i32_and(c.i32_shr_u(t,c.i32_const(3)),c.i32_const(4294967292)))),c.i32_and(t,c.i32_const(31))),c.i32_const(1))}function g(t){return[...c.i32_store8(c.getLocal("p"),c.i32_const(t)),...c.setLocal("p",c.i32_add(c.getLocal("p"),c.i32_const(1)))]}s.addCode(c.if(c.i32_eqz(c.getLocal("scalarLength")),[...c.call(r,c.getLocal("r")),...c.ret([])]),c.setLocal("nbits",c.i32_shl(c.getLocal("scalarLength"),c.i32_const(3))),c.setLocal("old0",c.i32_load(c.i32_const(0))),c.setLocal("p",c.getLocal("old0")),c.i32_store(c.i32_const(0),c.i32_and(c.i32_add(c.i32_add(c.getLocal("old0"),c.i32_const(32)),c.getLocal("nbits")),c.i32_const(4294967288))),c.setLocal("i",c.i32_const(1)),c.setLocal("last",u(c.i32_const(0))),c.setLocal("carry",c.i32_const(0)),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("i"),c.getLocal("nbits"))),c.setLocal("cur",u(c.getLocal("i"))),c.if(c.getLocal("last"),c.if(c.getLocal("cur"),c.if(c.getLocal("carry"),[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(1)),...g(1)],[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(1)),...g(255)]),c.if(c.getLocal("carry"),[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(1)),...g(255)],[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(0)),...g(1)])),c.if(c.getLocal("cur"),c.if(c.getLocal("carry"),[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(1)),...g(0)],[...c.setLocal("last",c.i32_const(1)),...c.setLocal("carry",c.i32_const(0)),...g(0)]),c.if(c.getLocal("carry"),[...c.setLocal("last",c.i32_const(1)),...c.setLocal("carry",c.i32_const(0)),...g(0)],[...c.setLocal("last",c.i32_const(0)),...c.setLocal("carry",c.i32_const(0)),...g(0)]))),c.setLocal("i",c.i32_add(c.getLocal("i"),c.i32_const(1))),c.br(0))),c.if(c.getLocal("last"),c.if(c.getLocal("carry"),[...g(255),...g(0),...g(1)],[...g(1)]),c.if(c.getLocal("carry"),[...g(0),...g(1)])),c.setLocal("p",c.i32_sub(c.getLocal("p"),c.i32_const(1))),c.call(l,c.getLocal("base"),d),c.call(r,c.getLocal("r")),c.block(c.loop(c.call(o,c.getLocal("r"),c.getLocal("r")),c.setLocal("cur",c.i32_load8_u(c.getLocal("p"))),c.if(c.getLocal("cur"),c.if(c.i32_eq(c.getLocal("cur"),c.i32_const(1)),c.call(i,c.getLocal("r"),d,c.getLocal("r")),c.call(n,c.getLocal("r"),d,c.getLocal("r")))),c.br_if(1,c.i32_eq(c.getLocal("old0"),c.getLocal("p"))),c.setLocal("p",c.i32_sub(c.getLocal("p"),c.i32_const(1))),c.br(0))),c.i32_store(c.i32_const(0),c.getLocal("old0")))},Tt=W,Qt=function(t,e,a,i,o){const n=8*t.modules[e].n64;function l(){const i=t.addFunction(a);i.addParam("pBases","i32"),i.addParam("pScalars","i32"),i.addParam("scalarSize","i32"),i.addParam("n","i32"),i.addParam("pr","i32"),i.addLocal("chunkSize","i32"),i.addLocal("nChunks","i32"),i.addLocal("itScalar","i32"),i.addLocal("endScalar","i32"),i.addLocal("itBase","i32"),i.addLocal("itBit","i32"),i.addLocal("i","i32"),i.addLocal("j","i32"),i.addLocal("nTable","i32"),i.addLocal("pTable","i32"),i.addLocal("idx","i32"),i.addLocal("pIdxTable","i32");const o=i.getCodeBuilder(),l=o.i32_const(t.alloc(n)),r=t.alloc([17,17,17,17,17,17,17,17,17,17,16,16,15,14,13,13,12,11,10,9,8,7,7,6,5,4,3,2,1,1,1,1]);i.addCode(o.call(e+"_zero",o.getLocal("pr")),o.if(o.i32_eqz(o.getLocal("n")),o.ret([])),o.setLocal("chunkSize",o.i32_load8_u(o.i32_clz(o.getLocal("n")),r)),o.setLocal("nChunks",o.i32_add(o.i32_div_u(o.i32_sub(o.i32_shl(o.getLocal("scalarSize"),o.i32_const(3)),o.i32_const(1)),o.getLocal("chunkSize")),o.i32_const(1))),o.setLocal("itBit",o.i32_mul(o.i32_sub(o.getLocal("nChunks"),o.i32_const(1)),o.getLocal("chunkSize"))),o.block(o.loop(o.br_if(1,o.i32_lt_s(o.getLocal("itBit"),o.i32_const(0))),o.if(o.i32_eqz(o.call(e+"_isZero",o.getLocal("pr"))),[...o.setLocal("j",o.i32_const(0)),...o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("j"),o.getLocal("chunkSize"))),o.call(e+"_double",o.getLocal("pr"),o.getLocal("pr")),o.setLocal("j",o.i32_add(o.getLocal("j"),o.i32_const(1))),o.br(0)))]),o.call(a+"_chunk",o.getLocal("pBases"),o.getLocal("pScalars"),o.getLocal("scalarSize"),o.getLocal("n"),o.getLocal("itBit"),o.getLocal("chunkSize"),l),o.call(e+"_add",o.getLocal("pr"),l,o.getLocal("pr")),o.setLocal("itBit",o.i32_sub(o.getLocal("itBit"),o.getLocal("chunkSize"))),o.br(0))))}!function(){const e=t.addFunction(a+"_getChunk");e.addParam("pScalar","i32"),e.addParam("scalarSize","i32"),e.addParam("startBit","i32"),e.addParam("chunkSize","i32"),e.addLocal("bitsToEnd","i32"),e.addLocal("mask","i32"),e.setReturnType("i32");const i=e.getCodeBuilder();e.addCode(i.setLocal("bitsToEnd",i.i32_sub(i.i32_mul(i.getLocal("scalarSize"),i.i32_const(8)),i.getLocal("startBit"))),i.if(i.i32_gt_s(i.getLocal("chunkSize"),i.getLocal("bitsToEnd")),i.setLocal("mask",i.i32_sub(i.i32_shl(i.i32_const(1),i.getLocal("bitsToEnd")),i.i32_const(1))),i.setLocal("mask",i.i32_sub(i.i32_shl(i.i32_const(1),i.getLocal("chunkSize")),i.i32_const(1)))),i.i32_and(i.i32_shr_u(i.i32_load(i.i32_add(i.getLocal("pScalar"),i.i32_shr_u(i.getLocal("startBit"),i.i32_const(3))),0,0),i.i32_and(i.getLocal("startBit"),i.i32_const(7))),i.getLocal("mask")))}(),function(){const i=t.addFunction(a+"_reduceTable");i.addParam("pTable","i32"),i.addParam("p","i32"),i.addLocal("half","i32"),i.addLocal("it1","i32"),i.addLocal("it2","i32"),i.addLocal("pAcc","i32");const o=i.getCodeBuilder();i.addCode(o.if(o.i32_eq(o.getLocal("p"),o.i32_const(1)),o.ret([])),o.setLocal("half",o.i32_shl(o.i32_const(1),o.i32_sub(o.getLocal("p"),o.i32_const(1)))),o.setLocal("it1",o.getLocal("pTable")),o.setLocal("it2",o.i32_add(o.getLocal("pTable"),o.i32_mul(o.getLocal("half"),o.i32_const(n)))),o.setLocal("pAcc",o.i32_sub(o.getLocal("it2"),o.i32_const(n))),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("it1"),o.getLocal("pAcc"))),o.call(e+"_add",o.getLocal("it1"),o.getLocal("it2"),o.getLocal("it1")),o.call(e+"_add",o.getLocal("pAcc"),o.getLocal("it2"),o.getLocal("pAcc")),o.setLocal("it1",o.i32_add(o.getLocal("it1"),o.i32_const(n))),o.setLocal("it2",o.i32_add(o.getLocal("it2"),o.i32_const(n))),o.br(0))),o.call(a+"_reduceTable",o.getLocal("pTable"),o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.setLocal("p",o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("p"))),o.call(e+"_double",o.getLocal("pAcc"),o.getLocal("pAcc")),o.setLocal("p",o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.br(0))),o.call(e+"_add",o.getLocal("pTable"),o.getLocal("pAcc"),o.getLocal("pTable")))}(),function(){const l=t.addFunction(a+"_chunk");l.addParam("pBases","i32"),l.addParam("pScalars","i32"),l.addParam("scalarSize","i32"),l.addParam("n","i32"),l.addParam("startBit","i32"),l.addParam("chunkSize","i32"),l.addParam("pr","i32"),l.addLocal("nChunks","i32"),l.addLocal("itScalar","i32"),l.addLocal("endScalar","i32"),l.addLocal("itBase","i32"),l.addLocal("i","i32"),l.addLocal("j","i32"),l.addLocal("nTable","i32"),l.addLocal("pTable","i32"),l.addLocal("idx","i32"),l.addLocal("pIdxTable","i32");const r=l.getCodeBuilder();l.addCode(r.if(r.i32_eqz(r.getLocal("n")),[...r.call(e+"_zero",r.getLocal("pr")),...r.ret([])]),r.setLocal("nTable",r.i32_shl(r.i32_const(1),r.getLocal("chunkSize"))),r.setLocal("pTable",r.i32_load(r.i32_const(0))),r.i32_store(r.i32_const(0),r.i32_add(r.getLocal("pTable"),r.i32_mul(r.getLocal("nTable"),r.i32_const(n)))),r.setLocal("j",r.i32_const(0)),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("j"),r.getLocal("nTable"))),r.call(e+"_zero",r.i32_add(r.getLocal("pTable"),r.i32_mul(r.getLocal("j"),r.i32_const(n)))),r.setLocal("j",r.i32_add(r.getLocal("j"),r.i32_const(1))),r.br(0))),r.setLocal("itBase",r.getLocal("pBases")),r.setLocal("itScalar",r.getLocal("pScalars")),r.setLocal("endScalar",r.i32_add(r.getLocal("pScalars"),r.i32_mul(r.getLocal("n"),r.getLocal("scalarSize")))),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("itScalar"),r.getLocal("endScalar"))),r.setLocal("idx",r.call(a+"_getChunk",r.getLocal("itScalar"),r.getLocal("scalarSize"),r.getLocal("startBit"),r.getLocal("chunkSize"))),r.if(r.getLocal("idx"),[...r.setLocal("pIdxTable",r.i32_add(r.getLocal("pTable"),r.i32_mul(r.i32_sub(r.getLocal("idx"),r.i32_const(1)),r.i32_const(n)))),...r.call(i,r.getLocal("pIdxTable"),r.getLocal("itBase"),r.getLocal("pIdxTable"))]),r.setLocal("itScalar",r.i32_add(r.getLocal("itScalar"),r.getLocal("scalarSize"))),r.setLocal("itBase",r.i32_add(r.getLocal("itBase"),r.i32_const(o))),r.br(0))),r.call(a+"_reduceTable",r.getLocal("pTable"),r.getLocal("chunkSize")),r.call(e+"_copy",r.getLocal("pTable"),r.getLocal("pr")),r.i32_store(r.i32_const(0),r.getLocal("pTable")))}(),l(),t.exportFunction(a),t.exportFunction(a+"_chunk")};var qt=function(t,e,a,i){const o=t.modules[a].n64,n=8*o;if(t.modules[e])return e;return t.modules[e]={n64:3*o},function(){const i=t.addFunction(e+"_isZeroAffine");i.addParam("p1","i32"),i.setReturnType("i32");const o=i.getCodeBuilder();i.addCode(o.i32_and(o.call(a+"_isZero",o.getLocal("p1")),o.call(a+"_isZero",o.i32_add(o.getLocal("p1"),o.i32_const(n)))))}(),function(){const i=t.addFunction(e+"_isZero");i.addParam("p1","i32"),i.setReturnType("i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_isZero",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))))}(),function(){const i=t.addFunction(e+"_zeroAffine");i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_zero",o.getLocal("pr"))),i.addCode(o.call(a+"_zero",o.i32_add(o.getLocal("pr"),o.i32_const(n))))}(),function(){const i=t.addFunction(e+"_zero");i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_zero",o.getLocal("pr"))),i.addCode(o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(n)))),i.addCode(o.call(a+"_zero",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))))}(),function(){const a=t.addFunction(e+"_copyAffine");a.addParam("ps","i32"),a.addParam("pd","i32");const i=a.getCodeBuilder();for(let t=0;t<2*o;t++)a.addCode(i.i64_store(i.getLocal("pd"),8*t,i.i64_load(i.getLocal("ps"),8*t)))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("ps","i32"),a.addParam("pd","i32");const i=a.getCodeBuilder();for(let t=0;t<3*o;t++)a.addCode(i.i64_store(i.getLocal("pd"),8*t,i.i64_load(i.getLocal("ps"),8*t)))}(),function(){const i=t.addFunction(e+"_toJacobian");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.getLocal("pr"),c=o.i32_add(o.getLocal("pr"),o.i32_const(n)),d=o.i32_add(o.getLocal("pr"),o.i32_const(2*n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),o.call(e+"_zero",o.getLocal("pr")),[...o.call(a+"_one",d),...o.call(a+"_copy",r,c),...o.call(a+"_copy",l,s)]))}(),function(){const i=t.addFunction(e+"_eqAffine");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder();i.addCode(o.ret(o.i32_and(o.call(a+"_eq",o.getLocal("p1"),o.getLocal("p2")),o.call(a+"_eq",o.i32_add(o.getLocal("p1"),o.i32_const(n)),o.i32_add(o.getLocal("p2"),o.i32_const(n))))))}(),function(){const i=t.addFunction(e+"_eqMixed");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const s=o.getLocal("z1"),c=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.ret(o.call(e+"_isZeroAffine",o.getLocal("p2")))),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),o.ret(o.i32_const(0))),o.if(o.call(a+"_isOne",s),o.ret(o.call(e+"_eqAffine",o.getLocal("p1"),o.getLocal("p2")))),o.call(a+"_square",s,u),o.call(a+"_mul",c,u,g),o.call(a+"_mul",s,u,f),o.call(a+"_mul",d,f,h),o.if(o.call(a+"_eq",l,g),o.if(o.call(a+"_eq",r,h),o.ret(o.i32_const(1)))),o.ret(o.i32_const(0)))}(),function(){const i=t.addFunction(e+"_eq");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32"),i.addLocal("z2","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const s=o.getLocal("z1"),c=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n));i.addCode(o.setLocal("z2",o.i32_add(o.getLocal("p2"),o.i32_const(2*n))));const u=o.getLocal("z2"),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.ret(o.call(e+"_isZero",o.getLocal("p2")))),o.if(o.call(e+"_isZero",o.getLocal("p2")),o.ret(o.i32_const(0))),o.if(o.call(a+"_isOne",s),o.ret(o.call(e+"_eqMixed",o.getLocal("p2"),o.getLocal("p1")))),o.if(o.call(a+"_isOne",u),o.ret(o.call(e+"_eqMixed",o.getLocal("p1"),o.getLocal("p2")))),o.call(a+"_square",s,g),o.call(a+"_square",u,f),o.call(a+"_mul",l,f,h),o.call(a+"_mul",c,g,_),o.call(a+"_mul",s,g,p),o.call(a+"_mul",u,f,m),o.call(a+"_mul",r,m,w),o.call(a+"_mul",d,p,L),o.if(o.call(a+"_eq",h,_),o.if(o.call(a+"_eq",w,L),o.ret(o.i32_const(1)))),o.ret(o.i32_const(0)))}(),function(){const i=t.addFunction(e+"_doubleAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.getLocal("pr"),c=o.i32_add(o.getLocal("pr"),o.i32_const(n)),d=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),[...o.call(e+"_toJacobian",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.call(a+"_square",l,u),o.call(a+"_square",r,g),o.call(a+"_square",g,f),o.call(a+"_add",l,g,h),o.call(a+"_square",h,h),o.call(a+"_sub",h,u,h),o.call(a+"_sub",h,f,h),o.call(a+"_add",h,h,h),o.call(a+"_add",u,u,_),o.call(a+"_add",_,u,_),o.call(a+"_add",r,r,d),o.call(a+"_square",_,s),o.call(a+"_sub",s,h,s),o.call(a+"_sub",s,h,s),o.call(a+"_add",f,f,p),o.call(a+"_add",p,p,p),o.call(a+"_add",p,p,p),o.call(a+"_sub",h,s,c),o.call(a+"_mul",c,_,c),o.call(a+"_sub",c,p,c))}(),function(){const i=t.addFunction(e+"_double");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),c=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",s),[...o.ret(o.call(e+"_doubleAffine",o.getLocal("p1"),o.getLocal("pr"))),...o.ret([])]),o.call(a+"_square",l,g),o.call(a+"_square",r,f),o.call(a+"_square",f,h),o.call(a+"_add",l,f,_),o.call(a+"_square",_,_),o.call(a+"_sub",_,g,_),o.call(a+"_sub",_,h,_),o.call(a+"_add",_,_,_),o.call(a+"_add",g,g,p),o.call(a+"_add",p,g,p),o.call(a+"_square",p,m),o.call(a+"_mul",r,s,w),o.call(a+"_add",_,_,c),o.call(a+"_sub",m,c,c),o.call(a+"_add",h,h,L),o.call(a+"_add",L,L,L),o.call(a+"_add",L,L,L),o.call(a+"_sub",_,c,d),o.call(a+"_mul",d,p,d),o.call(a+"_sub",d,L,d),o.call(a+"_add",w,w,u))}(),function(){const i=t.addFunction(e+"_addAffine");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const s=o.getLocal("p2"),c=o.i32_add(o.getLocal("p2"),o.i32_const(n)),d=o.getLocal("pr"),u=o.i32_add(o.getLocal("pr"),o.i32_const(n)),g=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),[...o.call(e+"_copyAffine",o.getLocal("p2"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),[...o.call(e+"_copyAffine",o.getLocal("p1"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(a+"_eq",l,s),o.if(o.call(a+"_eq",r,c),[...o.call(e+"_doubleAffine",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",s,l,f),o.call(a+"_sub",c,r,_),o.call(a+"_square",f,h),o.call(a+"_add",h,h,p),o.call(a+"_add",p,p,p),o.call(a+"_mul",f,p,m),o.call(a+"_add",_,_,w),o.call(a+"_mul",l,p,b),o.call(a+"_square",w,L),o.call(a+"_add",b,b,A),o.call(a+"_sub",L,m,d),o.call(a+"_sub",d,A,d),o.call(a+"_mul",r,m,y),o.call(a+"_add",y,y,y),o.call(a+"_sub",b,d,u),o.call(a+"_mul",u,w,u),o.call(a+"_sub",u,y,u),o.call(a+"_add",f,f,g))}(),function(){const i=t.addFunction(e+"_addMixed");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const s=o.getLocal("z1"),c=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n)),u=o.getLocal("pr"),g=o.i32_add(o.getLocal("pr"),o.i32_const(n)),f=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),h=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n)),C=o.i32_const(t.alloc(n)),I=o.i32_const(t.alloc(n)),F=o.i32_const(t.alloc(n)),x=o.i32_const(t.alloc(n)),E=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copyAffine",o.getLocal("p2"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",s),[...o.call(e+"_addAffine",l,c,u),...o.ret([])]),o.call(a+"_square",s,h),o.call(a+"_mul",c,h,_),o.call(a+"_mul",s,h,p),o.call(a+"_mul",d,p,m),o.if(o.call(a+"_eq",l,_),o.if(o.call(a+"_eq",r,m),[...o.call(e+"_doubleAffine",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",_,l,w),o.call(a+"_sub",m,r,b),o.call(a+"_square",w,L),o.call(a+"_add",L,L,A),o.call(a+"_add",A,A,A),o.call(a+"_mul",w,A,y),o.call(a+"_add",b,b,C),o.call(a+"_mul",l,A,F),o.call(a+"_square",C,I),o.call(a+"_add",F,F,x),o.call(a+"_sub",I,y,u),o.call(a+"_sub",u,x,u),o.call(a+"_mul",r,y,E),o.call(a+"_add",E,E,E),o.call(a+"_sub",F,u,g),o.call(a+"_mul",g,C,g),o.call(a+"_sub",g,E,g),o.call(a+"_add",s,w,f),o.call(a+"_square",f,f),o.call(a+"_sub",f,h,f),o.call(a+"_sub",f,L,f))}(),function(){const i=t.addFunction(e+"_add");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32"),i.addLocal("z2","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const s=o.getLocal("z1"),c=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n));i.addCode(o.setLocal("z2",o.i32_add(o.getLocal("p2"),o.i32_const(2*n))));const u=o.getLocal("z2"),g=o.getLocal("pr"),f=o.i32_add(o.getLocal("pr"),o.i32_const(n)),h=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n)),C=o.i32_const(t.alloc(n)),I=o.i32_const(t.alloc(n)),F=o.i32_const(t.alloc(n)),x=o.i32_const(t.alloc(n)),E=o.i32_const(t.alloc(n)),v=o.i32_const(t.alloc(n)),B=o.i32_const(t.alloc(n)),S=o.i32_const(t.alloc(n)),P=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copy",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(e+"_isZero",o.getLocal("p2")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",s),[...o.call(e+"_addMixed",c,l,g),...o.ret([])]),o.if(o.call(a+"_isOne",u),[...o.call(e+"_addMixed",l,c,g),...o.ret([])]),o.call(a+"_square",s,_),o.call(a+"_square",u,p),o.call(a+"_mul",l,p,m),o.call(a+"_mul",c,_,w),o.call(a+"_mul",s,_,L),o.call(a+"_mul",u,p,b),o.call(a+"_mul",r,b,A),o.call(a+"_mul",d,L,y),o.if(o.call(a+"_eq",m,w),o.if(o.call(a+"_eq",A,y),[...o.call(e+"_double",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",w,m,C),o.call(a+"_sub",y,A,I),o.call(a+"_add",C,C,F),o.call(a+"_square",F,F),o.call(a+"_mul",C,F,x),o.call(a+"_add",I,I,E),o.call(a+"_mul",m,F,B),o.call(a+"_square",E,v),o.call(a+"_add",B,B,S),o.call(a+"_sub",v,x,g),o.call(a+"_sub",g,S,g),o.call(a+"_mul",A,x,P),o.call(a+"_add",P,P,P),o.call(a+"_sub",B,g,f),o.call(a+"_mul",f,E,f),o.call(a+"_sub",f,P,f),o.call(a+"_add",s,u,h),o.call(a+"_square",h,h),o.call(a+"_sub",h,_,h),o.call(a+"_sub",h,p,h),o.call(a+"_mul",h,C,h))}(),function(){const i=t.addFunction(e+"_negAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.getLocal("pr"),c=o.i32_add(o.getLocal("pr"),o.i32_const(n));i.addCode(o.call(a+"_copy",l,s),o.call(a+"_neg",r,c))}(),function(){const i=t.addFunction(e+"_neg");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),c=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n));i.addCode(o.call(a+"_copy",l,c),o.call(a+"_neg",r,d),o.call(a+"_copy",s,u))}(),function(){const a=t.addFunction(e+"_subAffine");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_negAffine",i.getLocal("p2"),o),i.call(e+"_addAffine",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const a=t.addFunction(e+"_subMixed");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_negAffine",i.getLocal("p2"),o),i.call(e+"_addMixed",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_neg",i.getLocal("p2"),o),i.call(e+"_add",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const i=t.addFunction(e+"_fromMontgomeryAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_fromMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<2;t++)i.addCode(o.call(a+"_fromMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_fromMontgomery");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_fromMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<3;t++)i.addCode(o.call(a+"_fromMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toMontgomeryAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_toMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<2;t++)i.addCode(o.call(a+"_toMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toMontgomery");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_toMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<3;t++)i.addCode(o.call(a+"_toMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),c=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(a+"_zero",c),...o.call(a+"_zero",d)],[...o.call(a+"_inverse",s,u),...o.call(a+"_square",u,g),...o.call(a+"_mul",u,g,f),...o.call(a+"_mul",l,g,c),...o.call(a+"_mul",r,f,d)]))}(),function(){const o=t.addFunction(e+"_inCurveAffine");o.addParam("pIn","i32"),o.setReturnType("i32");const l=o.getCodeBuilder(),r=l.getLocal("pIn"),s=l.i32_add(l.getLocal("pIn"),l.i32_const(n)),c=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(n));o.addCode(l.call(a+"_square",s,c),l.call(a+"_square",r,d),l.call(a+"_mul",r,d,d),l.call(a+"_add",d,l.i32_const(i),d),l.ret(l.call(a+"_eq",c,d)))}(),function(){const a=t.addFunction(e+"_inCurve");a.addParam("pIn","i32"),a.setReturnType("i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(2*n));a.addCode(i.call(e+"_toAffine",i.getLocal("pIn"),o),i.ret(i.call(e+"_inCurveAffine",o)))}(),function(){const i=t.addFunction(e+"_batchToAffine");i.addParam("pIn","i32"),i.addParam("n","i32"),i.addParam("pOut","i32"),i.addLocal("pAux","i32"),i.addLocal("itIn","i32"),i.addLocal("itAux","i32"),i.addLocal("itOut","i32"),i.addLocal("i","i32");const o=i.getCodeBuilder(),l=o.i32_const(t.alloc(n));i.addCode(o.setLocal("pAux",o.i32_load(o.i32_const(0))),o.i32_store(o.i32_const(0),o.i32_add(o.getLocal("pAux"),o.i32_mul(o.getLocal("n"),o.i32_const(n)))),o.call(a+"_batchInverse",o.i32_add(o.getLocal("pIn"),o.i32_const(2*n)),o.i32_const(3*n),o.getLocal("n"),o.getLocal("pAux"),o.i32_const(n)),o.setLocal("itIn",o.getLocal("pIn")),o.setLocal("itAux",o.getLocal("pAux")),o.setLocal("itOut",o.getLocal("pOut")),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.if(o.call(a+"_isZero",o.getLocal("itAux")),[...o.call(a+"_zero",o.getLocal("itOut")),...o.call(a+"_zero",o.i32_add(o.getLocal("itOut"),o.i32_const(n)))],[...o.call(a+"_mul",o.getLocal("itAux"),o.i32_add(o.getLocal("itIn"),o.i32_const(n)),l),...o.call(a+"_square",o.getLocal("itAux"),o.getLocal("itAux")),...o.call(a+"_mul",o.getLocal("itAux"),o.getLocal("itIn"),o.getLocal("itOut")),...o.call(a+"_mul",o.getLocal("itAux"),l,o.i32_add(o.getLocal("itOut"),o.i32_const(n)))]),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.i32_const(3*n))),o.setLocal("itOut",o.i32_add(o.getLocal("itOut"),o.i32_const(2*n))),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(n))),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))),o.i32_store(o.i32_const(0),o.getLocal("pAux")))}(),function(){const i=t.addFunction(e+"_normalize");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),l=o.getLocal("p1"),r=o.i32_add(o.getLocal("p1"),o.i32_const(n)),s=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),c=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.call(e+"_zero",o.getLocal("pr")),[...o.call(a+"_inverse",s,g),...o.call(a+"_square",g,f),...o.call(a+"_mul",g,f,h),...o.call(a+"_mul",l,f,c),...o.call(a+"_mul",r,h,d),...o.call(a+"_one",u)]))}(),function(){const a=t.addFunction(e+"__reverseBytes");a.addParam("pIn","i32"),a.addParam("n","i32"),a.addParam("pOut","i32"),a.addLocal("itOut","i32"),a.addLocal("itIn","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("itOut",i.i32_sub(i.i32_add(i.getLocal("pOut"),i.getLocal("n")),i.i32_const(1))),i.setLocal("itIn",i.getLocal("pIn")),i.block(i.loop(i.br_if(1,i.i32_lt_s(i.getLocal("itOut"),i.getLocal("pOut"))),i.i32_store8(i.getLocal("itOut"),i.i32_load8_u(i.getLocal("itIn"))),i.setLocal("itOut",i.i32_sub(i.getLocal("itOut"),i.i32_const(1))),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.i32_const(1))),i.br(0))))}(),function(){const a=t.addFunction(e+"_LEMtoU");a.addParam("pIn","i32"),a.addParam("pOut","i32");const i=a.getCodeBuilder(),o=t.alloc(2*n),l=i.i32_const(o),r=i.i32_const(o),s=i.i32_const(o+n);a.addCode(i.if(i.call(e+"_isZeroAffine",i.getLocal("pIn")),[...i.call(e+"_zeroAffine",i.getLocal("pOut")),...i.i32_store8(i.getLocal("pOut"),i.i32_const(64)),...i.ret([])]),i.call(e+"_fromMontgomeryAffine",i.getLocal("pIn"),l),i.call(e+"__reverseBytes",r,i.i32_const(n),i.getLocal("pOut")),i.call(e+"__reverseBytes",s,i.i32_const(n),i.i32_add(i.getLocal("pOut"),i.i32_const(n))))}(),function(){const i=t.addFunction(e+"_LEMtoC");i.addParam("pIn","i32"),i.addParam("pOut","i32");const o=i.getCodeBuilder(),l=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("pIn")),[...o.call(a+"_zero",o.getLocal("pOut")),...o.i32_store8(o.getLocal("pOut"),o.i32_const(64)),...o.ret([])]),o.call(a+"_fromMontgomery",o.getLocal("pIn"),l),o.call(e+"__reverseBytes",l,o.i32_const(n),o.getLocal("pOut")),o.if(o.i32_eq(o.call(a+"_sign",o.i32_add(o.getLocal("pIn"),o.i32_const(n))),o.i32_const(-1)),o.i32_store8(o.getLocal("pOut"),o.i32_or(o.i32_load8_u(o.getLocal("pOut")),o.i32_const(128)))))}(),function(){const a=t.addFunction(e+"_UtoLEM");a.addParam("pIn","i32"),a.addParam("pOut","i32");const i=a.getCodeBuilder(),o=t.alloc(2*n),l=i.i32_const(o),r=i.i32_const(o),s=i.i32_const(o+n);a.addCode(i.if(i.i32_and(i.i32_load8_u(i.getLocal("pIn")),i.i32_const(64)),[...i.call(e+"_zeroAffine",i.getLocal("pOut")),...i.ret([])]),i.call(e+"__reverseBytes",i.getLocal("pIn"),i.i32_const(n),r),i.call(e+"__reverseBytes",i.i32_add(i.getLocal("pIn"),i.i32_const(n)),i.i32_const(n),s),i.call(e+"_toMontgomeryAffine",l,i.getLocal("pOut")))}(),function(){const o=t.addFunction(e+"_CtoLEM");o.addParam("pIn","i32"),o.addParam("pOut","i32"),o.addLocal("firstByte","i32"),o.addLocal("greatest","i32");const l=o.getCodeBuilder(),r=t.alloc(2*n),s=l.i32_const(r),c=l.i32_const(r+n);o.addCode(l.setLocal("firstByte",l.i32_load8_u(l.getLocal("pIn"))),l.if(l.i32_and(l.getLocal("firstByte"),l.i32_const(64)),[...l.call(e+"_zeroAffine",l.getLocal("pOut")),...l.ret([])]),l.setLocal("greatest",l.i32_and(l.getLocal("firstByte"),l.i32_const(128))),l.call(a+"_copy",l.getLocal("pIn"),c),l.i32_store8(c,l.i32_and(l.getLocal("firstByte"),l.i32_const(63))),l.call(e+"__reverseBytes",c,l.i32_const(n),s),l.call(a+"_toMontgomery",s,l.getLocal("pOut")),l.call(a+"_square",l.getLocal("pOut"),c),l.call(a+"_mul",l.getLocal("pOut"),c,c),l.call(a+"_add",c,l.i32_const(i),c),l.call(a+"_sqrt",c,c),l.call(a+"_neg",c,s),l.if(l.i32_eq(l.call(a+"_sign",c),l.i32_const(-1)),l.if(l.getLocal("greatest"),l.call(a+"_copy",c,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(a+"_neg",c,l.i32_add(l.getLocal("pOut"),l.i32_const(n)))),l.if(l.getLocal("greatest"),l.call(a+"_neg",c,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(a+"_copy",c,l.i32_add(l.getLocal("pOut"),l.i32_const(n))))))}(),Tt(t,e+"_batchLEMtoU",e+"_LEMtoU",2*n,2*n),Tt(t,e+"_batchLEMtoC",e+"_LEMtoC",2*n,n),Tt(t,e+"_batchUtoLEM",e+"_UtoLEM",2*n,2*n),Tt(t,e+"_batchCtoLEM",e+"_CtoLEM",n,2*n,!0),Tt(t,e+"_batchToJacobian",e+"_toJacobian",2*n,3*n,!0),Qt(t,e,e+"_multiexp",e+"_add",3*n),Qt(t,e,e+"_multiexpAffine",e+"_addMixed",2*n),Ut(t,e+"_timesScalar",3*n,e+"_add",e+"_double",e+"_sub",e+"_copy",e+"_zero"),Ut(t,e+"_timesScalarAffine",2*n,e+"_addMixed",e+"_double",e+"_subMixed",e+"_copyAffine",e+"_zero"),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isZeroAffine"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_eqMixed"),t.exportFunction(e+"_eqAffine"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_copyAffine"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_zeroAffine"),t.exportFunction(e+"_double"),t.exportFunction(e+"_doubleAffine"),t.exportFunction(e+"_add"),t.exportFunction(e+"_addMixed"),t.exportFunction(e+"_addAffine"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_negAffine"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_subMixed"),t.exportFunction(e+"_subAffine"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_fromMontgomeryAffine"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_toMontgomeryAffine"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_timesScalarAffine"),t.exportFunction(e+"_normalize"),t.exportFunction(e+"_LEMtoU"),t.exportFunction(e+"_LEMtoC"),t.exportFunction(e+"_UtoLEM"),t.exportFunction(e+"_CtoLEM"),t.exportFunction(e+"_batchLEMtoU"),t.exportFunction(e+"_batchLEMtoC"),t.exportFunction(e+"_batchUtoLEM"),t.exportFunction(e+"_batchCtoLEM"),t.exportFunction(e+"_toAffine"),t.exportFunction(e+"_toJacobian"),t.exportFunction(e+"_batchToAffine"),t.exportFunction(e+"_batchToJacobian"),t.exportFunction(e+"_inCurve"),t.exportFunction(e+"_inCurveAffine"),e};const{isOdd:Mt,modInv:kt,modPow:Rt}=J,Dt=K;var Nt=function(t,e,a,i,o){const n=8*t.modules[i].n64,l=8*t.modules[a].n64,r=t.modules[i].q;let s=r-1n,c=0;for(;!Mt(s);)c++,s>>=1n;let d=2n;for(;1n===Rt(d,r>>1n,r);)d+=1n;const u=new Array(c+1);u[c]=Rt(d,s,r);let g=c-1;for(;g>=0;)u[g]=Rt(u[g+1],2n,r),g--;const f=[],h=(1n<>a);return e}const F=Array(256);for(let t=0;t<256;t++)F[t]=I(t);const x=t.alloc(F);function E(){const a=t.addFunction(e+"_fft");a.addParam("px","i32"),a.addParam("n","i32"),a.addLocal("bits","i32");const o=a.getCodeBuilder(),l=o.i32_const(t.alloc(n));a.addCode(o.setLocal("bits",o.call(e+"__log2",o.getLocal("n"))),o.call(i+"_one",l),o.call(e+"_rawfft",o.getLocal("px"),o.getLocal("bits"),o.i32_const(0),l))}!function(){const a=t.addFunction(e+"__rev");a.addParam("x","i32"),a.addParam("bits","i32"),a.setReturnType("i32");const i=a.getCodeBuilder();a.addCode(i.i32_rotl(i.i32_add(i.i32_add(i.i32_shl(i.i32_load8_u(i.i32_and(i.getLocal("x"),i.i32_const(255)),x,0),i.i32_const(24)),i.i32_shl(i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(8)),i.i32_const(255)),x,0),i.i32_const(16))),i.i32_add(i.i32_shl(i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(16)),i.i32_const(255)),x,0),i.i32_const(8)),i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(24)),i.i32_const(255)),x,0))),i.getLocal("bits")))}(),function(){const i=t.addFunction(e+"__reversePermutation");i.addParam("px","i32"),i.addParam("bits","i32"),i.addLocal("n","i32"),i.addLocal("i","i32"),i.addLocal("ri","i32"),i.addLocal("idx1","i32"),i.addLocal("idx2","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(l));i.addCode(o.setLocal("n",o.i32_shl(o.i32_const(1),o.getLocal("bits"))),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.setLocal("idx1",o.i32_add(o.getLocal("px"),o.i32_mul(o.getLocal("i"),o.i32_const(l)))),o.setLocal("ri",o.call(e+"__rev",o.getLocal("i"),o.getLocal("bits"))),o.setLocal("idx2",o.i32_add(o.getLocal("px"),o.i32_mul(o.getLocal("ri"),o.i32_const(l)))),o.if(o.i32_lt_u(o.getLocal("i"),o.getLocal("ri")),[...o.call(a+"_copy",o.getLocal("idx1"),n),...o.call(a+"_copy",o.getLocal("idx2"),o.getLocal("idx1")),...o.call(a+"_copy",n,o.getLocal("idx2"))]),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))))}(),function(){const n=t.addFunction(e+"__fftFinal");n.addParam("px","i32"),n.addParam("bits","i32"),n.addParam("reverse","i32"),n.addParam("mulFactor","i32"),n.addLocal("n","i32"),n.addLocal("ndiv2","i32"),n.addLocal("pInv2","i32"),n.addLocal("i","i32"),n.addLocal("mask","i32"),n.addLocal("idx1","i32"),n.addLocal("idx2","i32");const r=n.getCodeBuilder(),s=r.i32_const(t.alloc(l));n.addCode(r.if(r.i32_and(r.i32_eqz(r.getLocal("reverse")),r.call(i+"_isOne",r.getLocal("mulFactor"))),r.ret([])),r.setLocal("n",r.i32_shl(r.i32_const(1),r.getLocal("bits"))),r.setLocal("mask",r.i32_sub(r.getLocal("n"),r.i32_const(1))),r.setLocal("i",r.i32_const(1)),r.setLocal("ndiv2",r.i32_shr_u(r.getLocal("n"),r.i32_const(1))),r.block(r.loop(r.br_if(1,r.i32_ge_u(r.getLocal("i"),r.getLocal("ndiv2"))),r.setLocal("idx1",r.i32_add(r.getLocal("px"),r.i32_mul(r.getLocal("i"),r.i32_const(l)))),r.setLocal("idx2",r.i32_add(r.getLocal("px"),r.i32_mul(r.i32_sub(r.getLocal("n"),r.getLocal("i")),r.i32_const(l)))),r.if(r.getLocal("reverse"),r.if(r.call(i+"_isOne",r.getLocal("mulFactor")),[...r.call(a+"_copy",r.getLocal("idx1"),s),...r.call(a+"_copy",r.getLocal("idx2"),r.getLocal("idx1")),...r.call(a+"_copy",s,r.getLocal("idx2"))],[...r.call(a+"_copy",r.getLocal("idx1"),s),...r.call(o,r.getLocal("idx2"),r.getLocal("mulFactor"),r.getLocal("idx1")),...r.call(o,s,r.getLocal("mulFactor"),r.getLocal("idx2"))]),r.if(r.call(i+"_isOne",r.getLocal("mulFactor")),[],[...r.call(o,r.getLocal("idx1"),r.getLocal("mulFactor"),r.getLocal("idx1")),...r.call(o,r.getLocal("idx2"),r.getLocal("mulFactor"),r.getLocal("idx2"))])),r.setLocal("i",r.i32_add(r.getLocal("i"),r.i32_const(1))),r.br(0))),r.if(r.call(i+"_isOne",r.getLocal("mulFactor")),[],[...r.call(o,r.getLocal("px"),r.getLocal("mulFactor"),r.getLocal("px")),...r.setLocal("idx2",r.i32_add(r.getLocal("px"),r.i32_mul(r.getLocal("ndiv2"),r.i32_const(l)))),...r.call(o,r.getLocal("idx2"),r.getLocal("mulFactor"),r.getLocal("idx2"))]))}(),function(){const r=t.addFunction(e+"_rawfft");r.addParam("px","i32"),r.addParam("bits","i32"),r.addParam("reverse","i32"),r.addParam("mulFactor","i32"),r.addLocal("s","i32"),r.addLocal("k","i32"),r.addLocal("j","i32"),r.addLocal("m","i32"),r.addLocal("mdiv2","i32"),r.addLocal("n","i32"),r.addLocal("pwm","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));r.addCode(s.call(e+"__reversePermutation",s.getLocal("px"),s.getLocal("bits")),s.setLocal("n",s.i32_shl(s.i32_const(1),s.getLocal("bits"))),s.setLocal("s",s.i32_const(1)),s.block(s.loop(s.br_if(1,s.i32_gt_u(s.getLocal("s"),s.getLocal("bits"))),s.setLocal("m",s.i32_shl(s.i32_const(1),s.getLocal("s"))),s.setLocal("pwm",s.i32_add(s.i32_const(_),s.i32_mul(s.getLocal("s"),s.i32_const(n)))),s.setLocal("k",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("k"),s.getLocal("n"))),s.call(i+"_one",c),s.setLocal("mdiv2",s.i32_shr_u(s.getLocal("m"),s.i32_const(1))),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("j"),s.getLocal("mdiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("px"),s.i32_mul(s.i32_add(s.getLocal("k"),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.i32_mul(s.getLocal("mdiv2"),s.i32_const(l)))),s.call(o,s.getLocal("idx2"),c,d),s.call(a+"_copy",s.getLocal("idx1"),u),s.call(a+"_add",u,d,s.getLocal("idx1")),s.call(a+"_sub",u,d,s.getLocal("idx2")),s.call(i+"_mul",c,s.getLocal("pwm"),c),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("k",s.i32_add(s.getLocal("k"),s.getLocal("m"))),s.br(0))),s.setLocal("s",s.i32_add(s.getLocal("s"),s.i32_const(1))),s.br(0))),s.call(e+"__fftFinal",s.getLocal("px"),s.getLocal("bits"),s.getLocal("reverse"),s.getLocal("mulFactor")))}(),function(){const a=t.addFunction(e+"__log2");a.addParam("n","i32"),a.setReturnType("i32"),a.addLocal("bits","i32"),a.addLocal("aux","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("aux",i.i32_shr_u(i.getLocal("n"),i.i32_const(1)))),a.addCode(i.setLocal("bits",i.i32_const(0))),a.addCode(i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("aux"))),i.setLocal("aux",i.i32_shr_u(i.getLocal("aux"),i.i32_const(1))),i.setLocal("bits",i.i32_add(i.getLocal("bits"),i.i32_const(1))),i.br(0)))),a.addCode(i.if(i.i32_ne(i.getLocal("n"),i.i32_shl(i.i32_const(1),i.getLocal("bits"))),i.unreachable())),a.addCode(i.if(i.i32_gt_u(i.getLocal("bits"),i.i32_const(c)),i.unreachable())),a.addCode(i.getLocal("bits"))}(),E(),function(){const a=t.addFunction(e+"_ifft");a.addParam("px","i32"),a.addParam("n","i32"),a.addLocal("bits","i32"),a.addLocal("pInv2","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("bits",i.call(e+"__log2",i.getLocal("n"))),i.setLocal("pInv2",i.i32_add(i.i32_const(w),i.i32_mul(i.getLocal("bits"),i.i32_const(n)))),i.call(e+"_rawfft",i.getLocal("px"),i.getLocal("bits"),i.i32_const(1),i.getLocal("pInv2")))}(),function(){const r=t.addFunction(e+"_fftJoin");r.addParam("pBuff1","i32"),r.addParam("pBuff2","i32"),r.addParam("n","i32"),r.addParam("first","i32"),r.addParam("inc","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32"),r.addLocal("i","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));r.addCode(s.call(i+"_copy",s.getLocal("first"),c),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(o,s.getLocal("idx2"),c,d),s.call(a+"_copy",s.getLocal("idx1"),u),s.call(a+"_add",u,d,s.getLocal("idx1")),s.call(a+"_sub",u,d,s.getLocal("idx2")),s.call(i+"_mul",c,s.getLocal("inc"),c),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const r=t.addFunction(e+"_fftJoinExt");r.addParam("pBuff1","i32"),r.addParam("pBuff2","i32"),r.addParam("n","i32"),r.addParam("first","i32"),r.addParam("inc","i32"),r.addParam("totalBits","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32"),r.addLocal("i","i32"),r.addLocal("pShiftToM","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));r.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(y),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(i+"_copy",s.getLocal("first"),c),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(a+"_add",s.getLocal("idx1"),s.getLocal("idx2"),d),s.call(o,s.getLocal("idx2"),s.getLocal("pShiftToM"),s.getLocal("idx2")),s.call(a+"_add",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(o,s.getLocal("idx2"),c,s.getLocal("idx2")),s.call(a+"_copy",d,s.getLocal("idx1")),s.call(i+"_mul",c,s.getLocal("inc"),c),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const r=t.addFunction(e+"_fftJoinExtInv");r.addParam("pBuff1","i32"),r.addParam("pBuff2","i32"),r.addParam("n","i32"),r.addParam("first","i32"),r.addParam("inc","i32"),r.addParam("totalBits","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32"),r.addLocal("i","i32"),r.addLocal("pShiftToM","i32"),r.addLocal("pSConst","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));r.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(y),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(i+"_copy",s.getLocal("first"),c),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(o,s.getLocal("idx2"),c,d),s.call(a+"_sub",s.getLocal("idx1"),d,s.getLocal("idx2")),s.call(o,s.getLocal("idx2"),s.getLocal("pSConst"),s.getLocal("idx2")),s.call(o,s.getLocal("idx1"),s.getLocal("pShiftToM"),s.getLocal("idx1")),s.call(a+"_sub",d,s.getLocal("idx1"),s.getLocal("idx1")),s.call(o,s.getLocal("idx1"),s.getLocal("pSConst"),s.getLocal("idx1")),s.call(i+"_mul",c,s.getLocal("inc"),c),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const r=t.addFunction(e+"_fftMix");r.addParam("pBuff","i32"),r.addParam("n","i32"),r.addParam("exp","i32"),r.addLocal("nGroups","i32"),r.addLocal("nPerGroup","i32"),r.addLocal("nPerGroupDiv2","i32"),r.addLocal("pairOffset","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32"),r.addLocal("i","i32"),r.addLocal("j","i32"),r.addLocal("pwm","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));r.addCode(s.setLocal("nPerGroup",s.i32_shl(s.i32_const(1),s.getLocal("exp"))),s.setLocal("nPerGroupDiv2",s.i32_shr_u(s.getLocal("nPerGroup"),s.i32_const(1))),s.setLocal("nGroups",s.i32_shr_u(s.getLocal("n"),s.getLocal("exp"))),s.setLocal("pairOffset",s.i32_mul(s.getLocal("nPerGroupDiv2"),s.i32_const(l))),s.setLocal("pwm",s.i32_add(s.i32_const(_),s.i32_mul(s.getLocal("exp"),s.i32_const(n)))),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("nGroups"))),s.call(i+"_one",c),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("j"),s.getLocal("nPerGroupDiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff"),s.i32_mul(s.i32_add(s.i32_mul(s.getLocal("i"),s.getLocal("nPerGroup")),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.getLocal("pairOffset"))),s.call(o,s.getLocal("idx2"),c,d),s.call(a+"_copy",s.getLocal("idx1"),u),s.call(a+"_add",u,d,s.getLocal("idx1")),s.call(a+"_sub",u,d,s.getLocal("idx2")),s.call(i+"_mul",c,s.getLocal("pwm"),c),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const i=t.addFunction(e+"_fftFinal");i.addParam("pBuff","i32"),i.addParam("n","i32"),i.addParam("factor","i32"),i.addLocal("idx1","i32"),i.addLocal("idx2","i32"),i.addLocal("i","i32"),i.addLocal("ndiv2","i32");const n=i.getCodeBuilder(),r=n.i32_const(t.alloc(l));i.addCode(n.setLocal("ndiv2",n.i32_shr_u(n.getLocal("n"),n.i32_const(1))),n.if(n.i32_and(n.getLocal("n"),n.i32_const(1)),n.call(o,n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))),n.getLocal("factor"),n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))))),n.setLocal("i",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_ge_u(n.getLocal("i"),n.getLocal("ndiv2"))),n.setLocal("idx1",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("i"),n.i32_const(l)))),n.setLocal("idx2",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.i32_sub(n.i32_sub(n.getLocal("n"),n.i32_const(1)),n.getLocal("i")),n.i32_const(l)))),n.call(o,n.getLocal("idx2"),n.getLocal("factor"),r),n.call(o,n.getLocal("idx1"),n.getLocal("factor"),n.getLocal("idx2")),n.call(a+"_copy",r,n.getLocal("idx1")),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),function(){const r=t.addFunction(e+"_prepareLagrangeEvaluation");r.addParam("pBuff1","i32"),r.addParam("pBuff2","i32"),r.addParam("n","i32"),r.addParam("first","i32"),r.addParam("inc","i32"),r.addParam("totalBits","i32"),r.addLocal("idx1","i32"),r.addLocal("idx2","i32"),r.addLocal("i","i32"),r.addLocal("pShiftToM","i32"),r.addLocal("pSConst","i32");const s=r.getCodeBuilder(),c=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));r.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(y),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(i+"_copy",s.getLocal("first"),c),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(o,s.getLocal("idx1"),s.getLocal("pShiftToM"),d),s.call(a+"_sub",s.getLocal("idx2"),d,d),s.call(a+"_sub",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(o,d,s.getLocal("pSConst"),s.getLocal("idx1")),s.call(o,s.getLocal("idx2"),c,s.getLocal("idx2")),s.call(i+"_mul",c,s.getLocal("inc"),c),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),t.exportFunction(e+"_fft"),t.exportFunction(e+"_ifft"),t.exportFunction(e+"_rawfft"),t.exportFunction(e+"_fftJoin"),t.exportFunction(e+"_fftJoinExt"),t.exportFunction(e+"_fftJoinExtInv"),t.exportFunction(e+"_fftMix"),t.exportFunction(e+"_fftFinal"),t.exportFunction(e+"_prepareLagrangeEvaluation")},Vt=function(t,e,a){const i=8*t.modules[a].n64;return function(){const o=t.addFunction(e+"_zero");o.addParam("px","i32"),o.addParam("n","i32"),o.addLocal("lastp","i32"),o.addLocal("p","i32");const n=o.getCodeBuilder();o.addCode(n.setLocal("p",n.getLocal("px")),n.setLocal("lastp",n.i32_add(n.getLocal("px"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("p"),n.getLocal("lastp"))),n.call(a+"_zero",n.getLocal("p")),n.setLocal("p",n.i32_add(n.getLocal("p"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_constructLC");o.addParam("ppolynomials","i32"),o.addParam("psignals","i32"),o.addParam("nSignals","i32"),o.addParam("pres","i32"),o.addLocal("i","i32"),o.addLocal("j","i32"),o.addLocal("pp","i32"),o.addLocal("ps","i32"),o.addLocal("pd","i32"),o.addLocal("ncoefs","i32");const n=o.getCodeBuilder(),l=n.i32_const(t.alloc(i));o.addCode(n.setLocal("i",n.i32_const(0)),n.setLocal("pp",n.getLocal("ppolynomials")),n.setLocal("ps",n.getLocal("psignals")),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("i"),n.getLocal("nSignals"))),n.setLocal("ncoefs",n.i32_load(n.getLocal("pp"))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.setLocal("j",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("j"),n.getLocal("ncoefs"))),n.setLocal("pd",n.i32_add(n.getLocal("pres"),n.i32_mul(n.i32_load(n.getLocal("pp")),n.i32_const(i)))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.call(a+"_mul",n.getLocal("ps"),n.getLocal("pp"),l),n.call(a+"_add",l,n.getLocal("pd"),n.getLocal("pd")),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(i))),n.setLocal("j",n.i32_add(n.getLocal("j"),n.i32_const(1))),n.br(0))),n.setLocal("ps",n.i32_add(n.getLocal("ps"),n.i32_const(i))),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),t.exportFunction(e+"_zero"),t.exportFunction(e+"_constructLC"),e},$t=function(t,e,a){const i=8*t.modules[a].n64;return function(){const o=t.addFunction(e+"_buildABC");o.addParam("pCoefs","i32"),o.addParam("nCoefs","i32"),o.addParam("pWitness","i32"),o.addParam("pA","i32"),o.addParam("pB","i32"),o.addParam("pC","i32"),o.addParam("offsetOut","i32"),o.addParam("nOut","i32"),o.addParam("offsetWitness","i32"),o.addParam("nWitness","i32"),o.addLocal("it","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("last","i32"),o.addLocal("m","i32"),o.addLocal("c","i32"),o.addLocal("s","i32"),o.addLocal("pOut","i32");const n=o.getCodeBuilder(),l=n.i32_const(t.alloc(i));o.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_zero",n.getLocal("ita")),n.call(a+"_zero",n.getLocal("itb")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.br(0))),n.setLocal("it",n.getLocal("pCoefs")),n.setLocal("last",n.i32_add(n.getLocal("pCoefs"),n.i32_mul(n.getLocal("nCoefs"),n.i32_const(i+12)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("it"),n.getLocal("last"))),n.setLocal("s",n.i32_load(n.getLocal("it"),8)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_ge_u(n.getLocal("s"),n.i32_add(n.getLocal("offsetWitness"),n.getLocal("nWitness")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)]),n.setLocal("m",n.i32_load(n.getLocal("it"))),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(0)),n.setLocal("pOut",n.getLocal("pA")),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(1)),n.setLocal("pOut",n.getLocal("pB")),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)])),n.setLocal("c",n.i32_load(n.getLocal("it"),4)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_ge_u(n.getLocal("c"),n.i32_add(n.getLocal("offsetOut"),n.getLocal("nOut")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)]),n.setLocal("pOut",n.i32_add(n.getLocal("pOut"),n.i32_mul(n.i32_sub(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_const(i)))),n.call(a+"_mul",n.i32_add(n.getLocal("pWitness"),n.i32_mul(n.i32_sub(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_const(i))),n.i32_add(n.getLocal("it"),n.i32_const(12)),l),n.call(a+"_add",n.getLocal("pOut"),l,n.getLocal("pOut")),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),n.br(0))),n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("it",n.getLocal("pC")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_mul",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("it")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_joinABC");o.addParam("pA","i32"),o.addParam("pB","i32"),o.addParam("pC","i32"),o.addParam("n","i32"),o.addParam("pP","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("itc","i32"),o.addLocal("itp","i32"),o.addLocal("last","i32");const n=o.getCodeBuilder(),l=n.i32_const(t.alloc(i));o.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("itc",n.getLocal("pC")),n.setLocal("itp",n.getLocal("pP")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_mul",n.getLocal("ita"),n.getLocal("itb"),l),n.call(a+"_sub",l,n.getLocal("itc"),n.getLocal("itp")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("itc",n.i32_add(n.getLocal("itc"),n.i32_const(i))),n.setLocal("itp",n.i32_add(n.getLocal("itp"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_batchAdd");o.addParam("pa","i32"),o.addParam("pb","i32"),o.addParam("n","i32"),o.addParam("pr","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("itr","i32"),o.addLocal("last","i32");const n=o.getCodeBuilder();o.addCode(n.setLocal("ita",n.getLocal("pa")),n.setLocal("itb",n.getLocal("pb")),n.setLocal("itr",n.getLocal("pr")),n.setLocal("last",n.i32_add(n.getLocal("pa"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_add",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("itr")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("itr",n.i32_add(n.getLocal("itr"),n.i32_const(i))),n.br(0))))}(),t.exportFunction(e+"_buildABC"),t.exportFunction(e+"_joinABC"),t.exportFunction(e+"_batchAdd"),e},jt=function(t,e,a,i,o,n,l,r){const s=t.addFunction(e);s.addParam("pIn","i32"),s.addParam("n","i32"),s.addParam("pFirst","i32"),s.addParam("pInc","i32"),s.addParam("pOut","i32"),s.addLocal("pOldFree","i32"),s.addLocal("i","i32"),s.addLocal("pFrom","i32"),s.addLocal("pTo","i32");const c=s.getCodeBuilder(),d=c.i32_const(t.alloc(l));s.addCode(c.setLocal("pFrom",c.getLocal("pIn")),c.setLocal("pTo",c.getLocal("pOut"))),s.addCode(c.call(i+"_copy",c.getLocal("pFirst"),d)),s.addCode(c.setLocal("i",c.i32_const(0)),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("i"),c.getLocal("n"))),c.call(r,c.getLocal("pFrom"),d,c.getLocal("pTo")),c.setLocal("pFrom",c.i32_add(c.getLocal("pFrom"),c.i32_const(o))),c.setLocal("pTo",c.i32_add(c.getLocal("pTo"),c.i32_const(n))),c.call(i+"_mul",d,c.getLocal("pInc"),d),c.setLocal("i",c.i32_add(c.getLocal("i"),c.i32_const(1))),c.br(0)))),t.exportFunction(e)};const Kt=K,Ht=It,Zt=Et,Wt=Pt,Yt=Ot,Jt=qt,Xt=Nt,te=Vt,ee=$t,ae=jt,{bitLength:ie,modInv:oe,isOdd:ne,isNegative:le}=J;const re=K,se=It,ce=Et,de=Pt,ue=Ot,ge=qt,fe=Nt,he=Vt,_e=$t,pe=jt,{bitLength:me,isOdd:we,isNegative:Le}=J;var be=function(t,e){const a=e||"bn128";if(t.modules[a])return a;const i=21888242871839275222246405745257275088696311157297823662689037894645226208583n,o=21888242871839275222246405745257275088548364400416034343698204186575808495617n,n=Math.floor((ie(i-1n)-1)/64)+1,l=8*n,r=l,s=l,c=2*s,d=12*s,u=t.alloc(Kt.bigInt2BytesLE(o,r)),g=Ht(t,i,"f1m");Zt(t,o,"fr","frm");const f=t.alloc(Kt.bigInt2BytesLE(L(3n),s)),h=Jt(t,"g1m","f1m",f);Xt(t,"frm","frm","frm","frm_mul"),te(t,"pol","frm"),ee(t,"qap","frm");const _=Wt(t,"f1m_neg","f2m","f1m"),p=t.alloc([...Kt.bigInt2BytesLE(L(19485874751759354771024239261021720505790618469301721065564631296452457478373n),s),...Kt.bigInt2BytesLE(L(266929791119991161246907387137283842545076965332900288569378510910307636690n),s)]),m=Jt(t,"g2m","f2m",p);function w(e,a){const i=t.addFunction(e);i.addParam("pG","i32"),i.addParam("pFr","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(l));i.addCode(o.call("frm_fromMontgomery",o.getLocal("pFr"),n),o.call(a,o.getLocal("pG"),n,o.i32_const(l),o.getLocal("pr"))),t.exportFunction(e)}function L(t){return BigInt(t)*(1n<0n;)ne(e)?a.push(1):a.push(0),e>>=1n;return a}(29793968203157093288n),T=t.alloc(U),Q=3*c,q=U.length-1,M=U.reduce(((t,e)=>t+(0!=e?1:0)),0),k=6*l,R=3*l*2+(M+q+1)*Q;t.modules[a]={n64:n,pG1gen:A,pG1zero:C,pG1b:f,pG2gen:F,pG2zero:E,pG2b:p,pq:t.modules.f1m.pq,pr:u,pOneT:v,prePSize:k,preQSize:R,r:o.toString(),q:i.toString()};const D=4965661367192848881n;function N(e){const o=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[8376118865763821496583973867626364092589906065868298776909617916018768340080n,16469823323077808223889137241176536799009286646108169935659301613961712198316n],[21888242871839275220042445260109153167277707414472061641714758635765020556617n,0n],[11697423496358154304825782922584725312912383441159505038794027105778954184319n,303847389135065887422783454877609941456349188919719272345083954437860409601n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3321304630594332808241809054958361220322477375291206261884409189760185844239n,5722266937896532885780051958958348231143373700109372999374820235121374419868n],[21888242871839275222246405745257275088696311157297823662689037894645226208582n,0n],[13512124006075453725662431877630910996106405091429524885779419978626457868503n,5418419548761466998357268504080738289687024511189653727029736280683514010267n],[2203960485148121921418603742825762020974279258880205651966n,0n],[10190819375481120917420622822672549775783927716138318623895010788866272024264n,21584395482704209334823622290379665147239961968378104390343953940207365798982n],[2203960485148121921418603742825762020974279258880205651967n,0n],[18566938241244942414004596690298913868373833782006617400804628704885040364344n,16165975933942742336466353786298926857552937457188450663314217659523851788715n]]],n=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[21575463638280843010398324269430826099269044274347216827212613867836435027261n,10307601595873709700152284273816112264069230130616436755625194854815875713954n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3772000881919853776433695186713858239009073593817195771773381919316419345261n,2236595495967245188281701248203181795121068902605861227855261137820944008926n],[2203960485148121921418603742825762020974279258880205651966n,0n],[18429021223477853657660792034369865839114504446431234726392080002137598044644n,9344045779998320333812420223237981029506012124075525679208581902008406485703n]],[[1n,0n],[2581911344467009335267311115468803099551665605076196740867805258568234346338n,19937756971775647987995932169929341994314640652964949448313374472400716661030n],[2203960485148121921418603742825762020974279258880205651966n,0n],[5324479202449903542726783395506214481928257762400643279780343368557297135718n,16208900380737693084919495127334387981393726419856888799917914180988844123039n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[13981852324922362344252311234282257507216387789820983642040889267519694726527n,7629828391165209371577384193250820201684255241773809077146787135900891633097n]]],l=t.addFunction(a+"__frobeniusMap"+e);l.addParam("x","i32"),l.addParam("r","i32");const r=l.getCodeBuilder();for(let a=0;a<6;a++){const i=0==a?r.getLocal("x"):r.i32_add(r.getLocal("x"),r.i32_const(a*c)),u=i,f=r.i32_add(r.getLocal("x"),r.i32_const(a*c+s)),h=0==a?r.getLocal("r"):r.i32_add(r.getLocal("r"),r.i32_const(a*c)),p=h,m=r.i32_add(r.getLocal("r"),r.i32_const(a*c+s)),w=d(o[Math.floor(a/3)][e%12],n[a%3][e%6]),b=t.alloc([...Kt.bigInt2BytesLE(L(w[0]),32),...Kt.bigInt2BytesLE(L(w[1]),32)]);e%2==1?l.addCode(r.call(g+"_copy",u,p),r.call(g+"_neg",f,m),r.call(_+"_mul",h,r.i32_const(b),h)):l.addCode(r.call(_+"_mul",i,r.i32_const(b),h))}function d(t,e){const a=BigInt(t[0]),o=BigInt(t[1]),n=BigInt(e[0]),l=BigInt(e[1]),r=[(a*n-o*l)%i,(a*l+o*n)%i];return le(r[0])&&(r[0]=r[0]+i),r}}function V(e,i){const o=function(t){let e=t;const a=[];for(;e>0n;){if(ne(e)){const t=2-Number(e%4n);a.push(t),e-=BigInt(t)}else a.push(0);e>>=1n}return a}(e).map((t=>-1==t?255:t)),n=t.alloc(o),l=t.addFunction(a+"__cyclotomicExp_"+i);l.addParam("x","i32"),l.addParam("r","i32"),l.addLocal("bit","i32"),l.addLocal("i","i32");const r=l.getCodeBuilder(),s=r.getLocal("x"),c=r.getLocal("r"),u=r.i32_const(t.alloc(d));l.addCode(r.call(O+"_conjugate",s,u),r.call(O+"_one",c),r.if(r.teeLocal("bit",r.i32_load8_s(r.i32_const(o.length-1),n)),r.if(r.i32_eq(r.getLocal("bit"),r.i32_const(1)),r.call(O+"_mul",c,s,c),r.call(O+"_mul",c,u,c))),r.setLocal("i",r.i32_const(o.length-2)),r.block(r.loop(r.call(a+"__cyclotomicSquare",c,c),r.if(r.teeLocal("bit",r.i32_load8_s(r.getLocal("i"),n)),r.if(r.i32_eq(r.getLocal("bit"),r.i32_const(1)),r.call(O+"_mul",c,s,c),r.call(O+"_mul",c,u,c))),r.br_if(1,r.i32_eqz(r.getLocal("i"))),r.setLocal("i",r.i32_sub(r.getLocal("i"),r.i32_const(1))),r.br(0))))}function $(){!function(){const e=t.addFunction(a+"__cyclotomicSquare");e.addParam("x","i32"),e.addParam("r","i32");const i=e.getCodeBuilder(),o=i.getLocal("x"),n=i.i32_add(i.getLocal("x"),i.i32_const(c)),l=i.i32_add(i.getLocal("x"),i.i32_const(2*c)),r=i.i32_add(i.getLocal("x"),i.i32_const(3*c)),s=i.i32_add(i.getLocal("x"),i.i32_const(4*c)),d=i.i32_add(i.getLocal("x"),i.i32_const(5*c)),u=i.getLocal("r"),g=i.i32_add(i.getLocal("r"),i.i32_const(c)),f=i.i32_add(i.getLocal("r"),i.i32_const(2*c)),h=i.i32_add(i.getLocal("r"),i.i32_const(3*c)),p=i.i32_add(i.getLocal("r"),i.i32_const(4*c)),m=i.i32_add(i.getLocal("r"),i.i32_const(5*c)),w=i.i32_const(t.alloc(c)),L=i.i32_const(t.alloc(c)),b=i.i32_const(t.alloc(c)),A=i.i32_const(t.alloc(c)),y=i.i32_const(t.alloc(c)),C=i.i32_const(t.alloc(c)),I=i.i32_const(t.alloc(c)),F=i.i32_const(t.alloc(c));e.addCode(i.call(_+"_mul",o,s,I),i.call(_+"_mul",s,i.i32_const(B),w),i.call(_+"_add",o,w,w),i.call(_+"_add",o,s,F),i.call(_+"_mul",F,w,w),i.call(_+"_mul",i.i32_const(B),I,F),i.call(_+"_add",I,F,F),i.call(_+"_sub",w,F,w),i.call(_+"_add",I,I,L),i.call(_+"_mul",r,l,I),i.call(_+"_mul",l,i.i32_const(B),b),i.call(_+"_add",r,b,b),i.call(_+"_add",r,l,F),i.call(_+"_mul",F,b,b),i.call(_+"_mul",i.i32_const(B),I,F),i.call(_+"_add",I,F,F),i.call(_+"_sub",b,F,b),i.call(_+"_add",I,I,A),i.call(_+"_mul",n,d,I),i.call(_+"_mul",d,i.i32_const(B),y),i.call(_+"_add",n,y,y),i.call(_+"_add",n,d,F),i.call(_+"_mul",F,y,y),i.call(_+"_mul",i.i32_const(B),I,F),i.call(_+"_add",I,F,F),i.call(_+"_sub",y,F,y),i.call(_+"_add",I,I,C),i.call(_+"_sub",w,o,u),i.call(_+"_add",u,u,u),i.call(_+"_add",w,u,u),i.call(_+"_add",L,s,p),i.call(_+"_add",p,p,p),i.call(_+"_add",L,p,p),i.call(_+"_mul",C,i.i32_const(P),F),i.call(_+"_add",F,r,h),i.call(_+"_add",h,h,h),i.call(_+"_add",F,h,h),i.call(_+"_sub",y,l,f),i.call(_+"_add",f,f,f),i.call(_+"_add",y,f,f),i.call(_+"_sub",b,n,g),i.call(_+"_add",g,g,g),i.call(_+"_add",b,g,g),i.call(_+"_add",A,d,m),i.call(_+"_add",m,m,m),i.call(_+"_add",A,m,m))}(),V(D,"w0");const e=t.addFunction(a+"__finalExponentiationLastChunk");e.addParam("x","i32"),e.addParam("r","i32");const i=e.getCodeBuilder(),o=i.getLocal("x"),n=i.getLocal("r"),l=i.i32_const(t.alloc(d)),r=i.i32_const(t.alloc(d)),s=i.i32_const(t.alloc(d)),u=i.i32_const(t.alloc(d)),g=i.i32_const(t.alloc(d)),f=i.i32_const(t.alloc(d)),h=i.i32_const(t.alloc(d)),p=i.i32_const(t.alloc(d)),m=i.i32_const(t.alloc(d)),w=i.i32_const(t.alloc(d)),L=i.i32_const(t.alloc(d)),b=i.i32_const(t.alloc(d)),A=i.i32_const(t.alloc(d)),y=i.i32_const(t.alloc(d)),C=i.i32_const(t.alloc(d)),I=i.i32_const(t.alloc(d)),F=i.i32_const(t.alloc(d)),x=i.i32_const(t.alloc(d)),E=i.i32_const(t.alloc(d)),v=i.i32_const(t.alloc(d)),S=i.i32_const(t.alloc(d));e.addCode(i.call(a+"__cyclotomicExp_w0",o,l),i.call(O+"_conjugate",l,l),i.call(a+"__cyclotomicSquare",l,r),i.call(a+"__cyclotomicSquare",r,s),i.call(O+"_mul",s,r,u),i.call(a+"__cyclotomicExp_w0",u,g),i.call(O+"_conjugate",g,g),i.call(a+"__cyclotomicSquare",g,f),i.call(a+"__cyclotomicExp_w0",f,h),i.call(O+"_conjugate",h,h),i.call(O+"_conjugate",u,p),i.call(O+"_conjugate",h,m),i.call(O+"_mul",m,g,w),i.call(O+"_mul",w,p,L),i.call(O+"_mul",L,r,b),i.call(O+"_mul",L,g,A),i.call(O+"_mul",A,o,y),i.call(a+"__frobeniusMap1",b,C),i.call(O+"_mul",C,y,I),i.call(a+"__frobeniusMap2",L,F),i.call(O+"_mul",F,I,x),i.call(O+"_conjugate",o,E),i.call(O+"_mul",E,b,v),i.call(a+"__frobeniusMap3",v,S),i.call(O+"_mul",S,x,n))}const j=t.alloc(k),K=t.alloc(R);function H(e){const i=t.addFunction(a+"_pairingEq"+e);for(let t=0;t0n;)we(e)?a.push(1):a.push(0),e>>=1n;return a}(0xd201000000010000n),U=t.alloc(O),T=3*s,Q=O.length-1,q=O.reduce(((t,e)=>t+(0!=e?1:0)),0),M=6*l,k=3*l*2+(q+Q+1)*T,R=!0,D=15132376222941642752n;function N(e){const a=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n,151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n],[2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n,1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n,877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n,3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n,2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n,3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n]]],o=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[0n,4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[0n,1n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[0n,793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n]],[[1n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n]]],n=t.addFunction(z+"_frobeniusMap"+e);n.addParam("x","i32"),n.addParam("r","i32");const c=n.getCodeBuilder();for(let i=0;i<6;i++){const u=0==i?c.getLocal("x"):c.i32_add(c.getLocal("x"),c.i32_const(i*s)),g=u,f=c.i32_add(c.getLocal("x"),c.i32_const(i*s+r)),_=0==i?c.getLocal("r"):c.i32_add(c.getLocal("r"),c.i32_const(i*s)),p=_,w=c.i32_add(c.getLocal("r"),c.i32_const(i*s+r)),L=d(a[Math.floor(i/3)][e%12],o[i%3][e%6]),b=t.alloc([...re.bigInt2BytesLE(A(L[0]),l),...re.bigInt2BytesLE(A(L[1]),l)]);e%2==1?n.addCode(c.call(h+"_copy",g,p),c.call(h+"_neg",f,w),c.call(m+"_mul",_,c.i32_const(b),_)):n.addCode(c.call(m+"_mul",u,c.i32_const(b),_))}function d(t,e){const a=t[0],o=t[1],n=e[0],l=e[1],r=[(a*n-o*l)%i,(a*l+o*n)%i];return Le(r[0])&&(r[0]=r[0]+i),r}}function V(e,i,o){const n=function(t){let e=t;const a=[];for(;e>0n;){if(we(e)){const t=2-Number(e%4n);a.push(t),e-=BigInt(t)}else a.push(0);e>>=1n}return a}(e).map((t=>-1==t?255:t)),l=t.alloc(n),r=t.addFunction(a+"__cyclotomicExp_"+o);r.addParam("x","i32"),r.addParam("r","i32"),r.addLocal("bit","i32"),r.addLocal("i","i32");const s=r.getCodeBuilder(),d=s.getLocal("x"),u=s.getLocal("r"),g=s.i32_const(t.alloc(c));r.addCode(s.call(z+"_conjugate",d,g),s.call(z+"_one",u),s.if(s.teeLocal("bit",s.i32_load8_s(s.i32_const(n.length-1),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(z+"_mul",u,d,u),s.call(z+"_mul",u,g,u))),s.setLocal("i",s.i32_const(n.length-2)),s.block(s.loop(s.call(a+"__cyclotomicSquare",u,u),s.if(s.teeLocal("bit",s.i32_load8_s(s.getLocal("i"),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(z+"_mul",u,d,u),s.call(z+"_mul",u,g,u))),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.br(0)))),i&&r.addCode(s.call(z+"_conjugate",u,u))}t.modules[a]={n64q:n,n64r:d,n8q:l,n8r:u,pG1gen:C,pG1zero:F,pG1b:_,pG2gen:E,pG2zero:B,pG2b:w,pq:t.modules.f1m.pq,pr:f,pOneT:S,r:o,q:i,prePSize:M,preQSize:k},function(){const e=t.addFunction(G+"_mul1");e.addParam("pA","i32"),e.addParam("pC1","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(2*r)),n=a.i32_add(a.getLocal("pA"),a.i32_const(4*r)),l=a.getLocal("pC1"),s=a.getLocal("pR"),c=a.i32_add(a.getLocal("pR"),a.i32_const(2*r)),d=a.i32_add(a.getLocal("pR"),a.i32_const(4*r)),u=a.i32_const(t.alloc(2*r)),g=a.i32_const(t.alloc(2*r));e.addCode(a.call(m+"_add",i,o,u),a.call(m+"_add",o,n,g),a.call(m+"_mul",o,l,d),a.call(m+"_mul",g,l,s),a.call(m+"_sub",s,d,s),a.call(m+"_mulNR",s,s),a.call(m+"_mul",u,l,c),a.call(m+"_sub",c,d,c))}(),function(){const e=t.addFunction(G+"_mul01");e.addParam("pA","i32"),e.addParam("pC0","i32"),e.addParam("pC1","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(2*r)),n=a.i32_add(a.getLocal("pA"),a.i32_const(4*r)),l=a.getLocal("pC0"),s=a.getLocal("pC1"),c=a.getLocal("pR"),d=a.i32_add(a.getLocal("pR"),a.i32_const(2*r)),u=a.i32_add(a.getLocal("pR"),a.i32_const(4*r)),g=a.i32_const(t.alloc(2*r)),f=a.i32_const(t.alloc(2*r)),h=a.i32_const(t.alloc(2*r)),_=a.i32_const(t.alloc(2*r));e.addCode(a.call(m+"_mul",i,l,g),a.call(m+"_mul",o,s,f),a.call(m+"_add",i,o,h),a.call(m+"_add",i,n,_),a.call(m+"_add",o,n,c),a.call(m+"_mul",c,s,c),a.call(m+"_sub",c,f,c),a.call(m+"_mulNR",c,c),a.call(m+"_add",c,g,c),a.call(m+"_add",l,s,d),a.call(m+"_mul",d,h,d),a.call(m+"_sub",d,g,d),a.call(m+"_sub",d,f,d),a.call(m+"_mul",_,l,u),a.call(m+"_sub",u,g,u),a.call(m+"_add",u,f,u))}(),function(){const e=t.addFunction(z+"_mul014");e.addParam("pA","i32"),e.addParam("pC0","i32"),e.addParam("pC1","i32"),e.addParam("pC4","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(6*r)),n=a.getLocal("pC0"),l=a.getLocal("pC1"),s=a.getLocal("pC4"),c=a.i32_const(t.alloc(6*r)),d=a.i32_const(t.alloc(6*r)),u=a.i32_const(t.alloc(2*r)),g=a.getLocal("pR"),f=a.i32_add(a.getLocal("pR"),a.i32_const(6*r));e.addCode(a.call(G+"_mul01",i,n,l,c),a.call(G+"_mul1",o,s,d),a.call(m+"_add",l,s,u),a.call(G+"_add",o,i,f),a.call(G+"_mul01",f,n,u,f),a.call(G+"_sub",f,c,f),a.call(G+"_sub",f,d,f),a.call(G+"_copy",d,g),a.call(G+"_mulNR",g,g),a.call(G+"_add",g,c,g))}(),function(){const e=t.addFunction(a+"_ell");e.addParam("pP","i32"),e.addParam("pCoefs","i32"),e.addParam("pF","i32");const i=e.getCodeBuilder(),o=i.getLocal("pP"),n=i.i32_add(i.getLocal("pP"),i.i32_const(l)),s=i.getLocal("pF"),c=i.getLocal("pCoefs"),d=i.i32_add(i.getLocal("pCoefs"),i.i32_const(r)),u=i.i32_add(i.getLocal("pCoefs"),i.i32_const(2*r)),g=i.i32_add(i.getLocal("pCoefs"),i.i32_const(3*r)),f=i.i32_add(i.getLocal("pCoefs"),i.i32_const(4*r)),_=t.alloc(2*r),p=i.i32_const(_),m=i.i32_const(_),w=i.i32_const(_+r),L=t.alloc(2*r),b=i.i32_const(L),A=i.i32_const(L),y=i.i32_const(L+r);e.addCode(i.call(h+"_mul",c,n,m),i.call(h+"_mul",d,n,w),i.call(h+"_mul",u,o,A),i.call(h+"_mul",g,o,y),i.call(z+"_mul014",s,f,b,p,s))}();const $=t.alloc(M),j=t.alloc(k);function K(e){const i=t.addFunction(a+"_pairingEq"+e);for(let t=0;t>=BigInt(32)):l+2<=e?(n.setUint16(l,Number(a&BigInt(65535)),!0),l+=2,a>>=BigInt(16)):(n.setUint8(l,Number(a&BigInt(255)),!0),l+=1,a>>=BigInt(8));if(a)throw new Error("Number does not fit in this length");return i}const Ce=[];for(let t=0;t<256;t++)Ce[t]=Ie(t,8);function Ie(t,e){let a=0,i=t;for(let t=0;t>=1;return a}function Fe(t,e){return(Ce[t>>>24]|Ce[t>>>16&255]<<8|Ce[t>>>8&255]<<16|Ce[255&t]<<24)>>>32-e}function xe(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function Ee(t,e){const a=t.byteLength/e,i=xe(a);if(a!=1<a){const i=t.slice(o*e,(o+1)*e);t.set(t.slice(a*e,(a+1)*e),o*e),t.set(i,a*e)}}}function ve(t,e){const a=new Uint8Array(e*t.length);for(let i=0;i{a[i]=t(e[i])})),a}return e},unstringifyBigInts:function t(e){if("string"==typeof e&&/^[0-9]+$/.test(e))return BigInt(e);if("string"==typeof e&&/^0x[0-9a-fA-F]+$/.test(e))return BigInt(e);if(Array.isArray(e))return e.map(t);if("object"==typeof e){if(null===e)return null;const a={};return Object.keys(e).forEach((i=>{a[i]=t(e[i])})),a}return e},beBuff2int:function(t){let e=BigInt(0),a=t.length,i=0;const o=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;a>0;)a>=4?(a-=4,e+=BigInt(o.getUint32(a))<=2?(a-=2,e+=BigInt(o.getUint16(a))<0;)n-4>=0?(n-=4,o.setUint32(n,Number(a&BigInt(4294967295))),a>>=BigInt(32)):n-2>=0?(n-=2,o.setUint16(n,Number(a&BigInt(65535))),a>>=BigInt(16)):(n-=1,o.setUint8(n,Number(a&BigInt(255))),a>>=BigInt(8));if(a)throw new Error("Number does not fit in this length");return i},leBuff2int:function(t){let e=BigInt(0),a=0;const i=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;a{i[o]=t(e,a[o])})),i}return a},unstringifyFElements:function t(e,a){if("string"==typeof a&&/^[0-9]+$/.test(a))return e.e(a);if("string"==typeof a&&/^0x[0-9a-fA-F]+$/.test(a))return e.e(a);if(Array.isArray(a))return a.map(t.bind(this,e));if("object"==typeof a){if(null===a)return null;const i={};return Object.keys(a).forEach((o=>{i[o]=t(e,a[o])})),i}return a},bitReverse:Fe,log2:xe,buffReverseBits:Ee,array2buffer:ve,buffer2array:Be});const Pe=1<<30;class Ge{constructor(t){this.buffers=[],this.byteLength=t;for(let e=0;e0;){const t=l+r>Pe?Pe-l:r,e=new Uint8Array(this.buffers[n].buffer,this.buffers[n].byteOffset+l,t);if(t==a)return e.slice();o||(o=a<=Pe?new Uint8Array(a):new Ge(a)),o.set(e,a-r),r-=t,n++,l=0}return o}set(t,e){void 0===e&&(e=0);const a=t.byteLength;if(0==a)return;const i=Math.floor(e/Pe);if(i==Math.floor((e+a-1)/Pe))return t instanceof Ge&&1==t.buffers.length?this.buffers[i].set(t.buffers[0],e%Pe):this.buffers[i].set(t,e%Pe);let o=i,n=e%Pe,l=a;for(;l>0;){const e=n+l>Pe?Pe-n:l,i=t.slice(a-l,a-l+e);new Uint8Array(this.buffers[o].buffer,this.buffers[o].byteOffset+n,e).set(i),l-=e,o++,n=0}}}function ze(t,e,a,i){return async function(o){const n=Math.floor(o.byteLength/a);if(n*a!==o.byteLength)throw new Error("Invalid buffer size");const l=Math.floor(n/t.concurrency),r=[];for(let s=0;s=0;t--)this.w[t]=this.square(this.w[t+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=ze(t,e+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=ze(t,e+"_batchFromMontgomery",this.n8,this.n8)}op2(t,e,a){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,e,a){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,a),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,e){return this.op2("_add",t,e)}eq(t,e){return this.op2Bool("_eq",t,e)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,e){return this.op2("_sub",t,e)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,e){return this.op2("_mul",t,e)}div(t,e){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,e){return e instanceof Uint8Array||(e=S(i(e))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(t){return this.op1Bool("_isNegative",t)}e(t,e){if(t instanceof Uint8Array)return t;let a=i(t,e);n(a)?(a=p(a),y(a,this.p)&&(a=b(a,this.p)),a=_(this.p,a)):y(a,this.p)&&(a=b(a,this.p));const o=ye(a,this.n8);return this.toMontgomery(o)}toString(t,e){return B(E(this.fromMontgomery(t),0),e)}fromRng(t){let e;const a=new Uint8Array(this.n8);do{e=P;for(let a=0;ai.buffer.byteLength){const o=i.buffer.byteLength/65536;let n=Math.floor((a[0]+t)/65536)+1;n>e&&(n=e),i.grow(n-o)}return o}function l(t){const e=n(t.byteLength);return s(e,t),e}function r(t,e){const a=new Uint8Array(i.buffer);return new Uint8Array(a.buffer,a.byteOffset+t,e)}function s(t,e){new Uint8Array(i.buffer).set(new Uint8Array(e),t)}function c(t){if("INIT"==t[0].cmd)return o(t[0]);const e={vars:[],out:[]},c=new Uint32Array(i.buffer,0,1)[0];for(let i=0;i{this.reject=e,this.resolve=t}))}}var Ne;const Ve="data:application/javascript;base64,"+(Ne="("+qe.toString()+")(self)",globalThis.btoa(Ne));class $e{constructor(){this.actionQueue=[],this.oldPFree=0}startSyncOp(){if(0!=this.oldPFree)throw new Error("Sync operation in progress");this.oldPFree=this.u32[0]}endSyncOp(){if(0==this.oldPFree)throw new Error("No sync operation in progress");this.u32[0]=this.oldPFree,this.oldPFree=0}postAction(t,e,a,i){if(this.working[t])throw new Error("Posting a job t a working worker");return this.working[t]=!0,this.pendingDeferreds[t]=i||new De,this.workers[t].postMessage(e,a),this.pendingDeferreds[t].promise}processWorks(){for(let t=0;t0;t++)if(0==this.working[t]){const e=this.actionQueue.shift();this.postAction(t,e.data,e.transfers,e.deferred)}}queueAction(t,e){const a=new De;if(this.singleThread){const e=this.taskManager(t);a.resolve(e)}else this.actionQueue.push({data:t,transfers:e,deferred:a}),this.processWorks();return a.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(t){const e=this.alloc(t.byteLength);return this.setBuff(e,t),e}getBuff(t,e){return this.u8.slice(t,t+e)}setBuff(t,e){this.u8.set(new Uint8Array(e),t)}alloc(t){for(;3&this.u32[0];)this.u32[0]++;const e=this.u32[0];return this.u32[0]+=t,e}async terminate(){for(let t=0;tsetTimeout(e,t))))}}function je(t,e){const a=t[e],i=t.Fr,o=t.tm;t[e].batchApplyKey=async function(t,n,l,r,s){let c,d,u,g,f;if(r=r||"affine",s=s||"affine","G1"==e)"jacobian"==r?(u=3*a.F.n8,c="g1m_batchApplyKey"):(u=2*a.F.n8,c="g1m_batchApplyKeyMixed"),g=3*a.F.n8,"jacobian"==s?f=3*a.F.n8:(d="g1m_batchToAffine",f=2*a.F.n8);else if("G2"==e)"jacobian"==r?(u=3*a.F.n8,c="g2m_batchApplyKey"):(u=2*a.F.n8,c="g2m_batchApplyKeyMixed"),g=3*a.F.n8,"jacobian"==s?f=3*a.F.n8:(d="g2m_batchToAffine",f=2*a.F.n8);else{if("Fr"!=e)throw new Error("Invalid group: "+e);c="frm_batchApplyKey",u=a.n8,g=a.n8,f=a.n8}const h=Math.floor(t.byteLength/u),_=Math.floor(h/o.concurrency),p=[];l=i.e(l);let m=i.e(n);for(let e=0;e=0;t--){if(!a.isZero(_))for(let t=0;tc&&(_=c),_<1024&&(_=1024);const p=[];for(let e=0;e(r&&r.debug(`Multiexp end: ${s}: ${e}/${u}`),t))))}const m=await Promise.all(p);let w=a.zero;for(let t=m.length-1;t>=0;t--)w=a.add(w,m[t]);return w}a.multiExp=async function(t,e,a,i){return await n(t,e,"jacobian",a,i)},a.multiExpAffine=async function(t,e,a,i){return await n(t,e,"affine",a,i)}}function Ze(t,e){const a=t[e],i=t.Fr,o=a.tm;async function n(t,r,s,c,d,u){s=s||"affine",c=c||"affine";let g,f,h,_,p,m,w,L;"G1"==e?("affine"==s?(g=2*a.F.n8,_="g1m_batchToJacobian"):g=3*a.F.n8,f=3*a.F.n8,r&&(L="g1m_fftFinal"),w="g1m_fftJoin",m="g1m_fftMix","affine"==c?(h=2*a.F.n8,p="g1m_batchToAffine"):h=3*a.F.n8):"G2"==e?("affine"==s?(g=2*a.F.n8,_="g2m_batchToJacobian"):g=3*a.F.n8,f=3*a.F.n8,r&&(L="g2m_fftFinal"),w="g2m_fftJoin",m="g2m_fftMix","affine"==c?(h=2*a.F.n8,p="g2m_batchToAffine"):h=3*a.F.n8):"Fr"==e&&(g=a.n8,f=a.n8,h=a.n8,r&&(L="frm_fftFinal"),m="frm_fftMix",w="frm_fftJoin");let b=!1;Array.isArray(t)?(t=ve(t,g),b=!0):t=t.slice(0,t.byteLength);const A=t.byteLength/g,y=xe(A);if(1<1<<28?new Ge(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return g.set(u[0]),g.set(u[1],u[0].byteLength),g}(t,s,c,d,u):await async function(t,e,a,o,r){let s,c;s=t.slice(0,t.byteLength/2),c=t.slice(t.byteLength/2,t.byteLength);const d=[];[s,c]=await l(s,c,"fftJoinExt",i.one,i.shift,e,"jacobian",o,r),d.push(n(s,!1,"jacobian",a,o,r)),d.push(n(c,!1,"jacobian",a,o,r));const u=await Promise.all(d);let g;g=u[0].byteLength>1<<28?new Ge(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return g.set(u[0]),g.set(u[1],u[0].byteLength),g}(t,s,c,d,u),b?Be(e,h):e}let C,I,F;r&&(C=i.inv(i.e(A))),Ee(t,g);let x=Math.min(16384,A),E=A/x;for(;E=16;)E*=2,x/=2;const v=xe(x),B=[];for(let e=0;e(d&&d.debug(`${u}: fft ${y} mix end: ${e}/${E}`),t))))}F=await Promise.all(B);for(let t=0;t(d&&d.debug(`${u}: fft ${y} join ${t}/${y} ${l+1}/${e} ${r}/${a/2}`),i))))}const l=await Promise.all(n);for(let t=0;t0;e--)I.set(F[e],t),t+=x*h,delete F[e];I.set(F[0].slice(0,(x-1)*h),t),delete F[0]}else for(let t=0;t65536&&(b=65536);const A=[];for(let e=0;e(u&&u.debug(`${g}: fftJoinExt End: ${e}/${L}`),t))))}const y=await Promise.all(A);let C,I;L*p>1<<28?(C=new Ge(L*p),I=new Ge(L*p)):(C=new Uint8Array(L*p),I=new Uint8Array(L*p));let F=0;for(let t=0;ti.s+1)throw s&&s.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let f=t.slice(0,t.byteLength/2),h=t.slice(t.byteLength/2,t.byteLength);const _=i.exp(i.shift,u/2),p=i.inv(i.sub(i.one,_));[f,h]=await l(f,h,"prepareLagrangeEvaluation",p,i.shiftInv,o,"jacobian",s,c+" prep");const m=[];let w;return m.push(n(f,!0,"jacobian",r,s,c+" t0")),m.push(n(h,!0,"jacobian",r,s,c+" t1")),[f,h]=await Promise.all(m),w=f.byteLength>1<<28?new Ge(2*f.byteLength):new Uint8Array(2*f.byteLength),w.set(f),w.set(h,f.byteLength),w},a.fftMix=async function(t){const n=3*a.F.n8;let l,r;if("G1"==e)l="g1m_fftMix",r="g1m_fftJoin";else if("G2"==e)l="g2m_fftMix",r="g2m_fftJoin";else{if("Fr"!=e)throw new Error("Invalid group");l="frm_fftMix",r="frm_fftJoin"}const s=Math.floor(t.byteLength/n),c=xe(s);let d=1<=0;t--)f.set(g[t][0],h),h+=g[t][0].byteLength;return f}}async function We(t){const e=await async function(t,e){const a=new $e;a.memory=new WebAssembly.Memory({initial:Re}),a.u8=new Uint8Array(a.memory.buffer),a.u32=new Uint32Array(a.memory.buffer);const i=await WebAssembly.compile(t.code);if(a.instance=await WebAssembly.instantiate(i,{env:{memory:a.memory}}),a.singleThread=e,a.initalPFree=a.u32[0],a.pq=t.pq,a.pr=t.pr,a.pG1gen=t.pG1gen,a.pG1zero=t.pG1zero,a.pG2gen=t.pG2gen,a.pG2zero=t.pG2zero,a.pOneT=t.pOneT,e)a.code=t.code,a.taskManager=qe(),await a.taskManager([{cmd:"INIT",init:Re,code:a.code.slice()}]),a.concurrency=1;else{let e;a.workers=[],a.pendingDeferreds=[],a.working=[],e="object"==typeof navigator&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:Me.cpus().length,0==e&&(e=2),e>64&&(e=64),a.concurrency=e;for(let t=0;t>8n&0xFFn)),e.push(Number(a>>16n&0xFFn)),e.push(Number(a>>24n&0xFFn)),e}function ea(t){const e=function(t){for(var e=[],a=0;a>6,128|63&i):i<55296||i>=57344?e.push(224|i>>12,128|i>>6&63,128|63&i):(a++,i=65536+((1023&i)<<10|1023&t.charCodeAt(a)),e.push(240|i>>18,128|i>>12&63,128|i>>6&63,128|63&i))}return e}(t);return[...la(e.length),...e]}function aa(t){const e=[];let a=Ye(t);if(Je(a))throw new Error("Number cannot be negative");for(;!Xe(a);)e.push(Number(0x7Fn&a)),a>>=7n;0==e.length&&e.push(0);for(let t=0;t0xFFFFFFFFn)throw new Error("Number too big");if(e>0x7FFFFFFFn&&(e-=0x100000000n),e<-2147483648n)throw new Error("Number too small");return ia(e)}function na(t){let e=Ye(t);if(e>0xFFFFFFFFFFFFFFFFn)throw new Error("Number too big");if(e>0x7FFFFFFFFFFFFFFFn&&(e-=0x10000000000000000n),e<-9223372036854775808n)throw new Error("Number too small");return ia(e)}function la(t){let e=Ye(t);if(e>0xFFFFFFFFn)throw new Error("Number too big");return aa(e)}function ra(t){return Array.from(t,(function(t){return("0"+(255&t).toString(16)).slice(-2)})).join("")}class sa{constructor(t){this.func=t,this.functionName=t.functionName,this.module=t.module}setLocal(t,e){const a=this.func.localIdxByName[t];if(void 0===a)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[...e,33,...la(a)]}teeLocal(t,e){const a=this.func.localIdxByName[t];if(void 0===a)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[...e,34,...la(a)]}getLocal(t){const e=this.func.localIdxByName[t];if(void 0===e)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[32,...la(e)]}i64_load8_s(t,e,a){return[...t,48,void 0===a?0:a,...la(e||0)]}i64_load8_u(t,e,a){return[...t,49,void 0===a?0:a,...la(e||0)]}i64_load16_s(t,e,a){return[...t,50,void 0===a?1:a,...la(e||0)]}i64_load16_u(t,e,a){return[...t,51,void 0===a?1:a,...la(e||0)]}i64_load32_s(t,e,a){return[...t,52,void 0===a?2:a,...la(e||0)]}i64_load32_u(t,e,a){return[...t,53,void 0===a?2:a,...la(e||0)]}i64_load(t,e,a){return[...t,41,void 0===a?3:a,...la(e||0)]}i64_store(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=3,l=e):Array.isArray(a)?(o=e,n=3,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,55,n,...la(o)]}i64_store32(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=2,l=e):Array.isArray(a)?(o=e,n=2,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,62,n,...la(o)]}i64_store16(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=1,l=e):Array.isArray(a)?(o=e,n=1,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,61,n,...la(o)]}i64_store8(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=0,l=e):Array.isArray(a)?(o=e,n=0,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,60,n,...la(o)]}i32_load8_s(t,e,a){return[...t,44,void 0===a?0:a,...la(e||0)]}i32_load8_u(t,e,a){return[...t,45,void 0===a?0:a,...la(e||0)]}i32_load16_s(t,e,a){return[...t,46,void 0===a?1:a,...la(e||0)]}i32_load16_u(t,e,a){return[...t,47,void 0===a?1:a,...la(e||0)]}i32_load(t,e,a){return[...t,40,void 0===a?2:a,...la(e||0)]}i32_store(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=2,l=e):Array.isArray(a)?(o=e,n=2,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,54,n,...la(o)]}i32_store16(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=1,l=e):Array.isArray(a)?(o=e,n=1,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,59,n,...la(o)]}i32_store8(t,e,a,i){let o,n,l;return Array.isArray(e)?(o=0,n=0,l=e):Array.isArray(a)?(o=e,n=0,l=a):Array.isArray(i)&&(o=e,n=a,l=i),[...t,...l,58,n,...la(o)]}call(t,...e){const a=this.module.functionIdxByName[t];if(void 0===a)throw new Error(`Function not defined: Function: ${t}`);return[...[].concat(...e),16,...la(a)]}call_indirect(t,...e){return[...[].concat(...e),...t,17,0,0]}if(t,e,a){return a?[...t,4,64,...e,5,...a,11]:[...t,4,64,...e,11]}block(t){return[2,64,...t,11]}loop(...t){return[3,64,...[].concat(...t),11]}br_if(t,e){return[...e,13,...la(t)]}br(t){return[12,...la(t)]}ret(t){return[...t,15]}drop(t){return[...t,26]}i64_const(t){return[66,...na(t)]}i32_const(t){return[65,...oa(t)]}i64_eqz(t){return[...t,80]}i64_eq(t,e){return[...t,...e,81]}i64_ne(t,e){return[...t,...e,82]}i64_lt_s(t,e){return[...t,...e,83]}i64_lt_u(t,e){return[...t,...e,84]}i64_gt_s(t,e){return[...t,...e,85]}i64_gt_u(t,e){return[...t,...e,86]}i64_le_s(t,e){return[...t,...e,87]}i64_le_u(t,e){return[...t,...e,88]}i64_ge_s(t,e){return[...t,...e,89]}i64_ge_u(t,e){return[...t,...e,90]}i64_add(t,e){return[...t,...e,124]}i64_sub(t,e){return[...t,...e,125]}i64_mul(t,e){return[...t,...e,126]}i64_div_s(t,e){return[...t,...e,127]}i64_div_u(t,e){return[...t,...e,128]}i64_rem_s(t,e){return[...t,...e,129]}i64_rem_u(t,e){return[...t,...e,130]}i64_and(t,e){return[...t,...e,131]}i64_or(t,e){return[...t,...e,132]}i64_xor(t,e){return[...t,...e,133]}i64_shl(t,e){return[...t,...e,134]}i64_shr_s(t,e){return[...t,...e,135]}i64_shr_u(t,e){return[...t,...e,136]}i64_extend_i32_s(t){return[...t,172]}i64_extend_i32_u(t){return[...t,173]}i64_clz(t){return[...t,121]}i64_ctz(t){return[...t,122]}i32_eqz(t){return[...t,69]}i32_eq(t,e){return[...t,...e,70]}i32_ne(t,e){return[...t,...e,71]}i32_lt_s(t,e){return[...t,...e,72]}i32_lt_u(t,e){return[...t,...e,73]}i32_gt_s(t,e){return[...t,...e,74]}i32_gt_u(t,e){return[...t,...e,75]}i32_le_s(t,e){return[...t,...e,76]}i32_le_u(t,e){return[...t,...e,77]}i32_ge_s(t,e){return[...t,...e,78]}i32_ge_u(t,e){return[...t,...e,79]}i32_add(t,e){return[...t,...e,106]}i32_sub(t,e){return[...t,...e,107]}i32_mul(t,e){return[...t,...e,108]}i32_div_s(t,e){return[...t,...e,109]}i32_div_u(t,e){return[...t,...e,110]}i32_rem_s(t,e){return[...t,...e,111]}i32_rem_u(t,e){return[...t,...e,112]}i32_and(t,e){return[...t,...e,113]}i32_or(t,e){return[...t,...e,114]}i32_xor(t,e){return[...t,...e,115]}i32_shl(t,e){return[...t,...e,116]}i32_shr_s(t,e){return[...t,...e,117]}i32_shr_u(t,e){return[...t,...e,118]}i32_rotl(t,e){return[...t,...e,119]}i32_rotr(t,e){return[...t,...e,120]}i32_wrap_i64(t){return[...t,167]}i32_clz(t){return[...t,103]}i32_ctz(t){return[...t,104]}unreachable(){return[0]}current_memory(){return[63,0]}comment(){return[]}}const ca={i32:127,i64:126,f32:125,f64:124,anyfunc:112,func:96,emptyblock:64};class da{constructor(t,e,a,i,o){if("import"==a)this.fnType="import",this.moduleName=i,this.fieldName=o;else{if("internal"!=a)throw new Error("Invalid function fnType: "+a);this.fnType="internal"}this.module=t,this.fnName=e,this.params=[],this.locals=[],this.localIdxByName={},this.code=[],this.returnType=null,this.nextLocal=0}addParam(t,e){if(this.localIdxByName[t])throw new Error(`param already exists. Function: ${this.fnName}, Param: ${t} `);const a=this.nextLocal++;this.localIdxByName[t]=a,this.params.push({type:e})}addLocal(t,e,a){const i=a||1;if(this.localIdxByName[t])throw new Error(`local already exists. Function: ${this.fnName}, Param: ${t} `);const o=this.nextLocal++;this.localIdxByName[t]=o,this.locals.push({type:e,length:i})}setReturnType(t){if(this.returnType)throw new Error(`returnType already defined. Function: ${this.fnName}`);this.returnType=t}getSignature(){return[96,...[...la(this.params.length),...this.params.map((t=>ca[t.type]))],...this.returnType?[1,ca[this.returnType]]:[0]]}getBody(){const t=this.locals.map((t=>[...la(t.length),ca[t.type]])),e=[...la(this.locals.length),...[].concat(...t),...this.code,11];return[...la(e.length),...e]}addCode(...t){this.code.push(...[].concat(...t))}getCodeBuilder(){return new sa(this)}}class ua{constructor(){this.functions=[],this.functionIdxByName={},this.nImportFunctions=0,this.nInternalFunctions=0,this.memory={pagesSize:1,moduleName:"env",fieldName:"memory"},this.free=8,this.datas=[],this.modules={},this.exports=[],this.functionsTable=[]}build(){return this._setSignatures(),new Uint8Array([...ta(1836278016),...ta(1),...this._buildType(),...this._buildImport(),...this._buildFunctionDeclarations(),...this._buildFunctionsTable(),...this._buildExports(),...this._buildElements(),...this._buildCode(),...this._buildData()])}addFunction(t){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);const e=this.functions.length;return this.functionIdxByName[t]=e,this.functions.push(new da(this,t,"internal")),this.nInternalFunctions++,this.functions[e]}addIimportFunction(t,e,a){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);if(this.functions.length>0&&"internal"==this.functions[this.functions.length-1].type)throw new Error(`Import functions must be declared before internal: ${t}`);let i=a||t;const o=this.functions.length;return this.functionIdxByName[t]=o,this.functions.push(new da(this,t,"import",e,i)),this.nImportFunctions++,this.functions[o]}setMemory(t,e,a){this.memory={pagesSize:t,moduleName:e||"env",fieldName:a||"memory"}}exportFunction(t,e){const a=e||t;if(void 0===this.functionIdxByName[t])throw new Error(`Function not defined: ${t}`);const i=this.functionIdxByName[t];a!=t&&(this.functionIdxByName[a]=i),this.exports.push({exportName:a,idx:i})}addFunctionToTable(t){const e=this.functionIdxByName[t];this.functionsTable.push(e)}addData(t,e){this.datas.push({offset:t,bytes:e})}alloc(t,e){let a,i;(Array.isArray(t)||ArrayBuffer.isView(t))&&void 0===e?(a=t.length,i=t):(a=t,i=e),a=1+(a-1>>3)<<3;const o=this.free;return this.free+=a,i&&this.addData(o,i),o}allocString(t){const e=(new globalThis.TextEncoder).encode(t);return this.alloc([...e,0])}_setSignatures(){this.signatures=[];const t={};if(this.functionsTable.length>0){const e=this.functions[this.functionsTable[0]].getSignature();t["s_"+ra(e)]=0,this.signatures.push(e)}for(let e=0;e{e.pendingLoads.push({page:t,resolve:a,reject:i})}));return e.__statusPage("After Load request: ",t),a}__statusPage(t,e){const a=[],i=this;if(!i.logHistory)return;a.push("=="+t+" "+e);let o="";for(let t=0;t "+e.history[t][a][i])}_triggerLoad(){const t=this;if(t.reading)return;if(0==t.pendingLoads.length)return;const e=Object.keys(t.pages),a=[];for(let i=0;i0&&(void 0!==t.pages[t.pendingLoads[0].page]||i>0||a.length>0);){const e=t.pendingLoads.shift();if(void 0!==t.pages[e.page]){t.pages[e.page].pendingOps++;const i=a.indexOf(e.page);i>=0&&a.splice(i,1),t.pages[e.page].loading?t.pages[e.page].loading.push(e):e.resolve(),t.__statusPage("After Load (cached): ",e.page)}else{if(i)i--;else{const e=a.shift();t.__statusPage("Before Unload: ",e),t.avBuffs.unshift(t.pages[e]),delete t.pages[e],t.__statusPage("After Unload: ",e)}e.page>=t.totalPages?(t.pages[e.page]=n(),e.resolve(),t.__statusPage("After Load (new): ",e.page)):(t.reading=!0,t.pages[e.page]=n(),t.pages[e.page].loading=[e],o.push(t.fd.read(t.pages[e.page].buff,0,t.pageSize,e.page*t.pageSize).then((a=>{t.pages[e.page].size=a.bytesRead;const i=t.pages[e.page].loading;delete t.pages[e.page].loading;for(let t=0;t{e.reject(t)}))),t.__statusPage("After Load (loading): ",e.page))}}function n(){if(t.avBuffs.length>0){const e=t.avBuffs.shift();return e.dirty=!1,e.pendingOps=1,e.size=0,e}return{dirty:!1,buff:new Uint8Array(t.pageSize),pendingOps:1,size:0}}Promise.all(o).then((()=>{t.reading=!1,t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t)),t._tryClose()}))}_triggerWrite(){const t=this;if(t.writing)return;const e=Object.keys(t.pages),a=[];for(let i=0;i{o.writing=!1}),(e=>{console.log("ERROR Writing: "+e),t.error=e,t._tryClose()}))))}t.writing&&Promise.all(a).then((()=>{t.writing=!1,setImmediate(t._triggerWrite.bind(t)),t._tryClose(),t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t))}))}_getDirtyPage(){for(let t in this.pages)if(this.pages[t].dirty)return t;return-1}async write(t,e){if(0==t.byteLength)return;const a=this;if(void 0===e&&(e=a.pos),a.pos=e+t.byteLength,a.totalSize0;){await n[l-i];const e=r+s>a.pageSize?a.pageSize-r:s,o=t.slice(t.byteLength-s,t.byteLength-s+e);new Uint8Array(a.pages[l].buff.buffer,r,e).set(o),a.pages[l].dirty=!0,a.pages[l].pendingOps--,a.pages[l].size=Math.max(r+e,a.pages[l].size),l>=a.totalPages&&(a.totalPages=l+1),s-=e,l++,r=0,a.writing||setImmediate(a._triggerWrite.bind(a))}}async read(t,e){let a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}async readToBuffer(t,e,a,i){if(0==a)return;const o=this;if(a>o.pageSize*o.maxPagesLoaded*.8){const t=Math.floor(1.1*a);this.maxPagesLoaded=Math.floor(t/o.pageSize)+1}if(void 0===i&&(i=o.pos),o.pos=i+a,o.pendingClose)throw new Error("Reading a closing file");const n=Math.floor(i/o.pageSize),l=Math.floor((i+a-1)/o.pageSize),r=[];for(let t=n;t<=l;t++)r.push(o._loadPage(t));o._triggerLoad();let s=n,c=i%o.pageSize,d=i+a>o.totalSize?a-(i+a-o.totalSize):a;for(;d>0;){await r[s-n],o.__statusPage("After Await (read): ",s);const i=c+d>o.pageSize?o.pageSize-c:d,l=new Uint8Array(o.pages[s].buff.buffer,o.pages[s].buff.byteOffset+c,i);t.set(l,e+a-d),o.pages[s].pendingOps--,o.__statusPage("After Op done: ",s),d-=i,s++,c=0,o.pendingLoads.length>0&&setImmediate(o._triggerLoad.bind(o))}this.pos=i+a}_tryClose(){const t=this;if(!t.pendingClose)return;t.error&&t.pendingCloseReject(t.error);t._getDirtyPage()>=0||t.writing||t.reading||t.pendingLoads.length>0||t.pendingClose()}close(){const t=this;if(t.pendingClose)throw new Error("Closing the file twice");return new Promise(((e,a)=>{t.pendingClose=e,t.pendingCloseReject=a,t._tryClose()})).then((()=>{t.fd.close()}),(e=>{throw t.fd.close(),e}))}async discard(){await this.close(),await wa.promises.unlink(this.fileName)}async writeULE32(t,e){const a=new Uint8Array(4);new DataView(a.buffer).setUint32(0,t,!0),await this.write(a,e)}async writeUBE32(t,e){const a=new Uint8Array(4);new DataView(a.buffer).setUint32(0,t,!1),await this.write(a,e)}async writeULE64(t,e){const a=new Uint8Array(8),i=new DataView(a.buffer);i.setUint32(0,4294967295&t,!0),i.setUint32(4,Math.floor(t/4294967296),!0),await this.write(a,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}async readString(t){const e=this;if(e.pendingClose)throw new Error("Reading a closing file");let a=void 0===t?e.pos:t,i=Math.floor(a/e.pageSize),o=!1,n="";for(;!o;){let t=e._loadPage(i);e._triggerLoad(),await t,e.__statusPage("After Await (read): ",i);let l=a%e.pageSize;const r=new Uint8Array(e.pages[i].buff.buffer,e.pages[i].buff.byteOffset+l,e.pageSize-l);let s=r.findIndex((t=>0===t));o=-1!==s,o?(n+=(new TextDecoder).decode(r.slice(0,s)),e.pos=i*this.pageSize+l+s+1):(n+=(new TextDecoder).decode(r),e.pos=i*this.pageSize+l+r.length),e.pages[i].pendingOps--,e.__statusPage("After Op done: ",i),a=e.pos,i++,e.pendingLoads.length>0&&setImmediate(e._triggerLoad.bind(e))}return n}}const Aa=new Uint8Array(4),ya=new DataView(Aa.buffer),Ca=new Uint8Array(8),Ia=new DataView(Ca.buffer);class Fa{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t>this.allocSize){const e=Math.max(this.allocSize+(1<<20),Math.floor(1.1*this.allocSize),t),a=new Uint8Array(e);a.set(this.o.data),this.o.data=a,this.allocSize=e}}async write(t,e){if(void 0===e&&(e=this.pos),this.readOnly)throw new Error("Writing a read only file");this._resizeIfNeeded(e+t.byteLength),this.o.data.set(t.slice(),e),e+t.byteLength>this.totalSize&&(this.totalSize=e+t.byteLength),this.pos=e+t.byteLength}async readToBuffer(t,e,a,i){if(void 0===i&&(i=this.pos),this.readOnly&&i+a>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(i+a);const o=new Uint8Array(this.o.data.buffer,this.o.data.byteOffset+i,a);t.set(o,e),this.pos=i+a}async read(t,e){const a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}close(){this.o.data.byteLength!=this.totalSize&&(this.o.data=this.o.data.slice(0,this.totalSize))}async discard(){}async writeULE32(t,e){ya.setUint32(0,t,!0),await this.write(Aa,e)}async writeUBE32(t,e){ya.setUint32(0,t,!1),await this.write(Aa,e)}async writeULE64(t,e){Ia.setUint32(0,4294967295&t,!0),Ia.setUint32(4,Math.floor(t/4294967296),!0),await this.write(Ca,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}async readString(t){const e=this;let a=void 0===t?e.pos:t;if(a>this.totalSize){if(this.readOnly)throw new Error("Reading out of bounds");this._resizeIfNeeded(t)}const i=new Uint8Array(e.o.data.buffer,a,this.totalSize-a);let o=i.findIndex((t=>0===t)),n="";return-1!==o?(n=(new TextDecoder).decode(i.slice(0,o)),e.pos=a+o+1):e.pos=a,n}}const xa=1<<22;const Ea=new Uint8Array(4),va=new DataView(Ea.buffer),Ba=new Uint8Array(8),Sa=new DataView(Ba.buffer);class Pa{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t<=this.totalSize)return;if(this.readOnly)throw new Error("Reading out of file bounds");const e=Math.floor((t-1)/xa)+1;for(let a=Math.max(this.o.data.length-1,0);a0;){const e=o+n>xa?xa-o:n,l=t.slice(t.byteLength-n,t.byteLength-n+e);new Uint8Array(a.o.data[i].buffer,o,e).set(l),n-=e,i++,o=0}this.pos=e+t.byteLength}async readToBuffer(t,e,a,i){const o=this;if(void 0===i&&(i=o.pos),this.readOnly&&i+a>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(i+a);let n=Math.floor(i/xa),l=i%xa,r=a;for(;r>0;){const i=l+r>xa?xa-l:r,s=new Uint8Array(o.o.data[n].buffer,l,i);t.set(s,e+a-r),r-=i,n++,l=0}this.pos=i+a}async read(t,e){const a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}close(){}async discard(){}async writeULE32(t,e){va.setUint32(0,t,!0),await this.write(Ea,e)}async writeUBE32(t,e){va.setUint32(0,t,!1),await this.write(Ea,e)}async writeULE64(t,e){Sa.setUint32(0,4294967295&t,!0),Sa.setUint32(4,Math.floor(t/4294967296),!0),await this.write(Ba,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}async readString(t){const e=this;let a=void 0===t?e.pos:t;if(a>this.totalSize){if(this.readOnly)throw new Error("Reading out of bounds");this._resizeIfNeeded(t)}let i=!1,o="";for(;!i;){let t=Math.floor(a/xa),n=a%xa;if(void 0===e.o.data[t])throw new Error("ERROR");let l=Math.min(2048,e.o.data[t].length-n);const r=new Uint8Array(e.o.data[t].buffer,n,l);let s=r.findIndex((t=>0===t));i=-1!==s,i?(o+=(new TextDecoder).decode(r.slice(0,s)),e.pos=t*xa+n+s+1):(o+=(new TextDecoder).decode(r),e.pos=t*xa+n+r.length),a=e.pos}return o}}const Ga=1024,za=512,Oa=2,Ua=0,Ta=65536,Qa=8192;async function qa(t,e,a){if("string"==typeof t&&(t={type:"file",fileName:t,cacheSize:e||Ta,pageSize:a||Qa}),"file"==t.type)return await La(t.fileName,Ga|za|Oa,t.cacheSize,t.pageSize);if("mem"==t.type)return function(t){const e=t.initialSize||1<<20,a=new Fa;return a.o=t,a.o.data=new Uint8Array(e),a.allocSize=e,a.totalSize=0,a.readOnly=!1,a.pos=0,a}(t);if("bigMem"==t.type)return function(t){const e=t.initialSize||0,a=new Pa;a.o=t;const i=e?Math.floor((e-1)/xa)+1:0;a.o.data=[];for(let t=0;ta)throw new Error("Version not supported");const s=await n.readULE32();let c=[];for(let t=0;t1)throw new Error(t.fileName+": Section Duplicated "+a);t.pos=e[a][0].p,t.readingSection=e[a][0]}async function $a(t,e){if(void 0===t.readingSection)throw new Error("Not reading a section");if(!e&&t.pos-t.readingSection.p!=t.readingSection.size)throw new Error("Invalid section size reading");delete t.readingSection}async function ja(t,e,a,i){const o=new Uint8Array(a);pa.toRprLE(o,0,e,a),await t.write(o,i)}async function Ka(t,e,a){const i=await t.read(e,a);return pa.fromRprLE(i,0,e)}async function Ha(t,e,a,i,o){void 0===o&&(o=e[i][0].size);const n=t.pageSize;await Va(t,e,i),await Da(a,i);for(let e=0;ee[a][0].size)throw new Error("Reading out of the range of the section");let n;return n=o<1<<30?new Uint8Array(o):new Ge(o),await t.readToBuffer(n,0,o,e[a][0].p+i),n}async function Wa(t,e,a,i,o){const n=16*t.pageSize;if(await Va(t,e,o),await Va(a,i,o),e[o][0].size!=i[o][0].size)return!1;const l=e[o][0].size;for(let e=0;e=0)e=await ga();else{if(!(["BLS12381"].indexOf(a)>=0))throw new Error(`Curve not supported: ${t}`);e=await fa()}return e}var ii={exports:{}},oi=function t(e,a){if(!e){var i=new ni(a);throw Error.captureStackTrace&&Error.captureStackTrace(i,t),i}};class ni extends Error{}ni.prototype.name="AssertionError";var li={exports:{}};function ri(t){return t.length}var si={byteLength:ri,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i1&&61===t.charCodeAt(e-1)&&e--,3*e>>>2}di[45]=62,di[95]=63;var gi={byteLength:ui,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i>2]+ci[(3&t[i])<<4|t[i+1]>>4]+ci[(15&t[i+1])<<2|t[i+2]>>6]+ci[63&t[i+2]];return e%3==2?a=a.substring(0,a.length-1)+"=":e%3==1&&(a=a.substring(0,a.length-2)+"=="),a},write:function(t,e,a=0,i=ui(e)){const o=Math.min(i,t.byteLength-a);for(let a=0,i=0;i>4,t[i++]=(15&n)<<4|l>>2,t[i++]=(3&l)<<6|63&r}return o}};function fi(t){return t.length>>>1}var hi={byteLength:fi,toString:function(t){const e=t.byteLength;t=new DataView(t.buffer,t.byteOffset,e);let a="",i=0;for(let o=e-e%4;i=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:void 0}function pi(t){let e=0;for(let a=0,i=t.length;a=55296&&o<=56319&&a+1=56320&&i<=57343){e+=4,a++;continue}}e+=o<=127?1:o<=2047?2:3}return e}let mi,wi;if("undefined"!=typeof TextDecoder){const t=new TextDecoder;mi=function(e){return t.decode(e)}}else mi=function(t){const e=t.byteLength;let a="",i=0;for(;i0){let e=0;for(;e>i,i-=6;i>=0;)t[l++]=128|a>>i&63,i-=6;n+=a>=65536?2:1}return o};var Li={byteLength:pi,toString:mi,write:wi};function bi(t){return 2*t.length}var Ai,yi,Ci={byteLength:bi,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i>8,l=o%256;t[a+2*i]=l,t[a+2*i+1]=n}return o}};!function(t,e){const a=si,i=gi,o=hi,n=Li,l=Ci,r=255===new Uint8Array(Uint16Array.of(255).buffer)[0];function s(t){switch(t){case"ascii":return a;case"base64":return i;case"hex":return o;case"utf8":case"utf-8":case void 0:return n;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return l;default:throw new Error(`Unknown encoding: ${t}`)}}function c(t){return t instanceof Uint8Array}function d(t,e,a){return"string"==typeof t?function(t,e){const a=s(e),i=new Uint8Array(a.byteLength(t));return a.write(i,t,0,i.byteLength),i}(t,e):Array.isArray(t)?function(t){const e=new Uint8Array(t.length);return e.set(t),e}(t):ArrayBuffer.isView(t)?function(t){const e=new Uint8Array(t.byteLength);return e.set(t),e}(t):function(t,e,a){return new Uint8Array(t,e,a)}(t,e,a)}function u(t,e,a,i,o){if(0===t.byteLength)return-1;if("string"==typeof a?(i=a,a=0):void 0===a?a=o?0:t.length-1:a<0&&(a+=t.byteLength),a>=t.byteLength){if(o)return-1;a=t.byteLength-1}else if(a<0){if(!o)return-1;a=0}if("string"==typeof e)e=d(e,i);else if("number"==typeof e)return e&=255,o?t.indexOf(e,a):t.lastIndexOf(e,a);if(0===e.byteLength)return-1;if(o){let i=-1;for(let o=a;ot.byteLength&&(a=t.byteLength-e.byteLength);for(let i=a;i>=0;i--){let a=!0;for(let o=0;oo)return 1}return t.byteLength>e.byteLength?1:t.byteLengtht+e.byteLength),0));const a=new Uint8Array(e);return t.reduce(((t,e)=>(a.set(e,t),t+e.byteLength)),0),a},copy:function(t,e,a=0,i=0,o=t.byteLength){if(o>0&&o=t.byteLength)throw new RangeError("sourceStart is out of range");if(o<0)throw new RangeError("sourceEnd is out of range");a>=e.byteLength&&(a=e.byteLength),o>t.byteLength&&(o=t.byteLength),e.byteLength-a=o||i<=a?"":(a<0&&(a=0),i>o&&(i=o),(0!==a||i{for(var t=new Uint8Array(128),e=0;e<64;e++)t[e<26?e+65:e<52?e+71:e<62?e-4:4*e-205]=e;return e=>{for(var a=e.length,i=new Uint8Array(3*(a-("="==e[a-1])-("="==e[a-2]))/4|0),o=0,n=0;o>4,i[n++]=r<<4|s>>2,i[n++]=s<<6|c}return i}})(),e=((t,e)=>function(){return e||(0,t[Object.keys(t)[0]])((e={exports:{}}).exports,e),e.exports})({"wasm-binary:./blake2b.wat"(e,a){a.exports=t("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")}}),a=e(),i=WebAssembly.compile(a);return Ai=async t=>(await WebAssembly.instantiate(await i,t)).exports}()().then((t=>{xi=t})),vi=64,Bi=[];ii.exports=Ti;var Si=ii.exports.BYTES_MIN=16,Pi=ii.exports.BYTES_MAX=64;ii.exports.BYTES=32;var Gi=ii.exports.KEYBYTES_MIN=16,zi=ii.exports.KEYBYTES_MAX=64;ii.exports.KEYBYTES=32;var Oi=ii.exports.SALTBYTES=16,Ui=ii.exports.PERSONALBYTES=16;function Ti(t,e,a,i,o){if(!(this instanceof Ti))return new Ti(t,e,a,i,o);if(!xi)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");t||(t=32),!0!==o&&(Ii(t>=Si,"digestLength must be at least "+Si+", was given "+t),Ii(t<=Pi,"digestLength must be at most "+Pi+", was given "+t),null!=e&&(Ii(e instanceof Uint8Array,"key must be Uint8Array or Buffer"),Ii(e.length>=Gi,"key must be at least "+Gi+", was given "+e.length),Ii(e.length<=zi,"key must be at least "+zi+", was given "+e.length)),null!=a&&(Ii(a instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Ii(a.length===Oi,"salt must be exactly "+Oi+", was given "+a.length)),null!=i&&(Ii(i instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Ii(i.length===Ui,"personal must be exactly "+Ui+", was given "+i.length))),Bi.length||(Bi.push(vi),vi+=216),this.digestLength=t,this.finalized=!1,this.pointer=Bi.pop(),this._memory=new Uint8Array(xi.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=e?e.length:0,this._memory[2]=1,this._memory[3]=1,a&&this._memory.set(a,32),i&&this._memory.set(i,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),xi.blake2b_init(this.pointer,this.digestLength),e&&(this.update(e),this._memory.fill(0,vi,vi+e.length),this._memory[this.pointer+200]=128)}function Qi(){}function qi(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function Mi(t,e){const a=new DataView(t.buffer,t.byteOffset,t.byteLength);let i="";for(let t=0;t<4;t++){t>0&&(i+="\n"),i+="\t\t";for(let e=0;e<4;e++)e>0&&(i+=" "),i+=a.getUint32(16*t+4*e).toString(16).padStart(8,"0")}return e&&(i=e+"\n"+i),i}function ki(t,e){if(t.byteLength!=e.byteLength)return!1;for(var a=new Int8Array(t),i=new Int8Array(e),o=0;o!=t.byteLength;o++)if(a[o]!=i[o])return!1;return!0}function Ri(t){const e=t.getPartialHash(),a=ii.exports(64);return a.setPartialHash(e),a}async function Di(t,e,a,i,o){if(t.G1.isZero(e))return!1;if(t.G1.isZero(a))return!1;if(t.G2.isZero(i))return!1;if(t.G2.isZero(o))return!1;return await t.pairingEq(e,o,t.G1.neg(a),i)}function Ni(t){let e=new Uint8Array(t);return void 0!==globalThis.crypto?globalThis.crypto.getRandomValues(e):q.randomFillSync(e),e}async function Vi(t){if(void 0!==globalThis.crypto&&void 0!==globalThis.crypto.subtle){const e=await globalThis.crypto.subtle.digest("SHA-256",t.buffer);return new Uint8Array(e)}return q.createHash("sha256").update(t).digest()}function $i(t,e){return new DataView(t.buffer).getUint32(e,!1)}async function ji(t){for(;!t;)t=await window.prompt("Enter a random text. (Entropy): ","");const e=ii.exports(64);e.update(Ni(64));const a=new TextEncoder;e.update(a.encode(t));const i=e.digest(),o=[];for(let t=0;t<8;t++)o[t]=$i(i,4*t);return new Q(o)}async function Ki(t,e){let a,i;e<32?(a=1<>>0,i=1):(a=4294967296,i=1<>>0);let o=t;for(let t=0;t{a[i]=Wi(t,e[i])})),a}return"bigint"==typeof e||void 0!==e.eq?e.toString(10):e}Ti.prototype._realloc=function(t){xi.memory.grow(Math.max(0,Math.ceil(Math.abs(t-this._memory.length)/65536))),this._memory=new Uint8Array(xi.memory.buffer)},Ti.prototype.update=function(t){return Ii(!1===this.finalized,"Hash instance finalized"),Ii(t instanceof Uint8Array,"input must be Uint8Array or Buffer"),vi+t.length>this._memory.length&&this._realloc(vi+t.length),this._memory.set(t,vi),xi.blake2b_update(this.pointer,vi,vi+t.length),this},Ti.prototype.digest=function(t){if(Ii(!1===this.finalized,"Hash instance finalized"),this.finalized=!0,Bi.push(this.pointer),xi.blake2b_final(this.pointer),!t||"binary"===t)return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if("string"==typeof t)return Fi.toString(this._memory,t,this.pointer+128,this.pointer+128+this.digestLength);Ii(t instanceof Uint8Array&&t.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var e=0;et()),t):t(new Error("WebAssembly not supported"))},Ti.prototype.ready=Ti.ready,Ti.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)},Ti.prototype.setPartialHash=function(t){this._memory.set(t,this.pointer)};const Yi=1,Ji=1,Xi=2,to=10,eo=3,ao=17,io=2,oo=3,no=4,lo=5,ro=6,so=7,co=8,uo=9,go=10,fo=11,ho=12,_o=13,po=14,mo=15,wo=16,Lo=17;async function bo(t,e){await Da(t,1),await t.writeULE32(1),await Na(t);const a=await ei(e.q);await Da(t,2);const i=a.q,o=8*(Math.floor((pa.bitLength(i)-1)/64)+1),n=a.r,l=8*(Math.floor((pa.bitLength(n)-1)/64)+1);await t.writeULE32(o),await ja(t,i,o),await t.writeULE32(l),await ja(t,n,l),await t.writeULE32(e.nVars),await t.writeULE32(e.nPublic),await t.writeULE32(e.domainSize),await Ao(t,a,e.vk_alpha_1),await Ao(t,a,e.vk_beta_1),await yo(t,a,e.vk_beta_2),await yo(t,a,e.vk_gamma_2),await Ao(t,a,e.vk_delta_1),await yo(t,a,e.vk_delta_2),await Na(t)}async function Ao(t,e,a){const i=new Uint8Array(2*e.G1.F.n8);e.G1.toRprLEM(i,0,a),await t.write(i)}async function yo(t,e,a){const i=new Uint8Array(2*e.G2.F.n8);e.G2.toRprLEM(i,0,a),await t.write(i)}async function Co(t,e,a){const i=await t.read(2*e.G1.F.n8),o=e.G1.fromRprLEM(i,0);return a?e.G1.toObject(o):o}async function Io(t,e,a){const i=await t.read(2*e.G2.F.n8),o=e.G2.fromRprLEM(i,0);return a?e.G2.toObject(o):o}async function Fo(t,e,a){await Va(t,e,1);const i=await t.readULE32();if(await $a(t),i===Ji)return await async function(t,e,a){const i={protocol:"groth16"};await Va(t,e,2);const o=await t.readULE32();i.n8q=o,i.q=await Ka(t,o);const n=await t.readULE32();return i.n8r=n,i.r=await Ka(t,n),i.curve=await ei(i.q),i.nVars=await t.readULE32(),i.nPublic=await t.readULE32(),i.domainSize=await t.readULE32(),i.power=qi(i.domainSize),i.vk_alpha_1=await Co(t,i.curve,a),i.vk_beta_1=await Co(t,i.curve,a),i.vk_beta_2=await Io(t,i.curve,a),i.vk_gamma_2=await Io(t,i.curve,a),i.vk_delta_1=await Co(t,i.curve,a),i.vk_delta_2=await Io(t,i.curve,a),await $a(t),i}(t,e,a);if(i===Xi)return await async function(t,e,a){const i={protocol:"plonk"};await Va(t,e,2);const o=await t.readULE32();i.n8q=o,i.q=await Ka(t,o);const n=await t.readULE32();return i.n8r=n,i.r=await Ka(t,n),i.curve=await ei(i.q),i.nVars=await t.readULE32(),i.nPublic=await t.readULE32(),i.domainSize=await t.readULE32(),i.power=qi(i.domainSize),i.nAdditions=await t.readULE32(),i.nConstrains=await t.readULE32(),i.k1=await t.read(n),i.k2=await t.read(n),i.Qm=await Co(t,i.curve,a),i.Ql=await Co(t,i.curve,a),i.Qr=await Co(t,i.curve,a),i.Qo=await Co(t,i.curve,a),i.Qc=await Co(t,i.curve,a),i.S1=await Co(t,i.curve,a),i.S2=await Co(t,i.curve,a),i.S3=await Co(t,i.curve,a),i.X_2=await Io(t,i.curve,a),await $a(t),i}(t,e,a);if(i===to)return await async function(t,e,a){const i={protocol:"fflonk"};i.protocolId=to,await Va(t,e,io);const o=await t.readULE32();i.n8q=o,i.q=await Ka(t,o),i.curve=await ei(i.q);const n=await t.readULE32();return i.n8r=n,i.r=await Ka(t,n),i.nVars=await t.readULE32(),i.nPublic=await t.readULE32(),i.domainSize=await t.readULE32(),i.power=qi(i.domainSize),i.nAdditions=await t.readULE32(),i.nConstraints=await t.readULE32(),i.k1=await t.read(n),i.k2=await t.read(n),i.w3=await t.read(n),i.w4=await t.read(n),i.w8=await t.read(n),i.wr=await t.read(n),i.X_2=await Io(t,i.curve,a),i.C0=await Co(t,i.curve,a),await $a(t),i}(t,e,a);throw new Error("Protocol not supported: ")}async function xo(t,e,a){const i={delta:{}};i.deltaAfter=await Co(t,e,a),i.delta.g1_s=await Co(t,e,a),i.delta.g1_sx=await Co(t,e,a),i.delta.g2_spx=await Io(t,e,a),i.transcript=await t.read(64),i.type=await t.readULE32();const o=await t.readULE32(),n=t.pos;let l=0;for(;t.pos-n0){const e=new Uint8Array(i);await t.writeULE32(e.byteLength),await t.write(e)}else await t.writeULE32(0)}async function Bo(t,e,a){await Da(t,10),await t.write(a.csHash),await t.writeULE32(a.contributions.length);for(let i=0;i0;)a.unshift(0),n--;return a}async function qo(t,e){e=e||{};let a,i=32767,o=!1;for(;!o;)try{a=new WebAssembly.Memory({initial:i}),o=!0}catch(t){if(1===i)throw t;console.warn("Could not allocate "+1024*i*64+" bytes. This may cause severe instability. Trying with "+1024*i*64/2+" bytes"),i=Math.floor(i/2)}const n=await WebAssembly.compile(t);let l,r="",s="",c=1,d=0,u=0;const g=await WebAssembly.instantiate(n,{env:{memory:a},runtime:{exceptionHandler:function(t){let e;throw e=1==t?"Signal not found. ":2==t?"Too many signals set. ":3==t?"Signal already set. ":4==t?"Assert Failed. ":5==t?"Not enough memory. ":6==t?"Input signal array access exceeds the size. ":"Unknown error. ",console.error("ERROR: ",t,r),new Error(e+r)},printErrorMessage:function(){r+=h()+"\n"},writeBufferMessage:function(){const t=h();"\n"===t?(console.log(s),s=""):(""!==s&&(s+=" "),s+=t)},showSharedRWMemory:function(){const t=g.exports.getFieldNumLen32(),e=new Uint32Array(t);for(let a=0;a=2&&(d>=1||u>=7)){""!==s&&(s+=" ");const t=pa.fromArray(e,4294967296).toString();s+=t}else console.log(pa.fromArray(e,4294967296))},error:function(t,a,i,o,n,r){let s;throw s=7==t?_(a)+" "+l.getFr(o).toString()+" != "+l.getFr(n).toString()+" "+_(r):9==t?_(a)+" "+l.getFr(o).toString()+" "+_(n):5==t&&e.sym?_(a)+" "+e.sym.labelIdx2Name[n]:_(a)+" "+i+" "+o+" "+n+" "+r,console.log("ERROR: ",t,s),new Error(s)},log:function(t){console.log(l.getFr(t).toString())},logGetSignal:function(t,a){e.logGetSignal&&e.logGetSignal(t,l.getFr(a))},logSetSignal:function(t,a){e.logSetSignal&&e.logSetSignal(t,l.getFr(a))},logStartComponent:function(t){e.logStartComponent&&e.logStartComponent(t)},logFinishComponent:function(t){e.logFinishComponent&&e.logFinishComponent(t)}}});"function"==typeof g.exports.getVersion&&(c=g.exports.getVersion()),"function"==typeof g.exports.getMinorVersion&&(d=g.exports.getMinorVersion()),"function"==typeof g.exports.getPatchVersion&&(u=g.exports.getPatchVersion());const f=e&&(e.sanityCheck||e.logGetSignal||e.logSetSignal||e.logStartComponent||e.logFinishComponent);return l=2===c?new ko(g,f):new Mo(a,g,f),l;function h(){for(var t="",e=g.exports.getMessageChar();0!=e;)t+=String.fromCharCode(e),e=g.exports.getMessageChar();return t}function _(t){const e=new Uint8Array(a.buffer),i=[];for(let a=0;e[t+a]>0;a++)i.push(e[t+a]);return String.fromCharCode.apply(null,i)}}class Mo{constructor(t,e,a){this.memory=t,this.i32=new Uint32Array(t.buffer),this.instance=e,this.n32=(this.instance.exports.getFrLen()>>2)-2;const i=this.instance.exports.getPRawPrime(),o=new Array(this.n32);for(let t=0;t>2)+t];this.prime=pa.fromArray(o,4294967296),this.Fr=new $(this.prime),this.mask32=pa.fromString("FFFFFFFF",16),this.NVars=this.instance.exports.getNVars(),this.n64=Math.floor((this.Fr.bitLength-1)/64)+1,this.R=this.Fr.e(pa.shiftLeft(1,64*this.n64)),this.RInv=this.Fr.inv(this.R),this.sanityCheck=a}circom_version(){return 1}async _doCalculateWitness(t,e){this.instance.exports.init(this.sanityCheck||e?1:0);const a=this.allocInt(),i=this.allocFr();Object.keys(t).forEach((e=>{const o=To(e),n=parseInt(o.slice(0,8),16),l=parseInt(o.slice(8,16),16);try{this.instance.exports.getSignalOffset32(a,0,n,l)}catch(t){throw new Error(`Signal ${e} is not an input of the circuit.`)}const r=this.getInt(a),s=Uo(t[e]);for(let t=0;t>2]}setInt(t,e){this.i32[t>>2]=e}getFr(t){const e=this,a=t>>2;if(2147483648&e.i32[a+1]){const t=new Array(e.n32);for(let i=0;i>2]=o,void(a.i32[1+(t>>2)]=0)}a.i32[t>>2]=0,a.i32[1+(t>>2)]=2147483648;const n=pa.toArray(e,4294967296);for(let e=0;e>2)+e]=i>=0?n[i]:0}}}class ko{constructor(t,e){this.instance=t,this.version=this.instance.exports.getVersion(),this.n32=this.instance.exports.getFieldNumLen32(),this.instance.exports.getRawPrime();const a=new Array(this.n32);for(let t=0;t{const a=To(e),o=parseInt(a.slice(0,8),16),n=parseInt(a.slice(8,16),16),l=Uo(t[e]);for(let t=0;t1)throw new Error(t.fileName+": File has more than one header");t.pos=e[1][0].p;const a=await t.readULE32(),i=await t.read(a),o=pa.fromRprLE(i),n=await ei(o);if(8*n.F1.n64!=a)throw new Error(t.fileName+": Invalid size");const l=await t.readULE32(),r=await t.readULE32();if(t.pos-e[1][0].p!=e[1][0].size)throw new Error("Invalid PTau header size");return{curve:n,power:l,ceremonyPower:r}}function tn(t,e,a,i){const o={tau:{},alpha:{},beta:{}};return o.tau.g1_s=n(),o.tau.g1_sx=n(),o.alpha.g1_s=n(),o.alpha.g1_sx=n(),o.beta.g1_s=n(),o.beta.g1_sx=n(),o.tau.g2_spx=l(),o.alpha.g2_spx=l(),o.beta.g2_spx=l(),o;function n(){let o;return o=i?a.G1.fromRprLEM(t,e):a.G1.fromRprUncompressed(t,e),e+=2*a.G1.F.n8,o}function l(){let o;return o=i?a.G2.fromRprLEM(t,e):a.G2.fromRprUncompressed(t,e),e+=2*a.G2.F.n8,o}}function en(t,e,a,i,o){async function n(i){o?a.G1.toRprLEM(t,e,i):a.G1.toRprUncompressed(t,e,i),e+=2*a.F1.n8}async function l(i){o?a.G2.toRprLEM(t,e,i):a.G2.toRprUncompressed(t,e,i),e+=2*a.F2.n8}return n(i.tau.g1_s),n(i.tau.g1_sx),n(i.alpha.g1_s),n(i.alpha.g1_sx),n(i.beta.g1_s),n(i.beta.g1_sx),l(i.tau.g2_spx),l(i.alpha.g2_spx),l(i.beta.g2_spx),t}async function an(t,e){const a={};a.tauG1=await s(),a.tauG2=await c(),a.alphaG1=await s(),a.betaG1=await s(),a.betaG2=await c(),a.key=await async function(t,e,a){return tn(await t.read(2*e.F1.n8*6+2*e.F2.n8*3),0,e,a)}(t,e,!0),a.partialHash=await t.read(216),a.nextChallenge=await t.read(64),a.type=await t.readULE32();const i=new Uint8Array(2*e.G1.F.n8*6+2*e.G2.F.n8*3);en(i,0,e,a.key,!1);const o=ii.exports(64);o.setPartialHash(a.partialHash),o.update(i),a.responseHash=o.digest();const n=await t.readULE32(),l=t.pos;let r=0;for(;t.pos-l1)throw new Error(t.fileName+": File has more than one contributions section");t.pos=a[7][0].p;const i=await t.readULE32(),o=[];for(let a=0;a0){const e=new Uint8Array(n);await t.writeULE32(e.byteLength),await t.write(e)}else await t.writeULE32(0);async function l(a){e.G1.toRprLEM(i,0,a),await t.write(i)}async function r(a){e.G2.toRprLEM(o,0,a),await t.write(o)}}async function ln(t,e,a){await t.writeULE32(7);const i=t.pos;await t.writeULE64(0),await t.writeULE32(a.length);for(let i=0;i0?u[u.length-1].nextChallenge:rn(c,d,n);const L=await Ra(a,"ptau",1,o?7:2);await Jo(L,c,d);const b=await m.read(64);if(ki(l,w)&&(w=b,u[u.length-1].nextChallenge=w),!ki(b,w))throw new Error("Wrong contribution. this contribution is not based on the previus hash");const A=new ii.exports(64);A.update(b);const y=[];let C;C=await x(m,L,"G1",2,2**d*2-1,[1],"tauG1"),g.tauG1=C[0],C=await x(m,L,"G2",3,2**d,[1],"tauG2"),g.tauG2=C[0],C=await x(m,L,"G1",4,2**d,[0],"alphaG1"),g.alphaG1=C[0],C=await x(m,L,"G1",5,2**d,[0],"betaG1"),g.betaG1=C[0],C=await x(m,L,"G2",6,1,[0],"betaG2"),g.betaG2=C[0],g.partialHash=A.getPartialHash();const I=await m.read(2*c.F1.n8*6+2*c.F2.n8*3);g.key=tn(I,0,c,!1),A.update(new Uint8Array(I));const F=A.digest();if(n&&n.info(Mi(F,"Contribution Response Hash imported: ")),o){const t=new ii.exports(64);t.update(F),await E(t,L,"G1",2,2**d*2-1,"tauG1",n),await E(t,L,"G2",3,2**d,"tauG2",n),await E(t,L,"G1",4,2**d,"alphaTauG1",n),await E(t,L,"G1",5,2**d,"betaTauG1",n),await E(t,L,"G2",6,1,"betaG2",n),g.nextChallenge=t.digest(),n&&n.info(Mi(g.nextChallenge,"Next Challenge Hash: "))}else g.nextChallenge=l;return u.push(g),await ln(L,c,u),await m.close(),await L.close(),await r.close(),g.nextChallenge;async function x(t,e,a,i,l,r,s){return o?await async function(t,e,a,i,o,l,r){const s=c[a],d=s.F.n8,u=2*s.F.n8,g=[];await Da(e,i);const f=Math.floor((1<<24)/u);y[i]=e.pos;for(let a=0;a=a&&e=e&&o1?s[s.length-2]:c;const u=s[s.length-1];if(e&&e.debug("Validating contribution #"+s[s.length-1].id),!await dn(n,u,d,e))return!1;const g=ii.exports(64);g.update(u.responseHash),e&&e.debug("Verifying powers in tau*G1 section");const f=await b(2,"G1","tauG1",2**l*2-1,[0,1],e);if(a=await cn(n,f.R1,f.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("tauG1 section. Powers do not match"),!1;if(!n.G1.eq(n.G1.g,f.singularPoints[0]))return e&&e.error("First element of tau*G1 section must be the generator"),!1;if(!n.G1.eq(u.tauG1,f.singularPoints[1]))return e&&e.error("Second element of tau*G1 section does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in tau*G2 section");const h=await b(3,"G2","tauG2",2**l,[0,1],e);if(a=await cn(n,n.G1.g,u.tauG1,h.R1,h.R2),!0!==a)return e&&e.error("tauG2 section. Powers do not match"),!1;if(!n.G2.eq(n.G2.g,h.singularPoints[0]))return e&&e.error("First element of tau*G2 section must be the generator"),!1;if(!n.G2.eq(u.tauG2,h.singularPoints[1]))return e&&e.error("Second element of tau*G2 section does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in alpha*tau*G1 section");const _=await b(4,"G1","alphatauG1",2**l,[0],e);if(a=await cn(n,_.R1,_.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("alphaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.alphaG1,_.singularPoints[0]))return e&&e.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in beta*tau*G1 section");const p=await b(5,"G1","betatauG1",2**l,[0],e);if(a=await cn(n,p.R1,p.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("betaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.betaG1,p.singularPoints[0]))return e&&e.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"),!1;const m=await async function(t){const e=n.G2,a=2*e.F.n8,l=new Uint8Array(a);if(!o[6])throw t.error("File has no BetaG2 section"),new Error("File has no BetaG2 section");if(o[6].length>1)throw t.error("File has no BetaG2 section"),new Error("File has more than one GetaG2 section");i.pos=o[6][0].p;const r=await i.read(a),s=e.fromRprLEM(r);return e.toRprUncompressed(l,0,s),g.update(l),s}(e);if(!n.G2.eq(u.betaG2,m))return e&&e.error("betaG2 element in betaG2 section does not match the one in the contribution section"),!1;const w=g.digest();if(l==r&&!ki(w,u.nextChallenge))return e&&e.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"),!1;e&&e.info(Mi(w,"Next challenge hash: ")),L(u,d);for(let t=s.length-2;t>=0;t--){const a=s[t],i=t>0?s[t-1]:c;if(!await dn(n,a,i,e))return!1;L(a,i)}if(e&&e.info("-----------------------------------------------------"),o[12]&&o[13]&&o[14]&&o[15]){let t;if(t=await A("G1",2,12,"tauG1",e),!t)return!1;if(t=await A("G2",3,13,"tauG2",e),!t)return!1;if(t=await A("G1",4,14,"alphaTauG1",e),!t)return!1;if(t=await A("G1",5,15,"betaTauG1",e),!t)return!1}else e&&e.warn('this file does not contain phase2 precalculated values. Please run: \n snarkjs "powersoftau preparephase2" to prepare this file to be used in the phase2 ceremony.');return await i.close(),e&&e.info("Powers of Tau Ok!"),!0;function L(t,a){if(!e)return;e.info("-----------------------------------------------------"),e.info(`Contribution #${t.id}: ${t.name||""}`),e.info(Mi(t.nextChallenge,"Next Challenge: "));const i=new Uint8Array(2*n.G1.F.n8*6+2*n.G2.F.n8*3);en(i,0,n,t.key,!1);const o=ii.exports(64);o.setPartialHash(t.partialHash),o.update(i);const l=o.digest();e.info(Mi(l,"Response Hash:")),e.info(Mi(a.nextChallenge,"Response Hash:")),1==t.type&&(e.info(`Beacon generator: ${Zi(t.beaconHash)}`),e.info(`Beacon iterations Exp: ${t.numIterationsExp}`))}async function b(t,e,a,l,r,s){const c=n[e],d=2*c.F.n8;await Va(i,o,t);const u=[];let f=c.zero,h=c.zero,_=c.zero;for(let t=0;t0){const t=c.fromRprLEM(o,0),e=$i(Ni(4),0);f=c.add(f,c.timesScalar(_,e)),h=c.add(h,c.timesScalar(t,e))}const m=await c.multiExpAffine(o.slice(0,(e-1)*d),p),w=await c.multiExpAffine(o.slice(d),p);f=c.add(f,m),h=c.add(h,w),_=c.fromRprLEM(o,(e-1)*d);for(let a=0;a=t&&i1;)c/=2,d+=1;if(2**d!=s)throw new Error("Invalid file size");o&&o.debug("Power to tau size: "+d);const u=await ji(i),g=await qa(a),f=ii.exports(64);for(let t=0;t{o.debug(e+".g1_s: "+t.G1.toString(p[e].g1_s,16)),o.debug(e+".g1_sx: "+t.G1.toString(p[e].g1_sx,16)),o.debug(e+".g2_sp: "+t.G2.toString(p[e].g2_sp,16)),o.debug(e+".g2_spx: "+t.G2.toString(p[e].g2_spx,16)),o.debug("")}));const m=ii.exports(64);await g.write(_),m.update(_),await gn(n,g,m,t,"G1",2**d*2-1,t.Fr.one,p.tau.prvKey,"COMPRESSED","tauG1",o),await gn(n,g,m,t,"G2",2**d,t.Fr.one,p.tau.prvKey,"COMPRESSED","tauG2",o),await gn(n,g,m,t,"G1",2**d,p.alpha.prvKey,p.tau.prvKey,"COMPRESSED","alphaTauG1",o),await gn(n,g,m,t,"G1",2**d,p.beta.prvKey,p.tau.prvKey,"COMPRESSED","betaTauG1",o),await gn(n,g,m,t,"G2",1,p.beta.prvKey,p.tau.prvKey,"COMPRESSED","betaTauG2",o);const w=new Uint8Array(2*t.F1.n8*6+2*t.F2.n8*3);en(w,0,t,p,!1),await g.write(w),m.update(w);const L=m.digest();o&&o.info(Mi(L,"Contribution Response Hash: ")),await g.close(),await n.close()},beacon:async function(t,e,a,i,o,n){const l=Hi(i);if(0==l.byteLength||2*l.byteLength!=i.length)return n&&n.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"),!1;if(l.length>=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((o=parseInt(o))<10||o>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;await ii.exports.ready();const{fd:r,sections:s}=await ka(t,"ptau",1),{curve:c,power:d,ceremonyPower:u}=await Xo(r,s);if(d!=u)return n&&n.error("This file has been reduced. You cannot contribute into a reduced file."),!1;s[12]&&n&&n.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again.");const g=await on(r,c,s),f={name:a,type:1,numIterationsExp:o,beaconHash:l};let h;h=g.length>0?g[g.length-1].nextChallenge:rn(c,d,n),f.key=await sn(c,h,l,o);const _=new ii.exports(64);_.update(h);const p=await Ra(e,"ptau",1,7);await Jo(p,c,d);const m=[];let w;w=await y(2,"G1",2**d*2-1,c.Fr.e(1),f.key.tau.prvKey,"tauG1",n),f.tauG1=w[1],w=await y(3,"G2",2**d,c.Fr.e(1),f.key.tau.prvKey,"tauG2",n),f.tauG2=w[1],w=await y(4,"G1",2**d,f.key.alpha.prvKey,f.key.tau.prvKey,"alphaTauG1",n),f.alphaG1=w[0],w=await y(5,"G1",2**d,f.key.beta.prvKey,f.key.tau.prvKey,"betaTauG1",n),f.betaG1=w[0],w=await y(6,"G2",1,f.key.beta.prvKey,f.key.tau.prvKey,"betaTauG2",n),f.betaG2=w[0],f.partialHash=_.getPartialHash();const L=new Uint8Array(2*c.F1.n8*6+2*c.F2.n8*3);en(L,0,c,f.key,!1),_.update(new Uint8Array(L));const b=_.digest();n&&n.info(Mi(b,"Contribution Response Hash imported: "));const A=new ii.exports(64);return A.update(b),await C(p,"G1",2,2**d*2-1,"tauG1",n),await C(p,"G2",3,2**d,"tauG2",n),await C(p,"G1",4,2**d,"alphaTauG1",n),await C(p,"G1",5,2**d,"betaTauG1",n),await C(p,"G2",6,1,"betaG2",n),f.nextChallenge=A.digest(),n&&n.info(Mi(f.nextChallenge,"Next Challenge Hash: ")),g.push(f),await ln(p,c,g),await r.close(),await p.close(),b;async function y(t,e,a,i,o,n,l){const d=[];r.pos=s[t][0].p,await Da(p,t),m[t]=p.pos;const u=c[e],g=2*u.F.n8,f=Math.floor((1<<20)/g);let h=i;for(let t=0;t0?d[d.length-1].nextChallenge:rn(r,s,o),u.key=Yo(r,g,f);const h=new ii.exports(64);h.update(g);const _=await Ra(e,"ptau",1,7);await Jo(_,r,s);const p=[];let m;m=await A(2,"G1",2**s*2-1,r.Fr.e(1),u.key.tau.prvKey,"tauG1"),u.tauG1=m[1],m=await A(3,"G2",2**s,r.Fr.e(1),u.key.tau.prvKey,"tauG2"),u.tauG2=m[1],m=await A(4,"G1",2**s,u.key.alpha.prvKey,u.key.tau.prvKey,"alphaTauG1"),u.alphaG1=m[0],m=await A(5,"G1",2**s,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG1"),u.betaG1=m[0],m=await A(6,"G2",1,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG2"),u.betaG2=m[0],u.partialHash=h.getPartialHash();const w=new Uint8Array(2*r.F1.n8*6+2*r.F2.n8*3);en(w,0,r,u.key,!1),h.update(new Uint8Array(w));const L=h.digest();o&&o.info(Mi(L,"Contribution Response Hash imported: "));const b=new ii.exports(64);return b.update(L),await y(_,"G1",2,2**s*2-1,"tauG1"),await y(_,"G2",3,2**s,"tauG2"),await y(_,"G1",4,2**s,"alphaTauG1"),await y(_,"G1",5,2**s,"betaTauG1"),await y(_,"G2",6,1,"betaG2"),u.nextChallenge=b.digest(),o&&o.info(Mi(u.nextChallenge,"Next Challenge Hash: ")),d.push(u),await ln(_,r,d),await n.close(),await _.close(),L;async function A(t,e,a,i,s,c){const d=[];n.pos=l[t][0].p,await Da(_,t),p[t]=_.pos;const u=r[e],g=2*u.F.n8,f=Math.floor((1<<20)/g);let m=i;for(let t=0;t=this.length&&(this.length=t+1),!0}getKeys(){const t=new mn;for(let e=0;e1<<20?new mn:[];for(let t=0;t1<<20?new mn:[];for(let t=0;t1<<20?new mn:[];for(let t=0;t{let i="";return Object.keys(a).forEach((o=>{let n=e.varIdx2Name[o];"one"==n&&(n="1");let l=t.curve.Fr.toString(a[o]);"1"==l&&(l=""),"-1"==l&&(l="-"),""!=i&&"-"!=l[0]&&(l="+"+l),""!=i&&(l=" "+l),i=i+l+n})),i},n=`[ ${o(i[0])} ] * [ ${o(i[1])} ] - [ ${o(i[2])} ] = 0`;a&&a.info(n)}},info:async function(t,e){const a=await yn(t);return pa.eq(a.prime,In)?e&&e.info("Curve: bn-128"):pa.eq(a.prime,Cn)?e&&e.info("Curve: bls12-381"):e&&e.info(`Unknown Curve. Prime: ${pa.toString(a.prime)}`),e&&e.info(`# of Wires: ${a.nVars}`),e&&e.info(`# of Constraints: ${a.nConstraints}`),e&&e.info(`# of Private Inputs: ${a.nPrvInputs}`),e&&e.info(`# of Public Inputs: ${a.nPubInputs}`),e&&e.info(`# of Labels: ${a.nLabels}`),e&&e.info(`# of Outputs: ${a.nOutputs}`),a},exportJson:async function(t,e){const a=await yn(t,!0,!0,!0,e),i=a.curve.Fr;return delete a.curve,delete a.F,Wi(i,a)}});async function xn(t){const e={labelIdx2Name:["one"],varIdx2Name:["one"],componentIdx2Name:[]},a=await Ma(t),i=await a.read(a.totalSize),o=new TextDecoder("utf-8").decode(i).split("\n");for(let t=0;t Reading r1cs file");const{fd:i,sections:o}=await ka(t,"r1cs",1),n=await An(i,o,{loadConstraints:!1,loadCustomGates:!1});a&&a.info("> Reading witness file");const{fd:l,sections:r}=await ka(e,"wtns",2),s=await Go(l,r);if(!pa.eq(n.prime,s.q))throw new Error("Curve of the witness does not match the curve of the proving key");const c=await Za(l,r,2);await l.close();const d=(await async function(t){let e;if(pa.eq(t,Ja))e=await ga();else{if(!pa.eq(t,Ya))throw new Error(`Curve not supported: ${pa.toString(t)}`);e=await fa()}return e}(n.prime)).Fr,u=d.n8,g=await Za(i,o,2);a&&(a.info("----------------------------"),a.info(" WITNESS CHECK"),a.info(` Curve: ${n.curve.name}`),a.info(` Vars (wires): ${n.nVars}`),a.info(` Ouputs: ${n.nOutputs}`),a.info(` Public Inputs: ${n.nPubInputs}`),a.info(` Private Inputs: ${n.nPrvInputs}`),a.info(` Labels: ${n.nLabels}`),a.info(` Constraints: ${n.nConstraints}`),a.info(` Custom Gates: ${n.useCustomGates}`),a.info("----------------------------")),a&&a.info("> Checking witness correctness");let f=0,h=!0;for(let t=0;t{const i=function(t){return d.fromRprLE(c.slice(t*u,t*u+u))}(a),o=t[a];e=d.add(e,d.mul(i,o))})),e}function p(){const t={},e=g.slice(f,f+4);f+=4;const a=new DataView(e.buffer).getUint32(0,!0),i=g.slice(f,f+(4+n.n8)*a);f+=(4+n.n8)*a;const o=new DataView(i.buffer);for(let e=0;e=this.length&&(this.length=t+1),!0}getKeys(){const t=new Gn;for(let e=0;eg)return i&&i.error(`circuit too big for this power of tau ceremony. ${_.nConstraints}*2 > 2**${g}`),-1;if(!d[12])return i&&i.error("Powers of tau is not prepared."),-1;const b=_.nOutputs+_.nPubInputs,A=2**L;await Da(p,1),await p.writeULE32(1),await Na(p),await Da(p,2);const y=u.q,C=8*(Math.floor((pa.bitLength(y)-1)/64)+1),I=u.r,F=8*(Math.floor((pa.bitLength(I)-1)/64)+1),x=pa.mod(pa.shl(1,8*F),I),E=u.Fr.e(pa.mod(pa.mul(x,x),I));let v,B,S;await p.writeULE32(C),await ja(p,y,C),await p.writeULE32(F),await ja(p,I,F),await p.writeULE32(_.nVars),await p.writeULE32(b),await p.writeULE32(A),v=await c.read(m,d[4][0].p),await p.write(v),v=await u.G1.batchLEMtoU(v),s.update(v),B=await c.read(m,d[5][0].p),await p.write(B),B=await u.G1.batchLEMtoU(B),s.update(B),S=await c.read(w,d[6][0].p),await p.write(S),S=await u.G2.batchLEMtoU(S),s.update(S);const P=new Uint8Array(m);u.G1.toRprLEM(P,0,u.G1.g);const G=new Uint8Array(w);u.G2.toRprLEM(G,0,u.G2.g);const z=new Uint8Array(m);u.G1.toRprUncompressed(z,0,u.G1.g);const O=new Uint8Array(w);u.G2.toRprUncompressed(O,0,u.G2.g),await p.write(G),await p.write(P),await p.write(G),s.update(O),s.update(z),s.update(O),await Na(p),i&&i.info("Reading r1cs");let U=await Za(f,h,2);const T=new Gn(_.nVars),Q=new Gn(_.nVars),q=new Gn(_.nVars),M=new Gn(_.nVars-b-1),k=new Array(b+1);i&&i.info("Reading tauG1");let R=await Za(c,d,12,(A-1)*m,A*m);i&&i.info("Reading tauG2");let D=await Za(c,d,13,(A-1)*w,A*w);i&&i.info("Reading alphatauG1");let N=await Za(c,d,14,(A-1)*m,A*m);i&&i.info("Reading betatauG1");let V=await Za(c,d,15,(A-1)*m,A*m);await async function(){const t=new Uint8Array(12+u.Fr.n8),e=new DataView(t.buffer),a=new Uint8Array(u.Fr.n8);u.Fr.toRprLE(a,0,u.Fr.e(1));let s=0;function c(){const t=U.slice(s,s+4);s+=4;return new DataView(t.buffer).getUint32(0,!0)}const d=new Gn;for(let t=0;t<_.nConstraints;t++){i&&t%1e4==0&&i.debug(`processing constraints: ${t}/${_.nConstraints}`);const e=c();for(let a=0;a=0?u.Fr.fromRprLE(U.slice(i[3],i[3]+u.Fr.n8),0):u.Fr.fromRprLE(a,0);const n=u.Fr.mul(o,E);u.Fr.toRprLE(t,12,n),g.set(t,h),h+=t.length}await p.write(g),await Na(p)}(),await j(3,"G1",k,"IC"),await async function(){await Da(p,9);const t=new Ge(A*m);if(L(i&&i.debug(`Writing points end ${o}: ${d}/${a.length}`),t)))),r+=n,t++}const c=await Promise.all(l);for(let t=0;t32768?(f=new Ge(_*n),h=new Ge(_*u.Fr.n8)):(f=new Uint8Array(_*n),h=new Uint8Array(_*u.Fr.n8));let p=0,m=0;const w=[R,D,N,V],L=new Uint8Array(u.Fr.n8);u.Fr.toRprLE(L,0,u.Fr.e(1));let b=0;for(let t=0;t=0?h.set(U.slice(e[t][o][2],e[t][o][2]+u.Fr.n8),b*u.Fr.n8):h.set(L,b*u.Fr.n8),b++;if(e.length>1){const t=[];t.push({cmd:"ALLOCSET",var:0,buff:f}),t.push({cmd:"ALLOCSET",var:1,buff:h}),t.push({cmd:"ALLOC",var:2,len:e.length*l}),p=0,m=0;let a=0;for(let i=0;i=0;t--){const e=d.contributions[t];i&&i.info("-------------------------"),i&&i.info(Mi(e.contributionHash,`contribution #${t+1} ${e.name?e.name:""}:`)),1==e.type&&(i&&i.info(`Beacon generator: ${Zi(e.beaconHash)}`),i&&i.info(`Beacon iterations Exp: ${e.numIterationsExp}`))}return i&&i.info("-------------------------"),i&&i.info("ZKey Ok!"),!0;async function w(t,e){const a=2*s.G1.F.n8,i=t.byteLength/a,o=s.tm.concurrency,n=Math.floor(i/o),l=[];for(let a=0;a Detected protocol: "+o.protocol),"groth16"===o.protocol)n=await async function(t,e,a){const i=await ei(t.q),o=2*i.G1.F.n8,n=await i.pairing(t.vk_alpha_1,t.vk_beta_2);let l={protocol:t.protocol,curve:i.name,nPublic:t.nPublic,vk_alpha_1:i.G1.toObject(t.vk_alpha_1),vk_beta_2:i.G2.toObject(t.vk_beta_2),vk_gamma_2:i.G2.toObject(t.vk_gamma_2),vk_delta_2:i.G2.toObject(t.vk_delta_2),vk_alphabeta_12:i.Gt.toObject(n)};await Va(e,a,3),l.IC=[];for(let a=0;a<=t.nPublic;a++){const t=await e.read(o),a=i.G1.toObject(t);l.IC.push(a)}return await $a(e),l=Tn(l),l}(o,a,i);else if("plonk"===o.protocol)n=await async function(t){const e=await ei(t.q);let a={protocol:t.protocol,curve:e.name,nPublic:t.nPublic,power:t.power,k1:e.Fr.toObject(t.k1),k2:e.Fr.toObject(t.k2),Qm:e.G1.toObject(t.Qm),Ql:e.G1.toObject(t.Ql),Qr:e.G1.toObject(t.Qr),Qo:e.G1.toObject(t.Qo),Qc:e.G1.toObject(t.Qc),S1:e.G1.toObject(t.S1),S2:e.G1.toObject(t.S2),S3:e.G1.toObject(t.S3),X_2:e.G2.toObject(t.X_2),w:e.Fr.toObject(e.Fr.w[t.power])};return a=Tn(a),a}(o);else{if(!o.protocolId||o.protocolId!==to)throw new Error("zkey file protocol unrecognized");n=await async function(t,e){const a=await ei(t.q);let i={protocol:t.protocol,curve:a.name,nPublic:t.nPublic,power:t.power,k1:a.Fr.toObject(t.k1),k2:a.Fr.toObject(t.k2),w:a.Fr.toObject(a.Fr.w[t.power]),w3:a.Fr.toObject(t.w3),w4:a.Fr.toObject(t.w4),w8:a.Fr.toObject(t.w8),wr:a.Fr.toObject(t.wr),X_2:a.G2.toObject(t.X_2),C0:a.G1.toObject(t.C0)};return Tn(i)}(o)}return await a.close(),e&&e.info("EXPORT VERIFICATION KEY FINISHED"),n}var qn={};const{unstringifyBigInts:Mn,stringifyBigInts:kn}=ma;async function Rn(t,e,a){a&&a.info("FFLONK EXPORT SOLIDITY VERIFIER STARTED");const i=await ai(t.curve);let o=c(t.w3);t.w3_2=d(i.Fr.square(o));let n=c(t.w4);t.w4_2=d(i.Fr.square(n)),t.w4_3=d(i.Fr.mul(i.Fr.square(n),n));let l=c(t.w8),r=i.Fr.one;for(let e=1;e<8;e++)r=i.Fr.mul(r,l),t["w8_"+e]=d(r);let s=e[t.protocol];return a&&a.info("FFLONK EXPORT SOLIDITY VERIFIER FINISHED"),qn.render(s,t);function c(t){const e=Mn(t);return i.Fr.fromObject(e)}function d(t){const e=i.Fr.toObject(t);return kn(e)}}var Dn=Object.freeze({__proto__:null,newZKey:zn,exportBellman:async function(t,e,a){const{fd:i,sections:o}=await ka(t,"zkey",2),n=await Fo(i,o);if("groth16"!=n.protocol)throw new Error("zkey file is not groth16");const l=await ei(n.q),r=2*l.G1.F.n8,s=2*l.G2.F.n8,c=await Eo(i,l,o),d=await qa(e);let u;await w(n.vk_alpha_1),await w(n.vk_beta_1),await L(n.vk_beta_2),await L(n.vk_gamma_2),await w(n.vk_delta_1),await L(n.vk_delta_2),u=await Za(i,o,3),u=await l.G1.batchLEMtoU(u),await b("G1",u);const g=await Za(i,o,9);let f,h,_,p,m;f=await l.G1.fft(g,"affine","jacobian",a),f=await l.G1.batchApplyKey(f,l.Fr.neg(l.Fr.e(2)),l.Fr.w[n.power+1],"jacobian","affine",a),f=f.slice(0,f.byteLength-r),f=await l.G1.batchLEMtoU(f),await b("G1",f),h=await Za(i,o,8),h=await l.G1.batchLEMtoU(h),await b("G1",h),_=await Za(i,o,5),_=await l.G1.batchLEMtoU(_),await b("G1",_),p=await Za(i,o,6),p=await l.G1.batchLEMtoU(p),await b("G1",p),m=await Za(i,o,7),m=await l.G2.batchLEMtoU(m),await b("G2",m),await d.write(c.csHash),await async function(t){const e=new Uint8Array(4);new DataView(e.buffer,e.byteOffset,e.byteLength).setUint32(0,t,!1),await d.write(e)}(c.contributions.length);for(let t=0;tg.contributions.length)return o&&o.error("The impoerted file does not include new contributions"),!1;for(let t=0;t=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((o=parseInt(o))<10||o>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;const{fd:r,sections:s}=await ka(t,"zkey",2),c=await Fo(r,s);if("groth16"!=c.protocol)throw new Error("zkey file is not groth16");const d=await ei(c.q),u=await Eo(r,d,s),g=await Ra(e,"zkey",1,10),f=await Ki(l,o),h=ii.exports(64);h.update(u.csHash);for(let t=0;t>BigInt(a)}const r=c,d=s;function u(t){return(BigInt(t)&BigInt(1))==BigInt(1)}function _(t){let a=BigInt(t);const e=[];for(;a;)a&BigInt(1)?e.push(1):e.push(0),a>>=BigInt(1);return e}function g(t){if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(t)}function f(t,a){return BigInt(t)+BigInt(a)}function h(t,a){return BigInt(t)-BigInt(a)}function p(t){return-BigInt(t)}function m(t,a){return BigInt(t)*BigInt(a)}function L(t,a){return BigInt(t)**BigInt(a)}function b(t,a){return BigInt(t)/BigInt(a)}function w(t,a){return BigInt(t)%BigInt(a)}function y(t,a){return BigInt(t)==BigInt(a)}function A(t,a){return BigInt(t)>BigInt(a)}function C(t,a){return BigInt(t)>=BigInt(a)}function F(t,a){return BigInt(t)&BigInt(a)}function x(t,a,e,o){const i="0000000"+e.toString(16),n=new Uint32Array(t.buffer,t.byteOffset+a,o/4),l=1+(4*(i.length-7)-1>>5);for(let t=0;t>5);for(let t=0;tn[n.length-a-1]=t.toString(16).padStart(8,"0"))),e(n.join(""),16)}function E(t,a,o){o=o||t.byteLength,a=a||0;const i=new DataView(t.buffer,t.byteOffset+a,o),n=new Array(o/4);for(let t=0;t>=BigInt(1)}return e},bits:_,toNumber:g,toArray:function(t,a){const e=[];let o=BigInt(t);for(a=BigInt(a);o;)e.unshift(Number(o%a)),o/=a;return e},add:f,sub:h,neg:p,mul:m,square:function(t){return BigInt(t)*BigInt(t)},pow:L,exp:function(t,a){return BigInt(t)**BigInt(a)},abs:function(t){return BigInt(t)>=0?BigInt(t):-BigInt(t)},div:b,mod:w,eq:y,neq:function(t,a){return BigInt(t)!=BigInt(a)},lt:function(t,a){return BigInt(t)=0;e--)i=t.square(i),o[e]&&(i=t.mul(i,a));return i}function z(t){if(t.m%2==1)if(y(w(t.p,4),1))if(y(w(t.p,8),1))if(y(w(t.p,16),1))!function(t){t.sqrt_q=L(t.p,t.m),t.sqrt_s=0,t.sqrt_t=h(t.sqrt_q,1);for(;!u(t.sqrt_t);)t.sqrt_s=t.sqrt_s+1,t.sqrt_t=b(t.sqrt_t,2);let a=t.one;for(;t.eq(a,t.one);){const e=t.random();t.sqrt_z=t.pow(e,t.sqrt_t),a=t.pow(t.sqrt_z,2**(t.sqrt_s-1))}t.sqrt_tm1d2=b(h(t.sqrt_t,1),2),t.sqrt=function(t){const a=this;if(a.isZero(t))return a.zero;let e=a.pow(t,a.sqrt_tm1d2);const o=a.pow(a.mul(a.square(e),t),2**(a.sqrt_s-1));if(a.eq(o,a.negone))return null;let i=a.sqrt_s,n=a.mul(t,e),l=a.mul(n,e),c=a.sqrt_z;for(;!a.eq(l,a.one);){let t=a.square(l),o=1;for(;!a.eq(t,a.one);)t=a.square(t),o++;e=c;for(let t=0;t>>0,t[i]=(t[i]^t[a])>>>0,t[i]=(t[i]<<16|t[i]>>>16&65535)>>>0,t[o]=t[o]+t[i]>>>0,t[e]=(t[e]^t[o])>>>0,t[e]=(t[e]<<12|t[e]>>>20&4095)>>>0,t[a]=t[a]+t[e]>>>0,t[i]=(t[i]^t[a])>>>0,t[i]=(t[i]<<8|t[i]>>>24&255)>>>0,t[o]=t[o]+t[i]>>>0,t[e]=(t[e]^t[o])>>>0,t[e]=(t[e]<<7|t[e]>>>25&127)>>>0}class M{constructor(t){t=t||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],0,0,0,0],this.idx=16,this.buff=new Array(16)}nextU32(){return 16==this.idx&&this.update(),this.buff[this.idx++]}nextU64(){return f(m(this.nextU32(),4294967296),this.nextU32())}nextBool(){return 1==(1&this.nextU32())}update(){for(let t=0;t<16;t++)this.buff[t]=this.state[t];for(let a=0;a<10;a++)T(t=this.buff,0,4,8,12),T(t,1,5,9,13),T(t,2,6,10,14),T(t,3,7,11,15),T(t,0,5,10,15),T(t,1,6,11,12),T(t,2,7,8,13),T(t,3,4,9,14);var t;for(let t=0;t<16;t++)this.buff[t]=this.buff[t]+this.state[t]>>>0;this.idx=0,this.state[12]=this.state[12]+1>>>0,0==this.state[12]&&(this.state[13]=this.state[13]+1>>>0,0==this.state[13]&&(this.state[14]=this.state[14]+1>>>0,0==this.state[14]&&(this.state[15]=this.state[15]+1>>>0)))}}var U={};function Q(t){let a=new Uint8Array(t);if(void 0!==globalThis.crypto)globalThis.crypto.getRandomValues(a);else for(let e=0;e>>0;return a}let k=null;function R(){return k||(k=new M(function(){const t=Q(32),a=new Uint32Array(t.buffer),e=[];for(let t=0;t<8;t++)e.push(a[t]);return e}()),k)}class N{constructor(t,a,e){this.F=a,this.G=t,this.opMulGF=e;let o=a.sqrt_t||a.t,i=a.sqrt_s||a.s,n=a.one;for(;a.eq(a.pow(n,a.half),a.one);)n=a.add(n,a.one);this.w=new Array(i+1),this.wi=new Array(i+1),this.w[i]=this.F.pow(n,o),this.wi[i]=this.F.inv(this.w[i]);let l=i-1;for(;l>=0;)this.w[l]=this.F.square(this.w[l+1]),this.wi[l]=this.F.square(this.wi[l+1]),l--;this.roots=[],this._setRoots(Math.min(i,15))}_setRoots(t){for(let a=t;a>=0&&!this.roots[a];a--){let t=this.F.one;const e=1<>1,c=$(t,a,e-1,o,2*i),s=$(t,a,e-1,o+i,2*i),r=new Array(n);for(let a=0;a>this.one,this.bitLength=i(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let e=this.pow(this.nqr,a);for(;!this.eq(e,this.negone);)this.nqr=this.nqr+this.one,e=this.pow(this.nqr,a);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),z(this),this.FFT=new N(this,this,this.mul.bind(this)),this.fft=this.FFT.fft.bind(this.FFT),this.ifft=this.FFT.ifft.bind(this.FFT),this.w=this.FFT.w,this.wi=this.FFT.wi,this.shift=this.square(this.nqr),this.k=this.exp(this.nqr,2**this.s)}e(t,a){let e;if(a?16==a&&(e=BigInt("0x"+t)):e=BigInt(t),e<0){let t=-e;return t>=this.p&&(t%=this.p),this.p-t}return e>=this.p?e%this.p:e}add(t,a){const e=t+a;return e>=this.p?e-this.p:e}sub(t,a){return t>=a?t-a:this.p-a+t}neg(t){return t?this.p-t:t}mul(t,a){return t*a%this.p}mulScalar(t,a){return t*this.e(a)%this.p}square(t){return t*t%this.p}eq(t,a){return t==a}neq(t,a){return t!=a}lt(t,a){return(t>this.half?t-this.p:t)<(a>this.half?a-this.p:a)}gt(t,a){return(t>this.half?t-this.p:t)>(a>this.half?a-this.p:a)}leq(t,a){return(t>this.half?t-this.p:t)<=(a>this.half?a-this.p:a)}geq(t,a){return(t>this.half?t-this.p:t)>=(a>this.half?a-this.p:a)}div(t,a){return this.mul(t,this.inv(a))}idiv(t,a){if(!a)throw new Error("Division by zero");return t/a}inv(t){if(!t)throw new Error("Division by zero");let a=this.zero,e=this.p,o=this.one,i=t%this.p;for(;i;){let t=e/i;[a,o]=[o,a-t*o],[e,i]=[i,e-t*i]}return a=this.p?e-this.p:e}bor(t,a){const e=(t|a)&this.mask;return e>=this.p?e-this.p:e}bxor(t,a){const e=(t^a)&this.mask;return e>=this.p?e-this.p:e}bnot(t){const a=t^this.mask;return a>=this.p?a-this.p:a}shl(t,a){if(Number(a)=this.p?e-this.p:e}{const e=this.p-a;return Number(e)>e:this.zero}}shr(t,a){if(Number(a)>a;{const e=this.p-a;if(Number(e)=this.p?a-this.p:a}return 0}}land(t,a){return t&&a?this.one:this.zero}lor(t,a){return t||a?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let a=this.s,e=this.nqr_to_t,o=this.pow(t,this.t),i=this.pow(t,this.add(this.t,this.one)>>this.one);for(;o!=this.one;){let t=this.square(o),n=1;for(;t!=this.one;)n++,t=this.square(t);let l=e;for(let t=0;tthis.p>>this.one&&(i=this.neg(i)),i}normalize(t,a){if((t=BigInt(t,a))<0){let a=-t;return a>=this.p&&(a%=this.p),this.p-a}return t>=this.p?t%this.p:t}random(){const t=2*this.bitLength/8;let a=this.zero;for(let e=0;ethis.half&&10==a){e="-"+(this.p-t).toString(a)}else e=t.toString(a);return e}isZero(t){return t==this.zero}fromRng(t){let a;do{a=this.zero;for(let e=0;e=this.p);return a=a*this.Ri%this.p,a}fft(t){return this.FFT.fft(t)}ifft(t){return this.FFT.ifft(t)}toRprLE(t,a,e){x(t,a,e,8*this.n64)}toRprBE(t,a,e){I(t,a,e,8*this.n64)}toRprBEM(t,a,e){return this.toRprBE(t,a,this.mul(this.R,e))}toRprLEM(t,a,e){return this.toRprLE(t,a,this.mul(this.R,e))}fromRprLE(t,a){return B(t,a,this.n8)}fromRprBE(t,a){return E(t,a,this.n8)}fromRprLEM(t,a){return this.mul(this.fromRprLE(t,a),this.Ri)}fromRprBEM(t,a){return this.mul(this.fromRprBE(t,a),this.Ri)}toObject(t){return t}}var V="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},K={bigInt2BytesLE:function(t,a){const e=Array(a);let o=BigInt(t);for(let t=0;t>=8n;return e},bigInt2U32LE:function(t,a){const e=Array(a);let o=BigInt(t);for(let t=0;t>=32n;return e},isOcamNum:function(t){return!!Array.isArray(t)&&(3==t.length&&("number"==typeof t[0]&&("number"==typeof t[1]&&!!Array.isArray(t[2]))))}},H=function(t,a,e,o,i,n,l){const c=t.addFunction(a);c.addParam("base","i32"),c.addParam("scalar","i32"),c.addParam("scalarLength","i32"),c.addParam("r","i32"),c.addLocal("i","i32"),c.addLocal("b","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(e));c.addCode(s.if(s.i32_eqz(s.getLocal("scalarLength")),[...s.call(l,s.getLocal("r")),...s.ret([])])),c.addCode(s.call(n,s.getLocal("base"),r)),c.addCode(s.call(l,s.getLocal("r"))),c.addCode(s.setLocal("i",s.getLocal("scalarLength"))),c.addCode(s.block(s.loop(s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.setLocal("b",s.i32_load8_u(s.i32_add(s.getLocal("scalar"),s.getLocal("i")))),...function(){const t=[];for(let a=0;a<8;a++)t.push(...s.call(i,s.getLocal("r"),s.getLocal("r")),...s.if(s.i32_ge_u(s.getLocal("b"),s.i32_const(128>>a)),[...s.setLocal("b",s.i32_sub(s.getLocal("b"),s.i32_const(128>>a))),...s.call(o,s.getLocal("r"),r,s.getLocal("r"))]));return t}(),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.br(0))))},Z=function(t,a){const e=8*t.modules[a].n64,o=t.addFunction(a+"_batchInverse");o.addParam("pIn","i32"),o.addParam("inStep","i32"),o.addParam("n","i32"),o.addParam("pOut","i32"),o.addParam("outStep","i32"),o.addLocal("itAux","i32"),o.addLocal("itIn","i32"),o.addLocal("itOut","i32"),o.addLocal("i","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(e));o.addCode(i.setLocal("itAux",i.i32_load(i.i32_const(0))),i.i32_store(i.i32_const(0),i.i32_add(i.getLocal("itAux"),i.i32_mul(i.i32_add(i.getLocal("n"),i.i32_const(1)),i.i32_const(e))))),o.addCode(i.call(a+"_one",i.getLocal("itAux")),i.setLocal("itIn",i.getLocal("pIn")),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.if(i.call(a+"_isZero",i.getLocal("itIn")),i.call(a+"_copy",i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),i.getLocal("itAux")),i.call(a+"_mul",i.getLocal("itIn"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),i.getLocal("itAux"))),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))),i.setLocal("itIn",i.i32_sub(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itAux",i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("itOut",i.i32_add(i.getLocal("pOut"),i.i32_mul(i.i32_sub(i.getLocal("n"),i.i32_const(1)),i.getLocal("outStep")))),i.call(a+"_inverse",i.getLocal("itAux"),i.getLocal("itAux")),i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("i"))),i.if(i.call(a+"_isZero",i.getLocal("itIn")),[...i.call(a+"_copy",i.getLocal("itAux"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),...i.call(a+"_zero",i.getLocal("itOut"))],[...i.call(a+"_copy",i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),n),...i.call(a+"_mul",i.getLocal("itAux"),i.getLocal("itIn"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),...i.call(a+"_mul",i.getLocal("itAux"),n,i.getLocal("itOut"))]),i.setLocal("itIn",i.i32_sub(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itOut",i.i32_sub(i.getLocal("itOut"),i.getLocal("outStep"))),i.setLocal("itAux",i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_sub(i.getLocal("i"),i.i32_const(1))),i.br(0)))),o.addCode(i.i32_store(i.i32_const(0),i.getLocal("itAux")))};var W=function(t,a,e,o,i,n){void 0===n&&(n=oa?1:-1}function tt(t){return t*t}function at(t){return t%2n!==0n}function et(t){return t%2n===0n}function ot(t){return t<0n}function it(t){return t>0n}function nt(t){return ot(t)?t.toString(2).length-1:t.toString(2).length}function lt(t){return t<0n?-t:t}function ct(t){return 1n===lt(t)}function st(t,a){for(var e,o,i,n=0n,l=1n,c=a,s=lt(t);0n!==s;)e=c/s,o=n,i=c,n=l,c=s,l=o-e*l,s=i-e*s;if(!ct(c))throw new Error(t.toString()+" and "+a.toString()+" are not co-prime");return-1===X(n,0n)&&(n+=a),ot(t)?-n:n}function rt(t,a,e){if(0n===e)throw new Error("Cannot take modPow with modulus 0");var o=1n,i=t%e;for(ot(a)&&(a*=-1n,i=st(i,e));it(a);){if(0n===i)return 0n;at(a)&&(o=o*i%e),a/=2n,i=tt(i)%e}return o}function dt(t,a){return 0n!==a&&(!!ct(a)||(0===function(t,a){return(t=t>=0n?t:-t)===(a=a>=0n?a:-a)?0:t>a?1:-1}(a,2n)?et(t):t%a===0n))}function ut(t,a){for(var e,o,i,n=function(t){return t-1n}(t),l=n,c=0;et(l);)l/=2n,c++;t:for(o=0;o>1&&o>1,t>>1)))),a.addCode(e.setLocal(s,e.i64_add(e.getLocal(s),e.i64_shr_u(e.getLocal(c),e.i64_const(32)))))),t>0&&(a.addCode(e.setLocal(c,e.i64_add(e.i64_and(e.getLocal(c),e.i64_const(4294967295)),e.i64_and(e.getLocal(r),e.i64_const(4294967295))))),a.addCode(e.setLocal(s,e.i64_add(e.i64_add(e.getLocal(s),e.i64_shr_u(e.getLocal(c),e.i64_const(32))),e.getLocal(d))))),a.addCode(e.i64_store32(e.getLocal("r"),4*t,e.getLocal(c))),a.addCode(e.setLocal(r,e.getLocal(s)),e.setLocal(d,e.i64_shr_u(e.getLocal(r),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*i*2-4,e.getLocal(r)))}(),function(){const a=t.addFunction(o+"_squareOld");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(o+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){!function(){const a=t.addFunction(o+"__mul1");a.addParam("px","i32"),a.addParam("y","i64"),a.addParam("pr","i32"),a.addLocal("c","i64");const e=a.getCodeBuilder();a.addCode(e.setLocal("c",e.i64_mul(e.i64_load32_u(e.getLocal("px"),0,0),e.getLocal("y")))),a.addCode(e.i64_store32(e.getLocal("pr"),0,0,e.getLocal("c")));for(let t=1;t>1n,p=t.alloc(c,gt.bigInt2BytesLE(h,c)),m=h+1n,L=t.alloc(c,gt.bigInt2BytesLE(m,c));t.modules[s]={pq:d,pR2:u,n64:n,q:i,pOne:_,pZero:g,pePlusOne:L};let b=2n;if(yt(i))for(;wt(b,h,i)!==f;)b+=1n;let w=0,y=f;for(;!At(y)&&0n!==y;)w++,y>>=1n;const A=t.alloc(c,gt.bigInt2BytesLE(y,c)),C=wt(b,y,i),F=t.alloc(gt.bigInt2BytesLE((C<>1n,I=t.alloc(c,gt.bigInt2BytesLE(x,c));return t.exportFunction(r+"_copy",s+"_copy"),t.exportFunction(r+"_zero",s+"_zero"),t.exportFunction(r+"_isZero",s+"_isZero"),t.exportFunction(r+"_eq",s+"_eq"),function(){const a=t.addFunction(s+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder();a.addCode(e.ret(e.call(r+"_eq",e.getLocal("x"),e.i32_const(_))))}(),function(){const a=t.addFunction(s+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.if(e.call(r+"_add",e.getLocal("x"),e.getLocal("y"),e.getLocal("r")),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.if(e.call(r+"_sub",e.getLocal("x"),e.getLocal("y"),e.getLocal("r")),e.drop(e.call(r+"_add",e.getLocal("r"),e.i32_const(d),e.getLocal("r")))))}(),function(){const a=t.addFunction(s+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_sub",e.i32_const(g),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.alloc(l*l*8),e=t.addFunction(s+"_mReduct");e.addParam("t","i32"),e.addParam("r","i32"),e.addLocal("np32","i64"),e.addLocal("c","i64"),e.addLocal("m","i64");const o=e.getCodeBuilder(),n=Number(0x100000000n-bt(i,0x100000000n));e.addCode(o.setLocal("np32",o.i64_const(n)));for(let t=0;t=l&&a.addCode(e.i64_store32(e.getLocal("r"),4*(t-l),e.getLocal(f))),[f,h]=[h,f],a.addCode(e.setLocal(h,e.i64_shr_u(e.getLocal(f),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*l-4,e.getLocal(f))),a.addCode(e.if(e.i32_wrap_i64(e.getLocal(h)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_square");a.addParam("x","i32"),a.addParam("r","i32"),a.addLocal("c0","i64"),a.addLocal("c1","i64"),a.addLocal("c0_old","i64"),a.addLocal("c1_old","i64"),a.addLocal("np32","i64");for(let t=0;t>1&&o>1,t>>1)))),a.addCode(e.setLocal(f,e.i64_add(e.getLocal(f),e.i64_shr_u(e.getLocal(g),e.i64_const(32)))))),t>0&&(a.addCode(e.setLocal(g,e.i64_add(e.i64_and(e.getLocal(g),e.i64_const(4294967295)),e.i64_and(e.getLocal(h),e.i64_const(4294967295))))),a.addCode(e.setLocal(f,e.i64_add(e.i64_add(e.getLocal(f),e.i64_shr_u(e.getLocal(g),e.i64_const(32))),e.getLocal(p)))));for(let o=Math.max(1,t-l+1);o<=t&&o=l&&a.addCode(e.i64_store32(e.getLocal("r"),4*(t-l),e.getLocal(g))),a.addCode(e.setLocal(h,e.getLocal(f)),e.setLocal(p,e.i64_shr_u(e.getLocal(h),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*l-4,e.getLocal(h))),a.addCode(e.if(e.i32_wrap_i64(e.getLocal(p)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_squareOld");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.i32_const(u),e.getLocal("r")))}(),function(){const a=t.alloc(2*c),e=t.addFunction(s+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const o=e.getCodeBuilder();e.addCode(o.call(r+"_copy",o.getLocal("x"),o.i32_const(a))),e.addCode(o.call(r+"_zero",o.i32_const(a+c))),e.addCode(o.call(s+"_mReduct",o.i32_const(a),o.getLocal("r")))}(),function(){const a=t.addFunction(s+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.call(s+"_fromMontgomery",e.getLocal("x"),o),e.call(r+"_gte",o,e.i32_const(L)))}(),function(){const a=t.addFunction(s+"_sign");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(r+"_isZero",e.getLocal("x")),e.ret(e.i32_const(0))),e.call(s+"_fromMontgomery",e.getLocal("x"),o),e.if(e.call(r+"_gte",o,e.i32_const(L)),e.ret(e.i32_const(-1))),e.ret(e.i32_const(1)))}(),function(){const a=t.addFunction(s+"_inverse");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_fromMontgomery",e.getLocal("x"),e.getLocal("r"))),a.addCode(e.call(r+"_inverseMod",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),a.addCode(e.call(s+"_toMontgomery",e.getLocal("r"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_one");a.addParam("pr","i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_copy",e.i32_const(_),e.getLocal("pr")))}(),function(){const a=t.addFunction(s+"_load");a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32"),a.addLocal("p","i32"),a.addLocal("l","i32"),a.addLocal("i","i32"),a.addLocal("j","i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c)),i=t.alloc(c),n=e.i32_const(i);a.addCode(e.call(r+"_zero",e.getLocal("r")),e.setLocal("i",e.i32_const(c)),e.setLocal("p",e.getLocal("scalar")),e.block(e.loop(e.br_if(1,e.i32_gt_u(e.getLocal("i"),e.getLocal("scalarLen"))),e.if(e.i32_eq(e.getLocal("i"),e.i32_const(c)),e.call(s+"_one",o),e.call(s+"_mul",o,e.i32_const(u),o)),e.call(s+"_mul",e.getLocal("p"),o,n),e.call(s+"_add",e.getLocal("r"),n,e.getLocal("r")),e.setLocal("p",e.i32_add(e.getLocal("p"),e.i32_const(c))),e.setLocal("i",e.i32_add(e.getLocal("i"),e.i32_const(c))),e.br(0))),e.setLocal("l",e.i32_rem_u(e.getLocal("scalarLen"),e.i32_const(c))),e.if(e.i32_eqz(e.getLocal("l")),e.ret([])),e.call(r+"_zero",n),e.setLocal("j",e.i32_const(0)),e.block(e.loop(e.br_if(1,e.i32_eq(e.getLocal("j"),e.getLocal("l"))),e.i32_store8(e.getLocal("j"),i,e.i32_load8_u(e.getLocal("p"))),e.setLocal("p",e.i32_add(e.getLocal("p"),e.i32_const(1))),e.setLocal("j",e.i32_add(e.getLocal("j"),e.i32_const(1))),e.br(0))),e.if(e.i32_eq(e.getLocal("i"),e.i32_const(c)),e.call(s+"_one",o),e.call(s+"_mul",o,e.i32_const(u),o)),e.call(s+"_mul",n,o,n),e.call(s+"_add",e.getLocal("r"),n,e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.call(s+"_load",e.getLocal("scalar"),e.getLocal("scalarLen"),o),e.call(s+"_toMontgomery",o,o),e.call(s+"_mul",e.getLocal("x"),o,e.getLocal("r")))}(),ht(t,s),pt(t,s+"_batchToMontgomery",s+"_toMontgomery",c,c),pt(t,s+"_batchFromMontgomery",s+"_fromMontgomery",c,c),pt(t,s+"_batchNeg",s+"_neg",c,c),mt(t,s+"_batchAdd",s+"_add",c,c),mt(t,s+"_batchSub",s+"_sub",c,c),mt(t,s+"_batchMul",s+"_mul",c,c),t.exportFunction(s+"_add"),t.exportFunction(s+"_sub"),t.exportFunction(s+"_neg"),t.exportFunction(s+"_isNegative"),t.exportFunction(s+"_isOne"),t.exportFunction(s+"_sign"),t.exportFunction(s+"_mReduct"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_squareOld"),t.exportFunction(s+"_fromMontgomery"),t.exportFunction(s+"_toMontgomery"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_one"),t.exportFunction(s+"_load"),t.exportFunction(s+"_timesScalar"),ft(t,s+"_exp",c,s+"_mul",s+"_square",r+"_copy",s+"_one"),t.exportFunction(s+"_exp"),t.exportFunction(s+"_batchInverse"),yt(i)&&(!function(){const a=t.addFunction(s+"_sqrt");a.addParam("n","i32"),a.addParam("r","i32"),a.addLocal("m","i32"),a.addLocal("i","i32"),a.addLocal("j","i32");const e=a.getCodeBuilder(),o=e.i32_const(_),i=e.i32_const(t.alloc(c)),n=e.i32_const(t.alloc(c)),l=e.i32_const(t.alloc(c)),r=e.i32_const(t.alloc(c)),d=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(s+"_isZero",e.getLocal("n")),e.ret(e.call(s+"_zero",e.getLocal("r")))),e.setLocal("m",e.i32_const(w)),e.call(s+"_copy",e.i32_const(F),i),e.call(s+"_exp",e.getLocal("n"),e.i32_const(A),e.i32_const(c),n),e.call(s+"_exp",e.getLocal("n"),e.i32_const(I),e.i32_const(c),l),e.block(e.loop(e.br_if(1,e.call(s+"_eq",n,o)),e.call(s+"_square",n,r),e.setLocal("i",e.i32_const(1)),e.block(e.loop(e.br_if(1,e.call(s+"_eq",r,o)),e.call(s+"_square",r,r),e.setLocal("i",e.i32_add(e.getLocal("i"),e.i32_const(1))),e.br(0))),e.call(s+"_copy",i,d),e.setLocal("j",e.i32_sub(e.i32_sub(e.getLocal("m"),e.getLocal("i")),e.i32_const(1))),e.block(e.loop(e.br_if(1,e.i32_eqz(e.getLocal("j"))),e.call(s+"_square",d,d),e.setLocal("j",e.i32_sub(e.getLocal("j"),e.i32_const(1))),e.br(0))),e.setLocal("m",e.getLocal("i")),e.call(s+"_square",d,i),e.call(s+"_mul",n,i,n),e.call(s+"_mul",l,d,l),e.br(0))),e.if(e.call(s+"_isNegative",l),e.call(s+"_neg",l,e.getLocal("r")),e.call(s+"_copy",l,e.getLocal("r"))))}(),function(){const a=t.addFunction(s+"_isSquare");a.addParam("n","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(_),i=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(s+"_isZero",e.getLocal("n")),e.ret(e.i32_const(1))),e.call(s+"_exp",e.getLocal("n"),e.i32_const(p),e.i32_const(c),i),e.call(s+"_eq",i,o))}(),t.exportFunction(s+"_sqrt"),t.exportFunction(s+"_isSquare")),t.exportFunction(s+"_batchToMontgomery"),t.exportFunction(s+"_batchFromMontgomery"),s};const xt=Ft,{bitLength:It}=J;var Bt=function(t,a,e,o,i){const n=BigInt(a),l=Math.floor((It(n-1n)-1)/64)+1,c=8*l,s=e||"f1";if(t.modules[s])return s;t.modules[s]={n64:l};const r=i||"int",d=xt(t,n,o,r),u=t.modules[d].pR2,_=t.modules[d].pq,g=t.modules[d].pePlusOne;return function(){const a=t.alloc(c),e=t.addFunction(s+"_mul");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const o=e.getCodeBuilder();e.addCode(o.call(d+"_mul",o.getLocal("x"),o.getLocal("y"),o.i32_const(a))),e.addCode(o.call(d+"_mul",o.i32_const(a),o.i32_const(u),o.getLocal("r")))}(),function(){const a=t.addFunction(s+"_square");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_inverse");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_inverseMod",e.getLocal("x"),e.i32_const(_),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_gte",e.getLocal("x"),e.i32_const(g)))}(),t.exportFunction(d+"_add",s+"_add"),t.exportFunction(d+"_sub",s+"_sub"),t.exportFunction(d+"_neg",s+"_neg"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_isNegative"),t.exportFunction(d+"_copy",s+"_copy"),t.exportFunction(d+"_zero",s+"_zero"),t.exportFunction(d+"_one",s+"_one"),t.exportFunction(d+"_isZero",s+"_isZero"),t.exportFunction(d+"_eq",s+"_eq"),s};const Et=H,vt=Z,St=K;var Pt=function(t,a,e,o){if(t.modules[e])return e;const i=8*t.modules[o].n64,n=t.modules[o].q;return t.modules[e]={n64:2*t.modules[o].n64},function(){const a=t.addFunction(e+"_isZero");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.i32_and(n.call(o+"_isZero",l),n.call(o+"_isZero",c)))}(),function(){const a=t.addFunction(e+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.ret(n.i32_and(n.call(o+"_isOne",l),n.call(o+"_isZero",c))))}(),function(){const a=t.addFunction(e+"_zero");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.call(o+"_zero",l),n.call(o+"_zero",c))}(),function(){const a=t.addFunction(e+"_one");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.call(o+"_one",l),n.call(o+"_zero",c))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_copy",l,s),n.call(o+"_copy",c,r))}(),function(){const n=t.addFunction(e+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("y"),d=l.i32_add(l.getLocal("y"),l.i32_const(i)),u=l.getLocal("r"),_=l.i32_add(l.getLocal("r"),l.i32_const(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,r,g),l.call(o+"_mul",s,d,f),l.call(o+"_add",c,s,h),l.call(o+"_add",r,d,p),l.call(o+"_mul",h,p,h),l.call(a,f,u),l.call(o+"_add",g,u,u),l.call(o+"_add",g,f,_),l.call(o+"_sub",h,_,_))}(),function(){const a=t.addFunction(e+"_mul1");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_mul",l,s,r),n.call(o+"_mul",c,s,d))}(),function(){const n=t.addFunction(e+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(i)),u=l.i32_const(t.alloc(i)),_=l.i32_const(t.alloc(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,s,u),l.call(o+"_add",c,s,_),l.call(a,s,g),l.call(o+"_add",c,g,g),l.call(a,u,f),l.call(o+"_add",f,u,f),l.call(o+"_mul",_,g,r),l.call(o+"_sub",r,f,r),l.call(o+"_add",u,u,d))}(),function(){const a=t.addFunction(e+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_add",l,s,d),n.call(o+"_add",c,r,u))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_sub",l,s,d),n.call(o+"_sub",c,r,u))}(),function(){const a=t.addFunction(e+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_neg",l,s),n.call(o+"_neg",c,r))}(),function(){const a=t.addFunction(e+"_conjugate");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_copy",l,s),n.call(o+"_neg",c,r))}(),function(){const a=t.addFunction(e+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_toMontgomery",l,s),n.call(o+"_toMontgomery",c,r))}(),function(){const a=t.addFunction(e+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_fromMontgomery",l,s),n.call(o+"_fromMontgomery",c,r))}(),function(){const a=t.addFunction(e+"_eq");a.addParam("x","i32"),a.addParam("y","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i));a.addCode(n.i32_and(n.call(o+"_eq",l,s),n.call(o+"_eq",c,r)))}(),function(){const n=t.addFunction(e+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(i)),u=l.i32_const(t.alloc(i)),_=l.i32_const(t.alloc(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,u),l.call(o+"_square",s,_),l.call(a,_,g),l.call(o+"_sub",u,g,g),l.call(o+"_inverse",g,f),l.call(o+"_mul",c,f,r),l.call(o+"_mul",s,f,d),l.call(o+"_neg",d,d))}(),function(){const a=t.addFunction(e+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),s),n.call(o+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),r))}(),function(){const a=t.addFunction(e+"_sign");a.addParam("x","i32"),a.addLocal("s","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.setLocal("s",n.call(o+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(o+"_sign",l)))}(),function(){const a=t.addFunction(e+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.if(n.call(o+"_isZero",c),n.ret(n.call(o+"_isNegative",l))),n.ret(n.call(o+"_isNegative",c)))}(),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isOne"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_one"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_mul"),t.exportFunction(e+"_mul1"),t.exportFunction(e+"_square"),t.exportFunction(e+"_add"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_sign"),t.exportFunction(e+"_conjugate"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_inverse"),vt(t,e),Et(t,e+"_exp",2*i,e+"_mul",e+"_square",e+"_copy",e+"_one"),function(){const a=t.addFunction(e+"_sqrt");a.addParam("a","i32"),a.addParam("pr","i32");const l=a.getCodeBuilder(),c=l.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-3n)/4n,i))),s=l.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-1n)/2n,i))),r=l.getLocal("a"),d=l.i32_const(t.alloc(2*i)),u=l.i32_const(t.alloc(2*i)),_=l.i32_const(t.alloc(2*i)),g=t.alloc(2*i),f=l.i32_const(g),h=l.i32_const(g),p=l.i32_const(g+i),m=l.i32_const(t.alloc(2*i)),L=l.i32_const(t.alloc(2*i));a.addCode(l.call(e+"_one",f),l.call(e+"_neg",f,f),l.call(e+"_exp",r,c,l.i32_const(i),d),l.call(e+"_square",d,u),l.call(e+"_mul",r,u,u),l.call(e+"_conjugate",u,_),l.call(e+"_mul",_,u,_),l.if(l.call(e+"_eq",_,f),l.unreachable()),l.call(e+"_mul",d,r,m),l.if(l.call(e+"_eq",u,f),[...l.call(o+"_zero",h),...l.call(o+"_one",p),...l.call(e+"_mul",f,m,l.getLocal("pr"))],[...l.call(e+"_one",L),...l.call(e+"_add",L,u,L),...l.call(e+"_exp",L,s,l.i32_const(i),L),...l.call(e+"_mul",L,m,l.getLocal("pr"))]))}(),function(){const a=t.addFunction(e+"_isSquare");a.addParam("a","i32"),a.setReturnType("i32");const o=a.getCodeBuilder(),l=o.i32_const(t.alloc(St.bigInt2BytesLE((BigInt(n||0)-3n)/4n,i))),c=o.getLocal("a"),s=o.i32_const(t.alloc(2*i)),r=o.i32_const(t.alloc(2*i)),d=o.i32_const(t.alloc(2*i)),u=t.alloc(2*i),_=o.i32_const(u);a.addCode(o.call(e+"_one",_),o.call(e+"_neg",_,_),o.call(e+"_exp",c,l,o.i32_const(i),s),o.call(e+"_square",s,r),o.call(e+"_mul",c,r,r),o.call(e+"_conjugate",r,d),o.call(e+"_mul",d,r,d),o.if(o.call(e+"_eq",d,_),o.ret(o.i32_const(0))),o.ret(o.i32_const(1)))}(),t.exportFunction(e+"_exp"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_batchInverse"),t.exportFunction(e+"_sqrt"),t.exportFunction(e+"_isSquare"),t.exportFunction(e+"_isNegative"),e};const qt=H,Ot=Z;var Gt=function(t,a,e,o){if(t.modules[e])return e;const i=8*t.modules[o].n64;return t.modules[e]={n64:3*t.modules[o].n64},function(){const a=t.addFunction(e+"_isZero");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.i32_and(n.i32_and(n.call(o+"_isZero",l),n.call(o+"_isZero",c)),n.call(o+"_isZero",s)))}(),function(){const a=t.addFunction(e+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.ret(n.i32_and(n.i32_and(n.call(o+"_isOne",l),n.call(o+"_isZero",c)),n.call(o+"_isZero",s))))}(),function(){const a=t.addFunction(e+"_zero");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.call(o+"_zero",l),n.call(o+"_zero",c),n.call(o+"_zero",s))}(),function(){const a=t.addFunction(e+"_one");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.call(o+"_one",l),n.call(o+"_zero",c),n.call(o+"_zero",s))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_copy",l,r),n.call(o+"_copy",c,d),n.call(o+"_copy",s,u))}(),function(){const n=t.addFunction(e+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("y"),u=l.i32_add(l.getLocal("y"),l.i32_const(i)),_=l.i32_add(l.getLocal("y"),l.i32_const(2*i)),g=l.getLocal("r"),f=l.i32_add(l.getLocal("r"),l.i32_const(i)),h=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i)),w=l.i32_const(t.alloc(i)),y=l.i32_const(t.alloc(i)),A=l.i32_const(t.alloc(i)),C=l.i32_const(t.alloc(i)),F=l.i32_const(t.alloc(i)),x=l.i32_const(t.alloc(i)),I=l.i32_const(t.alloc(i)),B=l.i32_const(t.alloc(i)),E=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,d,p),l.call(o+"_mul",s,u,m),l.call(o+"_mul",r,_,L),l.call(o+"_add",c,s,b),l.call(o+"_add",d,u,w),l.call(o+"_add",c,r,y),l.call(o+"_add",d,_,A),l.call(o+"_add",s,r,C),l.call(o+"_add",u,_,F),l.call(o+"_add",p,m,x),l.call(o+"_add",p,L,I),l.call(o+"_add",m,L,B),l.call(o+"_mul",C,F,g),l.call(o+"_sub",g,B,g),l.call(a,g,g),l.call(o+"_add",p,g,g),l.call(o+"_mul",b,w,f),l.call(o+"_sub",f,x,f),l.call(a,L,E),l.call(o+"_add",f,E,f),l.call(o+"_mul",y,A,h),l.call(o+"_sub",h,I,h),l.call(o+"_add",h,m,h))}(),function(){const n=t.addFunction(e+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(i)),_=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,g),l.call(o+"_mul",c,s,f),l.call(o+"_add",f,f,h),l.call(o+"_sub",c,s,p),l.call(o+"_add",p,r,p),l.call(o+"_square",p,p),l.call(o+"_mul",s,r,m),l.call(o+"_add",m,m,L),l.call(o+"_square",r,b),l.call(a,L,d),l.call(o+"_add",g,d,d),l.call(a,b,u),l.call(o+"_add",h,u,u),l.call(o+"_add",g,b,_),l.call(o+"_sub",L,_,_),l.call(o+"_add",p,_,_),l.call(o+"_add",h,_,_))}(),function(){const a=t.addFunction(e+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i)),_=n.getLocal("r"),g=n.i32_add(n.getLocal("r"),n.i32_const(i)),f=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_add",l,r,_),n.call(o+"_add",c,d,g),n.call(o+"_add",s,u,f))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i)),_=n.getLocal("r"),g=n.i32_add(n.getLocal("r"),n.i32_const(i)),f=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_sub",l,r,_),n.call(o+"_sub",c,d,g),n.call(o+"_sub",s,u,f))}(),function(){const a=t.addFunction(e+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_neg",l,r),n.call(o+"_neg",c,d),n.call(o+"_neg",s,u))}(),function(){const a=t.addFunction(e+"_sign");a.addParam("x","i32"),a.addLocal("s","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.setLocal("s",n.call(o+"_sign",s)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.setLocal("s",n.call(o+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(o+"_sign",l)))}(),function(){const a=t.addFunction(e+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_toMontgomery",l,r),n.call(o+"_toMontgomery",c,d),n.call(o+"_toMontgomery",s,u))}(),function(){const a=t.addFunction(e+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_fromMontgomery",l,r),n.call(o+"_fromMontgomery",c,d),n.call(o+"_fromMontgomery",s,u))}(),function(){const a=t.addFunction(e+"_eq");a.addParam("x","i32"),a.addParam("y","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i));a.addCode(n.i32_and(n.i32_and(n.call(o+"_eq",l,r),n.call(o+"_eq",c,d)),n.call(o+"_eq",s,u)))}(),function(){const n=t.addFunction(e+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(i)),_=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i)),w=l.i32_const(t.alloc(i)),y=l.i32_const(t.alloc(i)),A=l.i32_const(t.alloc(i)),C=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,g),l.call(o+"_square",s,f),l.call(o+"_square",r,h),l.call(o+"_mul",c,s,p),l.call(o+"_mul",c,r,m),l.call(o+"_mul",s,r,L),l.call(a,L,b),l.call(o+"_sub",g,b,b),l.call(a,h,w),l.call(o+"_sub",w,p,w),l.call(o+"_sub",f,m,y),l.call(o+"_mul",r,w,A),l.call(o+"_mul",s,y,C),l.call(o+"_add",A,C,A),l.call(a,A,A),l.call(o+"_mul",c,b,C),l.call(o+"_add",C,A,A),l.call(o+"_inverse",A,A),l.call(o+"_mul",A,b,d),l.call(o+"_mul",A,w,u),l.call(o+"_mul",A,y,_))}(),function(){const a=t.addFunction(e+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),r),n.call(o+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),d),n.call(o+"_timesScalar",s,n.getLocal("scalar"),n.getLocal("scalarLen"),u))}(),function(){const a=t.addFunction(e+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.if(n.call(o+"_isZero",s),n.if(n.call(o+"_isZero",c),n.ret(n.call(o+"_isNegative",l)),n.ret(n.call(o+"_isNegative",c)))),n.ret(n.call(o+"_isNegative",s)))}(),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isOne"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_one"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_mul"),t.exportFunction(e+"_square"),t.exportFunction(e+"_add"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_sign"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_inverse"),Ot(t,e),qt(t,e+"_exp",3*i,e+"_mul",e+"_square",e+"_copy",e+"_one"),t.exportFunction(e+"_exp"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_batchInverse"),t.exportFunction(e+"_isNegative"),e};const zt=function(t,a,e,o,i,n,l,c){const s=t.addFunction(a);s.addParam("base","i32"),s.addParam("scalar","i32"),s.addParam("scalarLength","i32"),s.addParam("r","i32"),s.addLocal("old0","i32"),s.addLocal("nbits","i32"),s.addLocal("i","i32"),s.addLocal("last","i32"),s.addLocal("cur","i32"),s.addLocal("carry","i32"),s.addLocal("p","i32");const r=s.getCodeBuilder(),d=r.i32_const(t.alloc(e));function u(t){return r.i32_and(r.i32_shr_u(r.i32_load(r.i32_add(r.getLocal("scalar"),r.i32_and(r.i32_shr_u(t,r.i32_const(3)),r.i32_const(4294967292)))),r.i32_and(t,r.i32_const(31))),r.i32_const(1))}function _(t){return[...r.i32_store8(r.getLocal("p"),r.i32_const(t)),...r.setLocal("p",r.i32_add(r.getLocal("p"),r.i32_const(1)))]}s.addCode(r.if(r.i32_eqz(r.getLocal("scalarLength")),[...r.call(c,r.getLocal("r")),...r.ret([])]),r.setLocal("nbits",r.i32_shl(r.getLocal("scalarLength"),r.i32_const(3))),r.setLocal("old0",r.i32_load(r.i32_const(0))),r.setLocal("p",r.getLocal("old0")),r.i32_store(r.i32_const(0),r.i32_and(r.i32_add(r.i32_add(r.getLocal("old0"),r.i32_const(32)),r.getLocal("nbits")),r.i32_const(4294967288))),r.setLocal("i",r.i32_const(1)),r.setLocal("last",u(r.i32_const(0))),r.setLocal("carry",r.i32_const(0)),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("i"),r.getLocal("nbits"))),r.setLocal("cur",u(r.getLocal("i"))),r.if(r.getLocal("last"),r.if(r.getLocal("cur"),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(1)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(255)]),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(255)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(0)),..._(1)])),r.if(r.getLocal("cur"),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(0)],[...r.setLocal("last",r.i32_const(1)),...r.setLocal("carry",r.i32_const(0)),..._(0)]),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(1)),...r.setLocal("carry",r.i32_const(0)),..._(0)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(0)),..._(0)]))),r.setLocal("i",r.i32_add(r.getLocal("i"),r.i32_const(1))),r.br(0))),r.if(r.getLocal("last"),r.if(r.getLocal("carry"),[..._(255),..._(0),..._(1)],[..._(1)]),r.if(r.getLocal("carry"),[..._(0),..._(1)])),r.setLocal("p",r.i32_sub(r.getLocal("p"),r.i32_const(1))),r.call(l,r.getLocal("base"),d),r.call(c,r.getLocal("r")),r.block(r.loop(r.call(i,r.getLocal("r"),r.getLocal("r")),r.setLocal("cur",r.i32_load8_u(r.getLocal("p"))),r.if(r.getLocal("cur"),r.if(r.i32_eq(r.getLocal("cur"),r.i32_const(1)),r.call(o,r.getLocal("r"),d,r.getLocal("r")),r.call(n,r.getLocal("r"),d,r.getLocal("r")))),r.br_if(1,r.i32_eq(r.getLocal("old0"),r.getLocal("p"))),r.setLocal("p",r.i32_sub(r.getLocal("p"),r.i32_const(1))),r.br(0))),r.i32_store(r.i32_const(0),r.getLocal("old0")))},Tt=W,Mt=function(t,a,e,o,i){const n=8*t.modules[a].n64;function l(){const o=t.addFunction(e);o.addParam("pBases","i32"),o.addParam("pScalars","i32"),o.addParam("scalarSize","i32"),o.addParam("n","i32"),o.addParam("pr","i32"),o.addLocal("chunkSize","i32"),o.addLocal("nChunks","i32"),o.addLocal("itScalar","i32"),o.addLocal("endScalar","i32"),o.addLocal("itBase","i32"),o.addLocal("itBit","i32"),o.addLocal("i","i32"),o.addLocal("j","i32"),o.addLocal("nTable","i32"),o.addLocal("pTable","i32"),o.addLocal("idx","i32"),o.addLocal("pIdxTable","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n)),c=t.alloc([17,17,17,17,17,17,17,17,17,17,16,16,15,14,13,13,12,11,10,9,8,7,7,6,5,4,3,2,1,1,1,1]);o.addCode(i.call(a+"_zero",i.getLocal("pr")),i.if(i.i32_eqz(i.getLocal("n")),i.ret([])),i.setLocal("chunkSize",i.i32_load8_u(i.i32_clz(i.getLocal("n")),c)),i.setLocal("nChunks",i.i32_add(i.i32_div_u(i.i32_sub(i.i32_shl(i.getLocal("scalarSize"),i.i32_const(3)),i.i32_const(1)),i.getLocal("chunkSize")),i.i32_const(1))),i.setLocal("itBit",i.i32_mul(i.i32_sub(i.getLocal("nChunks"),i.i32_const(1)),i.getLocal("chunkSize"))),i.block(i.loop(i.br_if(1,i.i32_lt_s(i.getLocal("itBit"),i.i32_const(0))),i.if(i.i32_eqz(i.call(a+"_isZero",i.getLocal("pr"))),[...i.setLocal("j",i.i32_const(0)),...i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("j"),i.getLocal("chunkSize"))),i.call(a+"_double",i.getLocal("pr"),i.getLocal("pr")),i.setLocal("j",i.i32_add(i.getLocal("j"),i.i32_const(1))),i.br(0)))]),i.call(e+"_chunk",i.getLocal("pBases"),i.getLocal("pScalars"),i.getLocal("scalarSize"),i.getLocal("n"),i.getLocal("itBit"),i.getLocal("chunkSize"),l),i.call(a+"_add",i.getLocal("pr"),l,i.getLocal("pr")),i.setLocal("itBit",i.i32_sub(i.getLocal("itBit"),i.getLocal("chunkSize"))),i.br(0))))}!function(){const a=t.addFunction(e+"_getChunk");a.addParam("pScalar","i32"),a.addParam("scalarSize","i32"),a.addParam("startBit","i32"),a.addParam("chunkSize","i32"),a.addLocal("bitsToEnd","i32"),a.addLocal("mask","i32"),a.setReturnType("i32");const o=a.getCodeBuilder();a.addCode(o.setLocal("bitsToEnd",o.i32_sub(o.i32_mul(o.getLocal("scalarSize"),o.i32_const(8)),o.getLocal("startBit"))),o.if(o.i32_gt_s(o.getLocal("chunkSize"),o.getLocal("bitsToEnd")),o.setLocal("mask",o.i32_sub(o.i32_shl(o.i32_const(1),o.getLocal("bitsToEnd")),o.i32_const(1))),o.setLocal("mask",o.i32_sub(o.i32_shl(o.i32_const(1),o.getLocal("chunkSize")),o.i32_const(1)))),o.i32_and(o.i32_shr_u(o.i32_load(o.i32_add(o.getLocal("pScalar"),o.i32_shr_u(o.getLocal("startBit"),o.i32_const(3))),0,0),o.i32_and(o.getLocal("startBit"),o.i32_const(7))),o.getLocal("mask")))}(),function(){const o=t.addFunction(e+"_reduceTable");o.addParam("pTable","i32"),o.addParam("p","i32"),o.addLocal("half","i32"),o.addLocal("it1","i32"),o.addLocal("it2","i32"),o.addLocal("pAcc","i32");const i=o.getCodeBuilder();o.addCode(i.if(i.i32_eq(i.getLocal("p"),i.i32_const(1)),i.ret([])),i.setLocal("half",i.i32_shl(i.i32_const(1),i.i32_sub(i.getLocal("p"),i.i32_const(1)))),i.setLocal("it1",i.getLocal("pTable")),i.setLocal("it2",i.i32_add(i.getLocal("pTable"),i.i32_mul(i.getLocal("half"),i.i32_const(n)))),i.setLocal("pAcc",i.i32_sub(i.getLocal("it2"),i.i32_const(n))),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("it1"),i.getLocal("pAcc"))),i.call(a+"_add",i.getLocal("it1"),i.getLocal("it2"),i.getLocal("it1")),i.call(a+"_add",i.getLocal("pAcc"),i.getLocal("it2"),i.getLocal("pAcc")),i.setLocal("it1",i.i32_add(i.getLocal("it1"),i.i32_const(n))),i.setLocal("it2",i.i32_add(i.getLocal("it2"),i.i32_const(n))),i.br(0))),i.call(e+"_reduceTable",i.getLocal("pTable"),i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.setLocal("p",i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("p"))),i.call(a+"_double",i.getLocal("pAcc"),i.getLocal("pAcc")),i.setLocal("p",i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.br(0))),i.call(a+"_add",i.getLocal("pTable"),i.getLocal("pAcc"),i.getLocal("pTable")))}(),function(){const l=t.addFunction(e+"_chunk");l.addParam("pBases","i32"),l.addParam("pScalars","i32"),l.addParam("scalarSize","i32"),l.addParam("n","i32"),l.addParam("startBit","i32"),l.addParam("chunkSize","i32"),l.addParam("pr","i32"),l.addLocal("nChunks","i32"),l.addLocal("itScalar","i32"),l.addLocal("endScalar","i32"),l.addLocal("itBase","i32"),l.addLocal("i","i32"),l.addLocal("j","i32"),l.addLocal("nTable","i32"),l.addLocal("pTable","i32"),l.addLocal("idx","i32"),l.addLocal("pIdxTable","i32");const c=l.getCodeBuilder();l.addCode(c.if(c.i32_eqz(c.getLocal("n")),[...c.call(a+"_zero",c.getLocal("pr")),...c.ret([])]),c.setLocal("nTable",c.i32_shl(c.i32_const(1),c.getLocal("chunkSize"))),c.setLocal("pTable",c.i32_load(c.i32_const(0))),c.i32_store(c.i32_const(0),c.i32_add(c.getLocal("pTable"),c.i32_mul(c.getLocal("nTable"),c.i32_const(n)))),c.setLocal("j",c.i32_const(0)),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("j"),c.getLocal("nTable"))),c.call(a+"_zero",c.i32_add(c.getLocal("pTable"),c.i32_mul(c.getLocal("j"),c.i32_const(n)))),c.setLocal("j",c.i32_add(c.getLocal("j"),c.i32_const(1))),c.br(0))),c.setLocal("itBase",c.getLocal("pBases")),c.setLocal("itScalar",c.getLocal("pScalars")),c.setLocal("endScalar",c.i32_add(c.getLocal("pScalars"),c.i32_mul(c.getLocal("n"),c.getLocal("scalarSize")))),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("itScalar"),c.getLocal("endScalar"))),c.setLocal("idx",c.call(e+"_getChunk",c.getLocal("itScalar"),c.getLocal("scalarSize"),c.getLocal("startBit"),c.getLocal("chunkSize"))),c.if(c.getLocal("idx"),[...c.setLocal("pIdxTable",c.i32_add(c.getLocal("pTable"),c.i32_mul(c.i32_sub(c.getLocal("idx"),c.i32_const(1)),c.i32_const(n)))),...c.call(o,c.getLocal("pIdxTable"),c.getLocal("itBase"),c.getLocal("pIdxTable"))]),c.setLocal("itScalar",c.i32_add(c.getLocal("itScalar"),c.getLocal("scalarSize"))),c.setLocal("itBase",c.i32_add(c.getLocal("itBase"),c.i32_const(i))),c.br(0))),c.call(e+"_reduceTable",c.getLocal("pTable"),c.getLocal("chunkSize")),c.call(a+"_copy",c.getLocal("pTable"),c.getLocal("pr")),c.i32_store(c.i32_const(0),c.getLocal("pTable")))}(),l(),t.exportFunction(e),t.exportFunction(e+"_chunk")};var Ut=function(t,a,e,o){const i=t.modules[e].n64,n=8*i;if(t.modules[a])return a;return t.modules[a]={n64:3*i},function(){const o=t.addFunction(a+"_isZeroAffine");o.addParam("p1","i32"),o.setReturnType("i32");const i=o.getCodeBuilder();o.addCode(i.i32_and(i.call(e+"_isZero",i.getLocal("p1")),i.call(e+"_isZero",i.i32_add(i.getLocal("p1"),i.i32_const(n)))))}(),function(){const o=t.addFunction(a+"_isZero");o.addParam("p1","i32"),o.setReturnType("i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_isZero",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))))}(),function(){const o=t.addFunction(a+"_zeroAffine");o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_zero",i.getLocal("pr"))),o.addCode(i.call(e+"_zero",i.i32_add(i.getLocal("pr"),i.i32_const(n))))}(),function(){const o=t.addFunction(a+"_zero");o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_zero",i.getLocal("pr"))),o.addCode(i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(n)))),o.addCode(i.call(e+"_zero",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))))}(),function(){const e=t.addFunction(a+"_copyAffine");e.addParam("ps","i32"),e.addParam("pd","i32");const o=e.getCodeBuilder();for(let t=0;t<2*i;t++)e.addCode(o.i64_store(o.getLocal("pd"),8*t,o.i64_load(o.getLocal("ps"),8*t)))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("ps","i32"),e.addParam("pd","i32");const o=e.getCodeBuilder();for(let t=0;t<3*i;t++)e.addCode(o.i64_store(o.getLocal("pd"),8*t,o.i64_load(o.getLocal("ps"),8*t)))}(),function(){const o=t.addFunction(a+"_toJacobian");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n)),d=i.i32_add(i.getLocal("pr"),i.i32_const(2*n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),i.call(a+"_zero",i.getLocal("pr")),[...i.call(e+"_one",d),...i.call(e+"_copy",c,r),...i.call(e+"_copy",l,s)]))}(),function(){const o=t.addFunction(a+"_eqAffine");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder();o.addCode(i.ret(i.i32_and(i.call(e+"_eq",i.getLocal("p1"),i.getLocal("p2")),i.call(e+"_eq",i.i32_add(i.getLocal("p1"),i.i32_const(n)),i.i32_add(i.getLocal("p2"),i.i32_const(n))))))}(),function(){const o=t.addFunction(a+"_eqMixed");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.ret(i.call(a+"_isZeroAffine",i.getLocal("p2")))),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),i.ret(i.i32_const(0))),i.if(i.call(e+"_isOne",s),i.ret(i.call(a+"_eqAffine",i.getLocal("p1"),i.getLocal("p2")))),i.call(e+"_square",s,u),i.call(e+"_mul",r,u,_),i.call(e+"_mul",s,u,g),i.call(e+"_mul",d,g,f),i.if(i.call(e+"_eq",l,_),i.if(i.call(e+"_eq",c,f),i.ret(i.i32_const(1)))),i.ret(i.i32_const(0)))}(),function(){const o=t.addFunction(a+"_eq");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32"),o.addLocal("z2","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n));o.addCode(i.setLocal("z2",i.i32_add(i.getLocal("p2"),i.i32_const(2*n))));const u=i.getLocal("z2"),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.ret(i.call(a+"_isZero",i.getLocal("p2")))),i.if(i.call(a+"_isZero",i.getLocal("p2")),i.ret(i.i32_const(0))),i.if(i.call(e+"_isOne",s),i.ret(i.call(a+"_eqMixed",i.getLocal("p2"),i.getLocal("p1")))),i.if(i.call(e+"_isOne",u),i.ret(i.call(a+"_eqMixed",i.getLocal("p1"),i.getLocal("p2")))),i.call(e+"_square",s,_),i.call(e+"_square",u,g),i.call(e+"_mul",l,g,f),i.call(e+"_mul",r,_,h),i.call(e+"_mul",s,_,p),i.call(e+"_mul",u,g,m),i.call(e+"_mul",c,m,L),i.call(e+"_mul",d,p,b),i.if(i.call(e+"_eq",f,h),i.if(i.call(e+"_eq",L,b),i.ret(i.i32_const(1)))),i.ret(i.i32_const(0)))}(),function(){const o=t.addFunction(a+"_doubleAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n)),d=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),[...i.call(a+"_toJacobian",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.call(e+"_square",l,u),i.call(e+"_square",c,_),i.call(e+"_square",_,g),i.call(e+"_add",l,_,f),i.call(e+"_square",f,f),i.call(e+"_sub",f,u,f),i.call(e+"_sub",f,g,f),i.call(e+"_add",f,f,f),i.call(e+"_add",u,u,h),i.call(e+"_add",h,u,h),i.call(e+"_add",c,c,d),i.call(e+"_square",h,s),i.call(e+"_sub",s,f,s),i.call(e+"_sub",s,f,s),i.call(e+"_add",g,g,p),i.call(e+"_add",p,p,p),i.call(e+"_add",p,p,p),i.call(e+"_sub",f,s,r),i.call(e+"_mul",r,h,r),i.call(e+"_sub",r,p,r))}(),function(){const o=t.addFunction(a+"_double");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.ret(i.call(a+"_doubleAffine",i.getLocal("p1"),i.getLocal("pr"))),...i.ret([])]),i.call(e+"_square",l,_),i.call(e+"_square",c,g),i.call(e+"_square",g,f),i.call(e+"_add",l,g,h),i.call(e+"_square",h,h),i.call(e+"_sub",h,_,h),i.call(e+"_sub",h,f,h),i.call(e+"_add",h,h,h),i.call(e+"_add",_,_,p),i.call(e+"_add",p,_,p),i.call(e+"_square",p,m),i.call(e+"_mul",c,s,L),i.call(e+"_add",h,h,r),i.call(e+"_sub",m,r,r),i.call(e+"_add",f,f,b),i.call(e+"_add",b,b,b),i.call(e+"_add",b,b,b),i.call(e+"_sub",h,r,d),i.call(e+"_mul",d,p,d),i.call(e+"_sub",d,b,d),i.call(e+"_add",L,L,u))}(),function(){const o=t.addFunction(a+"_addAffine");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("p2"),r=i.i32_add(i.getLocal("p2"),i.i32_const(n)),d=i.getLocal("pr"),u=i.i32_add(i.getLocal("pr"),i.i32_const(n)),_=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),[...i.call(a+"_copyAffine",i.getLocal("p2"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),[...i.call(a+"_copyAffine",i.getLocal("p1"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(e+"_eq",l,s),i.if(i.call(e+"_eq",c,r),[...i.call(a+"_doubleAffine",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",s,l,g),i.call(e+"_sub",r,c,h),i.call(e+"_square",g,f),i.call(e+"_add",f,f,p),i.call(e+"_add",p,p,p),i.call(e+"_mul",g,p,m),i.call(e+"_add",h,h,L),i.call(e+"_mul",l,p,w),i.call(e+"_square",L,b),i.call(e+"_add",w,w,y),i.call(e+"_sub",b,m,d),i.call(e+"_sub",d,y,d),i.call(e+"_mul",c,m,A),i.call(e+"_add",A,A,A),i.call(e+"_sub",w,d,u),i.call(e+"_mul",u,L,u),i.call(e+"_sub",u,A,u),i.call(e+"_add",g,g,_))}(),function(){const o=t.addFunction(a+"_addMixed");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n)),u=i.getLocal("pr"),_=i.i32_add(i.getLocal("pr"),i.i32_const(n)),g=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n)),C=i.i32_const(t.alloc(n)),F=i.i32_const(t.alloc(n)),x=i.i32_const(t.alloc(n)),I=i.i32_const(t.alloc(n)),B=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copyAffine",i.getLocal("p2"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.call(a+"_addAffine",l,r,u),...i.ret([])]),i.call(e+"_square",s,f),i.call(e+"_mul",r,f,h),i.call(e+"_mul",s,f,p),i.call(e+"_mul",d,p,m),i.if(i.call(e+"_eq",l,h),i.if(i.call(e+"_eq",c,m),[...i.call(a+"_doubleAffine",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",h,l,L),i.call(e+"_sub",m,c,w),i.call(e+"_square",L,b),i.call(e+"_add",b,b,y),i.call(e+"_add",y,y,y),i.call(e+"_mul",L,y,A),i.call(e+"_add",w,w,C),i.call(e+"_mul",l,y,x),i.call(e+"_square",C,F),i.call(e+"_add",x,x,I),i.call(e+"_sub",F,A,u),i.call(e+"_sub",u,I,u),i.call(e+"_mul",c,A,B),i.call(e+"_add",B,B,B),i.call(e+"_sub",x,u,_),i.call(e+"_mul",_,C,_),i.call(e+"_sub",_,B,_),i.call(e+"_add",s,L,g),i.call(e+"_square",g,g),i.call(e+"_sub",g,f,g),i.call(e+"_sub",g,b,g))}(),function(){const o=t.addFunction(a+"_add");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32"),o.addLocal("z2","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n));o.addCode(i.setLocal("z2",i.i32_add(i.getLocal("p2"),i.i32_const(2*n))));const u=i.getLocal("z2"),_=i.getLocal("pr"),g=i.i32_add(i.getLocal("pr"),i.i32_const(n)),f=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n)),C=i.i32_const(t.alloc(n)),F=i.i32_const(t.alloc(n)),x=i.i32_const(t.alloc(n)),I=i.i32_const(t.alloc(n)),B=i.i32_const(t.alloc(n)),E=i.i32_const(t.alloc(n)),v=i.i32_const(t.alloc(n)),S=i.i32_const(t.alloc(n)),P=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copy",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(a+"_isZero",i.getLocal("p2")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.call(a+"_addMixed",r,l,_),...i.ret([])]),i.if(i.call(e+"_isOne",u),[...i.call(a+"_addMixed",l,r,_),...i.ret([])]),i.call(e+"_square",s,h),i.call(e+"_square",u,p),i.call(e+"_mul",l,p,m),i.call(e+"_mul",r,h,L),i.call(e+"_mul",s,h,b),i.call(e+"_mul",u,p,w),i.call(e+"_mul",c,w,y),i.call(e+"_mul",d,b,A),i.if(i.call(e+"_eq",m,L),i.if(i.call(e+"_eq",y,A),[...i.call(a+"_double",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",L,m,C),i.call(e+"_sub",A,y,F),i.call(e+"_add",C,C,x),i.call(e+"_square",x,x),i.call(e+"_mul",C,x,I),i.call(e+"_add",F,F,B),i.call(e+"_mul",m,x,v),i.call(e+"_square",B,E),i.call(e+"_add",v,v,S),i.call(e+"_sub",E,I,_),i.call(e+"_sub",_,S,_),i.call(e+"_mul",y,I,P),i.call(e+"_add",P,P,P),i.call(e+"_sub",v,_,g),i.call(e+"_mul",g,B,g),i.call(e+"_sub",g,P,g),i.call(e+"_add",s,u,f),i.call(e+"_square",f,f),i.call(e+"_sub",f,h,f),i.call(e+"_sub",f,p,f),i.call(e+"_mul",f,C,f))}(),function(){const o=t.addFunction(a+"_negAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n));o.addCode(i.call(e+"_copy",l,s),i.call(e+"_neg",c,r))}(),function(){const o=t.addFunction(a+"_neg");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n));o.addCode(i.call(e+"_copy",l,r),i.call(e+"_neg",c,d),i.call(e+"_copy",s,u))}(),function(){const e=t.addFunction(a+"_subAffine");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_negAffine",o.getLocal("p2"),i),o.call(a+"_addAffine",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const e=t.addFunction(a+"_subMixed");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_negAffine",o.getLocal("p2"),i),o.call(a+"_addMixed",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_neg",o.getLocal("p2"),i),o.call(a+"_add",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const o=t.addFunction(a+"_fromMontgomeryAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_fromMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<2;t++)o.addCode(i.call(e+"_fromMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_fromMontgomery");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_fromMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<3;t++)o.addCode(i.call(e+"_fromMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toMontgomeryAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_toMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<2;t++)o.addCode(i.call(e+"_toMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toMontgomery");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_toMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<3;t++)o.addCode(i.call(e+"_toMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(e+"_zero",r),...i.call(e+"_zero",d)],[...i.call(e+"_inverse",s,u),...i.call(e+"_square",u,_),...i.call(e+"_mul",u,_,g),...i.call(e+"_mul",l,_,r),...i.call(e+"_mul",c,g,d)]))}(),function(){const i=t.addFunction(a+"_inCurveAffine");i.addParam("pIn","i32"),i.setReturnType("i32");const l=i.getCodeBuilder(),c=l.getLocal("pIn"),s=l.i32_add(l.getLocal("pIn"),l.i32_const(n)),r=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(n));i.addCode(l.call(e+"_square",s,r),l.call(e+"_square",c,d),l.call(e+"_mul",c,d,d),l.call(e+"_add",d,l.i32_const(o),d),l.ret(l.call(e+"_eq",r,d)))}(),function(){const e=t.addFunction(a+"_inCurve");e.addParam("pIn","i32"),e.setReturnType("i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(2*n));e.addCode(o.call(a+"_toAffine",o.getLocal("pIn"),i),o.ret(o.call(a+"_inCurveAffine",i)))}(),function(){const o=t.addFunction(a+"_batchToAffine");o.addParam("pIn","i32"),o.addParam("n","i32"),o.addParam("pOut","i32"),o.addLocal("pAux","i32"),o.addLocal("itIn","i32"),o.addLocal("itAux","i32"),o.addLocal("itOut","i32"),o.addLocal("i","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n));o.addCode(i.setLocal("pAux",i.i32_load(i.i32_const(0))),i.i32_store(i.i32_const(0),i.i32_add(i.getLocal("pAux"),i.i32_mul(i.getLocal("n"),i.i32_const(n)))),i.call(e+"_batchInverse",i.i32_add(i.getLocal("pIn"),i.i32_const(2*n)),i.i32_const(3*n),i.getLocal("n"),i.getLocal("pAux"),i.i32_const(n)),i.setLocal("itIn",i.getLocal("pIn")),i.setLocal("itAux",i.getLocal("pAux")),i.setLocal("itOut",i.getLocal("pOut")),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.if(i.call(e+"_isZero",i.getLocal("itAux")),[...i.call(e+"_zero",i.getLocal("itOut")),...i.call(e+"_zero",i.i32_add(i.getLocal("itOut"),i.i32_const(n)))],[...i.call(e+"_mul",i.getLocal("itAux"),i.i32_add(i.getLocal("itIn"),i.i32_const(n)),l),...i.call(e+"_square",i.getLocal("itAux"),i.getLocal("itAux")),...i.call(e+"_mul",i.getLocal("itAux"),i.getLocal("itIn"),i.getLocal("itOut")),...i.call(e+"_mul",i.getLocal("itAux"),l,i.i32_add(i.getLocal("itOut"),i.i32_const(n)))]),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.i32_const(3*n))),i.setLocal("itOut",i.i32_add(i.getLocal("itOut"),i.i32_const(2*n))),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(n))),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))),i.i32_store(i.i32_const(0),i.getLocal("pAux")))}(),function(){const o=t.addFunction(a+"_normalize");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.call(a+"_zero",i.getLocal("pr")),[...i.call(e+"_inverse",s,_),...i.call(e+"_square",_,g),...i.call(e+"_mul",_,g,f),...i.call(e+"_mul",l,g,r),...i.call(e+"_mul",c,f,d),...i.call(e+"_one",u)]))}(),function(){const e=t.addFunction(a+"__reverseBytes");e.addParam("pIn","i32"),e.addParam("n","i32"),e.addParam("pOut","i32"),e.addLocal("itOut","i32"),e.addLocal("itIn","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("itOut",o.i32_sub(o.i32_add(o.getLocal("pOut"),o.getLocal("n")),o.i32_const(1))),o.setLocal("itIn",o.getLocal("pIn")),o.block(o.loop(o.br_if(1,o.i32_lt_s(o.getLocal("itOut"),o.getLocal("pOut"))),o.i32_store8(o.getLocal("itOut"),o.i32_load8_u(o.getLocal("itIn"))),o.setLocal("itOut",o.i32_sub(o.getLocal("itOut"),o.i32_const(1))),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.i32_const(1))),o.br(0))))}(),function(){const e=t.addFunction(a+"_LEMtoU");e.addParam("pIn","i32"),e.addParam("pOut","i32");const o=e.getCodeBuilder(),i=t.alloc(2*n),l=o.i32_const(i),c=o.i32_const(i),s=o.i32_const(i+n);e.addCode(o.if(o.call(a+"_isZeroAffine",o.getLocal("pIn")),[...o.call(a+"_zeroAffine",o.getLocal("pOut")),...o.ret([])]),o.call(a+"_fromMontgomeryAffine",o.getLocal("pIn"),l),o.call(a+"__reverseBytes",c,o.i32_const(n),o.getLocal("pOut")),o.call(a+"__reverseBytes",s,o.i32_const(n),o.i32_add(o.getLocal("pOut"),o.i32_const(n))))}(),function(){const o=t.addFunction(a+"_LEMtoC");o.addParam("pIn","i32"),o.addParam("pOut","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("pIn")),[...i.call(e+"_zero",i.getLocal("pOut")),...i.i32_store8(i.getLocal("pOut"),i.i32_const(64)),...i.ret([])]),i.call(e+"_fromMontgomery",i.getLocal("pIn"),l),i.call(a+"__reverseBytes",l,i.i32_const(n),i.getLocal("pOut")),i.if(i.i32_eq(i.call(e+"_sign",i.i32_add(i.getLocal("pIn"),i.i32_const(n))),i.i32_const(-1)),i.i32_store8(i.getLocal("pOut"),i.i32_or(i.i32_load8_u(i.getLocal("pOut")),i.i32_const(128)))))}(),function(){const e=t.addFunction(a+"_UtoLEM");e.addParam("pIn","i32"),e.addParam("pOut","i32");const o=e.getCodeBuilder(),i=t.alloc(2*n),l=o.i32_const(i),c=o.i32_const(i),s=o.i32_const(i+n);e.addCode(o.if(o.i32_and(o.i32_load8_u(o.getLocal("pIn")),o.i32_const(64)),[...o.call(a+"_zeroAffine",o.getLocal("pOut")),...o.ret([])]),o.call(a+"__reverseBytes",o.getLocal("pIn"),o.i32_const(n),c),o.call(a+"__reverseBytes",o.i32_add(o.getLocal("pIn"),o.i32_const(n)),o.i32_const(n),s),o.call(a+"_toMontgomeryAffine",l,o.getLocal("pOut")))}(),function(){const i=t.addFunction(a+"_CtoLEM");i.addParam("pIn","i32"),i.addParam("pOut","i32"),i.addLocal("firstByte","i32"),i.addLocal("greatest","i32");const l=i.getCodeBuilder(),c=t.alloc(2*n),s=l.i32_const(c),r=l.i32_const(c+n);i.addCode(l.setLocal("firstByte",l.i32_load8_u(l.getLocal("pIn"))),l.if(l.i32_and(l.getLocal("firstByte"),l.i32_const(64)),[...l.call(a+"_zeroAffine",l.getLocal("pOut")),...l.ret([])]),l.setLocal("greatest",l.i32_and(l.getLocal("firstByte"),l.i32_const(128))),l.call(e+"_copy",l.getLocal("pIn"),r),l.i32_store8(r,l.i32_and(l.getLocal("firstByte"),l.i32_const(63))),l.call(a+"__reverseBytes",r,l.i32_const(n),s),l.call(e+"_toMontgomery",s,l.getLocal("pOut")),l.call(e+"_square",l.getLocal("pOut"),r),l.call(e+"_mul",l.getLocal("pOut"),r,r),l.call(e+"_add",r,l.i32_const(o),r),l.call(e+"_sqrt",r,r),l.call(e+"_neg",r,s),l.if(l.i32_eq(l.call(e+"_sign",r),l.i32_const(-1)),l.if(l.getLocal("greatest"),l.call(e+"_copy",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(e+"_neg",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n)))),l.if(l.getLocal("greatest"),l.call(e+"_neg",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(e+"_copy",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))))))}(),Tt(t,a+"_batchLEMtoU",a+"_LEMtoU",2*n,2*n),Tt(t,a+"_batchLEMtoC",a+"_LEMtoC",2*n,n),Tt(t,a+"_batchUtoLEM",a+"_UtoLEM",2*n,2*n),Tt(t,a+"_batchCtoLEM",a+"_CtoLEM",n,2*n,!0),Tt(t,a+"_batchToJacobian",a+"_toJacobian",2*n,3*n,!0),Mt(t,a,a+"_multiexp",a+"_add",3*n),Mt(t,a,a+"_multiexpAffine",a+"_addMixed",2*n),zt(t,a+"_timesScalar",3*n,a+"_add",a+"_double",a+"_sub",a+"_copy",a+"_zero"),zt(t,a+"_timesScalarAffine",2*n,a+"_addMixed",a+"_double",a+"_subMixed",a+"_copyAffine",a+"_zero"),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isZeroAffine"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_eqMixed"),t.exportFunction(a+"_eqAffine"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_copyAffine"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_zeroAffine"),t.exportFunction(a+"_double"),t.exportFunction(a+"_doubleAffine"),t.exportFunction(a+"_add"),t.exportFunction(a+"_addMixed"),t.exportFunction(a+"_addAffine"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_negAffine"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_subMixed"),t.exportFunction(a+"_subAffine"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_fromMontgomeryAffine"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_toMontgomeryAffine"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_timesScalarAffine"),t.exportFunction(a+"_normalize"),t.exportFunction(a+"_LEMtoU"),t.exportFunction(a+"_LEMtoC"),t.exportFunction(a+"_UtoLEM"),t.exportFunction(a+"_CtoLEM"),t.exportFunction(a+"_batchLEMtoU"),t.exportFunction(a+"_batchLEMtoC"),t.exportFunction(a+"_batchUtoLEM"),t.exportFunction(a+"_batchCtoLEM"),t.exportFunction(a+"_toAffine"),t.exportFunction(a+"_toJacobian"),t.exportFunction(a+"_batchToAffine"),t.exportFunction(a+"_batchToJacobian"),t.exportFunction(a+"_inCurve"),t.exportFunction(a+"_inCurveAffine"),a};const{isOdd:Qt,modInv:kt,modPow:Rt}=J,Nt=K;var Dt=function(t,a,e,o,i){const n=8*t.modules[o].n64,l=8*t.modules[e].n64,c=t.modules[o].q;let s=c-1n,r=0;for(;!Qt(s);)r++,s>>=1n;let d=2n;for(;1n===Rt(d,c>>1n,c);)d+=1n;const u=new Array(r+1);u[r]=Rt(d,s,c);let _=r-1;for(;_>=0;)u[_]=Rt(u[_+1],2n,c),_--;const g=[],f=(1n<>e);return a}const x=Array(256);for(let t=0;t<256;t++)x[t]=F(t);const I=t.alloc(x);function B(){const e=t.addFunction(a+"_fft");e.addParam("px","i32"),e.addParam("n","i32"),e.addLocal("bits","i32");const i=e.getCodeBuilder(),l=i.i32_const(t.alloc(n));e.addCode(i.setLocal("bits",i.call(a+"__log2",i.getLocal("n"))),i.call(o+"_one",l),i.call(a+"_rawfft",i.getLocal("px"),i.getLocal("bits"),i.i32_const(0),l))}!function(){const e=t.addFunction(a+"__rev");e.addParam("x","i32"),e.addParam("bits","i32"),e.setReturnType("i32");const o=e.getCodeBuilder();e.addCode(o.i32_rotl(o.i32_add(o.i32_add(o.i32_shl(o.i32_load8_u(o.i32_and(o.getLocal("x"),o.i32_const(255)),I,0),o.i32_const(24)),o.i32_shl(o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(8)),o.i32_const(255)),I,0),o.i32_const(16))),o.i32_add(o.i32_shl(o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(16)),o.i32_const(255)),I,0),o.i32_const(8)),o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(24)),o.i32_const(255)),I,0))),o.getLocal("bits")))}(),function(){const o=t.addFunction(a+"__reversePermutation");o.addParam("px","i32"),o.addParam("bits","i32"),o.addLocal("n","i32"),o.addLocal("i","i32"),o.addLocal("ri","i32"),o.addLocal("idx1","i32"),o.addLocal("idx2","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(l));o.addCode(i.setLocal("n",i.i32_shl(i.i32_const(1),i.getLocal("bits"))),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.setLocal("idx1",i.i32_add(i.getLocal("px"),i.i32_mul(i.getLocal("i"),i.i32_const(l)))),i.setLocal("ri",i.call(a+"__rev",i.getLocal("i"),i.getLocal("bits"))),i.setLocal("idx2",i.i32_add(i.getLocal("px"),i.i32_mul(i.getLocal("ri"),i.i32_const(l)))),i.if(i.i32_lt_u(i.getLocal("i"),i.getLocal("ri")),[...i.call(e+"_copy",i.getLocal("idx1"),n),...i.call(e+"_copy",i.getLocal("idx2"),i.getLocal("idx1")),...i.call(e+"_copy",n,i.getLocal("idx2"))]),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))))}(),function(){const n=t.addFunction(a+"__fftFinal");n.addParam("px","i32"),n.addParam("bits","i32"),n.addParam("reverse","i32"),n.addParam("mulFactor","i32"),n.addLocal("n","i32"),n.addLocal("ndiv2","i32"),n.addLocal("pInv2","i32"),n.addLocal("i","i32"),n.addLocal("mask","i32"),n.addLocal("idx1","i32"),n.addLocal("idx2","i32");const c=n.getCodeBuilder(),s=c.i32_const(t.alloc(l));n.addCode(c.if(c.i32_and(c.i32_eqz(c.getLocal("reverse")),c.call(o+"_isOne",c.getLocal("mulFactor"))),c.ret([])),c.setLocal("n",c.i32_shl(c.i32_const(1),c.getLocal("bits"))),c.setLocal("mask",c.i32_sub(c.getLocal("n"),c.i32_const(1))),c.setLocal("i",c.i32_const(1)),c.setLocal("ndiv2",c.i32_shr_u(c.getLocal("n"),c.i32_const(1))),c.block(c.loop(c.br_if(1,c.i32_ge_u(c.getLocal("i"),c.getLocal("ndiv2"))),c.setLocal("idx1",c.i32_add(c.getLocal("px"),c.i32_mul(c.getLocal("i"),c.i32_const(l)))),c.setLocal("idx2",c.i32_add(c.getLocal("px"),c.i32_mul(c.i32_sub(c.getLocal("n"),c.getLocal("i")),c.i32_const(l)))),c.if(c.getLocal("reverse"),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[...c.call(e+"_copy",c.getLocal("idx1"),s),...c.call(e+"_copy",c.getLocal("idx2"),c.getLocal("idx1")),...c.call(e+"_copy",s,c.getLocal("idx2"))],[...c.call(e+"_copy",c.getLocal("idx1"),s),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(i,s,c.getLocal("mulFactor"),c.getLocal("idx2"))]),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[],[...c.call(i,c.getLocal("idx1"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx2"))])),c.setLocal("i",c.i32_add(c.getLocal("i"),c.i32_const(1))),c.br(0))),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[],[...c.call(i,c.getLocal("px"),c.getLocal("mulFactor"),c.getLocal("px")),...c.setLocal("idx2",c.i32_add(c.getLocal("px"),c.i32_mul(c.getLocal("ndiv2"),c.i32_const(l)))),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx2"))]))}(),function(){const c=t.addFunction(a+"_rawfft");c.addParam("px","i32"),c.addParam("bits","i32"),c.addParam("reverse","i32"),c.addParam("mulFactor","i32"),c.addLocal("s","i32"),c.addLocal("k","i32"),c.addLocal("j","i32"),c.addLocal("m","i32"),c.addLocal("mdiv2","i32"),c.addLocal("n","i32"),c.addLocal("pwm","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.call(a+"__reversePermutation",s.getLocal("px"),s.getLocal("bits")),s.setLocal("n",s.i32_shl(s.i32_const(1),s.getLocal("bits"))),s.setLocal("s",s.i32_const(1)),s.block(s.loop(s.br_if(1,s.i32_gt_u(s.getLocal("s"),s.getLocal("bits"))),s.setLocal("m",s.i32_shl(s.i32_const(1),s.getLocal("s"))),s.setLocal("pwm",s.i32_add(s.i32_const(h),s.i32_mul(s.getLocal("s"),s.i32_const(n)))),s.setLocal("k",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("k"),s.getLocal("n"))),s.call(o+"_one",r),s.setLocal("mdiv2",s.i32_shr_u(s.getLocal("m"),s.i32_const(1))),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("j"),s.getLocal("mdiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("px"),s.i32_mul(s.i32_add(s.getLocal("k"),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.i32_mul(s.getLocal("mdiv2"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("pwm"),r),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("k",s.i32_add(s.getLocal("k"),s.getLocal("m"))),s.br(0))),s.setLocal("s",s.i32_add(s.getLocal("s"),s.i32_const(1))),s.br(0))),s.call(a+"__fftFinal",s.getLocal("px"),s.getLocal("bits"),s.getLocal("reverse"),s.getLocal("mulFactor")))}(),function(){const e=t.addFunction(a+"__log2");e.addParam("n","i32"),e.setReturnType("i32"),e.addLocal("bits","i32"),e.addLocal("aux","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("aux",o.i32_shr_u(o.getLocal("n"),o.i32_const(1)))),e.addCode(o.setLocal("bits",o.i32_const(0))),e.addCode(o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("aux"))),o.setLocal("aux",o.i32_shr_u(o.getLocal("aux"),o.i32_const(1))),o.setLocal("bits",o.i32_add(o.getLocal("bits"),o.i32_const(1))),o.br(0)))),e.addCode(o.if(o.i32_ne(o.getLocal("n"),o.i32_shl(o.i32_const(1),o.getLocal("bits"))),o.unreachable())),e.addCode(o.if(o.i32_gt_u(o.getLocal("bits"),o.i32_const(r)),o.unreachable())),e.addCode(o.getLocal("bits"))}(),B(),function(){const e=t.addFunction(a+"_ifft");e.addParam("px","i32"),e.addParam("n","i32"),e.addLocal("bits","i32"),e.addLocal("pInv2","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("bits",o.call(a+"__log2",o.getLocal("n"))),o.setLocal("pInv2",o.i32_add(o.i32_const(L),o.i32_mul(o.getLocal("bits"),o.i32_const(n)))),o.call(a+"_rawfft",o.getLocal("px"),o.getLocal("bits"),o.i32_const(1),o.getLocal("pInv2")))}(),function(){const c=t.addFunction(a+"_fftJoin");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftJoinExt");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(e+"_add",s.getLocal("idx1"),s.getLocal("idx2"),d),s.call(i,s.getLocal("idx2"),s.getLocal("pShiftToM"),s.getLocal("idx2")),s.call(e+"_add",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(i,s.getLocal("idx2"),r,s.getLocal("idx2")),s.call(e+"_copy",d,s.getLocal("idx1")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftJoinExtInv");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_sub",s.getLocal("idx1"),d,s.getLocal("idx2")),s.call(i,s.getLocal("idx2"),s.getLocal("pSConst"),s.getLocal("idx2")),s.call(i,s.getLocal("idx1"),s.getLocal("pShiftToM"),s.getLocal("idx1")),s.call(e+"_sub",d,s.getLocal("idx1"),s.getLocal("idx1")),s.call(i,s.getLocal("idx1"),s.getLocal("pSConst"),s.getLocal("idx1")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftMix");c.addParam("pBuff","i32"),c.addParam("n","i32"),c.addParam("exp","i32"),c.addLocal("nGroups","i32"),c.addLocal("nPerGroup","i32"),c.addLocal("nPerGroupDiv2","i32"),c.addLocal("pairOffset","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("j","i32"),c.addLocal("pwm","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.setLocal("nPerGroup",s.i32_shl(s.i32_const(1),s.getLocal("exp"))),s.setLocal("nPerGroupDiv2",s.i32_shr_u(s.getLocal("nPerGroup"),s.i32_const(1))),s.setLocal("nGroups",s.i32_shr_u(s.getLocal("n"),s.getLocal("exp"))),s.setLocal("pairOffset",s.i32_mul(s.getLocal("nPerGroupDiv2"),s.i32_const(l))),s.setLocal("pwm",s.i32_add(s.i32_const(h),s.i32_mul(s.getLocal("exp"),s.i32_const(n)))),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("nGroups"))),s.call(o+"_one",r),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("j"),s.getLocal("nPerGroupDiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff"),s.i32_mul(s.i32_add(s.i32_mul(s.getLocal("i"),s.getLocal("nPerGroup")),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.getLocal("pairOffset"))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("pwm"),r),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const o=t.addFunction(a+"_fftFinal");o.addParam("pBuff","i32"),o.addParam("n","i32"),o.addParam("factor","i32"),o.addLocal("idx1","i32"),o.addLocal("idx2","i32"),o.addLocal("i","i32"),o.addLocal("ndiv2","i32");const n=o.getCodeBuilder(),c=n.i32_const(t.alloc(l));o.addCode(n.setLocal("ndiv2",n.i32_shr_u(n.getLocal("n"),n.i32_const(1))),n.if(n.i32_and(n.getLocal("n"),n.i32_const(1)),n.call(i,n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))),n.getLocal("factor"),n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))))),n.setLocal("i",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_ge_u(n.getLocal("i"),n.getLocal("ndiv2"))),n.setLocal("idx1",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("i"),n.i32_const(l)))),n.setLocal("idx2",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.i32_sub(n.i32_sub(n.getLocal("n"),n.i32_const(1)),n.getLocal("i")),n.i32_const(l)))),n.call(i,n.getLocal("idx2"),n.getLocal("factor"),c),n.call(i,n.getLocal("idx1"),n.getLocal("factor"),n.getLocal("idx2")),n.call(e+"_copy",c,n.getLocal("idx1")),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),function(){const c=t.addFunction(a+"_prepareLagrangeEvaluation");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx1"),s.getLocal("pShiftToM"),d),s.call(e+"_sub",s.getLocal("idx2"),d,d),s.call(e+"_sub",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(i,d,s.getLocal("pSConst"),s.getLocal("idx1")),s.call(i,s.getLocal("idx2"),r,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),t.exportFunction(a+"_fft"),t.exportFunction(a+"_ifft"),t.exportFunction(a+"_rawfft"),t.exportFunction(a+"_fftJoin"),t.exportFunction(a+"_fftJoinExt"),t.exportFunction(a+"_fftJoinExtInv"),t.exportFunction(a+"_fftMix"),t.exportFunction(a+"_fftFinal"),t.exportFunction(a+"_prepareLagrangeEvaluation")},$t=function(t,a,e){const o=8*t.modules[e].n64;return function(){const i=t.addFunction(a+"_zero");i.addParam("px","i32"),i.addParam("n","i32"),i.addLocal("lastp","i32"),i.addLocal("p","i32");const n=i.getCodeBuilder();i.addCode(n.setLocal("p",n.getLocal("px")),n.setLocal("lastp",n.i32_add(n.getLocal("px"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("p"),n.getLocal("lastp"))),n.call(e+"_zero",n.getLocal("p")),n.setLocal("p",n.i32_add(n.getLocal("p"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_constructLC");i.addParam("ppolynomials","i32"),i.addParam("psignals","i32"),i.addParam("nSignals","i32"),i.addParam("pres","i32"),i.addLocal("i","i32"),i.addLocal("j","i32"),i.addLocal("pp","i32"),i.addLocal("ps","i32"),i.addLocal("pd","i32"),i.addLocal("ncoefs","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("i",n.i32_const(0)),n.setLocal("pp",n.getLocal("ppolynomials")),n.setLocal("ps",n.getLocal("psignals")),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("i"),n.getLocal("nSignals"))),n.setLocal("ncoefs",n.i32_load(n.getLocal("pp"))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.setLocal("j",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("j"),n.getLocal("ncoefs"))),n.setLocal("pd",n.i32_add(n.getLocal("pres"),n.i32_mul(n.i32_load(n.getLocal("pp")),n.i32_const(o)))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.call(e+"_mul",n.getLocal("ps"),n.getLocal("pp"),l),n.call(e+"_add",l,n.getLocal("pd"),n.getLocal("pd")),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(o))),n.setLocal("j",n.i32_add(n.getLocal("j"),n.i32_const(1))),n.br(0))),n.setLocal("ps",n.i32_add(n.getLocal("ps"),n.i32_const(o))),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),t.exportFunction(a+"_zero"),t.exportFunction(a+"_constructLC"),a},jt=function(t,a,e){const o=8*t.modules[e].n64;return function(){const i=t.addFunction(a+"_buildABC");i.addParam("pCoefs","i32"),i.addParam("nCoefs","i32"),i.addParam("pWitness","i32"),i.addParam("pA","i32"),i.addParam("pB","i32"),i.addParam("pC","i32"),i.addParam("offsetOut","i32"),i.addParam("nOut","i32"),i.addParam("offsetWitness","i32"),i.addParam("nWitness","i32"),i.addLocal("it","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("last","i32"),i.addLocal("m","i32"),i.addLocal("c","i32"),i.addLocal("s","i32"),i.addLocal("pOut","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_zero",n.getLocal("ita")),n.call(e+"_zero",n.getLocal("itb")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.br(0))),n.setLocal("it",n.getLocal("pCoefs")),n.setLocal("last",n.i32_add(n.getLocal("pCoefs"),n.i32_mul(n.getLocal("nCoefs"),n.i32_const(o+12)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("it"),n.getLocal("last"))),n.setLocal("s",n.i32_load(n.getLocal("it"),8)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_ge_u(n.getLocal("s"),n.i32_add(n.getLocal("offsetWitness"),n.getLocal("nWitness")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)]),n.setLocal("m",n.i32_load(n.getLocal("it"))),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(0)),n.setLocal("pOut",n.getLocal("pA")),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(1)),n.setLocal("pOut",n.getLocal("pB")),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)])),n.setLocal("c",n.i32_load(n.getLocal("it"),4)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_ge_u(n.getLocal("c"),n.i32_add(n.getLocal("offsetOut"),n.getLocal("nOut")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)]),n.setLocal("pOut",n.i32_add(n.getLocal("pOut"),n.i32_mul(n.i32_sub(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_const(o)))),n.call(e+"_mul",n.i32_add(n.getLocal("pWitness"),n.i32_mul(n.i32_sub(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_const(o))),n.i32_add(n.getLocal("it"),n.i32_const(12)),l),n.call(e+"_add",n.getLocal("pOut"),l,n.getLocal("pOut")),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),n.br(0))),n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("it",n.getLocal("pC")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_mul",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("it")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_joinABC");i.addParam("pA","i32"),i.addParam("pB","i32"),i.addParam("pC","i32"),i.addParam("n","i32"),i.addParam("pP","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("itc","i32"),i.addLocal("itp","i32"),i.addLocal("last","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("itc",n.getLocal("pC")),n.setLocal("itp",n.getLocal("pP")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_mul",n.getLocal("ita"),n.getLocal("itb"),l),n.call(e+"_sub",l,n.getLocal("itc"),n.getLocal("itp")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("itc",n.i32_add(n.getLocal("itc"),n.i32_const(o))),n.setLocal("itp",n.i32_add(n.getLocal("itp"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_batchAdd");i.addParam("pa","i32"),i.addParam("pb","i32"),i.addParam("n","i32"),i.addParam("pr","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("itr","i32"),i.addLocal("last","i32");const n=i.getCodeBuilder();i.addCode(n.setLocal("ita",n.getLocal("pa")),n.setLocal("itb",n.getLocal("pb")),n.setLocal("itr",n.getLocal("pr")),n.setLocal("last",n.i32_add(n.getLocal("pa"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_add",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("itr")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("itr",n.i32_add(n.getLocal("itr"),n.i32_const(o))),n.br(0))))}(),t.exportFunction(a+"_buildABC"),t.exportFunction(a+"_joinABC"),t.exportFunction(a+"_batchAdd"),a},Vt=function(t,a,e,o,i,n,l,c){const s=t.addFunction(a);s.addParam("pIn","i32"),s.addParam("n","i32"),s.addParam("pFirst","i32"),s.addParam("pInc","i32"),s.addParam("pOut","i32"),s.addLocal("pOldFree","i32"),s.addLocal("i","i32"),s.addLocal("pFrom","i32"),s.addLocal("pTo","i32");const r=s.getCodeBuilder(),d=r.i32_const(t.alloc(l));s.addCode(r.setLocal("pFrom",r.getLocal("pIn")),r.setLocal("pTo",r.getLocal("pOut"))),s.addCode(r.call(o+"_copy",r.getLocal("pFirst"),d)),s.addCode(r.setLocal("i",r.i32_const(0)),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("i"),r.getLocal("n"))),r.call(c,r.getLocal("pFrom"),d,r.getLocal("pTo")),r.setLocal("pFrom",r.i32_add(r.getLocal("pFrom"),r.i32_const(i))),r.setLocal("pTo",r.i32_add(r.getLocal("pTo"),r.i32_const(n))),r.call(o+"_mul",d,r.getLocal("pInc"),d),r.setLocal("i",r.i32_add(r.getLocal("i"),r.i32_const(1))),r.br(0)))),t.exportFunction(a)};const Kt=K,Ht=Ft,Zt=Bt,Wt=Pt,Yt=Gt,Jt=Ut,Xt=Dt,ta=$t,aa=jt,ea=Vt,{bitLength:oa,modInv:ia,isOdd:na,isNegative:la}=J;const ca=K,sa=Ft,ra=Bt,da=Pt,ua=Gt,_a=Ut,ga=Dt,fa=$t,ha=jt,pa=Vt,{bitLength:ma,isOdd:La,isNegative:ba}=J;var wa=function(t,a){const e=a||"bn128";if(t.modules[e])return e;const o=21888242871839275222246405745257275088696311157297823662689037894645226208583n,i=21888242871839275222246405745257275088548364400416034343698204186575808495617n,n=Math.floor((oa(o-1n)-1)/64)+1,l=8*n,c=l,s=l,r=2*s,d=12*s,u=t.alloc(Kt.bigInt2BytesLE(i,c)),_=Ht(t,o,"f1m");Zt(t,i,"fr","frm");const g=t.alloc(Kt.bigInt2BytesLE(b(3n),s)),f=Jt(t,"g1m","f1m",g);Xt(t,"frm","frm","frm","frm_mul"),ta(t,"pol","frm"),aa(t,"qap","frm");const h=Wt(t,"f1m_neg","f2m","f1m"),p=t.alloc([...Kt.bigInt2BytesLE(b(19485874751759354771024239261021720505790618469301721065564631296452457478373n),s),...Kt.bigInt2BytesLE(b(266929791119991161246907387137283842545076965332900288569378510910307636690n),s)]),m=Jt(t,"g2m","f2m",p);function L(a,e){const o=t.addFunction(a);o.addParam("pG","i32"),o.addParam("pFr","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(l));o.addCode(i.call("frm_fromMontgomery",i.getLocal("pFr"),n),i.call(e,i.getLocal("pG"),n,i.i32_const(l),i.getLocal("pr"))),t.exportFunction(a)}function b(t){return BigInt(t)*(1n<0n;)na(a)?e.push(1):e.push(0),a>>=1n;return e}(29793968203157093288n),T=t.alloc(z),M=3*r,U=z.length-1,Q=z.reduce(((t,a)=>t+(0!=a?1:0)),0),k=6*l,R=3*l*2+(Q+U+1)*M;t.modules[e]={n64:n,pG1gen:y,pG1zero:C,pG1b:g,pG2gen:x,pG2zero:B,pG2b:p,pq:t.modules.f1m.pq,pr:u,pOneT:E,prePSize:k,preQSize:R,r:i.toString(),q:o.toString()};const N=4965661367192848881n;function D(a){const i=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[8376118865763821496583973867626364092589906065868298776909617916018768340080n,16469823323077808223889137241176536799009286646108169935659301613961712198316n],[21888242871839275220042445260109153167277707414472061641714758635765020556617n,0n],[11697423496358154304825782922584725312912383441159505038794027105778954184319n,303847389135065887422783454877609941456349188919719272345083954437860409601n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3321304630594332808241809054958361220322477375291206261884409189760185844239n,5722266937896532885780051958958348231143373700109372999374820235121374419868n],[21888242871839275222246405745257275088696311157297823662689037894645226208582n,0n],[13512124006075453725662431877630910996106405091429524885779419978626457868503n,5418419548761466998357268504080738289687024511189653727029736280683514010267n],[2203960485148121921418603742825762020974279258880205651966n,0n],[10190819375481120917420622822672549775783927716138318623895010788866272024264n,21584395482704209334823622290379665147239961968378104390343953940207365798982n],[2203960485148121921418603742825762020974279258880205651967n,0n],[18566938241244942414004596690298913868373833782006617400804628704885040364344n,16165975933942742336466353786298926857552937457188450663314217659523851788715n]]],n=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[21575463638280843010398324269430826099269044274347216827212613867836435027261n,10307601595873709700152284273816112264069230130616436755625194854815875713954n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3772000881919853776433695186713858239009073593817195771773381919316419345261n,2236595495967245188281701248203181795121068902605861227855261137820944008926n],[2203960485148121921418603742825762020974279258880205651966n,0n],[18429021223477853657660792034369865839114504446431234726392080002137598044644n,9344045779998320333812420223237981029506012124075525679208581902008406485703n]],[[1n,0n],[2581911344467009335267311115468803099551665605076196740867805258568234346338n,19937756971775647987995932169929341994314640652964949448313374472400716661030n],[2203960485148121921418603742825762020974279258880205651966n,0n],[5324479202449903542726783395506214481928257762400643279780343368557297135718n,16208900380737693084919495127334387981393726419856888799917914180988844123039n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[13981852324922362344252311234282257507216387789820983642040889267519694726527n,7629828391165209371577384193250820201684255241773809077146787135900891633097n]]],l=t.addFunction(e+"__frobeniusMap"+a);l.addParam("x","i32"),l.addParam("r","i32");const c=l.getCodeBuilder();for(let e=0;e<6;e++){const o=0==e?c.getLocal("x"):c.i32_add(c.getLocal("x"),c.i32_const(e*r)),u=o,g=c.i32_add(c.getLocal("x"),c.i32_const(e*r+s)),f=0==e?c.getLocal("r"):c.i32_add(c.getLocal("r"),c.i32_const(e*r)),p=f,m=c.i32_add(c.getLocal("r"),c.i32_const(e*r+s)),L=d(i[Math.floor(e/3)][a%12],n[e%3][a%6]),w=t.alloc([...Kt.bigInt2BytesLE(b(L[0]),32),...Kt.bigInt2BytesLE(b(L[1]),32)]);a%2==1?l.addCode(c.call(_+"_copy",u,p),c.call(_+"_neg",g,m),c.call(h+"_mul",f,c.i32_const(w),f)):l.addCode(c.call(h+"_mul",o,c.i32_const(w),f))}function d(t,a){const e=BigInt(t[0]),i=BigInt(t[1]),n=BigInt(a[0]),l=BigInt(a[1]),c=[(e*n-i*l)%o,(e*l+i*n)%o];return la(c[0])&&(c[0]=c[0]+o),c}}function $(a,o){const i=function(t){let a=t;const e=[];for(;a>0n;){if(na(a)){const t=2-Number(a%4n);e.push(t),a-=BigInt(t)}else e.push(0);a>>=1n}return e}(a).map((t=>-1==t?255:t)),n=t.alloc(i),l=t.addFunction(e+"__cyclotomicExp_"+o);l.addParam("x","i32"),l.addParam("r","i32"),l.addLocal("bit","i32"),l.addLocal("i","i32");const c=l.getCodeBuilder(),s=c.getLocal("x"),r=c.getLocal("r"),u=c.i32_const(t.alloc(d));l.addCode(c.call(G+"_conjugate",s,u),c.call(G+"_one",r),c.if(c.teeLocal("bit",c.i32_load8_s(c.i32_const(i.length-1),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(G+"_mul",r,s,r),c.call(G+"_mul",r,u,r))),c.setLocal("i",c.i32_const(i.length-2)),c.block(c.loop(c.call(e+"__cyclotomicSquare",r,r),c.if(c.teeLocal("bit",c.i32_load8_s(c.getLocal("i"),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(G+"_mul",r,s,r),c.call(G+"_mul",r,u,r))),c.br_if(1,c.i32_eqz(c.getLocal("i"))),c.setLocal("i",c.i32_sub(c.getLocal("i"),c.i32_const(1))),c.br(0))))}function j(){!function(){const a=t.addFunction(e+"__cyclotomicSquare");a.addParam("x","i32"),a.addParam("r","i32");const o=a.getCodeBuilder(),i=o.getLocal("x"),n=o.i32_add(o.getLocal("x"),o.i32_const(r)),l=o.i32_add(o.getLocal("x"),o.i32_const(2*r)),c=o.i32_add(o.getLocal("x"),o.i32_const(3*r)),s=o.i32_add(o.getLocal("x"),o.i32_const(4*r)),d=o.i32_add(o.getLocal("x"),o.i32_const(5*r)),u=o.getLocal("r"),_=o.i32_add(o.getLocal("r"),o.i32_const(r)),g=o.i32_add(o.getLocal("r"),o.i32_const(2*r)),f=o.i32_add(o.getLocal("r"),o.i32_const(3*r)),p=o.i32_add(o.getLocal("r"),o.i32_const(4*r)),m=o.i32_add(o.getLocal("r"),o.i32_const(5*r)),L=o.i32_const(t.alloc(r)),b=o.i32_const(t.alloc(r)),w=o.i32_const(t.alloc(r)),y=o.i32_const(t.alloc(r)),A=o.i32_const(t.alloc(r)),C=o.i32_const(t.alloc(r)),F=o.i32_const(t.alloc(r)),x=o.i32_const(t.alloc(r));a.addCode(o.call(h+"_mul",i,s,F),o.call(h+"_mul",s,o.i32_const(v),L),o.call(h+"_add",i,L,L),o.call(h+"_add",i,s,x),o.call(h+"_mul",x,L,L),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",L,x,L),o.call(h+"_add",F,F,b),o.call(h+"_mul",c,l,F),o.call(h+"_mul",l,o.i32_const(v),w),o.call(h+"_add",c,w,w),o.call(h+"_add",c,l,x),o.call(h+"_mul",x,w,w),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",w,x,w),o.call(h+"_add",F,F,y),o.call(h+"_mul",n,d,F),o.call(h+"_mul",d,o.i32_const(v),A),o.call(h+"_add",n,A,A),o.call(h+"_add",n,d,x),o.call(h+"_mul",x,A,A),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",A,x,A),o.call(h+"_add",F,F,C),o.call(h+"_sub",L,i,u),o.call(h+"_add",u,u,u),o.call(h+"_add",L,u,u),o.call(h+"_add",b,s,p),o.call(h+"_add",p,p,p),o.call(h+"_add",b,p,p),o.call(h+"_mul",C,o.i32_const(P),x),o.call(h+"_add",x,c,f),o.call(h+"_add",f,f,f),o.call(h+"_add",x,f,f),o.call(h+"_sub",A,l,g),o.call(h+"_add",g,g,g),o.call(h+"_add",A,g,g),o.call(h+"_sub",w,n,_),o.call(h+"_add",_,_,_),o.call(h+"_add",w,_,_),o.call(h+"_add",y,d,m),o.call(h+"_add",m,m,m),o.call(h+"_add",y,m,m))}(),$(N,"w0");const a=t.addFunction(e+"__finalExponentiationLastChunk");a.addParam("x","i32"),a.addParam("r","i32");const o=a.getCodeBuilder(),i=o.getLocal("x"),n=o.getLocal("r"),l=o.i32_const(t.alloc(d)),c=o.i32_const(t.alloc(d)),s=o.i32_const(t.alloc(d)),u=o.i32_const(t.alloc(d)),_=o.i32_const(t.alloc(d)),g=o.i32_const(t.alloc(d)),f=o.i32_const(t.alloc(d)),p=o.i32_const(t.alloc(d)),m=o.i32_const(t.alloc(d)),L=o.i32_const(t.alloc(d)),b=o.i32_const(t.alloc(d)),w=o.i32_const(t.alloc(d)),y=o.i32_const(t.alloc(d)),A=o.i32_const(t.alloc(d)),C=o.i32_const(t.alloc(d)),F=o.i32_const(t.alloc(d)),x=o.i32_const(t.alloc(d)),I=o.i32_const(t.alloc(d)),B=o.i32_const(t.alloc(d)),E=o.i32_const(t.alloc(d)),S=o.i32_const(t.alloc(d));a.addCode(o.call(e+"__cyclotomicExp_w0",i,l),o.call(G+"_conjugate",l,l),o.call(e+"__cyclotomicSquare",l,c),o.call(e+"__cyclotomicSquare",c,s),o.call(G+"_mul",s,c,u),o.call(e+"__cyclotomicExp_w0",u,_),o.call(G+"_conjugate",_,_),o.call(e+"__cyclotomicSquare",_,g),o.call(e+"__cyclotomicExp_w0",g,f),o.call(G+"_conjugate",f,f),o.call(G+"_conjugate",u,p),o.call(G+"_conjugate",f,m),o.call(G+"_mul",m,_,L),o.call(G+"_mul",L,p,b),o.call(G+"_mul",b,c,w),o.call(G+"_mul",b,_,y),o.call(G+"_mul",y,i,A),o.call(e+"__frobeniusMap1",w,C),o.call(G+"_mul",C,A,F),o.call(e+"__frobeniusMap2",b,x),o.call(G+"_mul",x,F,I),o.call(G+"_conjugate",i,B),o.call(G+"_mul",B,w,E),o.call(e+"__frobeniusMap3",E,S),o.call(G+"_mul",S,I,n))}const V=t.alloc(k),K=t.alloc(R);function H(a){const o=t.addFunction(e+"_pairingEq"+a);for(let t=0;t0n;)La(a)?e.push(1):e.push(0),a>>=1n;return e}(0xd201000000010000n),z=t.alloc(G),T=3*s,M=G.length-1,U=G.reduce(((t,a)=>t+(0!=a?1:0)),0),Q=6*l,k=3*l*2+(U+M+1)*T,R=!0,N=15132376222941642752n;function D(a){const e=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n,151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n],[2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n,1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n,877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n,3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n,2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n,3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n]]],i=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[0n,4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[0n,1n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[0n,793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n]],[[1n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n]]],n=t.addFunction(O+"_frobeniusMap"+a);n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder();for(let o=0;o<6;o++){const u=0==o?r.getLocal("x"):r.i32_add(r.getLocal("x"),r.i32_const(o*s)),_=u,g=r.i32_add(r.getLocal("x"),r.i32_const(o*s+c)),h=0==o?r.getLocal("r"):r.i32_add(r.getLocal("r"),r.i32_const(o*s)),p=h,L=r.i32_add(r.getLocal("r"),r.i32_const(o*s+c)),b=d(e[Math.floor(o/3)][a%12],i[o%3][a%6]),w=t.alloc([...ca.bigInt2BytesLE(y(b[0]),l),...ca.bigInt2BytesLE(y(b[1]),l)]);a%2==1?n.addCode(r.call(f+"_copy",_,p),r.call(f+"_neg",g,L),r.call(m+"_mul",h,r.i32_const(w),h)):n.addCode(r.call(m+"_mul",u,r.i32_const(w),h))}function d(t,a){const e=t[0],i=t[1],n=a[0],l=a[1],c=[(e*n-i*l)%o,(e*l+i*n)%o];return ba(c[0])&&(c[0]=c[0]+o),c}}function $(a,o,i){const n=function(t){let a=t;const e=[];for(;a>0n;){if(La(a)){const t=2-Number(a%4n);e.push(t),a-=BigInt(t)}else e.push(0);a>>=1n}return e}(a).map((t=>-1==t?255:t)),l=t.alloc(n),c=t.addFunction(e+"__cyclotomicExp_"+i);c.addParam("x","i32"),c.addParam("r","i32"),c.addLocal("bit","i32"),c.addLocal("i","i32");const s=c.getCodeBuilder(),d=s.getLocal("x"),u=s.getLocal("r"),_=s.i32_const(t.alloc(r));c.addCode(s.call(O+"_conjugate",d,_),s.call(O+"_one",u),s.if(s.teeLocal("bit",s.i32_load8_s(s.i32_const(n.length-1),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(O+"_mul",u,d,u),s.call(O+"_mul",u,_,u))),s.setLocal("i",s.i32_const(n.length-2)),s.block(s.loop(s.call(e+"__cyclotomicSquare",u,u),s.if(s.teeLocal("bit",s.i32_load8_s(s.getLocal("i"),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(O+"_mul",u,d,u),s.call(O+"_mul",u,_,u))),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.br(0)))),o&&c.addCode(s.call(O+"_conjugate",u,u))}t.modules[e]={n64q:n,n64r:d,n8q:l,n8r:u,pG1gen:C,pG1zero:x,pG1b:h,pG2gen:B,pG2zero:v,pG2b:L,pq:t.modules.f1m.pq,pr:g,pOneT:S,r:i,q:o,prePSize:Q,preQSize:k},function(){const a=t.addFunction(q+"_mul1");a.addParam("pA","i32"),a.addParam("pC1","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(2*c)),n=e.i32_add(e.getLocal("pA"),e.i32_const(4*c)),l=e.getLocal("pC1"),s=e.getLocal("pR"),r=e.i32_add(e.getLocal("pR"),e.i32_const(2*c)),d=e.i32_add(e.getLocal("pR"),e.i32_const(4*c)),u=e.i32_const(t.alloc(2*c)),_=e.i32_const(t.alloc(2*c));a.addCode(e.call(m+"_add",o,i,u),e.call(m+"_add",i,n,_),e.call(m+"_mul",i,l,d),e.call(m+"_mul",_,l,s),e.call(m+"_sub",s,d,s),e.call(m+"_mulNR",s,s),e.call(m+"_mul",u,l,r),e.call(m+"_sub",r,d,r))}(),function(){const a=t.addFunction(q+"_mul01");a.addParam("pA","i32"),a.addParam("pC0","i32"),a.addParam("pC1","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(2*c)),n=e.i32_add(e.getLocal("pA"),e.i32_const(4*c)),l=e.getLocal("pC0"),s=e.getLocal("pC1"),r=e.getLocal("pR"),d=e.i32_add(e.getLocal("pR"),e.i32_const(2*c)),u=e.i32_add(e.getLocal("pR"),e.i32_const(4*c)),_=e.i32_const(t.alloc(2*c)),g=e.i32_const(t.alloc(2*c)),f=e.i32_const(t.alloc(2*c)),h=e.i32_const(t.alloc(2*c));a.addCode(e.call(m+"_mul",o,l,_),e.call(m+"_mul",i,s,g),e.call(m+"_add",o,i,f),e.call(m+"_add",o,n,h),e.call(m+"_add",i,n,r),e.call(m+"_mul",r,s,r),e.call(m+"_sub",r,g,r),e.call(m+"_mulNR",r,r),e.call(m+"_add",r,_,r),e.call(m+"_add",l,s,d),e.call(m+"_mul",d,f,d),e.call(m+"_sub",d,_,d),e.call(m+"_sub",d,g,d),e.call(m+"_mul",h,l,u),e.call(m+"_sub",u,_,u),e.call(m+"_add",u,g,u))}(),function(){const a=t.addFunction(O+"_mul014");a.addParam("pA","i32"),a.addParam("pC0","i32"),a.addParam("pC1","i32"),a.addParam("pC4","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(6*c)),n=e.getLocal("pC0"),l=e.getLocal("pC1"),s=e.getLocal("pC4"),r=e.i32_const(t.alloc(6*c)),d=e.i32_const(t.alloc(6*c)),u=e.i32_const(t.alloc(2*c)),_=e.getLocal("pR"),g=e.i32_add(e.getLocal("pR"),e.i32_const(6*c));a.addCode(e.call(q+"_mul01",o,n,l,r),e.call(q+"_mul1",i,s,d),e.call(m+"_add",l,s,u),e.call(q+"_add",i,o,g),e.call(q+"_mul01",g,n,u,g),e.call(q+"_sub",g,r,g),e.call(q+"_sub",g,d,g),e.call(q+"_copy",d,_),e.call(q+"_mulNR",_,_),e.call(q+"_add",_,r,_))}(),function(){const a=t.addFunction(e+"_ell");a.addParam("pP","i32"),a.addParam("pCoefs","i32"),a.addParam("pF","i32");const o=a.getCodeBuilder(),i=o.getLocal("pP"),n=o.i32_add(o.getLocal("pP"),o.i32_const(l)),s=o.getLocal("pF"),r=o.getLocal("pCoefs"),d=o.i32_add(o.getLocal("pCoefs"),o.i32_const(c)),u=o.i32_add(o.getLocal("pCoefs"),o.i32_const(2*c)),_=o.i32_add(o.getLocal("pCoefs"),o.i32_const(3*c)),g=o.i32_add(o.getLocal("pCoefs"),o.i32_const(4*c)),h=t.alloc(2*c),p=o.i32_const(h),m=o.i32_const(h),L=o.i32_const(h+c),b=t.alloc(2*c),w=o.i32_const(b),y=o.i32_const(b),A=o.i32_const(b+c);a.addCode(o.call(f+"_mul",r,n,m),o.call(f+"_mul",d,n,L),o.call(f+"_mul",u,i,y),o.call(f+"_mul",_,i,A),o.call(O+"_mul014",s,g,w,p,s))}();const j=t.alloc(Q),V=t.alloc(k);function K(a){const o=t.addFunction(e+"_pairingEq"+a);for(let t=0;t>=BigInt(32)):l+2<=a?(n.setUint16(l,Number(e&BigInt(65535)),!0),l+=2,e>>=BigInt(16)):(n.setUint8(l,Number(e&BigInt(255)),!0),l+=1,e>>=BigInt(8));if(e)throw new Error("Number does not fit in this length");return o}const Ca=[];for(let t=0;t<256;t++)Ca[t]=Fa(t,8);function Fa(t,a){let e=0,o=t;for(let t=0;t>=1;return e}function xa(t,a){return(Ca[t>>>24]|Ca[t>>>16&255]<<8|Ca[t>>>8&255]<<16|Ca[255&t]<<24)>>>32-a}function Ia(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function Ba(t,a){const e=t.byteLength/a,o=Ia(e);if(e!=1<e){const o=t.slice(i*a,(i+1)*a);t.set(t.slice(e*a,(e+1)*a),i*a),t.set(o,e*a)}}}function Ea(t,a){const e=new Uint8Array(a*t.length);for(let o=0;o{e[o]=t(a[o])})),e}return a},unstringifyBigInts:function t(a){if("string"==typeof a&&/^[0-9]+$/.test(a))return BigInt(a);if("string"==typeof a&&/^0x[0-9a-fA-F]+$/.test(a))return BigInt(a);if(Array.isArray(a))return a.map(t);if("object"==typeof a){if(null===a)return null;const e={};return Object.keys(a).forEach((o=>{e[o]=t(a[o])})),e}return a},beBuff2int:function(t){let a=BigInt(0),e=t.length,o=0;const i=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;e>0;)e>=4?(e-=4,a+=BigInt(i.getUint32(e))<=2?(e-=2,a+=BigInt(i.getUint16(e))<0;)n-4>=0?(n-=4,i.setUint32(n,Number(e&BigInt(4294967295))),e>>=BigInt(32)):n-2>=0?(n-=2,i.setUint16(n,Number(e&BigInt(65535))),e>>=BigInt(16)):(n-=1,i.setUint8(n,Number(e&BigInt(255))),e>>=BigInt(8));if(e)throw new Error("Number does not fit in this length");return o},leBuff2int:function(t){let a=BigInt(0),e=0;const o=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;e{o[i]=t(a,e[i])})),o}return e},unstringifyFElements:function t(a,e){if("string"==typeof e&&/^[0-9]+$/.test(e))return a.e(e);if("string"==typeof e&&/^0x[0-9a-fA-F]+$/.test(e))return a.e(e);if(Array.isArray(e))return e.map(t.bind(this,a));if("object"==typeof e){if(null===e)return null;const o={};return Object.keys(e).forEach((i=>{o[i]=t(a,e[i])})),o}return e},bitReverse:xa,log2:Ia,buffReverseBits:Ba,array2buffer:Ea,buffer2array:va});const Pa=1<<30;class qa{constructor(t){this.buffers=[],this.byteLength=t;for(let a=0;a0;){const t=l+c>Pa?Pa-l:c,a=new Uint8Array(this.buffers[n].buffer,this.buffers[n].byteOffset+l,t);if(t==e)return a.slice();i||(i=e<=Pa?new Uint8Array(e):new qa(e)),i.set(a,e-c),c-=t,n++,l=0}return i}set(t,a){void 0===a&&(a=0);const e=t.byteLength;if(0==e)return;const o=Math.floor(a/Pa);if(o==Math.floor((a+e-1)/Pa))return t instanceof qa&&1==t.buffers.length?this.buffers[o].set(t.buffers[0],a%Pa):this.buffers[o].set(t,a%Pa);let i=o,n=a%Pa,l=e;for(;l>0;){const a=n+l>Pa?Pa-n:l,o=t.slice(e-l,e-l+a);new Uint8Array(this.buffers[i].buffer,this.buffers[i].byteOffset+n,a).set(o),l-=a,i++,n=0}}}function Oa(t,a,e,o){return async function(i){const n=Math.floor(i.byteLength/e);if(n*e!==i.byteLength)throw new Error("Invalid buffer size");const l=Math.floor(n/t.concurrency),c=[];for(let s=0;s=0;t--)this.w[t]=this.square(this.w[t+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=Oa(t,a+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=Oa(t,a+"_batchFromMontgomery",this.n8,this.n8)}op2(t,a,e){return this.tm.setBuff(this.pOp1,a),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,a,e){return this.tm.setBuff(this.pOp1,a),this.tm.setBuff(this.pOp2,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,a){return this.tm.setBuff(this.pOp1,a),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,a){return this.tm.setBuff(this.pOp1,a),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,a){return this.op2("_add",t,a)}eq(t,a){return this.op2Bool("_eq",t,a)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,a){return this.op2("_sub",t,a)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,a){return this.op2("_mul",t,a)}div(t,a){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,a){return a instanceof Uint8Array||(a=S(o(a))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,a.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(t){return this.op1Bool("_isNegative",t)}e(t,a){if(t instanceof Uint8Array)return t;let e=o(t,a);n(e)?(e=p(e),A(e,this.p)&&(e=w(e,this.p)),e=h(this.p,e)):A(e,this.p)&&(e=w(e,this.p));const i=Aa(e,this.n8);return this.toMontgomery(i)}toString(t,a){return v(B(this.fromMontgomery(t),0),a)}fromRng(t){let a;const e=new Uint8Array(this.n8);do{a=P;for(let e=0;eo.buffer.byteLength){const i=o.buffer.byteLength/65536;let n=Math.floor((e[0]+t)/65536)+1;n>a&&(n=a),o.grow(n-i)}return i}function l(t){const a=n(t.byteLength);return s(a,t),a}function c(t,a){const e=new Uint8Array(o.buffer);return new Uint8Array(e.buffer,e.byteOffset+t,a)}function s(t,a){new Uint8Array(o.buffer).set(new Uint8Array(a),t)}function r(t){if("INIT"==t[0].cmd)return i(t[0]);const a={vars:[],out:[]},r=new Uint32Array(o.buffer,0,1)[0];for(let o=0;o{this.reject=a,this.resolve=t}))}}var Da;const $a="data:application/javascript;base64,"+(Da="("+Ua.toString()+")(self)",globalThis.btoa(Da));class ja{constructor(){this.actionQueue=[],this.oldPFree=0}startSyncOp(){if(0!=this.oldPFree)throw new Error("Sync operation in progress");this.oldPFree=this.u32[0]}endSyncOp(){if(0==this.oldPFree)throw new Error("No sync operation in progress");this.u32[0]=this.oldPFree,this.oldPFree=0}postAction(t,a,e,o){if(this.working[t])throw new Error("Posting a job t a working worker");return this.working[t]=!0,this.pendingDeferreds[t]=o||new Na,this.workers[t].postMessage(a,e),this.pendingDeferreds[t].promise}processWorks(){for(let t=0;t0;t++)if(0==this.working[t]){const a=this.actionQueue.shift();this.postAction(t,a.data,a.transfers,a.deferred)}}queueAction(t,a){const e=new Na;if(this.singleThread){const a=this.taskManager(t);e.resolve(a)}else this.actionQueue.push({data:t,transfers:a,deferred:e}),this.processWorks();return e.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(t){const a=this.alloc(t.byteLength);return this.setBuff(a,t),a}getBuff(t,a){return this.u8.slice(t,t+a)}setBuff(t,a){this.u8.set(new Uint8Array(a),t)}alloc(t){for(;3&this.u32[0];)this.u32[0]++;const a=this.u32[0];return this.u32[0]+=t,a}async terminate(){for(let t=0;tsetTimeout(a,t))))}}function Va(t,a){const e=t[a],o=t.Fr,i=t.tm;t[a].batchApplyKey=async function(t,n,l,c,s){let r,d,u,_,g;if(c=c||"affine",s=s||"affine","G1"==a)"jacobian"==c?(u=3*e.F.n8,r="g1m_batchApplyKey"):(u=2*e.F.n8,r="g1m_batchApplyKeyMixed"),_=3*e.F.n8,"jacobian"==s?g=3*e.F.n8:(d="g1m_batchToAffine",g=2*e.F.n8);else if("G2"==a)"jacobian"==c?(u=3*e.F.n8,r="g2m_batchApplyKey"):(u=2*e.F.n8,r="g2m_batchApplyKeyMixed"),_=3*e.F.n8,"jacobian"==s?g=3*e.F.n8:(d="g2m_batchToAffine",g=2*e.F.n8);else{if("Fr"!=a)throw new Error("Invalid group: "+a);r="frm_batchApplyKey",u=e.n8,_=e.n8,g=e.n8}const f=Math.floor(t.byteLength/u),h=Math.floor(f/i.concurrency),p=[];l=o.e(l);let m=o.e(n);for(let a=0;a=0;t--){if(!e.isZero(h))for(let t=0;tr&&(h=r),h<1024&&(h=1024);const p=[];for(let a=0;a(c&&c.debug(`Multiexp end: ${s}: ${a}/${u}`),t))))}const m=await Promise.all(p);let L=e.zero;for(let t=m.length-1;t>=0;t--)L=e.add(L,m[t]);return L}e.multiExp=async function(t,a,e,o){return await n(t,a,"jacobian",e,o)},e.multiExpAffine=async function(t,a,e,o){return await n(t,a,"affine",e,o)}}function Za(t,a){const e=t[a],o=t.Fr,i=e.tm;async function n(t,c,s,r,d,u){s=s||"affine",r=r||"affine";let _,g,f,h,p,m,L,b;"G1"==a?("affine"==s?(_=2*e.F.n8,h="g1m_batchToJacobian"):_=3*e.F.n8,g=3*e.F.n8,c&&(b="g1m_fftFinal"),L="g1m_fftJoin",m="g1m_fftMix","affine"==r?(f=2*e.F.n8,p="g1m_batchToAffine"):f=3*e.F.n8):"G2"==a?("affine"==s?(_=2*e.F.n8,h="g2m_batchToJacobian"):_=3*e.F.n8,g=3*e.F.n8,c&&(b="g2m_fftFinal"),L="g2m_fftJoin",m="g2m_fftMix","affine"==r?(f=2*e.F.n8,p="g2m_batchToAffine"):f=3*e.F.n8):"Fr"==a&&(_=e.n8,g=e.n8,f=e.n8,c&&(b="frm_fftFinal"),m="frm_fftMix",L="frm_fftJoin");let w=!1;Array.isArray(t)?(t=Ea(t,_),w=!0):t=t.slice(0,t.byteLength);const y=t.byteLength/_,A=Ia(y);if(1<1<<28?new qa(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return _.set(u[0]),_.set(u[1],u[0].byteLength),_}(t,s,r,d,u):await async function(t,a,e,i,c){let s,r;s=t.slice(0,t.byteLength/2),r=t.slice(t.byteLength/2,t.byteLength);const d=[];[s,r]=await l(s,r,"fftJoinExt",o.one,o.shift,a,"jacobian",i,c),d.push(n(s,!1,"jacobian",e,i,c)),d.push(n(r,!1,"jacobian",e,i,c));const u=await Promise.all(d);let _;_=u[0].byteLength>1<<28?new qa(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return _.set(u[0]),_.set(u[1],u[0].byteLength),_}(t,s,r,d,u),w?va(a,f):a}let C,F,x;c&&(C=o.inv(o.e(y))),Ba(t,_);let I=Math.min(16384,y),B=y/I;for(;B=16;)B*=2,I/=2;const E=Ia(I),v=[];for(let a=0;a(d&&d.debug(`${u}: fft ${A} mix end: ${a}/${B}`),t))))}x=await Promise.all(v);for(let t=0;t(d&&d.debug(`${u}: fft ${A} join ${t}/${A} ${l+1}/${a} ${c}/${e/2}`),o))))}const l=await Promise.all(n);for(let t=0;t0;a--)F.set(x[a],t),t+=I*f,delete x[a];F.set(x[0].slice(0,(I-1)*f),t),delete x[0]}else for(let t=0;t65536&&(w=65536);const y=[];for(let a=0;a(u&&u.debug(`${_}: fftJoinExt End: ${a}/${b}`),t))))}const A=await Promise.all(y);let C,F;b*p>1<<28?(C=new qa(b*p),F=new qa(b*p)):(C=new Uint8Array(b*p),F=new Uint8Array(b*p));let x=0;for(let t=0;to.s+1)throw s&&s.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let g=t.slice(0,t.byteLength/2),f=t.slice(t.byteLength/2,t.byteLength);const h=o.exp(o.shift,u/2),p=o.inv(o.sub(o.one,h));[g,f]=await l(g,f,"prepareLagrangeEvaluation",p,o.shiftInv,i,"jacobian",s,r+" prep");const m=[];let L;return m.push(n(g,!0,"jacobian",c,s,r+" t0")),m.push(n(f,!0,"jacobian",c,s,r+" t1")),[g,f]=await Promise.all(m),L=g.byteLength>1<<28?new qa(2*g.byteLength):new Uint8Array(2*g.byteLength),L.set(g),L.set(f,g.byteLength),L},e.fftMix=async function(t){const n=3*e.F.n8;let l,c;if("G1"==a)l="g1m_fftMix",c="g1m_fftJoin";else if("G2"==a)l="g2m_fftMix",c="g2m_fftJoin";else{if("Fr"!=a)throw new Error("Invalid group");l="frm_fftMix",c="frm_fftJoin"}const s=Math.floor(t.byteLength/n),r=Ia(s);let d=1<=0;t--)g.set(_[t][0],f),f+=_[t][0].byteLength;return g}}async function Wa(t){const a=await async function(t,a){const e=new ja;e.memory=new WebAssembly.Memory({initial:Ra}),e.u8=new Uint8Array(e.memory.buffer),e.u32=new Uint32Array(e.memory.buffer);const o=await WebAssembly.compile(t.code);if(e.instance=await WebAssembly.instantiate(o,{env:{memory:e.memory}}),e.singleThread=a,e.initalPFree=e.u32[0],e.pq=t.pq,e.pr=t.pr,e.pG1gen=t.pG1gen,e.pG1zero=t.pG1zero,e.pG2gen=t.pG2gen,e.pG2zero=t.pG2zero,e.pOneT=t.pOneT,a)e.code=t.code,e.taskManager=Ua(),await e.taskManager([{cmd:"INIT",init:Ra,code:e.code.slice()}]),e.concurrency=1;else{let a;e.workers=[],e.pendingDeferreds=[],e.working=[],a="object"==typeof navigator&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:Qa.cpus().length,0==a&&(a=2),a>64&&(a=64),e.concurrency=a;for(let t=0;t>8n&0xFFn)),a.push(Number(e>>16n&0xFFn)),a.push(Number(e>>24n&0xFFn)),a}function ae(t){const a=function(t){for(var a=[],e=0;e>6,128|63&o):o<55296||o>=57344?a.push(224|o>>12,128|o>>6&63,128|63&o):(e++,o=65536+((1023&o)<<10|1023&t.charCodeAt(e)),a.push(240|o>>18,128|o>>12&63,128|o>>6&63,128|63&o))}return a}(t);return[...le(a.length),...a]}function ee(t){const a=[];let e=Ya(t);if(Ja(e))throw new Error("Number cannot be negative");for(;!Xa(e);)a.push(Number(0x7Fn&e)),e>>=7n;0==a.length&&a.push(0);for(let t=0;t0xFFFFFFFFn)throw new Error("Number too big");if(a>0x7FFFFFFFn&&(a-=0x100000000n),a<-2147483648n)throw new Error("Number too small");return oe(a)}function ne(t){let a=Ya(t);if(a>0xFFFFFFFFFFFFFFFFn)throw new Error("Number too big");if(a>0x7FFFFFFFFFFFFFFFn&&(a-=0x10000000000000000n),a<-9223372036854775808n)throw new Error("Number too small");return oe(a)}function le(t){let a=Ya(t);if(a>0xFFFFFFFFn)throw new Error("Number too big");return ee(a)}function ce(t){return Array.from(t,(function(t){return("0"+(255&t).toString(16)).slice(-2)})).join("")}class se{constructor(t){this.func=t,this.functionName=t.functionName,this.module=t.module}setLocal(t,a){const e=this.func.localIdxByName[t];if(void 0===e)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[...a,33,...le(e)]}teeLocal(t,a){const e=this.func.localIdxByName[t];if(void 0===e)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[...a,34,...le(e)]}getLocal(t){const a=this.func.localIdxByName[t];if(void 0===a)throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${t} `);return[32,...le(a)]}i64_load8_s(t,a,e){return[...t,48,void 0===e?0:e,...le(a||0)]}i64_load8_u(t,a,e){return[...t,49,void 0===e?0:e,...le(a||0)]}i64_load16_s(t,a,e){return[...t,50,void 0===e?1:e,...le(a||0)]}i64_load16_u(t,a,e){return[...t,51,void 0===e?1:e,...le(a||0)]}i64_load32_s(t,a,e){return[...t,52,void 0===e?2:e,...le(a||0)]}i64_load32_u(t,a,e){return[...t,53,void 0===e?2:e,...le(a||0)]}i64_load(t,a,e){return[...t,41,void 0===e?3:e,...le(a||0)]}i64_store(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=3,l=a):Array.isArray(e)?(i=a,n=3,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,55,n,...le(i)]}i64_store32(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=2,l=a):Array.isArray(e)?(i=a,n=2,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,62,n,...le(i)]}i64_store16(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=1,l=a):Array.isArray(e)?(i=a,n=1,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,61,n,...le(i)]}i64_store8(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=0,l=a):Array.isArray(e)?(i=a,n=0,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,60,n,...le(i)]}i32_load8_s(t,a,e){return[...t,44,void 0===e?0:e,...le(a||0)]}i32_load8_u(t,a,e){return[...t,45,void 0===e?0:e,...le(a||0)]}i32_load16_s(t,a,e){return[...t,46,void 0===e?1:e,...le(a||0)]}i32_load16_u(t,a,e){return[...t,47,void 0===e?1:e,...le(a||0)]}i32_load(t,a,e){return[...t,40,void 0===e?2:e,...le(a||0)]}i32_store(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=2,l=a):Array.isArray(e)?(i=a,n=2,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,54,n,...le(i)]}i32_store16(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=1,l=a):Array.isArray(e)?(i=a,n=1,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,59,n,...le(i)]}i32_store8(t,a,e,o){let i,n,l;return Array.isArray(a)?(i=0,n=0,l=a):Array.isArray(e)?(i=a,n=0,l=e):Array.isArray(o)&&(i=a,n=e,l=o),[...t,...l,58,n,...le(i)]}call(t,...a){const e=this.module.functionIdxByName[t];if(void 0===e)throw new Error(`Function not defined: Function: ${t}`);return[...[].concat(...a),16,...le(e)]}call_indirect(t,...a){return[...[].concat(...a),...t,17,0,0]}if(t,a,e){return e?[...t,4,64,...a,5,...e,11]:[...t,4,64,...a,11]}block(t){return[2,64,...t,11]}loop(...t){return[3,64,...[].concat(...t),11]}br_if(t,a){return[...a,13,...le(t)]}br(t){return[12,...le(t)]}ret(t){return[...t,15]}drop(t){return[...t,26]}i64_const(t){return[66,...ne(t)]}i32_const(t){return[65,...ie(t)]}i64_eqz(t){return[...t,80]}i64_eq(t,a){return[...t,...a,81]}i64_ne(t,a){return[...t,...a,82]}i64_lt_s(t,a){return[...t,...a,83]}i64_lt_u(t,a){return[...t,...a,84]}i64_gt_s(t,a){return[...t,...a,85]}i64_gt_u(t,a){return[...t,...a,86]}i64_le_s(t,a){return[...t,...a,87]}i64_le_u(t,a){return[...t,...a,88]}i64_ge_s(t,a){return[...t,...a,89]}i64_ge_u(t,a){return[...t,...a,90]}i64_add(t,a){return[...t,...a,124]}i64_sub(t,a){return[...t,...a,125]}i64_mul(t,a){return[...t,...a,126]}i64_div_s(t,a){return[...t,...a,127]}i64_div_u(t,a){return[...t,...a,128]}i64_rem_s(t,a){return[...t,...a,129]}i64_rem_u(t,a){return[...t,...a,130]}i64_and(t,a){return[...t,...a,131]}i64_or(t,a){return[...t,...a,132]}i64_xor(t,a){return[...t,...a,133]}i64_shl(t,a){return[...t,...a,134]}i64_shr_s(t,a){return[...t,...a,135]}i64_shr_u(t,a){return[...t,...a,136]}i64_extend_i32_s(t){return[...t,172]}i64_extend_i32_u(t){return[...t,173]}i64_clz(t){return[...t,121]}i64_ctz(t){return[...t,122]}i32_eqz(t){return[...t,69]}i32_eq(t,a){return[...t,...a,70]}i32_ne(t,a){return[...t,...a,71]}i32_lt_s(t,a){return[...t,...a,72]}i32_lt_u(t,a){return[...t,...a,73]}i32_gt_s(t,a){return[...t,...a,74]}i32_gt_u(t,a){return[...t,...a,75]}i32_le_s(t,a){return[...t,...a,76]}i32_le_u(t,a){return[...t,...a,77]}i32_ge_s(t,a){return[...t,...a,78]}i32_ge_u(t,a){return[...t,...a,79]}i32_add(t,a){return[...t,...a,106]}i32_sub(t,a){return[...t,...a,107]}i32_mul(t,a){return[...t,...a,108]}i32_div_s(t,a){return[...t,...a,109]}i32_div_u(t,a){return[...t,...a,110]}i32_rem_s(t,a){return[...t,...a,111]}i32_rem_u(t,a){return[...t,...a,112]}i32_and(t,a){return[...t,...a,113]}i32_or(t,a){return[...t,...a,114]}i32_xor(t,a){return[...t,...a,115]}i32_shl(t,a){return[...t,...a,116]}i32_shr_s(t,a){return[...t,...a,117]}i32_shr_u(t,a){return[...t,...a,118]}i32_rotl(t,a){return[...t,...a,119]}i32_rotr(t,a){return[...t,...a,120]}i32_wrap_i64(t){return[...t,167]}i32_clz(t){return[...t,103]}i32_ctz(t){return[...t,104]}unreachable(){return[0]}current_memory(){return[63,0]}comment(){return[]}}const re={i32:127,i64:126,f32:125,f64:124,anyfunc:112,func:96,emptyblock:64};class de{constructor(t,a,e,o,i){if("import"==e)this.fnType="import",this.moduleName=o,this.fieldName=i;else{if("internal"!=e)throw new Error("Invalid function fnType: "+e);this.fnType="internal"}this.module=t,this.fnName=a,this.params=[],this.locals=[],this.localIdxByName={},this.code=[],this.returnType=null,this.nextLocal=0}addParam(t,a){if(this.localIdxByName[t])throw new Error(`param already exists. Function: ${this.fnName}, Param: ${t} `);const e=this.nextLocal++;this.localIdxByName[t]=e,this.params.push({type:a})}addLocal(t,a,e){const o=e||1;if(this.localIdxByName[t])throw new Error(`local already exists. Function: ${this.fnName}, Param: ${t} `);const i=this.nextLocal++;this.localIdxByName[t]=i,this.locals.push({type:a,length:o})}setReturnType(t){if(this.returnType)throw new Error(`returnType already defined. Function: ${this.fnName}`);this.returnType=t}getSignature(){return[96,...[...le(this.params.length),...this.params.map((t=>re[t.type]))],...this.returnType?[1,re[this.returnType]]:[0]]}getBody(){const t=this.locals.map((t=>[...le(t.length),re[t.type]])),a=[...le(this.locals.length),...[].concat(...t),...this.code,11];return[...le(a.length),...a]}addCode(...t){this.code.push(...[].concat(...t))}getCodeBuilder(){return new se(this)}}class ue{constructor(){this.functions=[],this.functionIdxByName={},this.nImportFunctions=0,this.nInternalFunctions=0,this.memory={pagesSize:1,moduleName:"env",fieldName:"memory"},this.free=8,this.datas=[],this.modules={},this.exports=[],this.functionsTable=[]}build(){return this._setSignatures(),new Uint8Array([...te(1836278016),...te(1),...this._buildType(),...this._buildImport(),...this._buildFunctionDeclarations(),...this._buildFunctionsTable(),...this._buildExports(),...this._buildElements(),...this._buildCode(),...this._buildData()])}addFunction(t){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);const a=this.functions.length;return this.functionIdxByName[t]=a,this.functions.push(new de(this,t,"internal")),this.nInternalFunctions++,this.functions[a]}addIimportFunction(t,a,e){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);if(this.functions.length>0&&"internal"==this.functions[this.functions.length-1].type)throw new Error(`Import functions must be declared before internal: ${t}`);let o=e||t;const i=this.functions.length;return this.functionIdxByName[t]=i,this.functions.push(new de(this,t,"import",a,o)),this.nImportFunctions++,this.functions[i]}setMemory(t,a,e){this.memory={pagesSize:t,moduleName:a||"env",fieldName:e||"memory"}}exportFunction(t,a){const e=a||t;if(void 0===this.functionIdxByName[t])throw new Error(`Function not defined: ${t}`);const o=this.functionIdxByName[t];e!=t&&(this.functionIdxByName[e]=o),this.exports.push({exportName:e,idx:o})}addFunctionToTable(t){const a=this.functionIdxByName[t];this.functionsTable.push(a)}addData(t,a){this.datas.push({offset:t,bytes:a})}alloc(t,a){let e,o;(Array.isArray(t)||ArrayBuffer.isView(t))&&void 0===a?(e=t.length,o=t):(e=t,o=a),e=1+(e-1>>3)<<3;const i=this.free;return this.free+=e,o&&this.addData(i,o),i}allocString(t){const a=(new globalThis.TextEncoder).encode(t);return this.alloc([...a,0])}_setSignatures(){this.signatures=[];const t={};if(this.functionsTable.length>0){const a=this.functions[this.functionsTable[0]].getSignature();t["s_"+ce(a)]=0,this.signatures.push(a)}for(let a=0;a{a.pendingLoads.push({page:t,resolve:e,reject:o})}));return a.__statusPage("After Load request: ",t),e}__statusPage(t,a){const e=[],o=this;if(!o.logHistory)return;e.push("=="+t+" "+a);let i="";for(let t=0;t "+a.history[t][e][o])}_triggerLoad(){const t=this;if(t.reading)return;if(0==t.pendingLoads.length)return;const a=Object.keys(t.pages),e=[];for(let o=0;o0&&(void 0!==t.pages[t.pendingLoads[0].page]||o>0||e.length>0);){const a=t.pendingLoads.shift();if(void 0!==t.pages[a.page]){t.pages[a.page].pendingOps++;const o=e.indexOf(a.page);o>=0&&e.splice(o,1),t.pages[a.page].loading?t.pages[a.page].loading.push(a):a.resolve(),t.__statusPage("After Load (cached): ",a.page)}else{if(o)o--;else{const a=e.shift();t.__statusPage("Before Unload: ",a),t.avBuffs.unshift(t.pages[a]),delete t.pages[a],t.__statusPage("After Unload: ",a)}a.page>=t.totalPages?(t.pages[a.page]=n(),a.resolve(),t.__statusPage("After Load (new): ",a.page)):(t.reading=!0,t.pages[a.page]=n(),t.pages[a.page].loading=[a],i.push(t.fd.read(t.pages[a.page].buff,0,t.pageSize,a.page*t.pageSize).then((e=>{t.pages[a.page].size=e.bytesRead;const o=t.pages[a.page].loading;delete t.pages[a.page].loading;for(let t=0;t{a.reject(t)}))),t.__statusPage("After Load (loading): ",a.page))}}function n(){if(t.avBuffs.length>0){const a=t.avBuffs.shift();return a.dirty=!1,a.pendingOps=1,a.size=0,a}return{dirty:!1,buff:new Uint8Array(t.pageSize),pendingOps:1,size:0}}Promise.all(i).then((()=>{t.reading=!1,t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t)),t._tryClose()}))}_triggerWrite(){const t=this;if(t.writing)return;const a=Object.keys(t.pages),e=[];for(let o=0;o{i.writing=!1}),(a=>{console.log("ERROR Writing: "+a),t.error=a,t._tryClose()}))))}t.writing&&Promise.all(e).then((()=>{t.writing=!1,setImmediate(t._triggerWrite.bind(t)),t._tryClose(),t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t))}))}_getDirtyPage(){for(let t in this.pages)if(this.pages[t].dirty)return t;return-1}async write(t,a){if(0==t.byteLength)return;const e=this;if(void 0===a&&(a=e.pos),e.pos=a+t.byteLength,e.totalSize0;){await n[l-o];const a=c+s>e.pageSize?e.pageSize-c:s,i=t.slice(t.byteLength-s,t.byteLength-s+a);new Uint8Array(e.pages[l].buff.buffer,c,a).set(i),e.pages[l].dirty=!0,e.pages[l].pendingOps--,e.pages[l].size=Math.max(c+a,e.pages[l].size),l>=e.totalPages&&(e.totalPages=l+1),s-=a,l++,c=0,e.writing||setImmediate(e._triggerWrite.bind(e))}}async read(t,a){let e=new Uint8Array(t);return await this.readToBuffer(e,0,t,a),e}async readToBuffer(t,a,e,o){if(0==e)return;const i=this;if(e>i.pageSize*i.maxPagesLoaded*.8){const t=Math.floor(1.1*e);this.maxPagesLoaded=Math.floor(t/i.pageSize)+1}if(void 0===o&&(o=i.pos),i.pos=o+e,i.pendingClose)throw new Error("Reading a closing file");const n=Math.floor(o/i.pageSize),l=Math.floor((o+e-1)/i.pageSize),c=[];for(let t=n;t<=l;t++)c.push(i._loadPage(t));i._triggerLoad();let s=n,r=o%i.pageSize,d=o+e>i.totalSize?e-(o+e-i.totalSize):e;for(;d>0;){await c[s-n],i.__statusPage("After Await (read): ",s);const o=r+d>i.pageSize?i.pageSize-r:d,l=new Uint8Array(i.pages[s].buff.buffer,i.pages[s].buff.byteOffset+r,o);t.set(l,a+e-d),i.pages[s].pendingOps--,i.__statusPage("After Op done: ",s),d-=o,s++,r=0,i.pendingLoads.length>0&&setImmediate(i._triggerLoad.bind(i))}this.pos=o+e}_tryClose(){const t=this;if(!t.pendingClose)return;t.error&&t.pendingCloseReject(t.error);t._getDirtyPage()>=0||t.writing||t.reading||t.pendingLoads.length>0||t.pendingClose()}close(){const t=this;if(t.pendingClose)throw new Error("Closing the file twice");return new Promise(((a,e)=>{t.pendingClose=a,t.pendingCloseReject=e,t._tryClose()})).then((()=>{t.fd.close()}),(a=>{throw t.fd.close(),a}))}async discard(){await this.close(),await pe.promises.unlink(this.fileName)}async writeULE32(t,a){const e=new Uint8Array(4);new DataView(e.buffer).setUint32(0,t,!0),await this.write(e,a)}async writeUBE32(t,a){const e=new Uint8Array(4);new DataView(e.buffer).setUint32(0,t,!1),await this.write(e,a)}async writeULE64(t,a){const e=new Uint8Array(8),o=new DataView(e.buffer);o.setUint32(0,4294967295&t,!0),o.setUint32(4,Math.floor(t/4294967296),!0),await this.write(e,a)}async readULE32(t){const a=await this.read(4,t);return new Uint32Array(a.buffer)[0]}async readUBE32(t){const a=await this.read(4,t);return new DataView(a.buffer).getUint32(0,!1)}async readULE64(t){const a=await this.read(8,t),e=new Uint32Array(a.buffer);return 4294967296*e[1]+e[0]}async readString(t){const a=this;if(a.pendingClose)throw new Error("Reading a closing file");let e=void 0===t?a.pos:t,o=Math.floor(e/a.pageSize),i=!1,n="";for(;!i;){let t=a._loadPage(o);a._triggerLoad(),await t,a.__statusPage("After Await (read): ",o);let l=e%a.pageSize;const c=new Uint8Array(a.pages[o].buff.buffer,a.pages[o].buff.byteOffset+l,a.pageSize-l);let s=c.findIndex((t=>0===t));i=-1!==s,i?(n+=(new TextDecoder).decode(c.slice(0,s)),a.pos=o*this.pageSize+l+s+1):(n+=(new TextDecoder).decode(c),a.pos=o*this.pageSize+l+c.length),a.pages[o].pendingOps--,a.__statusPage("After Op done: ",o),e=a.pos,o++,a.pendingLoads.length>0&&setImmediate(a._triggerLoad.bind(a))}return n}}const be=new Uint8Array(4),we=new DataView(be.buffer),ye=new Uint8Array(8),Ae=new DataView(ye.buffer);class Ce{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t>this.allocSize){const a=Math.max(this.allocSize+(1<<20),Math.floor(1.1*this.allocSize),t),e=new Uint8Array(a);e.set(this.o.data),this.o.data=e,this.allocSize=a}}async write(t,a){if(void 0===a&&(a=this.pos),this.readOnly)throw new Error("Writing a read only file");this._resizeIfNeeded(a+t.byteLength),this.o.data.set(t.slice(),a),a+t.byteLength>this.totalSize&&(this.totalSize=a+t.byteLength),this.pos=a+t.byteLength}async readToBuffer(t,a,e,o){if(void 0===o&&(o=this.pos),this.readOnly&&o+e>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(o+e);const i=new Uint8Array(this.o.data.buffer,this.o.data.byteOffset+o,e);t.set(i,a),this.pos=o+e}async read(t,a){const e=new Uint8Array(t);return await this.readToBuffer(e,0,t,a),e}close(){this.o.data.byteLength!=this.totalSize&&(this.o.data=this.o.data.slice(0,this.totalSize))}async discard(){}async writeULE32(t,a){we.setUint32(0,t,!0),await this.write(be,a)}async writeUBE32(t,a){we.setUint32(0,t,!1),await this.write(be,a)}async writeULE64(t,a){Ae.setUint32(0,4294967295&t,!0),Ae.setUint32(4,Math.floor(t/4294967296),!0),await this.write(ye,a)}async readULE32(t){const a=await this.read(4,t);return new Uint32Array(a.buffer)[0]}async readUBE32(t){const a=await this.read(4,t);return new DataView(a.buffer).getUint32(0,!1)}async readULE64(t){const a=await this.read(8,t),e=new Uint32Array(a.buffer);return 4294967296*e[1]+e[0]}async readString(t){const a=this;let e=void 0===t?a.pos:t;if(e>this.totalSize){if(this.readOnly)throw new Error("Reading out of bounds");this._resizeIfNeeded(t)}const o=new Uint8Array(a.o.data.buffer,e,this.totalSize-e);let i=o.findIndex((t=>0===t)),n="";return-1!==i?(n=(new TextDecoder).decode(o.slice(0,i)),a.pos=e+i+1):a.pos=e,n}}const Fe=1<<22;const xe=new Uint8Array(4),Ie=new DataView(xe.buffer),Be=new Uint8Array(8),Ee=new DataView(Be.buffer);class ve{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t<=this.totalSize)return;if(this.readOnly)throw new Error("Reading out of file bounds");const a=Math.floor((t-1)/Fe)+1;for(let e=Math.max(this.o.data.length-1,0);e0;){const a=i+n>Fe?Fe-i:n,l=t.slice(t.byteLength-n,t.byteLength-n+a);new Uint8Array(e.o.data[o].buffer,i,a).set(l),n-=a,o++,i=0}this.pos=a+t.byteLength}async readToBuffer(t,a,e,o){const i=this;if(void 0===o&&(o=i.pos),this.readOnly&&o+e>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(o+e);let n=Math.floor(o/Fe),l=o%Fe,c=e;for(;c>0;){const o=l+c>Fe?Fe-l:c,s=new Uint8Array(i.o.data[n].buffer,l,o);t.set(s,a+e-c),c-=o,n++,l=0}this.pos=o+e}async read(t,a){const e=new Uint8Array(t);return await this.readToBuffer(e,0,t,a),e}close(){}async discard(){}async writeULE32(t,a){Ie.setUint32(0,t,!0),await this.write(xe,a)}async writeUBE32(t,a){Ie.setUint32(0,t,!1),await this.write(xe,a)}async writeULE64(t,a){Ee.setUint32(0,4294967295&t,!0),Ee.setUint32(4,Math.floor(t/4294967296),!0),await this.write(Be,a)}async readULE32(t){const a=await this.read(4,t);return new Uint32Array(a.buffer)[0]}async readUBE32(t){const a=await this.read(4,t);return new DataView(a.buffer).getUint32(0,!1)}async readULE64(t){const a=await this.read(8,t),e=new Uint32Array(a.buffer);return 4294967296*e[1]+e[0]}async readString(t){const a=this;let e=void 0===t?a.pos:t;if(e>this.totalSize){if(this.readOnly)throw new Error("Reading out of bounds");this._resizeIfNeeded(t)}let o=!1,i="";for(;!o;){let t=Math.floor(e/Fe),n=e%Fe;if(void 0===a.o.data[t])throw new Error("ERROR");let l=Math.min(2048,a.o.data[t].length-n);const c=new Uint8Array(a.o.data[t].buffer,n,l);let s=c.findIndex((t=>0===t));o=-1!==s,o?(i+=(new TextDecoder).decode(c.slice(0,s)),a.pos=t*Fe+n+s+1):(i+=(new TextDecoder).decode(c),a.pos=t*Fe+n+c.length),e=a.pos}return i}}const Se=1024,Pe=512,qe=2,Oe=0,Ge=65536,ze=8192;async function Te(t,a,e){if("string"==typeof t&&(t={type:"file",fileName:t,cacheSize:a||Ge,pageSize:e||ze}),"file"==t.type)return await me(t.fileName,Se|Pe|qe,t.cacheSize,t.pageSize);if("mem"==t.type)return function(t){const a=t.initialSize||1<<20,e=new Ce;return e.o=t,e.o.data=new Uint8Array(a),e.allocSize=a,e.totalSize=0,e.readOnly=!1,e.pos=0,e}(t);if("bigMem"==t.type)return function(t){const a=t.initialSize||0,e=new ve;e.o=t;const o=a?Math.floor((a-1)/Fe)+1:0;e.o.data=[];for(let t=0;te)throw new Error("Version not supported");const s=await n.readULE32();let r=[];for(let t=0;t1)throw new Error(t.fileName+": Section Duplicated "+e);t.pos=a[e][0].p,t.readingSection=a[e][0]}async function De(t,a){if(void 0===t.readingSection)throw new Error("Not reading a section");if(!a&&t.pos-t.readingSection.p!=t.readingSection.size)throw new Error("Invalid section size reading");delete t.readingSection}async function $e(t,a,e,o){const i=new Uint8Array(e);fe.toRprLE(i,0,a,e),await t.write(i,o)}async function je(t,a,e){const o=await t.read(a,e);return fe.fromRprLE(o,0,a)}async function Ve(t,a,e,o,i){void 0===i&&(i=a[o][0].size);const n=t.pageSize;await Ne(t,a,o),await ke(e,o);for(let a=0;aa[e][0].size)throw new Error("Reading out of the range of the section");let n;return n=i<1<<30?new Uint8Array(i):new qa(i),await t.readToBuffer(n,0,i,a[e][0].p+o),n}async function He(t,a,e,o,i){const n=16*t.pageSize;if(await Ne(t,a,i),await Ne(e,o,i),a[i][0].size!=o[i][0].size)return!1;const l=a[i][0].size;for(let a=0;a=0)a=await _e();else{if(!(["BLS12381"].indexOf(e)>=0))throw new Error(`Curve not supported: ${t}`);a=await ge()}return a}var ao={exports:{}},eo=function t(a,e){if(!a){var o=new oo(e);throw Error.captureStackTrace&&Error.captureStackTrace(o,t),o}};class oo extends Error{}oo.prototype.name="AssertionError";var io={exports:{}};function no(t){return t.length}var lo={byteLength:no,toString:function(t){const a=t.byteLength;let e="";for(let o=0;o1&&61===t.charCodeAt(a-1)&&a--,3*a>>>2}so[45]=62,so[95]=63;var uo={byteLength:ro,toString:function(t){const a=t.byteLength;let e="";for(let o=0;o>2]+co[(3&t[o])<<4|t[o+1]>>4]+co[(15&t[o+1])<<2|t[o+2]>>6]+co[63&t[o+2]];return a%3==2?e=e.substring(0,e.length-1)+"=":a%3==1&&(e=e.substring(0,e.length-2)+"=="),e},write:function(t,a,e=0,o=ro(a)){const i=Math.min(o,t.byteLength-e);for(let e=0,o=0;o>4,t[o++]=(15&n)<<4|l>>2,t[o++]=(3&l)<<6|63&c}return i}};function _o(t){return t.length>>>1}var go={byteLength:_o,toString:function(t){const a=t.byteLength;t=new DataView(t.buffer,t.byteOffset,a);let e="",o=0;for(let i=a-a%4;o=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:void 0}function ho(t){let a=0;for(let e=0,o=t.length;e=55296&&i<=56319&&e+1=56320&&o<=57343){a+=4,e++;continue}}a+=i<=127?1:i<=2047?2:3}return a}let po,mo;if("undefined"!=typeof TextDecoder){const t=new TextDecoder;po=function(a){return t.decode(a)}}else po=function(t){const a=t.byteLength;let e="",o=0;for(;o0){let a=0;for(;a>o,o-=6;o>=0;)t[l++]=128|e>>o&63,o-=6;n+=e>=65536?2:1}return i};var Lo={byteLength:ho,toString:po,write:mo};function bo(t){return 2*t.length}var wo,yo,Ao={byteLength:bo,toString:function(t){const a=t.byteLength;let e="";for(let o=0;o>8,l=i%256;t[e+2*o]=l,t[e+2*o+1]=n}return i}};!function(t,a){const e=lo,o=uo,i=go,n=Lo,l=Ao,c=255===new Uint8Array(Uint16Array.of(255).buffer)[0];function s(t){switch(t){case"ascii":return e;case"base64":return o;case"hex":return i;case"utf8":case"utf-8":case void 0:return n;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return l;default:throw new Error(`Unknown encoding: ${t}`)}}function r(t){return t instanceof Uint8Array}function d(t,a,e){return"string"==typeof t?function(t,a){const e=s(a),o=new Uint8Array(e.byteLength(t));return e.write(o,t,0,o.byteLength),o}(t,a):Array.isArray(t)?function(t){const a=new Uint8Array(t.length);return a.set(t),a}(t):ArrayBuffer.isView(t)?function(t){const a=new Uint8Array(t.byteLength);return a.set(t),a}(t):function(t,a,e){return new Uint8Array(t,a,e)}(t,a,e)}function u(t,a,e,o,i){if(0===t.byteLength)return-1;if("string"==typeof e?(o=e,e=0):void 0===e?e=i?0:t.length-1:e<0&&(e+=t.byteLength),e>=t.byteLength){if(i)return-1;e=t.byteLength-1}else if(e<0){if(!i)return-1;e=0}if("string"==typeof a)a=d(a,o);else if("number"==typeof a)return a&=255,i?t.indexOf(a,e):t.lastIndexOf(a,e);if(0===a.byteLength)return-1;if(i){let o=-1;for(let i=e;it.byteLength&&(e=t.byteLength-a.byteLength);for(let o=e;o>=0;o--){let e=!0;for(let i=0;ii)return 1}return t.byteLength>a.byteLength?1:t.byteLengtht+a.byteLength),0));const e=new Uint8Array(a);return t.reduce(((t,a)=>(e.set(a,t),t+a.byteLength)),0),e},copy:function(t,a,e=0,o=0,i=t.byteLength){if(i>0&&i=t.byteLength)throw new RangeError("sourceStart is out of range");if(i<0)throw new RangeError("sourceEnd is out of range");e>=a.byteLength&&(e=a.byteLength),i>t.byteLength&&(i=t.byteLength),a.byteLength-e=i||o<=e?"":(e<0&&(e=0),o>i&&(o=i),(0!==e||o{for(var t=new Uint8Array(128),a=0;a<64;a++)t[a<26?a+65:a<52?a+71:a<62?a-4:4*a-205]=a;return a=>{for(var e=a.length,o=new Uint8Array(3*(e-("="==a[e-1])-("="==a[e-2]))/4|0),i=0,n=0;i>4,o[n++]=c<<4|s>>2,o[n++]=s<<6|r}return o}})(),a=((t,a)=>function(){return a||(0,t[Object.keys(t)[0]])((a={exports:{}}).exports,a),a.exports})({"wasm-binary:./blake2b.wat"(a,e){e.exports=t("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")}}),e=a(),o=WebAssembly.compile(e);return wo=async t=>(await WebAssembly.instantiate(await o,t)).exports}()().then((t=>{xo=t})),Bo=64,Eo=[];ao.exports=zo;var vo=ao.exports.BYTES_MIN=16,So=ao.exports.BYTES_MAX=64;ao.exports.BYTES=32;var Po=ao.exports.KEYBYTES_MIN=16,qo=ao.exports.KEYBYTES_MAX=64;ao.exports.KEYBYTES=32;var Oo=ao.exports.SALTBYTES=16,Go=ao.exports.PERSONALBYTES=16;function zo(t,a,e,o,i){if(!(this instanceof zo))return new zo(t,a,e,o,i);if(!xo)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");t||(t=32),!0!==i&&(Co(t>=vo,"digestLength must be at least "+vo+", was given "+t),Co(t<=So,"digestLength must be at most "+So+", was given "+t),null!=a&&(Co(a instanceof Uint8Array,"key must be Uint8Array or Buffer"),Co(a.length>=Po,"key must be at least "+Po+", was given "+a.length),Co(a.length<=qo,"key must be at least "+qo+", was given "+a.length)),null!=e&&(Co(e instanceof Uint8Array,"salt must be Uint8Array or Buffer"),Co(e.length===Oo,"salt must be exactly "+Oo+", was given "+e.length)),null!=o&&(Co(o instanceof Uint8Array,"personal must be Uint8Array or Buffer"),Co(o.length===Go,"personal must be exactly "+Go+", was given "+o.length))),Eo.length||(Eo.push(Bo),Bo+=216),this.digestLength=t,this.finalized=!1,this.pointer=Eo.pop(),this._memory=new Uint8Array(xo.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=a?a.length:0,this._memory[2]=1,this._memory[3]=1,e&&this._memory.set(e,32),o&&this._memory.set(o,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),xo.blake2b_init(this.pointer,this.digestLength),a&&(this.update(a),this._memory.fill(0,Bo,Bo+a.length),this._memory[this.pointer+200]=128)}function To(){}function Mo(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function Uo(t,a){const e=new DataView(t.buffer,t.byteOffset,t.byteLength);let o="";for(let t=0;t<4;t++){t>0&&(o+="\n"),o+="\t\t";for(let a=0;a<4;a++)a>0&&(o+=" "),o+=e.getUint32(16*t+4*a).toString(16).padStart(8,"0")}return a&&(o=a+"\n"+o),o}function Qo(t,a){if(t.byteLength!=a.byteLength)return!1;for(var e=new Int8Array(t),o=new Int8Array(a),i=0;i!=t.byteLength;i++)if(e[i]!=o[i])return!1;return!0}function ko(t){const a=t.getPartialHash(),e=ao.exports(64);return e.setPartialHash(a),e}async function Ro(t,a,e,o,i){if(t.G1.isZero(a))return!1;if(t.G1.isZero(e))return!1;if(t.G2.isZero(o))return!1;if(t.G2.isZero(i))return!1;return await t.pairingEq(a,i,t.G1.neg(e),o)}function No(t){let a=new Uint8Array(t);return void 0!==globalThis.crypto?globalThis.crypto.getRandomValues(a):U.randomFillSync(a),a}async function Do(t){if(void 0!==globalThis.crypto&&void 0!==globalThis.crypto.subtle){const a=await globalThis.crypto.subtle.digest("SHA-256",t.buffer);return new Uint8Array(a)}return U.createHash("sha256").update(t).digest()}function $o(t,a){return new DataView(t.buffer).getUint32(a,!1)}async function jo(t){for(;!t;)t=await window.prompt("Enter a random text. (Entropy): ","");const a=ao.exports(64);a.update(No(64));const e=new TextEncoder;a.update(e.encode(t));const o=a.digest(),i=[];for(let t=0;t<8;t++)i[t]=$o(o,4*t);return new M(i)}async function Vo(t,a){let e,o;a<32?(e=1<>>0,o=1):(e=4294967296,o=1<>>0);let i=t;for(let t=0;t{e[o]=Zo(t,a[o])})),e}return"bigint"==typeof a||void 0!==a.eq?a.toString(10):a}zo.prototype._realloc=function(t){xo.memory.grow(Math.max(0,Math.ceil(Math.abs(t-this._memory.length)/65536))),this._memory=new Uint8Array(xo.memory.buffer)},zo.prototype.update=function(t){return Co(!1===this.finalized,"Hash instance finalized"),Co(t instanceof Uint8Array,"input must be Uint8Array or Buffer"),Bo+t.length>this._memory.length&&this._realloc(Bo+t.length),this._memory.set(t,Bo),xo.blake2b_update(this.pointer,Bo,Bo+t.length),this},zo.prototype.digest=function(t){if(Co(!1===this.finalized,"Hash instance finalized"),this.finalized=!0,Eo.push(this.pointer),xo.blake2b_final(this.pointer),!t||"binary"===t)return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if("string"==typeof t)return Fo.toString(this._memory,t,this.pointer+128,this.pointer+128+this.digestLength);Co(t instanceof Uint8Array&&t.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var a=0;at()),t):t(new Error("WebAssembly not supported"))},zo.prototype.ready=zo.ready,zo.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)},zo.prototype.setPartialHash=function(t){this._memory.set(t,this.pointer)};const Wo=1,Yo=1,Jo=2,Xo=10,ti=3,ai=17,ei=2,oi=3,ii=4,ni=5,li=6,ci=7,si=8,ri=9,di=10,ui=11,_i=12,gi=13,fi=14,hi=15,pi=16,mi=17;async function Li(t,a){await ke(t,1),await t.writeULE32(1),await Re(t);const e=await Xe(a.q);await ke(t,2);const o=e.q,i=8*(Math.floor((fe.bitLength(o)-1)/64)+1),n=e.r,l=8*(Math.floor((fe.bitLength(n)-1)/64)+1);await t.writeULE32(i),await $e(t,o,i),await t.writeULE32(l),await $e(t,n,l),await t.writeULE32(a.nVars),await t.writeULE32(a.nPublic),await t.writeULE32(a.domainSize),await bi(t,e,a.vk_alpha_1),await bi(t,e,a.vk_beta_1),await wi(t,e,a.vk_beta_2),await wi(t,e,a.vk_gamma_2),await bi(t,e,a.vk_delta_1),await wi(t,e,a.vk_delta_2),await Re(t)}async function bi(t,a,e){const o=new Uint8Array(2*a.G1.F.n8);a.G1.toRprLEM(o,0,e),await t.write(o)}async function wi(t,a,e){const o=new Uint8Array(2*a.G2.F.n8);a.G2.toRprLEM(o,0,e),await t.write(o)}async function yi(t,a,e){const o=await t.read(2*a.G1.F.n8),i=a.G1.fromRprLEM(o,0);return e?a.G1.toObject(i):i}async function Ai(t,a,e){const o=await t.read(2*a.G2.F.n8),i=a.G2.fromRprLEM(o,0);return e?a.G2.toObject(i):i}async function Ci(t,a,e){await Ne(t,a,1);const o=await t.readULE32();if(await De(t),o===Yo)return await async function(t,a,e){const o={protocol:"groth16"};await Ne(t,a,2);const i=await t.readULE32();o.n8q=i,o.q=await je(t,i);const n=await t.readULE32();return o.n8r=n,o.r=await je(t,n),o.curve=await Xe(o.q),o.nVars=await t.readULE32(),o.nPublic=await t.readULE32(),o.domainSize=await t.readULE32(),o.power=Mo(o.domainSize),o.vk_alpha_1=await yi(t,o.curve,e),o.vk_beta_1=await yi(t,o.curve,e),o.vk_beta_2=await Ai(t,o.curve,e),o.vk_gamma_2=await Ai(t,o.curve,e),o.vk_delta_1=await yi(t,o.curve,e),o.vk_delta_2=await Ai(t,o.curve,e),await De(t),o}(t,a,e);if(o===Jo)return await async function(t,a,e){const o={protocol:"plonk"};await Ne(t,a,2);const i=await t.readULE32();o.n8q=i,o.q=await je(t,i);const n=await t.readULE32();return o.n8r=n,o.r=await je(t,n),o.curve=await Xe(o.q),o.nVars=await t.readULE32(),o.nPublic=await t.readULE32(),o.domainSize=await t.readULE32(),o.power=Mo(o.domainSize),o.nAdditions=await t.readULE32(),o.nConstraints=await t.readULE32(),o.k1=await t.read(n),o.k2=await t.read(n),o.Qm=await yi(t,o.curve,e),o.Ql=await yi(t,o.curve,e),o.Qr=await yi(t,o.curve,e),o.Qo=await yi(t,o.curve,e),o.Qc=await yi(t,o.curve,e),o.S1=await yi(t,o.curve,e),o.S2=await yi(t,o.curve,e),o.S3=await yi(t,o.curve,e),o.X_2=await Ai(t,o.curve,e),await De(t),o}(t,a,e);if(o===Xo)return await async function(t,a,e){const o={protocol:"fflonk"};o.protocolId=Xo,await Ne(t,a,ei);const i=await t.readULE32();o.n8q=i,o.q=await je(t,i),o.curve=await Xe(o.q);const n=await t.readULE32();return o.n8r=n,o.r=await je(t,n),o.nVars=await t.readULE32(),o.nPublic=await t.readULE32(),o.domainSize=await t.readULE32(),o.power=Mo(o.domainSize),o.nAdditions=await t.readULE32(),o.nConstraints=await t.readULE32(),o.k1=await t.read(n),o.k2=await t.read(n),o.w3=await t.read(n),o.w4=await t.read(n),o.w8=await t.read(n),o.wr=await t.read(n),o.X_2=await Ai(t,o.curve,e),o.C0=await yi(t,o.curve,e),await De(t),o}(t,a,e);throw new Error("Protocol not supported: ")}async function Fi(t,a,e){const o={delta:{}};o.deltaAfter=await yi(t,a,e),o.delta.g1_s=await yi(t,a,e),o.delta.g1_sx=await yi(t,a,e),o.delta.g2_spx=await Ai(t,a,e),o.transcript=await t.read(64),o.type=await t.readULE32();const i=await t.readULE32(),n=t.pos;let l=0;for(;t.pos-n0){const a=new Uint8Array(o);await t.writeULE32(a.byteLength),await t.write(a)}else await t.writeULE32(0)}async function Bi(t,a,e){await ke(t,10),await t.write(e.csHash),await t.writeULE32(e.contributions.length);for(let o=0;o0;)e.unshift(0),n--;return e}const Ti=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];function Mi(t,a){return a&&10!=a?16==a?"0x"==t.slice(0,2)?BigInt(t):BigInt("0x"+t):void 0:BigInt(t)}const Ui=Mi;function Qi(t){const a=t.toString(16);return 4*(a.length-1)+Ti[parseInt(a[0],16)]}function ki(t){return!t}function Ri(t,a){return BigInt(t)<>BigInt(a)}const Di=Ri,$i=Ni;function ji(t){return(BigInt(t)&BigInt(1))==BigInt(1)}function Vi(t){let a=BigInt(t);const e=[];for(;a;)a&BigInt(1)?e.push(1):e.push(0),a>>=BigInt(1);return e}function Ki(t){if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(t)}function Hi(t,a){return BigInt(t)-BigInt(a)}function Zi(t,a){return BigInt(t)**BigInt(a)}function Wi(t,a){return BigInt(t)/BigInt(a)}function Yi(t,a){return BigInt(t)%BigInt(a)}function Ji(t,a){return BigInt(t)==BigInt(a)}function Xi(t,a){return BigInt(t)&BigInt(a)}function tn(t,a,e,o){const i="0000000"+e.toString(16),n=new Uint32Array(t.buffer,a,o/4),l=1+(4*(i.length-7)-1>>5);for(let t=0;t>5);for(let t=0;ti[i.length-a-1]=t.toString(16).padStart(8,"0"))),Mi(i.join(""),16)}function on(t,a,e){e=e||t.byteLength,a=a||0;const o=new DataView(t.buffer,t.byteOffset+a,e),i=new Array(e/4);for(let t=0;t>=BigInt(1)}return e},bits:Vi,toNumber:Ki,toArray:function(t,a){const e=[];let o=BigInt(t);for(a=BigInt(a);o;)e.unshift(Number(o%a)),o/=a;return e},add:function(t,a){return BigInt(t)+BigInt(a)},sub:Hi,neg:function(t){return-BigInt(t)},mul:function(t,a){return BigInt(t)*BigInt(a)},square:function(t){return BigInt(t)*BigInt(t)},pow:Zi,exp:function(t,a){return BigInt(t)**BigInt(a)},abs:function(t){return BigInt(t)>=0?BigInt(t):-BigInt(t)},div:Wi,mod:Yi,eq:Ji,neq:function(t,a){return BigInt(t)!=BigInt(a)},lt:function(t,a){return BigInt(t)BigInt(a)},leq:function(t,a){return BigInt(t)<=BigInt(a)},geq:function(t,a){return BigInt(t)>=BigInt(a)},band:Xi,bor:function(t,a){return BigInt(t)|BigInt(a)},bxor:function(t,a){return BigInt(t)^BigInt(a)},land:function(t,a){return BigInt(t)&&BigInt(a)},lor:function(t,a){return BigInt(t)||BigInt(a)},lnot:function(t){return!BigInt(t)},toRprLE:tn,toRprBE:an,fromRprLE:en,fromRprBE:on,toString:function(t,a){return t.toString(a)},toLEBuff:function(t){const a=new Uint8Array(Math.floor((Qi(t)-1)/8)+1);return tn(a,0,t,a.byteLength),a},zero:nn,one:ln});function sn(t,a,e){if(ki(e))return t.one;const o=Vi(e);if(0==o.length)return t.one;let i=a;for(let e=o.length-2;e>=0;e--)i=t.square(i),o[e]&&(i=t.mul(i,a));return i}function rn(t){if(t.m%2==1)if(Ji(Yi(t.p,4),1))if(Ji(Yi(t.p,8),1))if(Ji(Yi(t.p,16),1))!function(t){t.sqrt_q=Zi(t.p,t.m),t.sqrt_s=0,t.sqrt_t=Hi(t.sqrt_q,1);for(;!ji(t.sqrt_t);)t.sqrt_s=t.sqrt_s+1,t.sqrt_t=Wi(t.sqrt_t,2);let a=t.one;for(;t.eq(a,t.one);){const e=t.random();t.sqrt_z=t.pow(e,t.sqrt_t),a=t.pow(t.sqrt_z,2**(t.sqrt_s-1))}t.sqrt_tm1d2=Wi(Hi(t.sqrt_t,1),2),t.sqrt=function(t){const a=this;if(a.isZero(t))return a.zero;let e=a.pow(t,a.sqrt_tm1d2);const o=a.pow(a.mul(a.square(e),t),2**(a.sqrt_s-1));if(a.eq(o,a.negone))return null;let i=a.sqrt_s,n=a.mul(t,e),l=a.mul(n,e),c=a.sqrt_z;for(;!a.eq(l,a.one);){let t=a.square(l),o=1;for(;!a.eq(t,a.one);)t=a.square(t),o++;e=c;for(let t=0;t>>0;return a}class un{constructor(t,a,e){this.F=a,this.G=t,this.opMulGF=e;let o=a.sqrt_t||a.t,i=a.sqrt_s||a.s,n=a.one;for(;a.eq(a.pow(n,a.half),a.one);)n=a.add(n,a.one);this.w=new Array(i+1),this.wi=new Array(i+1),this.w[i]=this.F.pow(n,o),this.wi[i]=this.F.inv(this.w[i]);let l=i-1;for(;l>=0;)this.w[l]=this.F.square(this.w[l+1]),this.wi[l]=this.F.square(this.wi[l+1]),l--;this.roots=[],this._setRoots(Math.min(i,15))}_setRoots(t){for(let a=t;a>=0&&!this.roots[a];a--){let t=this.F.one;const e=1<>1,c=gn(t,a,e-1,o,2*i),s=gn(t,a,e-1,o+i,2*i),r=new Array(n);for(let a=0;a>this.one,this.bitLength=Qi(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let e=this.pow(this.nqr,a);for(;!this.eq(e,this.negone);)this.nqr=this.nqr+this.one,e=this.pow(this.nqr,a);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),rn(this),this.FFT=new un(this,this,this.mul.bind(this)),this.fft=this.FFT.fft.bind(this.FFT),this.ifft=this.FFT.ifft.bind(this.FFT),this.w=this.FFT.w,this.wi=this.FFT.wi,this.shift=this.square(this.nqr),this.k=this.exp(this.nqr,2**this.s)}e(t,a){let e;if(a?16==a&&(e=BigInt("0x"+t)):e=BigInt(t),e<0){let t=-e;return t>=this.p&&(t%=this.p),this.p-t}return e>=this.p?e%this.p:e}add(t,a){const e=t+a;return e>=this.p?e-this.p:e}sub(t,a){return t>=a?t-a:this.p-a+t}neg(t){return t?this.p-t:t}mul(t,a){return t*a%this.p}mulScalar(t,a){return t*this.e(a)%this.p}square(t){return t*t%this.p}eq(t,a){return t==a}neq(t,a){return t!=a}lt(t,a){return(t>this.half?t-this.p:t)<(a>this.half?a-this.p:a)}gt(t,a){return(t>this.half?t-this.p:t)>(a>this.half?a-this.p:a)}leq(t,a){return(t>this.half?t-this.p:t)<=(a>this.half?a-this.p:a)}geq(t,a){return(t>this.half?t-this.p:t)>=(a>this.half?a-this.p:a)}div(t,a){return this.mul(t,this.inv(a))}idiv(t,a){if(!a)throw new Error("Division by zero");return t/a}inv(t){if(!t)throw new Error("Division by zero");let a=this.zero,e=this.p,o=this.one,i=t%this.p;for(;i;){let t=e/i;[a,o]=[o,a-t*o],[e,i]=[i,e-t*i]}return a=this.p?e-this.p:e}bor(t,a){const e=(t|a)&this.mask;return e>=this.p?e-this.p:e}bxor(t,a){const e=(t^a)&this.mask;return e>=this.p?e-this.p:e}bnot(t){const a=t^this.mask;return a>=this.p?a-this.p:a}shl(t,a){if(Number(a)=this.p?e-this.p:e}{const e=this.p-a;return Number(e)>e:this.zero}}shr(t,a){if(Number(a)>a;{const e=this.p-a;if(Number(e)=this.p?a-this.p:a}return 0}}land(t,a){return t&&a?this.one:this.zero}lor(t,a){return t||a?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let a=this.s,e=this.nqr_to_t,o=this.pow(t,this.t),i=this.pow(t,this.add(this.t,this.one)>>this.one);for(;o!=this.one;){let t=this.square(o),n=1;for(;t!=this.one;)n++,t=this.square(t);let l=e;for(let t=0;tthis.p>>this.one&&(i=this.neg(i)),i}normalize(t,a){if((t=BigInt(t,a))<0){let a=-t;return a>=this.p&&(a%=this.p),this.p-a}return t>=this.p?t%this.p:t}random(){const t=2*this.bitLength/8;let a=this.zero;for(let e=0;ethis.half&&10==a){e="-"+(this.p-t).toString(a)}else e=t.toString(a);return e}isZero(t){return t==this.zero}fromRng(t){let a;do{a=this.zero;for(let e=0;e=this.p);return a=a*this.Ri%this.p,a}fft(t){return this.FFT.fft(t)}ifft(t){return this.FFT.ifft(t)}toRprLE(t,a,e){tn(t,a,e,8*this.n64)}toRprBE(t,a,e){an(t,a,e,8*this.n64)}toRprBEM(t,a,e){return this.toRprBE(t,a,this.mul(this.R,e))}toRprLEM(t,a,e){return this.toRprLE(t,a,this.mul(this.R,e))}fromRprLE(t,a){return en(t,a,this.n8)}fromRprBE(t,a){return on(t,a,this.n8)}fromRprLEM(t,a){return this.mul(this.fromRprLE(t,a),this.Ri)}fromRprBEM(t,a){return this.mul(this.fromRprBE(t,a),this.Ri)}toObject(t){return t}}!function(t){globalThis.btoa(t)}("("+function(t){const a=32767;let e,o;async function i(t){const i=new Uint8Array(t.code),n=await WebAssembly.compile(i);o=new WebAssembly.Memory({initial:t.init,maximum:a}),e=await WebAssembly.instantiate(n,{env:{memory:o}})}function n(t){const e=new Uint32Array(o.buffer,0,1);for(;3&e[0];)e[0]++;const i=e[0];if(e[0]+=t,e[0]+t>o.buffer.byteLength){const i=o.buffer.byteLength/65536;let n=Math.floor((e[0]+t)/65536)+1;n>a&&(n=a),o.grow(n-i)}return i}function l(t){const a=n(t.byteLength);return s(a,t),a}function c(t,a){const e=new Uint8Array(o.buffer);return new Uint8Array(e.buffer,e.byteOffset+t,a)}function s(t,a){new Uint8Array(o.buffer).set(new Uint8Array(a),t)}function r(t){if("INIT"==t[0].cmd)return i(t[0]);const a={vars:[],out:[]},r=new Uint32Array(o.buffer,0,1)[0];for(let o=0;o=2&&(d>=1||u>=7)){""!==s&&(s+=" ");const t=hn.fromArray(a,4294967296).toString();s+=t}else console.log(hn.fromArray(a,4294967296))},error:function(t,e,o,i,n,c){let s;throw s=7==t?h(e)+" "+l.getFr(i).toString()+" != "+l.getFr(n).toString()+" "+h(c):9==t?h(e)+" "+l.getFr(i).toString()+" "+h(n):5==t&&a.sym?h(e)+" "+a.sym.labelIdx2Name[n]:h(e)+" "+o+" "+i+" "+n+" "+c,console.log("ERROR: ",t,s),new Error(s)},log:function(t){console.log(l.getFr(t).toString())},logGetSignal:function(t,e){a.logGetSignal&&a.logGetSignal(t,l.getFr(e))},logSetSignal:function(t,e){a.logSetSignal&&a.logSetSignal(t,l.getFr(e))},logStartComponent:function(t){a.logStartComponent&&a.logStartComponent(t)},logFinishComponent:function(t){a.logFinishComponent&&a.logFinishComponent(t)}}});"function"==typeof _.exports.getVersion&&(r=_.exports.getVersion()),"function"==typeof _.exports.getMinorVersion&&(d=_.exports.getMinorVersion()),"function"==typeof _.exports.getPatchVersion&&(u=_.exports.getPatchVersion());const g=a&&(a.sanityCheck||a.logGetSignal||a.logSetSignal||a.logStartComponent||a.logFinishComponent);return l=2===r?new Ln(_,g):new mn(e,_,g),l;function f(){for(var t="",a=_.exports.getMessageChar();0!=a;)t+=String.fromCharCode(a),a=_.exports.getMessageChar();return t}function h(t){const a=new Uint8Array(e.buffer),o=[];for(let e=0;a[t+e]>0;e++)o.push(a[t+e]);return String.fromCharCode.apply(null,o)}}class mn{constructor(t,a,e){this.memory=t,this.i32=new Uint32Array(t.buffer),this.instance=a,this.n32=(this.instance.exports.getFrLen()>>2)-2;const o=this.instance.exports.getPRawPrime(),i=new Array(this.n32);for(let t=0;t>2)+t];this.prime=hn.fromArray(i,4294967296),this.Fr=new fn(this.prime),this.mask32=hn.fromString("FFFFFFFF",16),this.NVars=this.instance.exports.getNVars(),this.n64=Math.floor((this.Fr.bitLength-1)/64)+1,this.R=this.Fr.e(hn.shiftLeft(1,64*this.n64)),this.RInv=this.Fr.inv(this.R),this.sanityCheck=e}circom_version(){return 1}async _doCalculateWitness(t,a){this.instance.exports.init(this.sanityCheck||a?1:0);const e=this.allocInt(),o=this.allocFr();Object.keys(t).forEach((a=>{const i=Gi(a),n=parseInt(i.slice(0,8),16),l=parseInt(i.slice(8,16),16);try{this.instance.exports.getSignalOffset32(e,0,n,l)}catch(t){throw new Error(`Signal ${a} is not an input of the circuit.`)}const c=this.getInt(e),s=Oi(t[a]);for(let t=0;t>2]}setInt(t,a){this.i32[t>>2]=a}getFr(t){const a=this,e=t>>2;if(2147483648&a.i32[e+1]){const t=new Array(a.n32);for(let o=0;o>2]=i,void(e.i32[1+(t>>2)]=0)}e.i32[t>>2]=0,e.i32[1+(t>>2)]=2147483648;const n=hn.toArray(a,4294967296);for(let a=0;a>2)+a]=o>=0?n[o]:0}}}class Ln{constructor(t,a){this.instance=t,this.version=this.instance.exports.getVersion(),this.n32=this.instance.exports.getFieldNumLen32(),this.instance.exports.getRawPrime();const e=new Array(this.n32);for(let t=0;t{const e=Gi(a),i=parseInt(e.slice(0,8),16),n=parseInt(e.slice(8,16),16),l=Oi(t[a]);for(let t=0;t1)throw new Error(t.fileName+": File has more than one header");t.pos=a[1][0].p;const e=await t.readULE32(),o=await t.read(e),i=fe.fromRprLE(o),n=await Xe(i);if(8*n.F1.n64!=e)throw new Error(t.fileName+": Invalid size");const l=await t.readULE32(),c=await t.readULE32();if(t.pos-a[1][0].p!=a[1][0].size)throw new Error("Invalid PTau header size");return{curve:n,power:l,ceremonyPower:c}}function qn(t,a,e,o){const i={tau:{},alpha:{},beta:{}};return i.tau.g1_s=n(),i.tau.g1_sx=n(),i.alpha.g1_s=n(),i.alpha.g1_sx=n(),i.beta.g1_s=n(),i.beta.g1_sx=n(),i.tau.g2_spx=l(),i.alpha.g2_spx=l(),i.beta.g2_spx=l(),i;function n(){let i;return i=o?e.G1.fromRprLEM(t,a):e.G1.fromRprUncompressed(t,a),a+=2*e.G1.F.n8,i}function l(){let i;return i=o?e.G2.fromRprLEM(t,a):e.G2.fromRprUncompressed(t,a),a+=2*e.G2.F.n8,i}}function On(t,a,e,o,i){async function n(o){i?e.G1.toRprLEM(t,a,o):e.G1.toRprUncompressed(t,a,o),a+=2*e.F1.n8}async function l(o){i?e.G2.toRprLEM(t,a,o):e.G2.toRprUncompressed(t,a,o),a+=2*e.F2.n8}return n(o.tau.g1_s),n(o.tau.g1_sx),n(o.alpha.g1_s),n(o.alpha.g1_sx),n(o.beta.g1_s),n(o.beta.g1_sx),l(o.tau.g2_spx),l(o.alpha.g2_spx),l(o.beta.g2_spx),t}async function Gn(t,a){const e={};e.tauG1=await s(),e.tauG2=await r(),e.alphaG1=await s(),e.betaG1=await s(),e.betaG2=await r(),e.key=await async function(t,a,e){return qn(await t.read(2*a.F1.n8*6+2*a.F2.n8*3),0,a,e)}(t,a,!0),e.partialHash=await t.read(216),e.nextChallenge=await t.read(64),e.type=await t.readULE32();const o=new Uint8Array(2*a.G1.F.n8*6+2*a.G2.F.n8*3);On(o,0,a,e.key,!1);const i=ao.exports(64);i.setPartialHash(e.partialHash),i.update(o),e.responseHash=i.digest();const n=await t.readULE32(),l=t.pos;let c=0;for(;t.pos-l1)throw new Error(t.fileName+": File has more than one contributions section");t.pos=e[7][0].p;const o=await t.readULE32(),i=[];for(let e=0;e0){const a=new Uint8Array(n);await t.writeULE32(a.byteLength),await t.write(a)}else await t.writeULE32(0);async function l(e){a.G1.toRprLEM(o,0,e),await t.write(o)}async function c(e){a.G2.toRprLEM(i,0,e),await t.write(i)}}async function Mn(t,a,e){await t.writeULE32(7);const o=t.pos;await t.writeULE64(0),await t.writeULE32(e.length);for(let o=0;o0?u[u.length-1].nextChallenge:Un(r,d,n);const b=await Qe(e,"ptau",1,i?7:2);await Sn(b,r,d);const w=await m.read(64);if(Qo(l,L)&&(L=w,u[u.length-1].nextChallenge=L),!Qo(w,L))throw new Error("Wrong contribution. this contribution is not based on the previus hash");const y=new ao.exports(64);y.update(w);const A=[];let C;C=await I(m,b,"G1",2,2**d*2-1,[1],"tauG1"),_.tauG1=C[0],C=await I(m,b,"G2",3,2**d,[1],"tauG2"),_.tauG2=C[0],C=await I(m,b,"G1",4,2**d,[0],"alphaG1"),_.alphaG1=C[0],C=await I(m,b,"G1",5,2**d,[0],"betaG1"),_.betaG1=C[0],C=await I(m,b,"G2",6,1,[0],"betaG2"),_.betaG2=C[0],_.partialHash=y.getPartialHash();const F=await m.read(2*r.F1.n8*6+2*r.F2.n8*3);_.key=qn(F,0,r,!1),y.update(new Uint8Array(F));const x=y.digest();if(n&&n.info(Uo(x,"Contribution Response Hash imported: ")),i){const t=new ao.exports(64);t.update(x),await B(t,b,"G1",2,2**d*2-1,"tauG1",n),await B(t,b,"G2",3,2**d,"tauG2",n),await B(t,b,"G1",4,2**d,"alphaTauG1",n),await B(t,b,"G1",5,2**d,"betaTauG1",n),await B(t,b,"G2",6,1,"betaG2",n),_.nextChallenge=t.digest(),n&&n.info(Uo(_.nextChallenge,"Next Challenge Hash: "))}else _.nextChallenge=l;return u.push(_),await Mn(b,r,u),await m.close(),await b.close(),await c.close(),_.nextChallenge;async function I(t,a,e,o,l,c,s){return i?await async function(t,a,e,o,i,l,c){const s=r[e],d=s.F.n8,u=2*s.F.n8,_=[];await ke(a,o);const g=Math.floor((1<<24)/u);A[o]=a.pos;for(let e=0;e=e&&a=a&&i1?s[s.length-2]:r;const u=s[s.length-1];if(a&&a.debug("Validating contribution #"+s[s.length-1].id),!await Rn(n,u,d,a))return!1;const _=ao.exports(64);_.update(u.responseHash),a&&a.debug("Verifying powers in tau*G1 section");const g=await w(2,"G1","tauG1",2**l*2-1,[0,1],a);if(e=await kn(n,g.R1,g.R2,n.G2.g,u.tauG2),!0!==e)return a&&a.error("tauG1 section. Powers do not match"),!1;if(!n.G1.eq(n.G1.g,g.singularPoints[0]))return a&&a.error("First element of tau*G1 section must be the generator"),!1;if(!n.G1.eq(u.tauG1,g.singularPoints[1]))return a&&a.error("Second element of tau*G1 section does not match the one in the contribution section"),!1;a&&a.debug("Verifying powers in tau*G2 section");const f=await w(3,"G2","tauG2",2**l,[0,1],a);if(e=await kn(n,n.G1.g,u.tauG1,f.R1,f.R2),!0!==e)return a&&a.error("tauG2 section. Powers do not match"),!1;if(!n.G2.eq(n.G2.g,f.singularPoints[0]))return a&&a.error("First element of tau*G2 section must be the generator"),!1;if(!n.G2.eq(u.tauG2,f.singularPoints[1]))return a&&a.error("Second element of tau*G2 section does not match the one in the contribution section"),!1;a&&a.debug("Verifying powers in alpha*tau*G1 section");const h=await w(4,"G1","alphatauG1",2**l,[0],a);if(e=await kn(n,h.R1,h.R2,n.G2.g,u.tauG2),!0!==e)return a&&a.error("alphaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.alphaG1,h.singularPoints[0]))return a&&a.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"),!1;a&&a.debug("Verifying powers in beta*tau*G1 section");const p=await w(5,"G1","betatauG1",2**l,[0],a);if(e=await kn(n,p.R1,p.R2,n.G2.g,u.tauG2),!0!==e)return a&&a.error("betaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.betaG1,p.singularPoints[0]))return a&&a.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"),!1;const m=await async function(t){const a=n.G2,e=2*a.F.n8,l=new Uint8Array(e);if(!i[6])throw t.error("File has no BetaG2 section"),new Error("File has no BetaG2 section");if(i[6].length>1)throw t.error("File has no BetaG2 section"),new Error("File has more than one GetaG2 section");o.pos=i[6][0].p;const c=await o.read(e),s=a.fromRprLEM(c);return a.toRprUncompressed(l,0,s),_.update(l),s}(a);if(!n.G2.eq(u.betaG2,m))return a&&a.error("betaG2 element in betaG2 section does not match the one in the contribution section"),!1;const L=_.digest();if(l==c&&!Qo(L,u.nextChallenge))return a&&a.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"),!1;a&&a.info(Uo(L,"Next challenge hash: ")),b(u,d);for(let t=s.length-2;t>=0;t--){const e=s[t],o=t>0?s[t-1]:r;if(!await Rn(n,e,o,a))return!1;b(e,o)}if(a&&a.info("-----------------------------------------------------"),i[12]&&i[13]&&i[14]&&i[15]){let t;if(t=await y("G1",2,12,"tauG1",a),!t)return!1;if(t=await y("G2",3,13,"tauG2",a),!t)return!1;if(t=await y("G1",4,14,"alphaTauG1",a),!t)return!1;if(t=await y("G1",5,15,"betaTauG1",a),!t)return!1}else a&&a.warn('this file does not contain phase2 precalculated values. Please run: \n snarkjs "powersoftau preparephase2" to prepare this file to be used in the phase2 ceremony.');return await o.close(),a&&a.info("Powers of Tau Ok!"),!0;function b(t,e){if(!a)return;a.info("-----------------------------------------------------"),a.info(`Contribution #${t.id}: ${t.name||""}`),a.info(Uo(t.nextChallenge,"Next Challenge: "));const o=new Uint8Array(2*n.G1.F.n8*6+2*n.G2.F.n8*3);On(o,0,n,t.key,!1);const i=ao.exports(64);i.setPartialHash(t.partialHash),i.update(o);const l=i.digest();a.info(Uo(l,"Response Hash:")),a.info(Uo(e.nextChallenge,"Response Hash:")),1==t.type&&(a.info(`Beacon generator: ${Ho(t.beaconHash)}`),a.info(`Beacon iterations Exp: ${t.numIterationsExp}`))}async function w(t,a,e,l,c,s){const r=n[a],d=2*r.F.n8;await Ne(o,i,t);const u=[];let g=r.zero,f=r.zero,h=r.zero;for(let t=0;t0){const t=r.fromRprLEM(i,0),a=$o(No(4),0);g=r.add(g,r.timesScalar(h,a)),f=r.add(f,r.timesScalar(t,a))}const m=await r.multiExpAffine(i.slice(0,(a-1)*d),p),L=await r.multiExpAffine(i.slice(d),p);g=r.add(g,m),f=r.add(f,L),h=r.fromRprLEM(i,(a-1)*d);for(let e=0;e=t&&o1;)r/=2,d+=1;if(2**d!=s)throw new Error("Invalid file size");i&&i.debug("Power to tau size: "+d);const u=await jo(o),_=await Te(e),g=ao.exports(64);for(let t=0;t{i.debug(a+".g1_s: "+t.G1.toString(p[a].g1_s,16)),i.debug(a+".g1_sx: "+t.G1.toString(p[a].g1_sx,16)),i.debug(a+".g2_sp: "+t.G2.toString(p[a].g2_sp,16)),i.debug(a+".g2_spx: "+t.G2.toString(p[a].g2_spx,16)),i.debug("")}));const m=ao.exports(64);await _.write(h),m.update(h),await Dn(n,_,m,t,"G1",2**d*2-1,t.Fr.one,p.tau.prvKey,"COMPRESSED","tauG1",i),await Dn(n,_,m,t,"G2",2**d,t.Fr.one,p.tau.prvKey,"COMPRESSED","tauG2",i),await Dn(n,_,m,t,"G1",2**d,p.alpha.prvKey,p.tau.prvKey,"COMPRESSED","alphaTauG1",i),await Dn(n,_,m,t,"G1",2**d,p.beta.prvKey,p.tau.prvKey,"COMPRESSED","betaTauG1",i),await Dn(n,_,m,t,"G2",1,p.beta.prvKey,p.tau.prvKey,"COMPRESSED","betaTauG2",i);const L=new Uint8Array(2*t.F1.n8*6+2*t.F2.n8*3);On(L,0,t,p,!1),await _.write(L),m.update(L);const b=m.digest();i&&i.info(Uo(b,"Contribution Response Hash: ")),await _.close(),await n.close()},beacon:async function(t,a,e,o,i,n){const l=Ko(o);if(0==l.byteLength||2*l.byteLength!=o.length)return n&&n.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"),!1;if(l.length>=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((i=parseInt(i))<10||i>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;await ao.exports.ready();const{fd:c,sections:s}=await Ue(t,"ptau",1),{curve:r,power:d,ceremonyPower:u}=await Pn(c,s);if(d!=u)return n&&n.error("This file has been reduced. You cannot contribute into a reduced file."),!1;s[12]&&n&&n.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again.");const _=await zn(c,r,s),g={name:e,type:1,numIterationsExp:i,beaconHash:l};let f;f=_.length>0?_[_.length-1].nextChallenge:Un(r,d,n),g.key=await Qn(r,f,l,i);const h=new ao.exports(64);h.update(f);const p=await Qe(a,"ptau",1,7);await Sn(p,r,d);const m=[];let L;L=await A(2,"G1",2**d*2-1,r.Fr.e(1),g.key.tau.prvKey,"tauG1",n),g.tauG1=L[1],L=await A(3,"G2",2**d,r.Fr.e(1),g.key.tau.prvKey,"tauG2",n),g.tauG2=L[1],L=await A(4,"G1",2**d,g.key.alpha.prvKey,g.key.tau.prvKey,"alphaTauG1",n),g.alphaG1=L[0],L=await A(5,"G1",2**d,g.key.beta.prvKey,g.key.tau.prvKey,"betaTauG1",n),g.betaG1=L[0],L=await A(6,"G2",1,g.key.beta.prvKey,g.key.tau.prvKey,"betaTauG2",n),g.betaG2=L[0],g.partialHash=h.getPartialHash();const b=new Uint8Array(2*r.F1.n8*6+2*r.F2.n8*3);On(b,0,r,g.key,!1),h.update(new Uint8Array(b));const w=h.digest();n&&n.info(Uo(w,"Contribution Response Hash imported: "));const y=new ao.exports(64);return y.update(w),await C(p,"G1",2,2**d*2-1,"tauG1",n),await C(p,"G2",3,2**d,"tauG2",n),await C(p,"G1",4,2**d,"alphaTauG1",n),await C(p,"G1",5,2**d,"betaTauG1",n),await C(p,"G2",6,1,"betaG2",n),g.nextChallenge=y.digest(),n&&n.info(Uo(g.nextChallenge,"Next Challenge Hash: ")),_.push(g),await Mn(p,r,_),await c.close(),await p.close(),w;async function A(t,a,e,o,i,n,l){const d=[];c.pos=s[t][0].p,await ke(p,t),m[t]=p.pos;const u=r[a],_=2*u.F.n8,g=Math.floor((1<<20)/_);let f=o;for(let t=0;t0?d[d.length-1].nextChallenge:Un(c,s,i),u.key=vn(c,_,g);const f=new ao.exports(64);f.update(_);const h=await Qe(a,"ptau",1,7);await Sn(h,c,s);const p=[];let m;m=await y(2,"G1",2**s*2-1,c.Fr.e(1),u.key.tau.prvKey,"tauG1"),u.tauG1=m[1],m=await y(3,"G2",2**s,c.Fr.e(1),u.key.tau.prvKey,"tauG2"),u.tauG2=m[1],m=await y(4,"G1",2**s,u.key.alpha.prvKey,u.key.tau.prvKey,"alphaTauG1"),u.alphaG1=m[0],m=await y(5,"G1",2**s,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG1"),u.betaG1=m[0],m=await y(6,"G2",1,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG2"),u.betaG2=m[0],u.partialHash=f.getPartialHash();const L=new Uint8Array(2*c.F1.n8*6+2*c.F2.n8*3);On(L,0,c,u.key,!1),f.update(new Uint8Array(L));const b=f.digest();i&&i.info(Uo(b,"Contribution Response Hash imported: "));const w=new ao.exports(64);return w.update(b),await A(h,"G1",2,2**s*2-1,"tauG1"),await A(h,"G2",3,2**s,"tauG2"),await A(h,"G1",4,2**s,"alphaTauG1"),await A(h,"G1",5,2**s,"betaTauG1"),await A(h,"G2",6,1,"betaG2"),u.nextChallenge=w.digest(),i&&i.info(Uo(u.nextChallenge,"Next Challenge Hash: ")),d.push(u),await Mn(h,c,d),await n.close(),await h.close(),b;async function y(t,a,e,o,s,r){const d=[];n.pos=l[t][0].p,await ke(h,t),p[t]=h.pos;const u=c[a],_=2*u.F.n8,g=Math.floor((1<<20)/_);let m=o;for(let t=0;t>BigInt(a)}function Yn(t){return(BigInt(t)&BigInt(1))==BigInt(1)}function Jn(t){if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(t)}function Xn(t,a){return BigInt(t)+BigInt(a)}function tl(t,a){return BigInt(t)-BigInt(a)}function al(t,a){return BigInt(t)**BigInt(a)}function el(t,a){return BigInt(t)/BigInt(a)}function ol(t,a){return BigInt(t)%BigInt(a)}function il(t,a){return BigInt(t)==BigInt(a)}function nl(t,a){return BigInt(t)>BigInt(a)}function ll(t,a){return BigInt(t)&BigInt(a)}function cl(t,a,e,o){const i="0000000"+e.toString(16),n=new Uint32Array(t.buffer,a,o/4),l=1+(4*(i.length-7)-1>>5);for(let t=0;ti[i.length-a-1]=t.toString(16).padStart(8,"0"))),Vn(i.join(""),16)}function rl(t,a){return t.toString(a)}function dl(t){const a=new Uint8Array(Math.floor((Hn(t)-1)/8)+1);return cl(a,0,t,a.byteLength),a}const ul=Kn(0),_l=Kn(1);function gl(t,a,e){if(!e)return t.one;const o=function(t){let a=BigInt(t);const e=[];for(;a;)a&BigInt(1)?e.push(1):e.push(0),a>>=BigInt(1);return e}(e);if(0==o.length)return t.one;let i=a;for(let e=o.length-2;e>=0;e--)i=t.square(i),o[e]&&(i=t.mul(i,a));return i}function fl(t){if(t.m%2==1)if(il(ol(t.p,4),1))if(il(ol(t.p,8),1))if(il(ol(t.p,16),1))!function(t){t.sqrt_q=al(t.p,t.m),t.sqrt_s=0,t.sqrt_t=tl(t.sqrt_q,1);for(;!Yn(t.sqrt_t);)t.sqrt_s=t.sqrt_s+1,t.sqrt_t=el(t.sqrt_t,2);let a=t.one;for(;t.eq(a,t.one);){const e=t.random();t.sqrt_z=t.pow(e,t.sqrt_t),a=t.pow(t.sqrt_z,2**(t.sqrt_s-1))}t.sqrt_tm1d2=el(tl(t.sqrt_t,1),2),t.sqrt=function(t){const a=this;if(a.isZero(t))return a.zero;let e=a.pow(t,a.sqrt_tm1d2);const o=a.pow(a.mul(a.square(e),t),2**(a.sqrt_s-1));if(a.eq(o,a.negone))return null;let i=a.sqrt_s,n=a.mul(t,e),l=a.mul(n,e),c=a.sqrt_z;for(;!a.eq(l,a.one);){let t=a.square(l),o=1;for(;!a.eq(t,a.one);)t=a.square(t),o++;e=c;for(let t=0;t>>0,t[i]=(t[i]^t[a])>>>0,t[i]=(t[i]<<16|t[i]>>>16&65535)>>>0,t[o]=t[o]+t[i]>>>0,t[e]=(t[e]^t[o])>>>0,t[e]=(t[e]<<12|t[e]>>>20&4095)>>>0,t[a]=t[a]+t[e]>>>0,t[i]=(t[i]^t[a])>>>0,t[i]=(t[i]<<8|t[i]>>>24&255)>>>0,t[o]=t[o]+t[i]>>>0,t[e]=(t[e]^t[o])>>>0,t[e]=(t[e]<<7|t[e]>>>25&127)>>>0}class pl{constructor(t){t=t||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],0,0,0,0],this.idx=16,this.buff=new Array(16)}nextU32(){return 16==this.idx&&this.update(),this.buff[this.idx++]}nextU64(){return Xn((t=this.nextU32(),a=4294967296,BigInt(t)*BigInt(a)),this.nextU32());var t,a}nextBool(){return 1==(1&this.nextU32())}update(){for(let t=0;t<16;t++)this.buff[t]=this.state[t];for(let a=0;a<10;a++)hl(t=this.buff,0,4,8,12),hl(t,1,5,9,13),hl(t,2,6,10,14),hl(t,3,7,11,15),hl(t,0,5,10,15),hl(t,1,6,11,12),hl(t,2,7,8,13),hl(t,3,4,9,14);var t;for(let t=0;t<16;t++)this.buff[t]=this.buff[t]+this.state[t]>>>0;this.idx=0,this.state[12]=this.state[12]+1>>>0,0==this.state[12]&&(this.state[13]=this.state[13]+1>>>0,0==this.state[13]&&(this.state[14]=this.state[14]+1>>>0,0==this.state[14]&&(this.state[15]=this.state[15]+1>>>0)))}}function ml(t){let a=new Uint8Array(t);if(void 0!==globalThis.crypto)globalThis.crypto.getRandomValues(a);else for(let e=0;e>>0;return a}let Ll=null;function bl(){return Ll||(Ll=new pl(function(){const t=ml(32),a=new Uint32Array(t.buffer),e=[];for(let t=0;t<8;t++)e.push(a[t]);return e}()),Ll)}class wl{constructor(t,a,e){this.F=a,this.G=t,this.opMulGF=e;let o=a.sqrt_t||a.t,i=a.sqrt_s||a.s,n=a.one;for(;a.eq(a.pow(n,a.half),a.one);)n=a.add(n,a.one);this.w=new Array(i+1),this.wi=new Array(i+1),this.w[i]=this.F.pow(n,o),this.wi[i]=this.F.inv(this.w[i]);let l=i-1;for(;l>=0;)this.w[l]=this.F.square(this.w[l+1]),this.wi[l]=this.F.square(this.wi[l+1]),l--;this.roots=[],this._setRoots(Math.min(i,15))}_setRoots(t){for(let a=t;a>=0&&!this.roots[a];a--){let t=this.F.one;const e=1<>1,c=Al(t,a,e-1,o,2*i),s=Al(t,a,e-1,o+i,2*i),r=new Array(n);for(let a=0;a>this.one,this.bitLength=Hn(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let e=this.pow(this.nqr,a);for(;!this.eq(e,this.negone);)this.nqr=this.nqr+this.one,e=this.pow(this.nqr,a);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),fl(this),this.FFT=new wl(this,this,this.mul.bind(this)),this.fft=this.FFT.fft.bind(this.FFT),this.ifft=this.FFT.ifft.bind(this.FFT),this.w=this.FFT.w,this.wi=this.FFT.wi,this.shift=this.square(this.nqr),this.k=this.exp(this.nqr,2**this.s)}e(t,a){let e;if(a?16==a&&(e=BigInt("0x"+t)):e=BigInt(t),e<0){let t=-e;return t>=this.p&&(t%=this.p),this.p-t}return e>=this.p?e%this.p:e}add(t,a){const e=t+a;return e>=this.p?e-this.p:e}sub(t,a){return t>=a?t-a:this.p-a+t}neg(t){return t?this.p-t:t}mul(t,a){return t*a%this.p}mulScalar(t,a){return t*this.e(a)%this.p}square(t){return t*t%this.p}eq(t,a){return t==a}neq(t,a){return t!=a}lt(t,a){return(t>this.half?t-this.p:t)<(a>this.half?a-this.p:a)}gt(t,a){return(t>this.half?t-this.p:t)>(a>this.half?a-this.p:a)}leq(t,a){return(t>this.half?t-this.p:t)<=(a>this.half?a-this.p:a)}geq(t,a){return(t>this.half?t-this.p:t)>=(a>this.half?a-this.p:a)}div(t,a){return this.mul(t,this.inv(a))}idiv(t,a){if(!a)throw new Error("Division by zero");return t/a}inv(t){if(!t)throw new Error("Division by zero");let a=this.zero,e=this.p,o=this.one,i=t%this.p;for(;i;){let t=e/i;[a,o]=[o,a-t*o],[e,i]=[i,e-t*i]}return a=this.p?e-this.p:e}bor(t,a){const e=(t|a)&this.mask;return e>=this.p?e-this.p:e}bxor(t,a){const e=(t^a)&this.mask;return e>=this.p?e-this.p:e}bnot(t){const a=t^this.mask;return a>=this.p?a-this.p:a}shl(t,a){if(Number(a)=this.p?e-this.p:e}{const e=this.p-a;return Number(e)>e:this.zero}}shr(t,a){if(Number(a)>a;{const e=this.p-a;if(Number(e)=this.p?a-this.p:a}return 0}}land(t,a){return t&&a?this.one:this.zero}lor(t,a){return t||a?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let a=this.s,e=this.nqr_to_t,o=this.pow(t,this.t),i=this.pow(t,this.add(this.t,this.one)>>this.one);for(;o!=this.one;){let t=this.square(o),n=1;for(;t!=this.one;)n++,t=this.square(t);let l=e;for(let t=0;tthis.p>>this.one&&(i=this.neg(i)),i}normalize(t,a){if((t=BigInt(t,a))<0){let a=-t;return a>=this.p&&(a%=this.p),this.p-a}return t>=this.p?t%this.p:t}random(){const t=2*this.bitLength/8;let a=this.zero;for(let e=0;ethis.half&&10==a){e="-"+(this.p-t).toString(a)}else e=t.toString(a);return e}isZero(t){return t==this.zero}fromRng(t){let a;do{a=this.zero;for(let e=0;e=this.p);return a=a*this.Ri%this.p,a}fft(t){return this.FFT.fft(t)}ifft(t){return this.FFT.ifft(t)}toRprLE(t,a,e){cl(t,a,e,8*this.n64)}toRprBE(t,a,e){!function(t,a,e,o){const i="0000000"+e.toString(16),n=new DataView(t.buffer,t.byteOffset+a,o),l=1+(4*(i.length-7)-1>>5);for(let t=0;t>=8n;return e},bigInt2U32LE:function(t,a){const e=Array(a);let o=BigInt(t);for(let t=0;t>=32n;return e},isOcamNum:function(t){return!!Array.isArray(t)&&(3==t.length&&("number"==typeof t[0]&&("number"==typeof t[1]&&!!Array.isArray(t[2]))))}},xl=function(t,a,e,o,i,n,l){const c=t.addFunction(a);c.addParam("base","i32"),c.addParam("scalar","i32"),c.addParam("scalarLength","i32"),c.addParam("r","i32"),c.addLocal("i","i32"),c.addLocal("b","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(e));c.addCode(s.if(s.i32_eqz(s.getLocal("scalarLength")),[...s.call(l,s.getLocal("r")),...s.ret([])])),c.addCode(s.call(n,s.getLocal("base"),r)),c.addCode(s.call(l,s.getLocal("r"))),c.addCode(s.setLocal("i",s.getLocal("scalarLength"))),c.addCode(s.block(s.loop(s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.setLocal("b",s.i32_load8_u(s.i32_add(s.getLocal("scalar"),s.getLocal("i")))),...function(){const t=[];for(let a=0;a<8;a++)t.push(...s.call(i,s.getLocal("r"),s.getLocal("r")),...s.if(s.i32_ge_u(s.getLocal("b"),s.i32_const(128>>a)),[...s.setLocal("b",s.i32_sub(s.getLocal("b"),s.i32_const(128>>a))),...s.call(o,s.getLocal("r"),r,s.getLocal("r"))]));return t}(),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.br(0))))},Il=function(t,a){const e=8*t.modules[a].n64,o=t.addFunction(a+"_batchInverse");o.addParam("pIn","i32"),o.addParam("inStep","i32"),o.addParam("n","i32"),o.addParam("pOut","i32"),o.addParam("outStep","i32"),o.addLocal("itAux","i32"),o.addLocal("itIn","i32"),o.addLocal("itOut","i32"),o.addLocal("i","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(e));o.addCode(i.setLocal("itAux",i.i32_load(i.i32_const(0))),i.i32_store(i.i32_const(0),i.i32_add(i.getLocal("itAux"),i.i32_mul(i.i32_add(i.getLocal("n"),i.i32_const(1)),i.i32_const(e))))),o.addCode(i.call(a+"_one",i.getLocal("itAux")),i.setLocal("itIn",i.getLocal("pIn")),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.if(i.call(a+"_isZero",i.getLocal("itIn")),i.call(a+"_copy",i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),i.getLocal("itAux")),i.call(a+"_mul",i.getLocal("itIn"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),i.getLocal("itAux"))),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))),i.setLocal("itIn",i.i32_sub(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itAux",i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("itOut",i.i32_add(i.getLocal("pOut"),i.i32_mul(i.i32_sub(i.getLocal("n"),i.i32_const(1)),i.getLocal("outStep")))),i.call(a+"_inverse",i.getLocal("itAux"),i.getLocal("itAux")),i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("i"))),i.if(i.call(a+"_isZero",i.getLocal("itIn")),[...i.call(a+"_copy",i.getLocal("itAux"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),...i.call(a+"_zero",i.getLocal("itOut"))],[...i.call(a+"_copy",i.i32_sub(i.getLocal("itAux"),i.i32_const(e)),n),...i.call(a+"_mul",i.getLocal("itAux"),i.getLocal("itIn"),i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),...i.call(a+"_mul",i.getLocal("itAux"),n,i.getLocal("itOut"))]),i.setLocal("itIn",i.i32_sub(i.getLocal("itIn"),i.getLocal("inStep"))),i.setLocal("itOut",i.i32_sub(i.getLocal("itOut"),i.getLocal("outStep"))),i.setLocal("itAux",i.i32_sub(i.getLocal("itAux"),i.i32_const(e))),i.setLocal("i",i.i32_sub(i.getLocal("i"),i.i32_const(1))),i.br(0)))),o.addCode(i.i32_store(i.i32_const(0),i.getLocal("itAux")))};var Bl=function(t,a,e,o,i,n){void 0===n&&(n=oa?1:-1}function Pl(t){return t*t}function ql(t){return t%2n!==0n}function Ol(t){return t%2n===0n}function Gl(t){return t<0n}function zl(t){return t>0n}function Tl(t){return Gl(t)?t.toString(2).length-1:t.toString(2).length}function Ml(t){return t<0n?-t:t}function Ul(t){return 1n===Ml(t)}function Ql(t,a){for(var e,o,i,n=0n,l=1n,c=a,s=Ml(t);0n!==s;)e=c/s,o=n,i=c,n=l,c=s,l=o-e*l,s=i-e*s;if(!Ul(c))throw new Error(t.toString()+" and "+a.toString()+" are not co-prime");return-1===Sl(n,0n)&&(n+=a),Gl(t)?-n:n}function kl(t,a,e){if(0n===e)throw new Error("Cannot take modPow with modulus 0");var o=1n,i=t%e;for(Gl(a)&&(a*=-1n,i=Ql(i,e));zl(a);){if(0n===i)return 0n;ql(a)&&(o=o*i%e),a/=2n,i=Pl(i)%e}return o}function Rl(t,a){return 0n!==a&&(!!Ul(a)||(0===function(t,a){return(t=t>=0n?t:-t)===(a=a>=0n?a:-a)?0:t>a?1:-1}(a,2n)?Ol(t):t%a===0n))}function Nl(t,a){for(var e,o,i,n=function(t){return t-1n}(t),l=n,c=0;Ol(l);)l/=2n,c++;t:for(o=0;o>1&&o>1,t>>1)))),a.addCode(e.setLocal(s,e.i64_add(e.getLocal(s),e.i64_shr_u(e.getLocal(c),e.i64_const(32)))))),t>0&&(a.addCode(e.setLocal(c,e.i64_add(e.i64_and(e.getLocal(c),e.i64_const(4294967295)),e.i64_and(e.getLocal(r),e.i64_const(4294967295))))),a.addCode(e.setLocal(s,e.i64_add(e.i64_add(e.getLocal(s),e.i64_shr_u(e.getLocal(c),e.i64_const(32))),e.getLocal(d))))),a.addCode(e.i64_store32(e.getLocal("r"),4*t,e.getLocal(c))),a.addCode(e.setLocal(r,e.getLocal(s)),e.setLocal(d,e.i64_shr_u(e.getLocal(r),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*i*2-4,e.getLocal(r)))}(),function(){const a=t.addFunction(o+"_squareOld");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(o+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){!function(){const a=t.addFunction(o+"__mul1");a.addParam("px","i32"),a.addParam("y","i64"),a.addParam("pr","i32"),a.addLocal("c","i64");const e=a.getCodeBuilder();a.addCode(e.setLocal("c",e.i64_mul(e.i64_load32_u(e.getLocal("px"),0,0),e.getLocal("y")))),a.addCode(e.i64_store32(e.getLocal("pr"),0,0,e.getLocal("c")));for(let t=1;t>1n,p=t.alloc(c,$l.bigInt2BytesLE(h,c)),m=h+1n,L=t.alloc(c,$l.bigInt2BytesLE(m,c));t.modules[s]={pq:d,pR2:u,n64:n,q:i,pOne:_,pZero:g,pePlusOne:L};let b=2n;if(Jl(i))for(;Yl(b,h,i)!==f;)b+=1n;let w=0,y=f;for(;!Xl(y)&&0n!==y;)w++,y>>=1n;const A=t.alloc(c,$l.bigInt2BytesLE(y,c)),C=Yl(b,y,i),F=t.alloc($l.bigInt2BytesLE((C<>1n,I=t.alloc(c,$l.bigInt2BytesLE(x,c));return t.exportFunction(r+"_copy",s+"_copy"),t.exportFunction(r+"_zero",s+"_zero"),t.exportFunction(r+"_isZero",s+"_isZero"),t.exportFunction(r+"_eq",s+"_eq"),function(){const a=t.addFunction(s+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder();a.addCode(e.ret(e.call(r+"_eq",e.getLocal("x"),e.i32_const(_))))}(),function(){const a=t.addFunction(s+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.if(e.call(r+"_add",e.getLocal("x"),e.getLocal("y"),e.getLocal("r")),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.if(e.call(r+"_sub",e.getLocal("x"),e.getLocal("y"),e.getLocal("r")),e.drop(e.call(r+"_add",e.getLocal("r"),e.i32_const(d),e.getLocal("r")))))}(),function(){const a=t.addFunction(s+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_sub",e.i32_const(g),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.alloc(l*l*8),e=t.addFunction(s+"_mReduct");e.addParam("t","i32"),e.addParam("r","i32"),e.addLocal("np32","i64"),e.addLocal("c","i64"),e.addLocal("m","i64");const o=e.getCodeBuilder(),n=Number(0x100000000n-Wl(i,0x100000000n));e.addCode(o.setLocal("np32",o.i64_const(n)));for(let t=0;t=l&&a.addCode(e.i64_store32(e.getLocal("r"),4*(t-l),e.getLocal(f))),[f,h]=[h,f],a.addCode(e.setLocal(h,e.i64_shr_u(e.getLocal(f),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*l-4,e.getLocal(f))),a.addCode(e.if(e.i32_wrap_i64(e.getLocal(h)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_square");a.addParam("x","i32"),a.addParam("r","i32"),a.addLocal("c0","i64"),a.addLocal("c1","i64"),a.addLocal("c0_old","i64"),a.addLocal("c1_old","i64"),a.addLocal("np32","i64");for(let t=0;t>1&&o>1,t>>1)))),a.addCode(e.setLocal(f,e.i64_add(e.getLocal(f),e.i64_shr_u(e.getLocal(g),e.i64_const(32)))))),t>0&&(a.addCode(e.setLocal(g,e.i64_add(e.i64_and(e.getLocal(g),e.i64_const(4294967295)),e.i64_and(e.getLocal(h),e.i64_const(4294967295))))),a.addCode(e.setLocal(f,e.i64_add(e.i64_add(e.getLocal(f),e.i64_shr_u(e.getLocal(g),e.i64_const(32))),e.getLocal(p)))));for(let o=Math.max(1,t-l+1);o<=t&&o=l&&a.addCode(e.i64_store32(e.getLocal("r"),4*(t-l),e.getLocal(g))),a.addCode(e.setLocal(h,e.getLocal(f)),e.setLocal(p,e.i64_shr_u(e.getLocal(h),e.i64_const(32))))}a.addCode(e.i64_store32(e.getLocal("r"),4*l-4,e.getLocal(h))),a.addCode(e.if(e.i32_wrap_i64(e.getLocal(p)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),e.if(e.call(r+"_gte",e.getLocal("r"),e.i32_const(d)),e.drop(e.call(r+"_sub",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))))))}(),function(){const a=t.addFunction(s+"_squareOld");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.i32_const(u),e.getLocal("r")))}(),function(){const a=t.alloc(2*c),e=t.addFunction(s+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const o=e.getCodeBuilder();e.addCode(o.call(r+"_copy",o.getLocal("x"),o.i32_const(a))),e.addCode(o.call(r+"_zero",o.i32_const(a+c))),e.addCode(o.call(s+"_mReduct",o.i32_const(a),o.getLocal("r")))}(),function(){const a=t.addFunction(s+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.call(s+"_fromMontgomery",e.getLocal("x"),o),e.call(r+"_gte",o,e.i32_const(L)))}(),function(){const a=t.addFunction(s+"_sign");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(r+"_isZero",e.getLocal("x")),e.ret(e.i32_const(0))),e.call(s+"_fromMontgomery",e.getLocal("x"),o),e.if(e.call(r+"_gte",o,e.i32_const(L)),e.ret(e.i32_const(-1))),e.ret(e.i32_const(1)))}(),function(){const a=t.addFunction(s+"_inverse");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_fromMontgomery",e.getLocal("x"),e.getLocal("r"))),a.addCode(e.call(r+"_inverseMod",e.getLocal("r"),e.i32_const(d),e.getLocal("r"))),a.addCode(e.call(s+"_toMontgomery",e.getLocal("r"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_one");a.addParam("pr","i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_copy",e.i32_const(_),e.getLocal("pr")))}(),function(){const a=t.addFunction(s+"_load");a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32"),a.addLocal("p","i32"),a.addLocal("l","i32"),a.addLocal("i","i32"),a.addLocal("j","i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c)),i=t.alloc(c),n=e.i32_const(i);a.addCode(e.call(r+"_zero",e.getLocal("r")),e.setLocal("i",e.i32_const(c)),e.setLocal("p",e.getLocal("scalar")),e.block(e.loop(e.br_if(1,e.i32_gt_u(e.getLocal("i"),e.getLocal("scalarLen"))),e.if(e.i32_eq(e.getLocal("i"),e.i32_const(c)),e.call(s+"_one",o),e.call(s+"_mul",o,e.i32_const(u),o)),e.call(s+"_mul",e.getLocal("p"),o,n),e.call(s+"_add",e.getLocal("r"),n,e.getLocal("r")),e.setLocal("p",e.i32_add(e.getLocal("p"),e.i32_const(c))),e.setLocal("i",e.i32_add(e.getLocal("i"),e.i32_const(c))),e.br(0))),e.setLocal("l",e.i32_rem_u(e.getLocal("scalarLen"),e.i32_const(c))),e.if(e.i32_eqz(e.getLocal("l")),e.ret([])),e.call(r+"_zero",n),e.setLocal("j",e.i32_const(0)),e.block(e.loop(e.br_if(1,e.i32_eq(e.getLocal("j"),e.getLocal("l"))),e.i32_store8(e.getLocal("j"),i,e.i32_load8_u(e.getLocal("p"))),e.setLocal("p",e.i32_add(e.getLocal("p"),e.i32_const(1))),e.setLocal("j",e.i32_add(e.getLocal("j"),e.i32_const(1))),e.br(0))),e.if(e.i32_eq(e.getLocal("i"),e.i32_const(c)),e.call(s+"_one",o),e.call(s+"_mul",o,e.i32_const(u),o)),e.call(s+"_mul",n,o,n),e.call(s+"_add",e.getLocal("r"),n,e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const e=a.getCodeBuilder(),o=e.i32_const(t.alloc(c));a.addCode(e.call(s+"_load",e.getLocal("scalar"),e.getLocal("scalarLen"),o),e.call(s+"_toMontgomery",o,o),e.call(s+"_mul",e.getLocal("x"),o,e.getLocal("r")))}(),Vl(t,s),Kl(t,s+"_batchToMontgomery",s+"_toMontgomery",c,c),Kl(t,s+"_batchFromMontgomery",s+"_fromMontgomery",c,c),Kl(t,s+"_batchNeg",s+"_neg",c,c),Hl(t,s+"_batchAdd",s+"_add",c,c),Hl(t,s+"_batchSub",s+"_sub",c,c),Hl(t,s+"_batchMul",s+"_mul",c,c),t.exportFunction(s+"_add"),t.exportFunction(s+"_sub"),t.exportFunction(s+"_neg"),t.exportFunction(s+"_isNegative"),t.exportFunction(s+"_isOne"),t.exportFunction(s+"_sign"),t.exportFunction(s+"_mReduct"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_squareOld"),t.exportFunction(s+"_fromMontgomery"),t.exportFunction(s+"_toMontgomery"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_one"),t.exportFunction(s+"_load"),t.exportFunction(s+"_timesScalar"),jl(t,s+"_exp",c,s+"_mul",s+"_square",r+"_copy",s+"_one"),t.exportFunction(s+"_exp"),t.exportFunction(s+"_batchInverse"),Jl(i)&&(!function(){const a=t.addFunction(s+"_sqrt");a.addParam("n","i32"),a.addParam("r","i32"),a.addLocal("m","i32"),a.addLocal("i","i32"),a.addLocal("j","i32");const e=a.getCodeBuilder(),o=e.i32_const(_),i=e.i32_const(t.alloc(c)),n=e.i32_const(t.alloc(c)),l=e.i32_const(t.alloc(c)),r=e.i32_const(t.alloc(c)),d=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(s+"_isZero",e.getLocal("n")),e.ret(e.call(s+"_zero",e.getLocal("r")))),e.setLocal("m",e.i32_const(w)),e.call(s+"_copy",e.i32_const(F),i),e.call(s+"_exp",e.getLocal("n"),e.i32_const(A),e.i32_const(c),n),e.call(s+"_exp",e.getLocal("n"),e.i32_const(I),e.i32_const(c),l),e.block(e.loop(e.br_if(1,e.call(s+"_eq",n,o)),e.call(s+"_square",n,r),e.setLocal("i",e.i32_const(1)),e.block(e.loop(e.br_if(1,e.call(s+"_eq",r,o)),e.call(s+"_square",r,r),e.setLocal("i",e.i32_add(e.getLocal("i"),e.i32_const(1))),e.br(0))),e.call(s+"_copy",i,d),e.setLocal("j",e.i32_sub(e.i32_sub(e.getLocal("m"),e.getLocal("i")),e.i32_const(1))),e.block(e.loop(e.br_if(1,e.i32_eqz(e.getLocal("j"))),e.call(s+"_square",d,d),e.setLocal("j",e.i32_sub(e.getLocal("j"),e.i32_const(1))),e.br(0))),e.setLocal("m",e.getLocal("i")),e.call(s+"_square",d,i),e.call(s+"_mul",n,i,n),e.call(s+"_mul",l,d,l),e.br(0))),e.if(e.call(s+"_isNegative",l),e.call(s+"_neg",l,e.getLocal("r")),e.call(s+"_copy",l,e.getLocal("r"))))}(),function(){const a=t.addFunction(s+"_isSquare");a.addParam("n","i32"),a.setReturnType("i32");const e=a.getCodeBuilder(),o=e.i32_const(_),i=e.i32_const(t.alloc(c));a.addCode(e.if(e.call(s+"_isZero",e.getLocal("n")),e.ret(e.i32_const(1))),e.call(s+"_exp",e.getLocal("n"),e.i32_const(p),e.i32_const(c),i),e.call(s+"_eq",i,o))}(),t.exportFunction(s+"_sqrt"),t.exportFunction(s+"_isSquare")),t.exportFunction(s+"_batchToMontgomery"),t.exportFunction(s+"_batchFromMontgomery"),s};const ec=ac,{bitLength:oc}=vl;var ic=function(t,a,e,o,i){const n=BigInt(a),l=Math.floor((oc(n-1n)-1)/64)+1,c=8*l,s=e||"f1";if(t.modules[s])return s;t.modules[s]={n64:l};const r=i||"int",d=ec(t,n,o,r),u=t.modules[d].pR2,_=t.modules[d].pq,g=t.modules[d].pePlusOne;return function(){const a=t.alloc(c),e=t.addFunction(s+"_mul");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const o=e.getCodeBuilder();e.addCode(o.call(d+"_mul",o.getLocal("x"),o.getLocal("y"),o.i32_const(a))),e.addCode(o.call(d+"_mul",o.i32_const(a),o.i32_const(u),o.getLocal("r")))}(),function(){const a=t.addFunction(s+"_square");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(s+"_mul",e.getLocal("x"),e.getLocal("x"),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_inverse");a.addParam("x","i32"),a.addParam("r","i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_inverseMod",e.getLocal("x"),e.i32_const(_),e.getLocal("r")))}(),function(){const a=t.addFunction(s+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const e=a.getCodeBuilder();a.addCode(e.call(r+"_gte",e.getLocal("x"),e.i32_const(g)))}(),t.exportFunction(d+"_add",s+"_add"),t.exportFunction(d+"_sub",s+"_sub"),t.exportFunction(d+"_neg",s+"_neg"),t.exportFunction(s+"_mul"),t.exportFunction(s+"_square"),t.exportFunction(s+"_inverse"),t.exportFunction(s+"_isNegative"),t.exportFunction(d+"_copy",s+"_copy"),t.exportFunction(d+"_zero",s+"_zero"),t.exportFunction(d+"_one",s+"_one"),t.exportFunction(d+"_isZero",s+"_isZero"),t.exportFunction(d+"_eq",s+"_eq"),s};const nc=xl,lc=Il,cc=Fl;var sc=function(t,a,e,o){if(t.modules[e])return e;const i=8*t.modules[o].n64,n=t.modules[o].q;return t.modules[e]={n64:2*t.modules[o].n64},function(){const a=t.addFunction(e+"_isZero");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.i32_and(n.call(o+"_isZero",l),n.call(o+"_isZero",c)))}(),function(){const a=t.addFunction(e+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.ret(n.i32_and(n.call(o+"_isOne",l),n.call(o+"_isZero",c))))}(),function(){const a=t.addFunction(e+"_zero");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.call(o+"_zero",l),n.call(o+"_zero",c))}(),function(){const a=t.addFunction(e+"_one");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.call(o+"_one",l),n.call(o+"_zero",c))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_copy",l,s),n.call(o+"_copy",c,r))}(),function(){const n=t.addFunction(e+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("y"),d=l.i32_add(l.getLocal("y"),l.i32_const(i)),u=l.getLocal("r"),_=l.i32_add(l.getLocal("r"),l.i32_const(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,r,g),l.call(o+"_mul",s,d,f),l.call(o+"_add",c,s,h),l.call(o+"_add",r,d,p),l.call(o+"_mul",h,p,h),l.call(a,f,u),l.call(o+"_add",g,u,u),l.call(o+"_add",g,f,_),l.call(o+"_sub",h,_,_))}(),function(){const a=t.addFunction(e+"_mul1");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_mul",l,s,r),n.call(o+"_mul",c,s,d))}(),function(){const n=t.addFunction(e+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(i)),u=l.i32_const(t.alloc(i)),_=l.i32_const(t.alloc(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,s,u),l.call(o+"_add",c,s,_),l.call(a,s,g),l.call(o+"_add",c,g,g),l.call(a,u,f),l.call(o+"_add",f,u,f),l.call(o+"_mul",_,g,r),l.call(o+"_sub",r,f,r),l.call(o+"_add",u,u,d))}(),function(){const a=t.addFunction(e+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_add",l,s,d),n.call(o+"_add",c,r,u))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_sub",l,s,d),n.call(o+"_sub",c,r,u))}(),function(){const a=t.addFunction(e+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_neg",l,s),n.call(o+"_neg",c,r))}(),function(){const a=t.addFunction(e+"_conjugate");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_copy",l,s),n.call(o+"_neg",c,r))}(),function(){const a=t.addFunction(e+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_toMontgomery",l,s),n.call(o+"_toMontgomery",c,r))}(),function(){const a=t.addFunction(e+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_fromMontgomery",l,s),n.call(o+"_fromMontgomery",c,r))}(),function(){const a=t.addFunction(e+"_eq");a.addParam("x","i32"),a.addParam("y","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("y"),r=n.i32_add(n.getLocal("y"),n.i32_const(i));a.addCode(n.i32_and(n.call(o+"_eq",l,s),n.call(o+"_eq",c,r)))}(),function(){const n=t.addFunction(e+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.getLocal("r"),d=l.i32_add(l.getLocal("r"),l.i32_const(i)),u=l.i32_const(t.alloc(i)),_=l.i32_const(t.alloc(i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,u),l.call(o+"_square",s,_),l.call(a,_,g),l.call(o+"_sub",u,g,g),l.call(o+"_inverse",g,f),l.call(o+"_mul",c,f,r),l.call(o+"_mul",s,f,d),l.call(o+"_neg",d,d))}(),function(){const a=t.addFunction(e+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.getLocal("r"),r=n.i32_add(n.getLocal("r"),n.i32_const(i));a.addCode(n.call(o+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),s),n.call(o+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),r))}(),function(){const a=t.addFunction(e+"_sign");a.addParam("x","i32"),a.addLocal("s","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.setLocal("s",n.call(o+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(o+"_sign",l)))}(),function(){const a=t.addFunction(e+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i));a.addCode(n.if(n.call(o+"_isZero",c),n.ret(n.call(o+"_isNegative",l))),n.ret(n.call(o+"_isNegative",c)))}(),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isOne"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_one"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_mul"),t.exportFunction(e+"_mul1"),t.exportFunction(e+"_square"),t.exportFunction(e+"_add"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_sign"),t.exportFunction(e+"_conjugate"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_inverse"),lc(t,e),nc(t,e+"_exp",2*i,e+"_mul",e+"_square",e+"_copy",e+"_one"),function(){const a=t.addFunction(e+"_sqrt");a.addParam("a","i32"),a.addParam("pr","i32");const l=a.getCodeBuilder(),c=l.i32_const(t.alloc(cc.bigInt2BytesLE((BigInt(n||0)-3n)/4n,i))),s=l.i32_const(t.alloc(cc.bigInt2BytesLE((BigInt(n||0)-1n)/2n,i))),r=l.getLocal("a"),d=l.i32_const(t.alloc(2*i)),u=l.i32_const(t.alloc(2*i)),_=l.i32_const(t.alloc(2*i)),g=t.alloc(2*i),f=l.i32_const(g),h=l.i32_const(g),p=l.i32_const(g+i),m=l.i32_const(t.alloc(2*i)),L=l.i32_const(t.alloc(2*i));a.addCode(l.call(e+"_one",f),l.call(e+"_neg",f,f),l.call(e+"_exp",r,c,l.i32_const(i),d),l.call(e+"_square",d,u),l.call(e+"_mul",r,u,u),l.call(e+"_conjugate",u,_),l.call(e+"_mul",_,u,_),l.if(l.call(e+"_eq",_,f),l.unreachable()),l.call(e+"_mul",d,r,m),l.if(l.call(e+"_eq",u,f),[...l.call(o+"_zero",h),...l.call(o+"_one",p),...l.call(e+"_mul",f,m,l.getLocal("pr"))],[...l.call(e+"_one",L),...l.call(e+"_add",L,u,L),...l.call(e+"_exp",L,s,l.i32_const(i),L),...l.call(e+"_mul",L,m,l.getLocal("pr"))]))}(),function(){const a=t.addFunction(e+"_isSquare");a.addParam("a","i32"),a.setReturnType("i32");const o=a.getCodeBuilder(),l=o.i32_const(t.alloc(cc.bigInt2BytesLE((BigInt(n||0)-3n)/4n,i))),c=o.getLocal("a"),s=o.i32_const(t.alloc(2*i)),r=o.i32_const(t.alloc(2*i)),d=o.i32_const(t.alloc(2*i)),u=t.alloc(2*i),_=o.i32_const(u);a.addCode(o.call(e+"_one",_),o.call(e+"_neg",_,_),o.call(e+"_exp",c,l,o.i32_const(i),s),o.call(e+"_square",s,r),o.call(e+"_mul",c,r,r),o.call(e+"_conjugate",r,d),o.call(e+"_mul",d,r,d),o.if(o.call(e+"_eq",d,_),o.ret(o.i32_const(0))),o.ret(o.i32_const(1)))}(),t.exportFunction(e+"_exp"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_batchInverse"),t.exportFunction(e+"_sqrt"),t.exportFunction(e+"_isSquare"),t.exportFunction(e+"_isNegative"),e};const rc=xl,dc=Il;var uc=function(t,a,e,o){if(t.modules[e])return e;const i=8*t.modules[o].n64;return t.modules[e]={n64:3*t.modules[o].n64},function(){const a=t.addFunction(e+"_isZero");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.i32_and(n.i32_and(n.call(o+"_isZero",l),n.call(o+"_isZero",c)),n.call(o+"_isZero",s)))}(),function(){const a=t.addFunction(e+"_isOne");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.ret(n.i32_and(n.i32_and(n.call(o+"_isOne",l),n.call(o+"_isZero",c)),n.call(o+"_isZero",s))))}(),function(){const a=t.addFunction(e+"_zero");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.call(o+"_zero",l),n.call(o+"_zero",c),n.call(o+"_zero",s))}(),function(){const a=t.addFunction(e+"_one");a.addParam("x","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.call(o+"_one",l),n.call(o+"_zero",c),n.call(o+"_zero",s))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_copy",l,r),n.call(o+"_copy",c,d),n.call(o+"_copy",s,u))}(),function(){const n=t.addFunction(e+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("y"),u=l.i32_add(l.getLocal("y"),l.i32_const(i)),_=l.i32_add(l.getLocal("y"),l.i32_const(2*i)),g=l.getLocal("r"),f=l.i32_add(l.getLocal("r"),l.i32_const(i)),h=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i)),w=l.i32_const(t.alloc(i)),y=l.i32_const(t.alloc(i)),A=l.i32_const(t.alloc(i)),C=l.i32_const(t.alloc(i)),F=l.i32_const(t.alloc(i)),x=l.i32_const(t.alloc(i)),I=l.i32_const(t.alloc(i)),B=l.i32_const(t.alloc(i)),E=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_mul",c,d,p),l.call(o+"_mul",s,u,m),l.call(o+"_mul",r,_,L),l.call(o+"_add",c,s,b),l.call(o+"_add",d,u,w),l.call(o+"_add",c,r,y),l.call(o+"_add",d,_,A),l.call(o+"_add",s,r,C),l.call(o+"_add",u,_,F),l.call(o+"_add",p,m,x),l.call(o+"_add",p,L,I),l.call(o+"_add",m,L,B),l.call(o+"_mul",C,F,g),l.call(o+"_sub",g,B,g),l.call(a,g,g),l.call(o+"_add",p,g,g),l.call(o+"_mul",b,w,f),l.call(o+"_sub",f,x,f),l.call(a,L,E),l.call(o+"_add",f,E,f),l.call(o+"_mul",y,A,h),l.call(o+"_sub",h,I,h),l.call(o+"_add",h,m,h))}(),function(){const n=t.addFunction(e+"_square");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(i)),_=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,g),l.call(o+"_mul",c,s,f),l.call(o+"_add",f,f,h),l.call(o+"_sub",c,s,p),l.call(o+"_add",p,r,p),l.call(o+"_square",p,p),l.call(o+"_mul",s,r,m),l.call(o+"_add",m,m,L),l.call(o+"_square",r,b),l.call(a,L,d),l.call(o+"_add",g,d,d),l.call(a,b,u),l.call(o+"_add",h,u,u),l.call(o+"_add",g,b,_),l.call(o+"_sub",L,_,_),l.call(o+"_add",p,_,_),l.call(o+"_add",h,_,_))}(),function(){const a=t.addFunction(e+"_add");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i)),_=n.getLocal("r"),g=n.i32_add(n.getLocal("r"),n.i32_const(i)),f=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_add",l,r,_),n.call(o+"_add",c,d,g),n.call(o+"_add",s,u,f))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i)),_=n.getLocal("r"),g=n.i32_add(n.getLocal("r"),n.i32_const(i)),f=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_sub",l,r,_),n.call(o+"_sub",c,d,g),n.call(o+"_sub",s,u,f))}(),function(){const a=t.addFunction(e+"_neg");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_neg",l,r),n.call(o+"_neg",c,d),n.call(o+"_neg",s,u))}(),function(){const a=t.addFunction(e+"_sign");a.addParam("x","i32"),a.addLocal("s","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.setLocal("s",n.call(o+"_sign",s)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.setLocal("s",n.call(o+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(o+"_sign",l)))}(),function(){const a=t.addFunction(e+"_toMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_toMontgomery",l,r),n.call(o+"_toMontgomery",c,d),n.call(o+"_toMontgomery",s,u))}(),function(){const a=t.addFunction(e+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_fromMontgomery",l,r),n.call(o+"_fromMontgomery",c,d),n.call(o+"_fromMontgomery",s,u))}(),function(){const a=t.addFunction(e+"_eq");a.addParam("x","i32"),a.addParam("y","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(i)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*i));a.addCode(n.i32_and(n.i32_and(n.call(o+"_eq",l,r),n.call(o+"_eq",c,d)),n.call(o+"_eq",s,u)))}(),function(){const n=t.addFunction(e+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const l=n.getCodeBuilder(),c=l.getLocal("x"),s=l.i32_add(l.getLocal("x"),l.i32_const(i)),r=l.i32_add(l.getLocal("x"),l.i32_const(2*i)),d=l.getLocal("r"),u=l.i32_add(l.getLocal("r"),l.i32_const(i)),_=l.i32_add(l.getLocal("r"),l.i32_const(2*i)),g=l.i32_const(t.alloc(i)),f=l.i32_const(t.alloc(i)),h=l.i32_const(t.alloc(i)),p=l.i32_const(t.alloc(i)),m=l.i32_const(t.alloc(i)),L=l.i32_const(t.alloc(i)),b=l.i32_const(t.alloc(i)),w=l.i32_const(t.alloc(i)),y=l.i32_const(t.alloc(i)),A=l.i32_const(t.alloc(i)),C=l.i32_const(t.alloc(i));n.addCode(l.call(o+"_square",c,g),l.call(o+"_square",s,f),l.call(o+"_square",r,h),l.call(o+"_mul",c,s,p),l.call(o+"_mul",c,r,m),l.call(o+"_mul",s,r,L),l.call(a,L,b),l.call(o+"_sub",g,b,b),l.call(a,h,w),l.call(o+"_sub",w,p,w),l.call(o+"_sub",f,m,y),l.call(o+"_mul",r,w,A),l.call(o+"_mul",s,y,C),l.call(o+"_add",A,C,A),l.call(a,A,A),l.call(o+"_mul",c,b,C),l.call(o+"_add",C,A,A),l.call(o+"_inverse",A,A),l.call(o+"_mul",A,b,d),l.call(o+"_mul",A,w,u),l.call(o+"_mul",A,y,_))}(),function(){const a=t.addFunction(e+"_timesScalar");a.addParam("x","i32"),a.addParam("scalar","i32"),a.addParam("scalarLen","i32"),a.addParam("r","i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i)),r=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(i)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*i));a.addCode(n.call(o+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),r),n.call(o+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),d),n.call(o+"_timesScalar",s,n.getLocal("scalar"),n.getLocal("scalarLen"),u))}(),function(){const a=t.addFunction(e+"_isNegative");a.addParam("x","i32"),a.setReturnType("i32");const n=a.getCodeBuilder(),l=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(i)),s=n.i32_add(n.getLocal("x"),n.i32_const(2*i));a.addCode(n.if(n.call(o+"_isZero",s),n.if(n.call(o+"_isZero",c),n.ret(n.call(o+"_isNegative",l)),n.ret(n.call(o+"_isNegative",c)))),n.ret(n.call(o+"_isNegative",s)))}(),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isOne"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_one"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_mul"),t.exportFunction(e+"_square"),t.exportFunction(e+"_add"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_sign"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_inverse"),dc(t,e),rc(t,e+"_exp",3*i,e+"_mul",e+"_square",e+"_copy",e+"_one"),t.exportFunction(e+"_exp"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_batchInverse"),t.exportFunction(e+"_isNegative"),e};const _c=function(t,a,e,o,i,n,l,c){const s=t.addFunction(a);s.addParam("base","i32"),s.addParam("scalar","i32"),s.addParam("scalarLength","i32"),s.addParam("r","i32"),s.addLocal("old0","i32"),s.addLocal("nbits","i32"),s.addLocal("i","i32"),s.addLocal("last","i32"),s.addLocal("cur","i32"),s.addLocal("carry","i32"),s.addLocal("p","i32");const r=s.getCodeBuilder(),d=r.i32_const(t.alloc(e));function u(t){return r.i32_and(r.i32_shr_u(r.i32_load(r.i32_add(r.getLocal("scalar"),r.i32_and(r.i32_shr_u(t,r.i32_const(3)),r.i32_const(4294967292)))),r.i32_and(t,r.i32_const(31))),r.i32_const(1))}function _(t){return[...r.i32_store8(r.getLocal("p"),r.i32_const(t)),...r.setLocal("p",r.i32_add(r.getLocal("p"),r.i32_const(1)))]}s.addCode(r.if(r.i32_eqz(r.getLocal("scalarLength")),[...r.call(c,r.getLocal("r")),...r.ret([])]),r.setLocal("nbits",r.i32_shl(r.getLocal("scalarLength"),r.i32_const(3))),r.setLocal("old0",r.i32_load(r.i32_const(0))),r.setLocal("p",r.getLocal("old0")),r.i32_store(r.i32_const(0),r.i32_and(r.i32_add(r.i32_add(r.getLocal("old0"),r.i32_const(32)),r.getLocal("nbits")),r.i32_const(4294967288))),r.setLocal("i",r.i32_const(1)),r.setLocal("last",u(r.i32_const(0))),r.setLocal("carry",r.i32_const(0)),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("i"),r.getLocal("nbits"))),r.setLocal("cur",u(r.getLocal("i"))),r.if(r.getLocal("last"),r.if(r.getLocal("cur"),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(1)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(255)]),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(255)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(0)),..._(1)])),r.if(r.getLocal("cur"),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(1)),..._(0)],[...r.setLocal("last",r.i32_const(1)),...r.setLocal("carry",r.i32_const(0)),..._(0)]),r.if(r.getLocal("carry"),[...r.setLocal("last",r.i32_const(1)),...r.setLocal("carry",r.i32_const(0)),..._(0)],[...r.setLocal("last",r.i32_const(0)),...r.setLocal("carry",r.i32_const(0)),..._(0)]))),r.setLocal("i",r.i32_add(r.getLocal("i"),r.i32_const(1))),r.br(0))),r.if(r.getLocal("last"),r.if(r.getLocal("carry"),[..._(255),..._(0),..._(1)],[..._(1)]),r.if(r.getLocal("carry"),[..._(0),..._(1)])),r.setLocal("p",r.i32_sub(r.getLocal("p"),r.i32_const(1))),r.call(l,r.getLocal("base"),d),r.call(c,r.getLocal("r")),r.block(r.loop(r.call(i,r.getLocal("r"),r.getLocal("r")),r.setLocal("cur",r.i32_load8_u(r.getLocal("p"))),r.if(r.getLocal("cur"),r.if(r.i32_eq(r.getLocal("cur"),r.i32_const(1)),r.call(o,r.getLocal("r"),d,r.getLocal("r")),r.call(n,r.getLocal("r"),d,r.getLocal("r")))),r.br_if(1,r.i32_eq(r.getLocal("old0"),r.getLocal("p"))),r.setLocal("p",r.i32_sub(r.getLocal("p"),r.i32_const(1))),r.br(0))),r.i32_store(r.i32_const(0),r.getLocal("old0")))},gc=Bl,fc=function(t,a,e,o,i){const n=8*t.modules[a].n64;function l(){const o=t.addFunction(e);o.addParam("pBases","i32"),o.addParam("pScalars","i32"),o.addParam("scalarSize","i32"),o.addParam("n","i32"),o.addParam("pr","i32"),o.addLocal("chunkSize","i32"),o.addLocal("nChunks","i32"),o.addLocal("itScalar","i32"),o.addLocal("endScalar","i32"),o.addLocal("itBase","i32"),o.addLocal("itBit","i32"),o.addLocal("i","i32"),o.addLocal("j","i32"),o.addLocal("nTable","i32"),o.addLocal("pTable","i32"),o.addLocal("idx","i32"),o.addLocal("pIdxTable","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n)),c=t.alloc([17,17,17,17,17,17,17,17,17,17,16,16,15,14,13,13,12,11,10,9,8,7,7,6,5,4,3,2,1,1,1,1]);o.addCode(i.call(a+"_zero",i.getLocal("pr")),i.if(i.i32_eqz(i.getLocal("n")),i.ret([])),i.setLocal("chunkSize",i.i32_load8_u(i.i32_clz(i.getLocal("n")),c)),i.setLocal("nChunks",i.i32_add(i.i32_div_u(i.i32_sub(i.i32_shl(i.getLocal("scalarSize"),i.i32_const(3)),i.i32_const(1)),i.getLocal("chunkSize")),i.i32_const(1))),i.setLocal("itBit",i.i32_mul(i.i32_sub(i.getLocal("nChunks"),i.i32_const(1)),i.getLocal("chunkSize"))),i.block(i.loop(i.br_if(1,i.i32_lt_s(i.getLocal("itBit"),i.i32_const(0))),i.if(i.i32_eqz(i.call(a+"_isZero",i.getLocal("pr"))),[...i.setLocal("j",i.i32_const(0)),...i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("j"),i.getLocal("chunkSize"))),i.call(a+"_double",i.getLocal("pr"),i.getLocal("pr")),i.setLocal("j",i.i32_add(i.getLocal("j"),i.i32_const(1))),i.br(0)))]),i.call(e+"_chunk",i.getLocal("pBases"),i.getLocal("pScalars"),i.getLocal("scalarSize"),i.getLocal("n"),i.getLocal("itBit"),i.getLocal("chunkSize"),l),i.call(a+"_add",i.getLocal("pr"),l,i.getLocal("pr")),i.setLocal("itBit",i.i32_sub(i.getLocal("itBit"),i.getLocal("chunkSize"))),i.br(0))))}!function(){const a=t.addFunction(e+"_getChunk");a.addParam("pScalar","i32"),a.addParam("scalarSize","i32"),a.addParam("startBit","i32"),a.addParam("chunkSize","i32"),a.addLocal("bitsToEnd","i32"),a.addLocal("mask","i32"),a.setReturnType("i32");const o=a.getCodeBuilder();a.addCode(o.setLocal("bitsToEnd",o.i32_sub(o.i32_mul(o.getLocal("scalarSize"),o.i32_const(8)),o.getLocal("startBit"))),o.if(o.i32_gt_s(o.getLocal("chunkSize"),o.getLocal("bitsToEnd")),o.setLocal("mask",o.i32_sub(o.i32_shl(o.i32_const(1),o.getLocal("bitsToEnd")),o.i32_const(1))),o.setLocal("mask",o.i32_sub(o.i32_shl(o.i32_const(1),o.getLocal("chunkSize")),o.i32_const(1)))),o.i32_and(o.i32_shr_u(o.i32_load(o.i32_add(o.getLocal("pScalar"),o.i32_shr_u(o.getLocal("startBit"),o.i32_const(3))),0,0),o.i32_and(o.getLocal("startBit"),o.i32_const(7))),o.getLocal("mask")))}(),function(){const o=t.addFunction(e+"_reduceTable");o.addParam("pTable","i32"),o.addParam("p","i32"),o.addLocal("half","i32"),o.addLocal("it1","i32"),o.addLocal("it2","i32"),o.addLocal("pAcc","i32");const i=o.getCodeBuilder();o.addCode(i.if(i.i32_eq(i.getLocal("p"),i.i32_const(1)),i.ret([])),i.setLocal("half",i.i32_shl(i.i32_const(1),i.i32_sub(i.getLocal("p"),i.i32_const(1)))),i.setLocal("it1",i.getLocal("pTable")),i.setLocal("it2",i.i32_add(i.getLocal("pTable"),i.i32_mul(i.getLocal("half"),i.i32_const(n)))),i.setLocal("pAcc",i.i32_sub(i.getLocal("it2"),i.i32_const(n))),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("it1"),i.getLocal("pAcc"))),i.call(a+"_add",i.getLocal("it1"),i.getLocal("it2"),i.getLocal("it1")),i.call(a+"_add",i.getLocal("pAcc"),i.getLocal("it2"),i.getLocal("pAcc")),i.setLocal("it1",i.i32_add(i.getLocal("it1"),i.i32_const(n))),i.setLocal("it2",i.i32_add(i.getLocal("it2"),i.i32_const(n))),i.br(0))),i.call(e+"_reduceTable",i.getLocal("pTable"),i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.setLocal("p",i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("p"))),i.call(a+"_double",i.getLocal("pAcc"),i.getLocal("pAcc")),i.setLocal("p",i.i32_sub(i.getLocal("p"),i.i32_const(1))),i.br(0))),i.call(a+"_add",i.getLocal("pTable"),i.getLocal("pAcc"),i.getLocal("pTable")))}(),function(){const l=t.addFunction(e+"_chunk");l.addParam("pBases","i32"),l.addParam("pScalars","i32"),l.addParam("scalarSize","i32"),l.addParam("n","i32"),l.addParam("startBit","i32"),l.addParam("chunkSize","i32"),l.addParam("pr","i32"),l.addLocal("nChunks","i32"),l.addLocal("itScalar","i32"),l.addLocal("endScalar","i32"),l.addLocal("itBase","i32"),l.addLocal("i","i32"),l.addLocal("j","i32"),l.addLocal("nTable","i32"),l.addLocal("pTable","i32"),l.addLocal("idx","i32"),l.addLocal("pIdxTable","i32");const c=l.getCodeBuilder();l.addCode(c.if(c.i32_eqz(c.getLocal("n")),[...c.call(a+"_zero",c.getLocal("pr")),...c.ret([])]),c.setLocal("nTable",c.i32_shl(c.i32_const(1),c.getLocal("chunkSize"))),c.setLocal("pTable",c.i32_load(c.i32_const(0))),c.i32_store(c.i32_const(0),c.i32_add(c.getLocal("pTable"),c.i32_mul(c.getLocal("nTable"),c.i32_const(n)))),c.setLocal("j",c.i32_const(0)),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("j"),c.getLocal("nTable"))),c.call(a+"_zero",c.i32_add(c.getLocal("pTable"),c.i32_mul(c.getLocal("j"),c.i32_const(n)))),c.setLocal("j",c.i32_add(c.getLocal("j"),c.i32_const(1))),c.br(0))),c.setLocal("itBase",c.getLocal("pBases")),c.setLocal("itScalar",c.getLocal("pScalars")),c.setLocal("endScalar",c.i32_add(c.getLocal("pScalars"),c.i32_mul(c.getLocal("n"),c.getLocal("scalarSize")))),c.block(c.loop(c.br_if(1,c.i32_eq(c.getLocal("itScalar"),c.getLocal("endScalar"))),c.setLocal("idx",c.call(e+"_getChunk",c.getLocal("itScalar"),c.getLocal("scalarSize"),c.getLocal("startBit"),c.getLocal("chunkSize"))),c.if(c.getLocal("idx"),[...c.setLocal("pIdxTable",c.i32_add(c.getLocal("pTable"),c.i32_mul(c.i32_sub(c.getLocal("idx"),c.i32_const(1)),c.i32_const(n)))),...c.call(o,c.getLocal("pIdxTable"),c.getLocal("itBase"),c.getLocal("pIdxTable"))]),c.setLocal("itScalar",c.i32_add(c.getLocal("itScalar"),c.getLocal("scalarSize"))),c.setLocal("itBase",c.i32_add(c.getLocal("itBase"),c.i32_const(i))),c.br(0))),c.call(e+"_reduceTable",c.getLocal("pTable"),c.getLocal("chunkSize")),c.call(a+"_copy",c.getLocal("pTable"),c.getLocal("pr")),c.i32_store(c.i32_const(0),c.getLocal("pTable")))}(),l(),t.exportFunction(e),t.exportFunction(e+"_chunk")};var hc=function(t,a,e,o){const i=t.modules[e].n64,n=8*i;if(t.modules[a])return a;return t.modules[a]={n64:3*i},function(){const o=t.addFunction(a+"_isZeroAffine");o.addParam("p1","i32"),o.setReturnType("i32");const i=o.getCodeBuilder();o.addCode(i.i32_and(i.call(e+"_isZero",i.getLocal("p1")),i.call(e+"_isZero",i.i32_add(i.getLocal("p1"),i.i32_const(n)))))}(),function(){const o=t.addFunction(a+"_isZero");o.addParam("p1","i32"),o.setReturnType("i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_isZero",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))))}(),function(){const o=t.addFunction(a+"_zeroAffine");o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_zero",i.getLocal("pr"))),o.addCode(i.call(e+"_zero",i.i32_add(i.getLocal("pr"),i.i32_const(n))))}(),function(){const o=t.addFunction(a+"_zero");o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_zero",i.getLocal("pr"))),o.addCode(i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(n)))),o.addCode(i.call(e+"_zero",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))))}(),function(){const e=t.addFunction(a+"_copyAffine");e.addParam("ps","i32"),e.addParam("pd","i32");const o=e.getCodeBuilder();for(let t=0;t<2*i;t++)e.addCode(o.i64_store(o.getLocal("pd"),8*t,o.i64_load(o.getLocal("ps"),8*t)))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("ps","i32"),e.addParam("pd","i32");const o=e.getCodeBuilder();for(let t=0;t<3*i;t++)e.addCode(o.i64_store(o.getLocal("pd"),8*t,o.i64_load(o.getLocal("ps"),8*t)))}(),function(){const o=t.addFunction(a+"_toJacobian");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n)),d=i.i32_add(i.getLocal("pr"),i.i32_const(2*n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),i.call(a+"_zero",i.getLocal("pr")),[...i.call(e+"_one",d),...i.call(e+"_copy",c,r),...i.call(e+"_copy",l,s)]))}(),function(){const o=t.addFunction(a+"_eqAffine");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder();o.addCode(i.ret(i.i32_and(i.call(e+"_eq",i.getLocal("p1"),i.getLocal("p2")),i.call(e+"_eq",i.i32_add(i.getLocal("p1"),i.i32_const(n)),i.i32_add(i.getLocal("p2"),i.i32_const(n))))))}(),function(){const o=t.addFunction(a+"_eqMixed");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.ret(i.call(a+"_isZeroAffine",i.getLocal("p2")))),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),i.ret(i.i32_const(0))),i.if(i.call(e+"_isOne",s),i.ret(i.call(a+"_eqAffine",i.getLocal("p1"),i.getLocal("p2")))),i.call(e+"_square",s,u),i.call(e+"_mul",r,u,_),i.call(e+"_mul",s,u,g),i.call(e+"_mul",d,g,f),i.if(i.call(e+"_eq",l,_),i.if(i.call(e+"_eq",c,f),i.ret(i.i32_const(1)))),i.ret(i.i32_const(0)))}(),function(){const o=t.addFunction(a+"_eq");o.addParam("p1","i32"),o.addParam("p2","i32"),o.setReturnType("i32"),o.addLocal("z1","i32"),o.addLocal("z2","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n));o.addCode(i.setLocal("z2",i.i32_add(i.getLocal("p2"),i.i32_const(2*n))));const u=i.getLocal("z2"),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.ret(i.call(a+"_isZero",i.getLocal("p2")))),i.if(i.call(a+"_isZero",i.getLocal("p2")),i.ret(i.i32_const(0))),i.if(i.call(e+"_isOne",s),i.ret(i.call(a+"_eqMixed",i.getLocal("p2"),i.getLocal("p1")))),i.if(i.call(e+"_isOne",u),i.ret(i.call(a+"_eqMixed",i.getLocal("p1"),i.getLocal("p2")))),i.call(e+"_square",s,_),i.call(e+"_square",u,g),i.call(e+"_mul",l,g,f),i.call(e+"_mul",r,_,h),i.call(e+"_mul",s,_,p),i.call(e+"_mul",u,g,m),i.call(e+"_mul",c,m,L),i.call(e+"_mul",d,p,b),i.if(i.call(e+"_eq",f,h),i.if(i.call(e+"_eq",L,b),i.ret(i.i32_const(1)))),i.ret(i.i32_const(0)))}(),function(){const o=t.addFunction(a+"_doubleAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n)),d=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),[...i.call(a+"_toJacobian",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.call(e+"_square",l,u),i.call(e+"_square",c,_),i.call(e+"_square",_,g),i.call(e+"_add",l,_,f),i.call(e+"_square",f,f),i.call(e+"_sub",f,u,f),i.call(e+"_sub",f,g,f),i.call(e+"_add",f,f,f),i.call(e+"_add",u,u,h),i.call(e+"_add",h,u,h),i.call(e+"_add",c,c,d),i.call(e+"_square",h,s),i.call(e+"_sub",s,f,s),i.call(e+"_sub",s,f,s),i.call(e+"_add",g,g,p),i.call(e+"_add",p,p,p),i.call(e+"_add",p,p,p),i.call(e+"_sub",f,s,r),i.call(e+"_mul",r,h,r),i.call(e+"_sub",r,p,r))}(),function(){const o=t.addFunction(a+"_double");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.ret(i.call(a+"_doubleAffine",i.getLocal("p1"),i.getLocal("pr"))),...i.ret([])]),i.call(e+"_square",l,_),i.call(e+"_square",c,g),i.call(e+"_square",g,f),i.call(e+"_add",l,g,h),i.call(e+"_square",h,h),i.call(e+"_sub",h,_,h),i.call(e+"_sub",h,f,h),i.call(e+"_add",h,h,h),i.call(e+"_add",_,_,p),i.call(e+"_add",p,_,p),i.call(e+"_square",p,m),i.call(e+"_mul",c,s,L),i.call(e+"_add",h,h,r),i.call(e+"_sub",m,r,r),i.call(e+"_add",f,f,b),i.call(e+"_add",b,b,b),i.call(e+"_add",b,b,b),i.call(e+"_sub",h,r,d),i.call(e+"_mul",d,p,d),i.call(e+"_sub",d,b,d),i.call(e+"_add",L,L,u))}(),function(){const o=t.addFunction(a+"_addAffine");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("p2"),r=i.i32_add(i.getLocal("p2"),i.i32_const(n)),d=i.getLocal("pr"),u=i.i32_add(i.getLocal("pr"),i.i32_const(n)),_=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZeroAffine",i.getLocal("p1")),[...i.call(a+"_copyAffine",i.getLocal("p2"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),[...i.call(a+"_copyAffine",i.getLocal("p1"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(e+"_eq",l,s),i.if(i.call(e+"_eq",c,r),[...i.call(a+"_doubleAffine",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",s,l,g),i.call(e+"_sub",r,c,h),i.call(e+"_square",g,f),i.call(e+"_add",f,f,p),i.call(e+"_add",p,p,p),i.call(e+"_mul",g,p,m),i.call(e+"_add",h,h,L),i.call(e+"_mul",l,p,w),i.call(e+"_square",L,b),i.call(e+"_add",w,w,y),i.call(e+"_sub",b,m,d),i.call(e+"_sub",d,y,d),i.call(e+"_mul",c,m,A),i.call(e+"_add",A,A,A),i.call(e+"_sub",w,d,u),i.call(e+"_mul",u,L,u),i.call(e+"_sub",u,A,u),i.call(e+"_add",g,g,_))}(),function(){const o=t.addFunction(a+"_addMixed");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n)),u=i.getLocal("pr"),_=i.i32_add(i.getLocal("pr"),i.i32_const(n)),g=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),f=i.i32_const(t.alloc(n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n)),C=i.i32_const(t.alloc(n)),F=i.i32_const(t.alloc(n)),x=i.i32_const(t.alloc(n)),I=i.i32_const(t.alloc(n)),B=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copyAffine",i.getLocal("p2"),i.getLocal("pr")),...i.call(e+"_one",i.i32_add(i.getLocal("pr"),i.i32_const(2*n))),...i.ret([])]),i.if(i.call(a+"_isZeroAffine",i.getLocal("p2")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.call(a+"_addAffine",l,r,u),...i.ret([])]),i.call(e+"_square",s,f),i.call(e+"_mul",r,f,h),i.call(e+"_mul",s,f,p),i.call(e+"_mul",d,p,m),i.if(i.call(e+"_eq",l,h),i.if(i.call(e+"_eq",c,m),[...i.call(a+"_doubleAffine",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",h,l,L),i.call(e+"_sub",m,c,w),i.call(e+"_square",L,b),i.call(e+"_add",b,b,y),i.call(e+"_add",y,y,y),i.call(e+"_mul",L,y,A),i.call(e+"_add",w,w,C),i.call(e+"_mul",l,y,x),i.call(e+"_square",C,F),i.call(e+"_add",x,x,I),i.call(e+"_sub",F,A,u),i.call(e+"_sub",u,I,u),i.call(e+"_mul",c,A,B),i.call(e+"_add",B,B,B),i.call(e+"_sub",x,u,_),i.call(e+"_mul",_,C,_),i.call(e+"_sub",_,B,_),i.call(e+"_add",s,L,g),i.call(e+"_square",g,g),i.call(e+"_sub",g,f,g),i.call(e+"_sub",g,b,g))}(),function(){const o=t.addFunction(a+"_add");o.addParam("p1","i32"),o.addParam("p2","i32"),o.addParam("pr","i32"),o.addLocal("z1","i32"),o.addLocal("z2","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n));o.addCode(i.setLocal("z1",i.i32_add(i.getLocal("p1"),i.i32_const(2*n))));const s=i.getLocal("z1"),r=i.getLocal("p2"),d=i.i32_add(i.getLocal("p2"),i.i32_const(n));o.addCode(i.setLocal("z2",i.i32_add(i.getLocal("p2"),i.i32_const(2*n))));const u=i.getLocal("z2"),_=i.getLocal("pr"),g=i.i32_add(i.getLocal("pr"),i.i32_const(n)),f=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),h=i.i32_const(t.alloc(n)),p=i.i32_const(t.alloc(n)),m=i.i32_const(t.alloc(n)),L=i.i32_const(t.alloc(n)),b=i.i32_const(t.alloc(n)),w=i.i32_const(t.alloc(n)),y=i.i32_const(t.alloc(n)),A=i.i32_const(t.alloc(n)),C=i.i32_const(t.alloc(n)),F=i.i32_const(t.alloc(n)),x=i.i32_const(t.alloc(n)),I=i.i32_const(t.alloc(n)),B=i.i32_const(t.alloc(n)),E=i.i32_const(t.alloc(n)),v=i.i32_const(t.alloc(n)),S=i.i32_const(t.alloc(n)),P=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(a+"_copy",i.getLocal("p2"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(a+"_isZero",i.getLocal("p2")),[...i.call(a+"_copy",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])]),i.if(i.call(e+"_isOne",s),[...i.call(a+"_addMixed",r,l,_),...i.ret([])]),i.if(i.call(e+"_isOne",u),[...i.call(a+"_addMixed",l,r,_),...i.ret([])]),i.call(e+"_square",s,h),i.call(e+"_square",u,p),i.call(e+"_mul",l,p,m),i.call(e+"_mul",r,h,L),i.call(e+"_mul",s,h,b),i.call(e+"_mul",u,p,w),i.call(e+"_mul",c,w,y),i.call(e+"_mul",d,b,A),i.if(i.call(e+"_eq",m,L),i.if(i.call(e+"_eq",y,A),[...i.call(a+"_double",i.getLocal("p1"),i.getLocal("pr")),...i.ret([])])),i.call(e+"_sub",L,m,C),i.call(e+"_sub",A,y,F),i.call(e+"_add",C,C,x),i.call(e+"_square",x,x),i.call(e+"_mul",C,x,I),i.call(e+"_add",F,F,B),i.call(e+"_mul",m,x,v),i.call(e+"_square",B,E),i.call(e+"_add",v,v,S),i.call(e+"_sub",E,I,_),i.call(e+"_sub",_,S,_),i.call(e+"_mul",y,I,P),i.call(e+"_add",P,P,P),i.call(e+"_sub",v,_,g),i.call(e+"_mul",g,B,g),i.call(e+"_sub",g,P,g),i.call(e+"_add",s,u,f),i.call(e+"_square",f,f),i.call(e+"_sub",f,h,f),i.call(e+"_sub",f,p,f),i.call(e+"_mul",f,C,f))}(),function(){const o=t.addFunction(a+"_negAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.getLocal("pr"),r=i.i32_add(i.getLocal("pr"),i.i32_const(n));o.addCode(i.call(e+"_copy",l,s),i.call(e+"_neg",c,r))}(),function(){const o=t.addFunction(a+"_neg");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n));o.addCode(i.call(e+"_copy",l,r),i.call(e+"_neg",c,d),i.call(e+"_copy",s,u))}(),function(){const e=t.addFunction(a+"_subAffine");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_negAffine",o.getLocal("p2"),i),o.call(a+"_addAffine",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const e=t.addFunction(a+"_subMixed");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_negAffine",o.getLocal("p2"),i),o.call(a+"_addMixed",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("p1","i32"),e.addParam("p2","i32"),e.addParam("pr","i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(3*n));e.addCode(o.call(a+"_neg",o.getLocal("p2"),i),o.call(a+"_add",o.getLocal("p1"),i,o.getLocal("pr")))}(),function(){const o=t.addFunction(a+"_fromMontgomeryAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_fromMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<2;t++)o.addCode(i.call(e+"_fromMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_fromMontgomery");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_fromMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<3;t++)o.addCode(i.call(e+"_fromMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toMontgomeryAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_toMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<2;t++)o.addCode(i.call(e+"_toMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toMontgomery");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder();o.addCode(i.call(e+"_toMontgomery",i.getLocal("p1"),i.getLocal("pr")));for(let t=1;t<3;t++)o.addCode(i.call(e+"_toMontgomery",i.i32_add(i.getLocal("p1"),i.i32_const(t*n)),i.i32_add(i.getLocal("pr"),i.i32_const(t*n))))}(),function(){const o=t.addFunction(a+"_toAffine");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_const(t.alloc(n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),[...i.call(e+"_zero",r),...i.call(e+"_zero",d)],[...i.call(e+"_inverse",s,u),...i.call(e+"_square",u,_),...i.call(e+"_mul",u,_,g),...i.call(e+"_mul",l,_,r),...i.call(e+"_mul",c,g,d)]))}(),function(){const i=t.addFunction(a+"_inCurveAffine");i.addParam("pIn","i32"),i.setReturnType("i32");const l=i.getCodeBuilder(),c=l.getLocal("pIn"),s=l.i32_add(l.getLocal("pIn"),l.i32_const(n)),r=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(n));i.addCode(l.call(e+"_square",s,r),l.call(e+"_square",c,d),l.call(e+"_mul",c,d,d),l.call(e+"_add",d,l.i32_const(o),d),l.ret(l.call(e+"_eq",r,d)))}(),function(){const e=t.addFunction(a+"_inCurve");e.addParam("pIn","i32"),e.setReturnType("i32");const o=e.getCodeBuilder(),i=o.i32_const(t.alloc(2*n));e.addCode(o.call(a+"_toAffine",o.getLocal("pIn"),i),o.ret(o.call(a+"_inCurveAffine",i)))}(),function(){const o=t.addFunction(a+"_batchToAffine");o.addParam("pIn","i32"),o.addParam("n","i32"),o.addParam("pOut","i32"),o.addLocal("pAux","i32"),o.addLocal("itIn","i32"),o.addLocal("itAux","i32"),o.addLocal("itOut","i32"),o.addLocal("i","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n));o.addCode(i.setLocal("pAux",i.i32_load(i.i32_const(0))),i.i32_store(i.i32_const(0),i.i32_add(i.getLocal("pAux"),i.i32_mul(i.getLocal("n"),i.i32_const(n)))),i.call(e+"_batchInverse",i.i32_add(i.getLocal("pIn"),i.i32_const(2*n)),i.i32_const(3*n),i.getLocal("n"),i.getLocal("pAux"),i.i32_const(n)),i.setLocal("itIn",i.getLocal("pIn")),i.setLocal("itAux",i.getLocal("pAux")),i.setLocal("itOut",i.getLocal("pOut")),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.if(i.call(e+"_isZero",i.getLocal("itAux")),[...i.call(e+"_zero",i.getLocal("itOut")),...i.call(e+"_zero",i.i32_add(i.getLocal("itOut"),i.i32_const(n)))],[...i.call(e+"_mul",i.getLocal("itAux"),i.i32_add(i.getLocal("itIn"),i.i32_const(n)),l),...i.call(e+"_square",i.getLocal("itAux"),i.getLocal("itAux")),...i.call(e+"_mul",i.getLocal("itAux"),i.getLocal("itIn"),i.getLocal("itOut")),...i.call(e+"_mul",i.getLocal("itAux"),l,i.i32_add(i.getLocal("itOut"),i.i32_const(n)))]),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.i32_const(3*n))),i.setLocal("itOut",i.i32_add(i.getLocal("itOut"),i.i32_const(2*n))),i.setLocal("itAux",i.i32_add(i.getLocal("itAux"),i.i32_const(n))),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))),i.i32_store(i.i32_const(0),i.getLocal("pAux")))}(),function(){const o=t.addFunction(a+"_normalize");o.addParam("p1","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),l=i.getLocal("p1"),c=i.i32_add(i.getLocal("p1"),i.i32_const(n)),s=i.i32_add(i.getLocal("p1"),i.i32_const(2*n)),r=i.getLocal("pr"),d=i.i32_add(i.getLocal("pr"),i.i32_const(n)),u=i.i32_add(i.getLocal("pr"),i.i32_const(2*n)),_=i.i32_const(t.alloc(n)),g=i.i32_const(t.alloc(n)),f=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("p1")),i.call(a+"_zero",i.getLocal("pr")),[...i.call(e+"_inverse",s,_),...i.call(e+"_square",_,g),...i.call(e+"_mul",_,g,f),...i.call(e+"_mul",l,g,r),...i.call(e+"_mul",c,f,d),...i.call(e+"_one",u)]))}(),function(){const e=t.addFunction(a+"__reverseBytes");e.addParam("pIn","i32"),e.addParam("n","i32"),e.addParam("pOut","i32"),e.addLocal("itOut","i32"),e.addLocal("itIn","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("itOut",o.i32_sub(o.i32_add(o.getLocal("pOut"),o.getLocal("n")),o.i32_const(1))),o.setLocal("itIn",o.getLocal("pIn")),o.block(o.loop(o.br_if(1,o.i32_lt_s(o.getLocal("itOut"),o.getLocal("pOut"))),o.i32_store8(o.getLocal("itOut"),o.i32_load8_u(o.getLocal("itIn"))),o.setLocal("itOut",o.i32_sub(o.getLocal("itOut"),o.i32_const(1))),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.i32_const(1))),o.br(0))))}(),function(){const e=t.addFunction(a+"_LEMtoU");e.addParam("pIn","i32"),e.addParam("pOut","i32");const o=e.getCodeBuilder(),i=t.alloc(2*n),l=o.i32_const(i),c=o.i32_const(i),s=o.i32_const(i+n);e.addCode(o.if(o.call(a+"_isZeroAffine",o.getLocal("pIn")),[...o.call(a+"_zeroAffine",o.getLocal("pOut")),...o.i32_store8(o.getLocal("pOut"),o.i32_const(64)),...o.ret([])]),o.call(a+"_fromMontgomeryAffine",o.getLocal("pIn"),l),o.call(a+"__reverseBytes",c,o.i32_const(n),o.getLocal("pOut")),o.call(a+"__reverseBytes",s,o.i32_const(n),o.i32_add(o.getLocal("pOut"),o.i32_const(n))))}(),function(){const o=t.addFunction(a+"_LEMtoC");o.addParam("pIn","i32"),o.addParam("pOut","i32");const i=o.getCodeBuilder(),l=i.i32_const(t.alloc(n));o.addCode(i.if(i.call(a+"_isZero",i.getLocal("pIn")),[...i.call(e+"_zero",i.getLocal("pOut")),...i.i32_store8(i.getLocal("pOut"),i.i32_const(64)),...i.ret([])]),i.call(e+"_fromMontgomery",i.getLocal("pIn"),l),i.call(a+"__reverseBytes",l,i.i32_const(n),i.getLocal("pOut")),i.if(i.i32_eq(i.call(e+"_sign",i.i32_add(i.getLocal("pIn"),i.i32_const(n))),i.i32_const(-1)),i.i32_store8(i.getLocal("pOut"),i.i32_or(i.i32_load8_u(i.getLocal("pOut")),i.i32_const(128)))))}(),function(){const e=t.addFunction(a+"_UtoLEM");e.addParam("pIn","i32"),e.addParam("pOut","i32");const o=e.getCodeBuilder(),i=t.alloc(2*n),l=o.i32_const(i),c=o.i32_const(i),s=o.i32_const(i+n);e.addCode(o.if(o.i32_and(o.i32_load8_u(o.getLocal("pIn")),o.i32_const(64)),[...o.call(a+"_zeroAffine",o.getLocal("pOut")),...o.ret([])]),o.call(a+"__reverseBytes",o.getLocal("pIn"),o.i32_const(n),c),o.call(a+"__reverseBytes",o.i32_add(o.getLocal("pIn"),o.i32_const(n)),o.i32_const(n),s),o.call(a+"_toMontgomeryAffine",l,o.getLocal("pOut")))}(),function(){const i=t.addFunction(a+"_CtoLEM");i.addParam("pIn","i32"),i.addParam("pOut","i32"),i.addLocal("firstByte","i32"),i.addLocal("greatest","i32");const l=i.getCodeBuilder(),c=t.alloc(2*n),s=l.i32_const(c),r=l.i32_const(c+n);i.addCode(l.setLocal("firstByte",l.i32_load8_u(l.getLocal("pIn"))),l.if(l.i32_and(l.getLocal("firstByte"),l.i32_const(64)),[...l.call(a+"_zeroAffine",l.getLocal("pOut")),...l.ret([])]),l.setLocal("greatest",l.i32_and(l.getLocal("firstByte"),l.i32_const(128))),l.call(e+"_copy",l.getLocal("pIn"),r),l.i32_store8(r,l.i32_and(l.getLocal("firstByte"),l.i32_const(63))),l.call(a+"__reverseBytes",r,l.i32_const(n),s),l.call(e+"_toMontgomery",s,l.getLocal("pOut")),l.call(e+"_square",l.getLocal("pOut"),r),l.call(e+"_mul",l.getLocal("pOut"),r,r),l.call(e+"_add",r,l.i32_const(o),r),l.call(e+"_sqrt",r,r),l.call(e+"_neg",r,s),l.if(l.i32_eq(l.call(e+"_sign",r),l.i32_const(-1)),l.if(l.getLocal("greatest"),l.call(e+"_copy",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(e+"_neg",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n)))),l.if(l.getLocal("greatest"),l.call(e+"_neg",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))),l.call(e+"_copy",r,l.i32_add(l.getLocal("pOut"),l.i32_const(n))))))}(),gc(t,a+"_batchLEMtoU",a+"_LEMtoU",2*n,2*n),gc(t,a+"_batchLEMtoC",a+"_LEMtoC",2*n,n),gc(t,a+"_batchUtoLEM",a+"_UtoLEM",2*n,2*n),gc(t,a+"_batchCtoLEM",a+"_CtoLEM",n,2*n,!0),gc(t,a+"_batchToJacobian",a+"_toJacobian",2*n,3*n,!0),fc(t,a,a+"_multiexp",a+"_add",3*n),fc(t,a,a+"_multiexpAffine",a+"_addMixed",2*n),_c(t,a+"_timesScalar",3*n,a+"_add",a+"_double",a+"_sub",a+"_copy",a+"_zero"),_c(t,a+"_timesScalarAffine",2*n,a+"_addMixed",a+"_double",a+"_subMixed",a+"_copyAffine",a+"_zero"),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isZeroAffine"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_eqMixed"),t.exportFunction(a+"_eqAffine"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_copyAffine"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_zeroAffine"),t.exportFunction(a+"_double"),t.exportFunction(a+"_doubleAffine"),t.exportFunction(a+"_add"),t.exportFunction(a+"_addMixed"),t.exportFunction(a+"_addAffine"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_negAffine"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_subMixed"),t.exportFunction(a+"_subAffine"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_fromMontgomeryAffine"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_toMontgomeryAffine"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_timesScalarAffine"),t.exportFunction(a+"_normalize"),t.exportFunction(a+"_LEMtoU"),t.exportFunction(a+"_LEMtoC"),t.exportFunction(a+"_UtoLEM"),t.exportFunction(a+"_CtoLEM"),t.exportFunction(a+"_batchLEMtoU"),t.exportFunction(a+"_batchLEMtoC"),t.exportFunction(a+"_batchUtoLEM"),t.exportFunction(a+"_batchCtoLEM"),t.exportFunction(a+"_toAffine"),t.exportFunction(a+"_toJacobian"),t.exportFunction(a+"_batchToAffine"),t.exportFunction(a+"_batchToJacobian"),t.exportFunction(a+"_inCurve"),t.exportFunction(a+"_inCurveAffine"),a};const{isOdd:pc,modInv:mc,modPow:Lc}=vl,bc=Fl;var wc=function(t,a,e,o,i){const n=8*t.modules[o].n64,l=8*t.modules[e].n64,c=t.modules[o].q;let s=c-1n,r=0;for(;!pc(s);)r++,s>>=1n;let d=2n;for(;1n===Lc(d,c>>1n,c);)d+=1n;const u=new Array(r+1);u[r]=Lc(d,s,c);let _=r-1;for(;_>=0;)u[_]=Lc(u[_+1],2n,c),_--;const g=[],f=(1n<>e);return a}const x=Array(256);for(let t=0;t<256;t++)x[t]=F(t);const I=t.alloc(x);function B(){const e=t.addFunction(a+"_fft");e.addParam("px","i32"),e.addParam("n","i32"),e.addLocal("bits","i32");const i=e.getCodeBuilder(),l=i.i32_const(t.alloc(n));e.addCode(i.setLocal("bits",i.call(a+"__log2",i.getLocal("n"))),i.call(o+"_one",l),i.call(a+"_rawfft",i.getLocal("px"),i.getLocal("bits"),i.i32_const(0),l))}!function(){const e=t.addFunction(a+"__rev");e.addParam("x","i32"),e.addParam("bits","i32"),e.setReturnType("i32");const o=e.getCodeBuilder();e.addCode(o.i32_rotl(o.i32_add(o.i32_add(o.i32_shl(o.i32_load8_u(o.i32_and(o.getLocal("x"),o.i32_const(255)),I,0),o.i32_const(24)),o.i32_shl(o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(8)),o.i32_const(255)),I,0),o.i32_const(16))),o.i32_add(o.i32_shl(o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(16)),o.i32_const(255)),I,0),o.i32_const(8)),o.i32_load8_u(o.i32_and(o.i32_shr_u(o.getLocal("x"),o.i32_const(24)),o.i32_const(255)),I,0))),o.getLocal("bits")))}(),function(){const o=t.addFunction(a+"__reversePermutation");o.addParam("px","i32"),o.addParam("bits","i32"),o.addLocal("n","i32"),o.addLocal("i","i32"),o.addLocal("ri","i32"),o.addLocal("idx1","i32"),o.addLocal("idx2","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(l));o.addCode(i.setLocal("n",i.i32_shl(i.i32_const(1),i.getLocal("bits"))),i.setLocal("i",i.i32_const(0)),i.block(i.loop(i.br_if(1,i.i32_eq(i.getLocal("i"),i.getLocal("n"))),i.setLocal("idx1",i.i32_add(i.getLocal("px"),i.i32_mul(i.getLocal("i"),i.i32_const(l)))),i.setLocal("ri",i.call(a+"__rev",i.getLocal("i"),i.getLocal("bits"))),i.setLocal("idx2",i.i32_add(i.getLocal("px"),i.i32_mul(i.getLocal("ri"),i.i32_const(l)))),i.if(i.i32_lt_u(i.getLocal("i"),i.getLocal("ri")),[...i.call(e+"_copy",i.getLocal("idx1"),n),...i.call(e+"_copy",i.getLocal("idx2"),i.getLocal("idx1")),...i.call(e+"_copy",n,i.getLocal("idx2"))]),i.setLocal("i",i.i32_add(i.getLocal("i"),i.i32_const(1))),i.br(0))))}(),function(){const n=t.addFunction(a+"__fftFinal");n.addParam("px","i32"),n.addParam("bits","i32"),n.addParam("reverse","i32"),n.addParam("mulFactor","i32"),n.addLocal("n","i32"),n.addLocal("ndiv2","i32"),n.addLocal("pInv2","i32"),n.addLocal("i","i32"),n.addLocal("mask","i32"),n.addLocal("idx1","i32"),n.addLocal("idx2","i32");const c=n.getCodeBuilder(),s=c.i32_const(t.alloc(l));n.addCode(c.if(c.i32_and(c.i32_eqz(c.getLocal("reverse")),c.call(o+"_isOne",c.getLocal("mulFactor"))),c.ret([])),c.setLocal("n",c.i32_shl(c.i32_const(1),c.getLocal("bits"))),c.setLocal("mask",c.i32_sub(c.getLocal("n"),c.i32_const(1))),c.setLocal("i",c.i32_const(1)),c.setLocal("ndiv2",c.i32_shr_u(c.getLocal("n"),c.i32_const(1))),c.block(c.loop(c.br_if(1,c.i32_ge_u(c.getLocal("i"),c.getLocal("ndiv2"))),c.setLocal("idx1",c.i32_add(c.getLocal("px"),c.i32_mul(c.getLocal("i"),c.i32_const(l)))),c.setLocal("idx2",c.i32_add(c.getLocal("px"),c.i32_mul(c.i32_sub(c.getLocal("n"),c.getLocal("i")),c.i32_const(l)))),c.if(c.getLocal("reverse"),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[...c.call(e+"_copy",c.getLocal("idx1"),s),...c.call(e+"_copy",c.getLocal("idx2"),c.getLocal("idx1")),...c.call(e+"_copy",s,c.getLocal("idx2"))],[...c.call(e+"_copy",c.getLocal("idx1"),s),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(i,s,c.getLocal("mulFactor"),c.getLocal("idx2"))]),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[],[...c.call(i,c.getLocal("idx1"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx2"))])),c.setLocal("i",c.i32_add(c.getLocal("i"),c.i32_const(1))),c.br(0))),c.if(c.call(o+"_isOne",c.getLocal("mulFactor")),[],[...c.call(i,c.getLocal("px"),c.getLocal("mulFactor"),c.getLocal("px")),...c.setLocal("idx2",c.i32_add(c.getLocal("px"),c.i32_mul(c.getLocal("ndiv2"),c.i32_const(l)))),...c.call(i,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx2"))]))}(),function(){const c=t.addFunction(a+"_rawfft");c.addParam("px","i32"),c.addParam("bits","i32"),c.addParam("reverse","i32"),c.addParam("mulFactor","i32"),c.addLocal("s","i32"),c.addLocal("k","i32"),c.addLocal("j","i32"),c.addLocal("m","i32"),c.addLocal("mdiv2","i32"),c.addLocal("n","i32"),c.addLocal("pwm","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.call(a+"__reversePermutation",s.getLocal("px"),s.getLocal("bits")),s.setLocal("n",s.i32_shl(s.i32_const(1),s.getLocal("bits"))),s.setLocal("s",s.i32_const(1)),s.block(s.loop(s.br_if(1,s.i32_gt_u(s.getLocal("s"),s.getLocal("bits"))),s.setLocal("m",s.i32_shl(s.i32_const(1),s.getLocal("s"))),s.setLocal("pwm",s.i32_add(s.i32_const(h),s.i32_mul(s.getLocal("s"),s.i32_const(n)))),s.setLocal("k",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("k"),s.getLocal("n"))),s.call(o+"_one",r),s.setLocal("mdiv2",s.i32_shr_u(s.getLocal("m"),s.i32_const(1))),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_ge_u(s.getLocal("j"),s.getLocal("mdiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("px"),s.i32_mul(s.i32_add(s.getLocal("k"),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.i32_mul(s.getLocal("mdiv2"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("pwm"),r),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("k",s.i32_add(s.getLocal("k"),s.getLocal("m"))),s.br(0))),s.setLocal("s",s.i32_add(s.getLocal("s"),s.i32_const(1))),s.br(0))),s.call(a+"__fftFinal",s.getLocal("px"),s.getLocal("bits"),s.getLocal("reverse"),s.getLocal("mulFactor")))}(),function(){const e=t.addFunction(a+"__log2");e.addParam("n","i32"),e.setReturnType("i32"),e.addLocal("bits","i32"),e.addLocal("aux","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("aux",o.i32_shr_u(o.getLocal("n"),o.i32_const(1)))),e.addCode(o.setLocal("bits",o.i32_const(0))),e.addCode(o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("aux"))),o.setLocal("aux",o.i32_shr_u(o.getLocal("aux"),o.i32_const(1))),o.setLocal("bits",o.i32_add(o.getLocal("bits"),o.i32_const(1))),o.br(0)))),e.addCode(o.if(o.i32_ne(o.getLocal("n"),o.i32_shl(o.i32_const(1),o.getLocal("bits"))),o.unreachable())),e.addCode(o.if(o.i32_gt_u(o.getLocal("bits"),o.i32_const(r)),o.unreachable())),e.addCode(o.getLocal("bits"))}(),B(),function(){const e=t.addFunction(a+"_ifft");e.addParam("px","i32"),e.addParam("n","i32"),e.addLocal("bits","i32"),e.addLocal("pInv2","i32");const o=e.getCodeBuilder();e.addCode(o.setLocal("bits",o.call(a+"__log2",o.getLocal("n"))),o.setLocal("pInv2",o.i32_add(o.i32_const(L),o.i32_mul(o.getLocal("bits"),o.i32_const(n)))),o.call(a+"_rawfft",o.getLocal("px"),o.getLocal("bits"),o.i32_const(1),o.getLocal("pInv2")))}(),function(){const c=t.addFunction(a+"_fftJoin");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftJoinExt");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(e+"_add",s.getLocal("idx1"),s.getLocal("idx2"),d),s.call(i,s.getLocal("idx2"),s.getLocal("pShiftToM"),s.getLocal("idx2")),s.call(e+"_add",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(i,s.getLocal("idx2"),r,s.getLocal("idx2")),s.call(e+"_copy",d,s.getLocal("idx1")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftJoinExtInv");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_sub",s.getLocal("idx1"),d,s.getLocal("idx2")),s.call(i,s.getLocal("idx2"),s.getLocal("pSConst"),s.getLocal("idx2")),s.call(i,s.getLocal("idx1"),s.getLocal("pShiftToM"),s.getLocal("idx1")),s.call(e+"_sub",d,s.getLocal("idx1"),s.getLocal("idx1")),s.call(i,s.getLocal("idx1"),s.getLocal("pSConst"),s.getLocal("idx1")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const c=t.addFunction(a+"_fftMix");c.addParam("pBuff","i32"),c.addParam("n","i32"),c.addParam("exp","i32"),c.addLocal("nGroups","i32"),c.addLocal("nPerGroup","i32"),c.addLocal("nPerGroupDiv2","i32"),c.addLocal("pairOffset","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("j","i32"),c.addLocal("pwm","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l)),u=s.i32_const(t.alloc(l));c.addCode(s.setLocal("nPerGroup",s.i32_shl(s.i32_const(1),s.getLocal("exp"))),s.setLocal("nPerGroupDiv2",s.i32_shr_u(s.getLocal("nPerGroup"),s.i32_const(1))),s.setLocal("nGroups",s.i32_shr_u(s.getLocal("n"),s.getLocal("exp"))),s.setLocal("pairOffset",s.i32_mul(s.getLocal("nPerGroupDiv2"),s.i32_const(l))),s.setLocal("pwm",s.i32_add(s.i32_const(h),s.i32_mul(s.getLocal("exp"),s.i32_const(n)))),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("nGroups"))),s.call(o+"_one",r),s.setLocal("j",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("j"),s.getLocal("nPerGroupDiv2"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff"),s.i32_mul(s.i32_add(s.i32_mul(s.getLocal("i"),s.getLocal("nPerGroup")),s.getLocal("j")),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("idx1"),s.getLocal("pairOffset"))),s.call(i,s.getLocal("idx2"),r,d),s.call(e+"_copy",s.getLocal("idx1"),u),s.call(e+"_add",u,d,s.getLocal("idx1")),s.call(e+"_sub",u,d,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("pwm"),r),s.setLocal("j",s.i32_add(s.getLocal("j"),s.i32_const(1))),s.br(0))),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),function(){const o=t.addFunction(a+"_fftFinal");o.addParam("pBuff","i32"),o.addParam("n","i32"),o.addParam("factor","i32"),o.addLocal("idx1","i32"),o.addLocal("idx2","i32"),o.addLocal("i","i32"),o.addLocal("ndiv2","i32");const n=o.getCodeBuilder(),c=n.i32_const(t.alloc(l));o.addCode(n.setLocal("ndiv2",n.i32_shr_u(n.getLocal("n"),n.i32_const(1))),n.if(n.i32_and(n.getLocal("n"),n.i32_const(1)),n.call(i,n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))),n.getLocal("factor"),n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(l))))),n.setLocal("i",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_ge_u(n.getLocal("i"),n.getLocal("ndiv2"))),n.setLocal("idx1",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("i"),n.i32_const(l)))),n.setLocal("idx2",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.i32_sub(n.i32_sub(n.getLocal("n"),n.i32_const(1)),n.getLocal("i")),n.i32_const(l)))),n.call(i,n.getLocal("idx2"),n.getLocal("factor"),c),n.call(i,n.getLocal("idx1"),n.getLocal("factor"),n.getLocal("idx2")),n.call(e+"_copy",c,n.getLocal("idx1")),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),function(){const c=t.addFunction(a+"_prepareLagrangeEvaluation");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const s=c.getCodeBuilder(),r=s.i32_const(t.alloc(n)),d=s.i32_const(t.alloc(l));c.addCode(s.setLocal("pShiftToM",s.i32_add(s.i32_const(A),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.setLocal("pSConst",s.i32_add(s.i32_const(C),s.i32_mul(s.getLocal("totalBits"),s.i32_const(n)))),s.call(o+"_copy",s.getLocal("first"),r),s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.setLocal("idx1",s.i32_add(s.getLocal("pBuff1"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.setLocal("idx2",s.i32_add(s.getLocal("pBuff2"),s.i32_mul(s.getLocal("i"),s.i32_const(l)))),s.call(i,s.getLocal("idx1"),s.getLocal("pShiftToM"),d),s.call(e+"_sub",s.getLocal("idx2"),d,d),s.call(e+"_sub",s.getLocal("idx1"),s.getLocal("idx2"),s.getLocal("idx2")),s.call(i,d,s.getLocal("pSConst"),s.getLocal("idx1")),s.call(i,s.getLocal("idx2"),r,s.getLocal("idx2")),s.call(o+"_mul",r,s.getLocal("inc"),r),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))))}(),t.exportFunction(a+"_fft"),t.exportFunction(a+"_ifft"),t.exportFunction(a+"_rawfft"),t.exportFunction(a+"_fftJoin"),t.exportFunction(a+"_fftJoinExt"),t.exportFunction(a+"_fftJoinExtInv"),t.exportFunction(a+"_fftMix"),t.exportFunction(a+"_fftFinal"),t.exportFunction(a+"_prepareLagrangeEvaluation")},yc=function(t,a,e){const o=8*t.modules[e].n64;return function(){const i=t.addFunction(a+"_zero");i.addParam("px","i32"),i.addParam("n","i32"),i.addLocal("lastp","i32"),i.addLocal("p","i32");const n=i.getCodeBuilder();i.addCode(n.setLocal("p",n.getLocal("px")),n.setLocal("lastp",n.i32_add(n.getLocal("px"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("p"),n.getLocal("lastp"))),n.call(e+"_zero",n.getLocal("p")),n.setLocal("p",n.i32_add(n.getLocal("p"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_constructLC");i.addParam("ppolynomials","i32"),i.addParam("psignals","i32"),i.addParam("nSignals","i32"),i.addParam("pres","i32"),i.addLocal("i","i32"),i.addLocal("j","i32"),i.addLocal("pp","i32"),i.addLocal("ps","i32"),i.addLocal("pd","i32"),i.addLocal("ncoefs","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("i",n.i32_const(0)),n.setLocal("pp",n.getLocal("ppolynomials")),n.setLocal("ps",n.getLocal("psignals")),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("i"),n.getLocal("nSignals"))),n.setLocal("ncoefs",n.i32_load(n.getLocal("pp"))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.setLocal("j",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("j"),n.getLocal("ncoefs"))),n.setLocal("pd",n.i32_add(n.getLocal("pres"),n.i32_mul(n.i32_load(n.getLocal("pp")),n.i32_const(o)))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.call(e+"_mul",n.getLocal("ps"),n.getLocal("pp"),l),n.call(e+"_add",l,n.getLocal("pd"),n.getLocal("pd")),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(o))),n.setLocal("j",n.i32_add(n.getLocal("j"),n.i32_const(1))),n.br(0))),n.setLocal("ps",n.i32_add(n.getLocal("ps"),n.i32_const(o))),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),t.exportFunction(a+"_zero"),t.exportFunction(a+"_constructLC"),a},Ac=function(t,a,e){const o=8*t.modules[e].n64;return function(){const i=t.addFunction(a+"_buildABC");i.addParam("pCoefs","i32"),i.addParam("nCoefs","i32"),i.addParam("pWitness","i32"),i.addParam("pA","i32"),i.addParam("pB","i32"),i.addParam("pC","i32"),i.addParam("offsetOut","i32"),i.addParam("nOut","i32"),i.addParam("offsetWitness","i32"),i.addParam("nWitness","i32"),i.addLocal("it","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("last","i32"),i.addLocal("m","i32"),i.addLocal("c","i32"),i.addLocal("s","i32"),i.addLocal("pOut","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_zero",n.getLocal("ita")),n.call(e+"_zero",n.getLocal("itb")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.br(0))),n.setLocal("it",n.getLocal("pCoefs")),n.setLocal("last",n.i32_add(n.getLocal("pCoefs"),n.i32_mul(n.getLocal("nCoefs"),n.i32_const(o+12)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("it"),n.getLocal("last"))),n.setLocal("s",n.i32_load(n.getLocal("it"),8)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_ge_u(n.getLocal("s"),n.i32_add(n.getLocal("offsetWitness"),n.getLocal("nWitness")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)]),n.setLocal("m",n.i32_load(n.getLocal("it"))),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(0)),n.setLocal("pOut",n.getLocal("pA")),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(1)),n.setLocal("pOut",n.getLocal("pB")),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)])),n.setLocal("c",n.i32_load(n.getLocal("it"),4)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_ge_u(n.getLocal("c"),n.i32_add(n.getLocal("offsetOut"),n.getLocal("nOut")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),...n.br(1)]),n.setLocal("pOut",n.i32_add(n.getLocal("pOut"),n.i32_mul(n.i32_sub(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_const(o)))),n.call(e+"_mul",n.i32_add(n.getLocal("pWitness"),n.i32_mul(n.i32_sub(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_const(o))),n.i32_add(n.getLocal("it"),n.i32_const(12)),l),n.call(e+"_add",n.getLocal("pOut"),l,n.getLocal("pOut")),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o+12))),n.br(0))),n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("it",n.getLocal("pC")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_mul",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("it")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_joinABC");i.addParam("pA","i32"),i.addParam("pB","i32"),i.addParam("pC","i32"),i.addParam("n","i32"),i.addParam("pP","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("itc","i32"),i.addLocal("itp","i32"),i.addLocal("last","i32");const n=i.getCodeBuilder(),l=n.i32_const(t.alloc(o));i.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("itc",n.getLocal("pC")),n.setLocal("itp",n.getLocal("pP")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_mul",n.getLocal("ita"),n.getLocal("itb"),l),n.call(e+"_sub",l,n.getLocal("itc"),n.getLocal("itp")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("itc",n.i32_add(n.getLocal("itc"),n.i32_const(o))),n.setLocal("itp",n.i32_add(n.getLocal("itp"),n.i32_const(o))),n.br(0))))}(),function(){const i=t.addFunction(a+"_batchAdd");i.addParam("pa","i32"),i.addParam("pb","i32"),i.addParam("n","i32"),i.addParam("pr","i32"),i.addLocal("ita","i32"),i.addLocal("itb","i32"),i.addLocal("itr","i32"),i.addLocal("last","i32");const n=i.getCodeBuilder();i.addCode(n.setLocal("ita",n.getLocal("pa")),n.setLocal("itb",n.getLocal("pb")),n.setLocal("itr",n.getLocal("pr")),n.setLocal("last",n.i32_add(n.getLocal("pa"),n.i32_mul(n.getLocal("n"),n.i32_const(o)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(e+"_add",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("itr")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(o))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(o))),n.setLocal("itr",n.i32_add(n.getLocal("itr"),n.i32_const(o))),n.br(0))))}(),t.exportFunction(a+"_buildABC"),t.exportFunction(a+"_joinABC"),t.exportFunction(a+"_batchAdd"),a},Cc=function(t,a,e,o,i,n,l,c){const s=t.addFunction(a);s.addParam("pIn","i32"),s.addParam("n","i32"),s.addParam("pFirst","i32"),s.addParam("pInc","i32"),s.addParam("pOut","i32"),s.addLocal("pOldFree","i32"),s.addLocal("i","i32"),s.addLocal("pFrom","i32"),s.addLocal("pTo","i32");const r=s.getCodeBuilder(),d=r.i32_const(t.alloc(l));s.addCode(r.setLocal("pFrom",r.getLocal("pIn")),r.setLocal("pTo",r.getLocal("pOut"))),s.addCode(r.call(o+"_copy",r.getLocal("pFirst"),d)),s.addCode(r.setLocal("i",r.i32_const(0)),r.block(r.loop(r.br_if(1,r.i32_eq(r.getLocal("i"),r.getLocal("n"))),r.call(c,r.getLocal("pFrom"),d,r.getLocal("pTo")),r.setLocal("pFrom",r.i32_add(r.getLocal("pFrom"),r.i32_const(i))),r.setLocal("pTo",r.i32_add(r.getLocal("pTo"),r.i32_const(n))),r.call(o+"_mul",d,r.getLocal("pInc"),d),r.setLocal("i",r.i32_add(r.getLocal("i"),r.i32_const(1))),r.br(0)))),t.exportFunction(a)};const Fc=Fl,xc=ac,Ic=ic,Bc=sc,Ec=uc,vc=hc,Sc=wc,Pc=yc,qc=Ac,Oc=Cc,{bitLength:Gc,modInv:zc,isOdd:Tc,isNegative:Mc}=vl;const Uc=Fl,Qc=ac,kc=ic,Rc=sc,Nc=uc,Dc=hc,$c=wc,jc=yc,Vc=Ac,Kc=Cc,{bitLength:Hc,isOdd:Zc,isNegative:Wc}=vl;var Yc=function(t,a){const e=a||"bn128";if(t.modules[e])return e;const o=21888242871839275222246405745257275088696311157297823662689037894645226208583n,i=21888242871839275222246405745257275088548364400416034343698204186575808495617n,n=Math.floor((Gc(o-1n)-1)/64)+1,l=8*n,c=l,s=l,r=2*s,d=12*s,u=t.alloc(Fc.bigInt2BytesLE(i,c)),_=xc(t,o,"f1m");Ic(t,i,"fr","frm");const g=t.alloc(Fc.bigInt2BytesLE(b(3n),s)),f=vc(t,"g1m","f1m",g);Sc(t,"frm","frm","frm","frm_mul"),Pc(t,"pol","frm"),qc(t,"qap","frm");const h=Bc(t,"f1m_neg","f2m","f1m"),p=t.alloc([...Fc.bigInt2BytesLE(b(19485874751759354771024239261021720505790618469301721065564631296452457478373n),s),...Fc.bigInt2BytesLE(b(266929791119991161246907387137283842545076965332900288569378510910307636690n),s)]),m=vc(t,"g2m","f2m",p);function L(a,e){const o=t.addFunction(a);o.addParam("pG","i32"),o.addParam("pFr","i32"),o.addParam("pr","i32");const i=o.getCodeBuilder(),n=i.i32_const(t.alloc(l));o.addCode(i.call("frm_fromMontgomery",i.getLocal("pFr"),n),i.call(e,i.getLocal("pG"),n,i.i32_const(l),i.getLocal("pr"))),t.exportFunction(a)}function b(t){return BigInt(t)*(1n<0n;)Tc(a)?e.push(1):e.push(0),a>>=1n;return e}(29793968203157093288n),T=t.alloc(z),M=3*r,U=z.length-1,Q=z.reduce(((t,a)=>t+(0!=a?1:0)),0),k=6*l,R=3*l*2+(Q+U+1)*M;t.modules[e]={n64:n,pG1gen:y,pG1zero:C,pG1b:g,pG2gen:x,pG2zero:B,pG2b:p,pq:t.modules.f1m.pq,pr:u,pOneT:E,prePSize:k,preQSize:R,r:i.toString(),q:o.toString()};const N=4965661367192848881n;function D(a){const i=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[8376118865763821496583973867626364092589906065868298776909617916018768340080n,16469823323077808223889137241176536799009286646108169935659301613961712198316n],[21888242871839275220042445260109153167277707414472061641714758635765020556617n,0n],[11697423496358154304825782922584725312912383441159505038794027105778954184319n,303847389135065887422783454877609941456349188919719272345083954437860409601n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3321304630594332808241809054958361220322477375291206261884409189760185844239n,5722266937896532885780051958958348231143373700109372999374820235121374419868n],[21888242871839275222246405745257275088696311157297823662689037894645226208582n,0n],[13512124006075453725662431877630910996106405091429524885779419978626457868503n,5418419548761466998357268504080738289687024511189653727029736280683514010267n],[2203960485148121921418603742825762020974279258880205651966n,0n],[10190819375481120917420622822672549775783927716138318623895010788866272024264n,21584395482704209334823622290379665147239961968378104390343953940207365798982n],[2203960485148121921418603742825762020974279258880205651967n,0n],[18566938241244942414004596690298913868373833782006617400804628704885040364344n,16165975933942742336466353786298926857552937457188450663314217659523851788715n]]],n=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[21575463638280843010398324269430826099269044274347216827212613867836435027261n,10307601595873709700152284273816112264069230130616436755625194854815875713954n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[3772000881919853776433695186713858239009073593817195771773381919316419345261n,2236595495967245188281701248203181795121068902605861227855261137820944008926n],[2203960485148121921418603742825762020974279258880205651966n,0n],[18429021223477853657660792034369865839114504446431234726392080002137598044644n,9344045779998320333812420223237981029506012124075525679208581902008406485703n]],[[1n,0n],[2581911344467009335267311115468803099551665605076196740867805258568234346338n,19937756971775647987995932169929341994314640652964949448313374472400716661030n],[2203960485148121921418603742825762020974279258880205651966n,0n],[5324479202449903542726783395506214481928257762400643279780343368557297135718n,16208900380737693084919495127334387981393726419856888799917914180988844123039n],[21888242871839275220042445260109153167277707414472061641714758635765020556616n,0n],[13981852324922362344252311234282257507216387789820983642040889267519694726527n,7629828391165209371577384193250820201684255241773809077146787135900891633097n]]],l=t.addFunction(e+"__frobeniusMap"+a);l.addParam("x","i32"),l.addParam("r","i32");const c=l.getCodeBuilder();for(let e=0;e<6;e++){const o=0==e?c.getLocal("x"):c.i32_add(c.getLocal("x"),c.i32_const(e*r)),u=o,g=c.i32_add(c.getLocal("x"),c.i32_const(e*r+s)),f=0==e?c.getLocal("r"):c.i32_add(c.getLocal("r"),c.i32_const(e*r)),p=f,m=c.i32_add(c.getLocal("r"),c.i32_const(e*r+s)),L=d(i[Math.floor(e/3)][a%12],n[e%3][a%6]),w=t.alloc([...Fc.bigInt2BytesLE(b(L[0]),32),...Fc.bigInt2BytesLE(b(L[1]),32)]);a%2==1?l.addCode(c.call(_+"_copy",u,p),c.call(_+"_neg",g,m),c.call(h+"_mul",f,c.i32_const(w),f)):l.addCode(c.call(h+"_mul",o,c.i32_const(w),f))}function d(t,a){const e=BigInt(t[0]),i=BigInt(t[1]),n=BigInt(a[0]),l=BigInt(a[1]),c=[(e*n-i*l)%o,(e*l+i*n)%o];return Mc(c[0])&&(c[0]=c[0]+o),c}}function $(a,o){const i=function(t){let a=t;const e=[];for(;a>0n;){if(Tc(a)){const t=2-Number(a%4n);e.push(t),a-=BigInt(t)}else e.push(0);a>>=1n}return e}(a).map((t=>-1==t?255:t)),n=t.alloc(i),l=t.addFunction(e+"__cyclotomicExp_"+o);l.addParam("x","i32"),l.addParam("r","i32"),l.addLocal("bit","i32"),l.addLocal("i","i32");const c=l.getCodeBuilder(),s=c.getLocal("x"),r=c.getLocal("r"),u=c.i32_const(t.alloc(d));l.addCode(c.call(G+"_conjugate",s,u),c.call(G+"_one",r),c.if(c.teeLocal("bit",c.i32_load8_s(c.i32_const(i.length-1),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(G+"_mul",r,s,r),c.call(G+"_mul",r,u,r))),c.setLocal("i",c.i32_const(i.length-2)),c.block(c.loop(c.call(e+"__cyclotomicSquare",r,r),c.if(c.teeLocal("bit",c.i32_load8_s(c.getLocal("i"),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(G+"_mul",r,s,r),c.call(G+"_mul",r,u,r))),c.br_if(1,c.i32_eqz(c.getLocal("i"))),c.setLocal("i",c.i32_sub(c.getLocal("i"),c.i32_const(1))),c.br(0))))}function j(){!function(){const a=t.addFunction(e+"__cyclotomicSquare");a.addParam("x","i32"),a.addParam("r","i32");const o=a.getCodeBuilder(),i=o.getLocal("x"),n=o.i32_add(o.getLocal("x"),o.i32_const(r)),l=o.i32_add(o.getLocal("x"),o.i32_const(2*r)),c=o.i32_add(o.getLocal("x"),o.i32_const(3*r)),s=o.i32_add(o.getLocal("x"),o.i32_const(4*r)),d=o.i32_add(o.getLocal("x"),o.i32_const(5*r)),u=o.getLocal("r"),_=o.i32_add(o.getLocal("r"),o.i32_const(r)),g=o.i32_add(o.getLocal("r"),o.i32_const(2*r)),f=o.i32_add(o.getLocal("r"),o.i32_const(3*r)),p=o.i32_add(o.getLocal("r"),o.i32_const(4*r)),m=o.i32_add(o.getLocal("r"),o.i32_const(5*r)),L=o.i32_const(t.alloc(r)),b=o.i32_const(t.alloc(r)),w=o.i32_const(t.alloc(r)),y=o.i32_const(t.alloc(r)),A=o.i32_const(t.alloc(r)),C=o.i32_const(t.alloc(r)),F=o.i32_const(t.alloc(r)),x=o.i32_const(t.alloc(r));a.addCode(o.call(h+"_mul",i,s,F),o.call(h+"_mul",s,o.i32_const(v),L),o.call(h+"_add",i,L,L),o.call(h+"_add",i,s,x),o.call(h+"_mul",x,L,L),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",L,x,L),o.call(h+"_add",F,F,b),o.call(h+"_mul",c,l,F),o.call(h+"_mul",l,o.i32_const(v),w),o.call(h+"_add",c,w,w),o.call(h+"_add",c,l,x),o.call(h+"_mul",x,w,w),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",w,x,w),o.call(h+"_add",F,F,y),o.call(h+"_mul",n,d,F),o.call(h+"_mul",d,o.i32_const(v),A),o.call(h+"_add",n,A,A),o.call(h+"_add",n,d,x),o.call(h+"_mul",x,A,A),o.call(h+"_mul",o.i32_const(v),F,x),o.call(h+"_add",F,x,x),o.call(h+"_sub",A,x,A),o.call(h+"_add",F,F,C),o.call(h+"_sub",L,i,u),o.call(h+"_add",u,u,u),o.call(h+"_add",L,u,u),o.call(h+"_add",b,s,p),o.call(h+"_add",p,p,p),o.call(h+"_add",b,p,p),o.call(h+"_mul",C,o.i32_const(P),x),o.call(h+"_add",x,c,f),o.call(h+"_add",f,f,f),o.call(h+"_add",x,f,f),o.call(h+"_sub",A,l,g),o.call(h+"_add",g,g,g),o.call(h+"_add",A,g,g),o.call(h+"_sub",w,n,_),o.call(h+"_add",_,_,_),o.call(h+"_add",w,_,_),o.call(h+"_add",y,d,m),o.call(h+"_add",m,m,m),o.call(h+"_add",y,m,m))}(),$(N,"w0");const a=t.addFunction(e+"__finalExponentiationLastChunk");a.addParam("x","i32"),a.addParam("r","i32");const o=a.getCodeBuilder(),i=o.getLocal("x"),n=o.getLocal("r"),l=o.i32_const(t.alloc(d)),c=o.i32_const(t.alloc(d)),s=o.i32_const(t.alloc(d)),u=o.i32_const(t.alloc(d)),_=o.i32_const(t.alloc(d)),g=o.i32_const(t.alloc(d)),f=o.i32_const(t.alloc(d)),p=o.i32_const(t.alloc(d)),m=o.i32_const(t.alloc(d)),L=o.i32_const(t.alloc(d)),b=o.i32_const(t.alloc(d)),w=o.i32_const(t.alloc(d)),y=o.i32_const(t.alloc(d)),A=o.i32_const(t.alloc(d)),C=o.i32_const(t.alloc(d)),F=o.i32_const(t.alloc(d)),x=o.i32_const(t.alloc(d)),I=o.i32_const(t.alloc(d)),B=o.i32_const(t.alloc(d)),E=o.i32_const(t.alloc(d)),S=o.i32_const(t.alloc(d));a.addCode(o.call(e+"__cyclotomicExp_w0",i,l),o.call(G+"_conjugate",l,l),o.call(e+"__cyclotomicSquare",l,c),o.call(e+"__cyclotomicSquare",c,s),o.call(G+"_mul",s,c,u),o.call(e+"__cyclotomicExp_w0",u,_),o.call(G+"_conjugate",_,_),o.call(e+"__cyclotomicSquare",_,g),o.call(e+"__cyclotomicExp_w0",g,f),o.call(G+"_conjugate",f,f),o.call(G+"_conjugate",u,p),o.call(G+"_conjugate",f,m),o.call(G+"_mul",m,_,L),o.call(G+"_mul",L,p,b),o.call(G+"_mul",b,c,w),o.call(G+"_mul",b,_,y),o.call(G+"_mul",y,i,A),o.call(e+"__frobeniusMap1",w,C),o.call(G+"_mul",C,A,F),o.call(e+"__frobeniusMap2",b,x),o.call(G+"_mul",x,F,I),o.call(G+"_conjugate",i,B),o.call(G+"_mul",B,w,E),o.call(e+"__frobeniusMap3",E,S),o.call(G+"_mul",S,I,n))}const V=t.alloc(k),K=t.alloc(R);function H(a){const o=t.addFunction(e+"_pairingEq"+a);for(let t=0;t0n;)Zc(a)?e.push(1):e.push(0),a>>=1n;return e}(0xd201000000010000n),z=t.alloc(G),T=3*s,M=G.length-1,U=G.reduce(((t,a)=>t+(0!=a?1:0)),0),Q=6*l,k=3*l*2+(U+M+1)*T,R=!0,N=15132376222941642752n;function D(a){const e=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n,151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n],[2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n,1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n,877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027n,3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257n,2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230n,3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557n]]],i=[[[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n],[1n,0n]],[[1n,0n],[0n,4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[0n,1n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[0n,793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n]],[[1n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437n,0n],[4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436n,0n],[4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350n,0n],[793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351n,0n]]],n=t.addFunction(O+"_frobeniusMap"+a);n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder();for(let o=0;o<6;o++){const u=0==o?r.getLocal("x"):r.i32_add(r.getLocal("x"),r.i32_const(o*s)),_=u,g=r.i32_add(r.getLocal("x"),r.i32_const(o*s+c)),h=0==o?r.getLocal("r"):r.i32_add(r.getLocal("r"),r.i32_const(o*s)),p=h,L=r.i32_add(r.getLocal("r"),r.i32_const(o*s+c)),b=d(e[Math.floor(o/3)][a%12],i[o%3][a%6]),w=t.alloc([...Uc.bigInt2BytesLE(y(b[0]),l),...Uc.bigInt2BytesLE(y(b[1]),l)]);a%2==1?n.addCode(r.call(f+"_copy",_,p),r.call(f+"_neg",g,L),r.call(m+"_mul",h,r.i32_const(w),h)):n.addCode(r.call(m+"_mul",u,r.i32_const(w),h))}function d(t,a){const e=t[0],i=t[1],n=a[0],l=a[1],c=[(e*n-i*l)%o,(e*l+i*n)%o];return Wc(c[0])&&(c[0]=c[0]+o),c}}function $(a,o,i){const n=function(t){let a=t;const e=[];for(;a>0n;){if(Zc(a)){const t=2-Number(a%4n);e.push(t),a-=BigInt(t)}else e.push(0);a>>=1n}return e}(a).map((t=>-1==t?255:t)),l=t.alloc(n),c=t.addFunction(e+"__cyclotomicExp_"+i);c.addParam("x","i32"),c.addParam("r","i32"),c.addLocal("bit","i32"),c.addLocal("i","i32");const s=c.getCodeBuilder(),d=s.getLocal("x"),u=s.getLocal("r"),_=s.i32_const(t.alloc(r));c.addCode(s.call(O+"_conjugate",d,_),s.call(O+"_one",u),s.if(s.teeLocal("bit",s.i32_load8_s(s.i32_const(n.length-1),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(O+"_mul",u,d,u),s.call(O+"_mul",u,_,u))),s.setLocal("i",s.i32_const(n.length-2)),s.block(s.loop(s.call(e+"__cyclotomicSquare",u,u),s.if(s.teeLocal("bit",s.i32_load8_s(s.getLocal("i"),l)),s.if(s.i32_eq(s.getLocal("bit"),s.i32_const(1)),s.call(O+"_mul",u,d,u),s.call(O+"_mul",u,_,u))),s.br_if(1,s.i32_eqz(s.getLocal("i"))),s.setLocal("i",s.i32_sub(s.getLocal("i"),s.i32_const(1))),s.br(0)))),o&&c.addCode(s.call(O+"_conjugate",u,u))}t.modules[e]={n64q:n,n64r:d,n8q:l,n8r:u,pG1gen:C,pG1zero:x,pG1b:h,pG2gen:B,pG2zero:v,pG2b:L,pq:t.modules.f1m.pq,pr:g,pOneT:S,r:i,q:o,prePSize:Q,preQSize:k},function(){const a=t.addFunction(q+"_mul1");a.addParam("pA","i32"),a.addParam("pC1","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(2*c)),n=e.i32_add(e.getLocal("pA"),e.i32_const(4*c)),l=e.getLocal("pC1"),s=e.getLocal("pR"),r=e.i32_add(e.getLocal("pR"),e.i32_const(2*c)),d=e.i32_add(e.getLocal("pR"),e.i32_const(4*c)),u=e.i32_const(t.alloc(2*c)),_=e.i32_const(t.alloc(2*c));a.addCode(e.call(m+"_add",o,i,u),e.call(m+"_add",i,n,_),e.call(m+"_mul",i,l,d),e.call(m+"_mul",_,l,s),e.call(m+"_sub",s,d,s),e.call(m+"_mulNR",s,s),e.call(m+"_mul",u,l,r),e.call(m+"_sub",r,d,r))}(),function(){const a=t.addFunction(q+"_mul01");a.addParam("pA","i32"),a.addParam("pC0","i32"),a.addParam("pC1","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(2*c)),n=e.i32_add(e.getLocal("pA"),e.i32_const(4*c)),l=e.getLocal("pC0"),s=e.getLocal("pC1"),r=e.getLocal("pR"),d=e.i32_add(e.getLocal("pR"),e.i32_const(2*c)),u=e.i32_add(e.getLocal("pR"),e.i32_const(4*c)),_=e.i32_const(t.alloc(2*c)),g=e.i32_const(t.alloc(2*c)),f=e.i32_const(t.alloc(2*c)),h=e.i32_const(t.alloc(2*c));a.addCode(e.call(m+"_mul",o,l,_),e.call(m+"_mul",i,s,g),e.call(m+"_add",o,i,f),e.call(m+"_add",o,n,h),e.call(m+"_add",i,n,r),e.call(m+"_mul",r,s,r),e.call(m+"_sub",r,g,r),e.call(m+"_mulNR",r,r),e.call(m+"_add",r,_,r),e.call(m+"_add",l,s,d),e.call(m+"_mul",d,f,d),e.call(m+"_sub",d,_,d),e.call(m+"_sub",d,g,d),e.call(m+"_mul",h,l,u),e.call(m+"_sub",u,_,u),e.call(m+"_add",u,g,u))}(),function(){const a=t.addFunction(O+"_mul014");a.addParam("pA","i32"),a.addParam("pC0","i32"),a.addParam("pC1","i32"),a.addParam("pC4","i32"),a.addParam("pR","i32");const e=a.getCodeBuilder(),o=e.getLocal("pA"),i=e.i32_add(e.getLocal("pA"),e.i32_const(6*c)),n=e.getLocal("pC0"),l=e.getLocal("pC1"),s=e.getLocal("pC4"),r=e.i32_const(t.alloc(6*c)),d=e.i32_const(t.alloc(6*c)),u=e.i32_const(t.alloc(2*c)),_=e.getLocal("pR"),g=e.i32_add(e.getLocal("pR"),e.i32_const(6*c));a.addCode(e.call(q+"_mul01",o,n,l,r),e.call(q+"_mul1",i,s,d),e.call(m+"_add",l,s,u),e.call(q+"_add",i,o,g),e.call(q+"_mul01",g,n,u,g),e.call(q+"_sub",g,r,g),e.call(q+"_sub",g,d,g),e.call(q+"_copy",d,_),e.call(q+"_mulNR",_,_),e.call(q+"_add",_,r,_))}(),function(){const a=t.addFunction(e+"_ell");a.addParam("pP","i32"),a.addParam("pCoefs","i32"),a.addParam("pF","i32");const o=a.getCodeBuilder(),i=o.getLocal("pP"),n=o.i32_add(o.getLocal("pP"),o.i32_const(l)),s=o.getLocal("pF"),r=o.getLocal("pCoefs"),d=o.i32_add(o.getLocal("pCoefs"),o.i32_const(c)),u=o.i32_add(o.getLocal("pCoefs"),o.i32_const(2*c)),_=o.i32_add(o.getLocal("pCoefs"),o.i32_const(3*c)),g=o.i32_add(o.getLocal("pCoefs"),o.i32_const(4*c)),h=t.alloc(2*c),p=o.i32_const(h),m=o.i32_const(h),L=o.i32_const(h+c),b=t.alloc(2*c),w=o.i32_const(b),y=o.i32_const(b),A=o.i32_const(b+c);a.addCode(o.call(f+"_mul",r,n,m),o.call(f+"_mul",d,n,L),o.call(f+"_mul",u,i,y),o.call(f+"_mul",_,i,A),o.call(O+"_mul014",s,g,w,p,s))}();const j=t.alloc(Q),V=t.alloc(k);function K(a){const o=t.addFunction(e+"_pairingEq"+a);for(let t=0;t>=1;return e}function as(t,a){return(Xc[t>>>24]|Xc[t>>>16&255]<<8|Xc[t>>>8&255]<<16|Xc[255&t]<<24)>>>32-a}function es(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function os(t,a){const e=new Uint8Array(a*t.length);for(let o=0;o0;){const t=l+c>ns?ns-l:c,a=new Uint8Array(this.buffers[n].buffer,this.buffers[n].byteOffset+l,t);if(t==e)return a.slice();i||(i=e<=ns?new Uint8Array(e):new ls(e)),i.set(a,e-c),c-=t,n++,l=0}return i}set(t,a){void 0===a&&(a=0);const e=t.byteLength;if(0==e)return;const o=Math.floor(a/ns);if(o==Math.floor((a+e-1)/ns))return t instanceof ls&&1==t.buffers.length?this.buffers[o].set(t.buffers[0],a%ns):this.buffers[o].set(t,a%ns);let i=o,n=a%ns,l=e;for(;l>0;){const a=n+l>ns?ns-n:l,o=t.slice(e-l,e-l+a);new Uint8Array(this.buffers[i].buffer,this.buffers[i].byteOffset+n,a).set(o),l-=a,i++,n=0}}}function cs(t,a,e,o){return async function(i){const n=Math.floor(i.byteLength/e);if(n*e!==i.byteLength)throw new Error("Invalid buffer size");const l=Math.floor(n/t.concurrency),c=[];for(let s=0;s=0;t--)this.w[t]=this.square(this.w[t+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=cs(t,a+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=cs(t,a+"_batchFromMontgomery",this.n8,this.n8)}op2(t,a,e){return this.tm.setBuff(this.pOp1,a),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,a,e){return this.tm.setBuff(this.pOp1,a),this.tm.setBuff(this.pOp2,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,a){return this.tm.setBuff(this.pOp1,a),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,a){return this.tm.setBuff(this.pOp1,a),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,a){return this.op2("_add",t,a)}eq(t,a){return this.op2Bool("_eq",t,a)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,a){return this.op2("_sub",t,a)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,a){return this.op2("_mul",t,a)}div(t,a){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,a){return a instanceof Uint8Array||(a=dl(Kn(a))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,a.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(t){return this.op1Bool("_isNegative",t)}e(t,a){if(t instanceof Uint8Array)return t;let e=Kn(t,a);!function(t){return BigInt(t)>=BigInt(32)):n+2<=a?(i.setUint16(n,Number(e&BigInt(65535)),!0),n+=2,e>>=BigInt(16)):(i.setUint8(n,Number(e&BigInt(255)),!0),n+=1,e>>=BigInt(8));if(e)throw new Error("Number does not fit in this length");return o}(e,this.n8);return this.toMontgomery(o)}toString(t,a){return rl(sl(this.fromMontgomery(t),0),a)}fromRng(t){let a;const e=new Uint8Array(this.n8);do{a=ul;for(let e=0;e=BigInt(i));var o,i;return cl(e,0,a,this.n8),e}random(){return this.fromRng(bl())}toObject(t){return sl(this.fromMontgomery(t),0)}fromObject(t){const a=new Uint8Array(this.n8);return cl(a,0,t,this.n8),this.toMontgomery(a)}toRprLE(t,a,e){t.set(this.fromMontgomery(e),a)}toRprBE(t,a,e){const o=this.fromMontgomery(e);for(let t=0;to.buffer.byteLength){const i=o.buffer.byteLength/65536;let n=Math.floor((e[0]+t)/65536)+1;n>a&&(n=a),o.grow(n-i)}return i}function l(t){const a=n(t.byteLength);return s(a,t),a}function c(t,a){const e=new Uint8Array(o.buffer);return new Uint8Array(e.buffer,e.byteOffset+t,a)}function s(t,a){new Uint8Array(o.buffer).set(new Uint8Array(a),t)}function r(t){if("INIT"==t[0].cmd)return i(t[0]);const a={vars:[],out:[]},r=new Uint32Array(o.buffer,0,1)[0];for(let o=0;o{this.reject=a,this.resolve=t}))}}const hs=function(t){return globalThis.btoa(t)}("("+_s.toString()+")(self)"),ps="data:application/javascript;base64,"+hs;class ms{constructor(){this.actionQueue=[],this.oldPFree=0}startSyncOp(){if(0!=this.oldPFree)throw new Error("Sync operation in progress");this.oldPFree=this.u32[0]}endSyncOp(){if(0==this.oldPFree)throw new Error("No sync operation in progress");this.u32[0]=this.oldPFree,this.oldPFree=0}postAction(t,a,e,o){if(this.working[t])throw new Error("Posting a job t a working worker");return this.working[t]=!0,this.pendingDeferreds[t]=o||new fs,this.workers[t].postMessage(a,e),this.pendingDeferreds[t].promise}processWorks(){for(let t=0;t0;t++)if(0==this.working[t]){const a=this.actionQueue.shift();this.postAction(t,a.data,a.transfers,a.deferred)}}queueAction(t,a){const e=new fs;if(this.singleThread){const a=this.taskManager(t);e.resolve(a)}else this.actionQueue.push({data:t,transfers:a,deferred:e}),this.processWorks();return e.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(t){const a=this.alloc(t.byteLength);return this.setBuff(a,t),a}getBuff(t,a){return this.u8.slice(t,t+a)}setBuff(t,a){this.u8.set(new Uint8Array(a),t)}alloc(t){for(;3&this.u32[0];)this.u32[0]++;const a=this.u32[0];return this.u32[0]+=t,a}async terminate(){for(let t=0;tsetTimeout(a,t))))}}function Ls(t,a){const e=t[a],o=t.Fr,i=t.tm;t[a].batchApplyKey=async function(t,n,l,c,s){let r,d,u,_,g;if(c=c||"affine",s=s||"affine","G1"==a)"jacobian"==c?(u=3*e.F.n8,r="g1m_batchApplyKey"):(u=2*e.F.n8,r="g1m_batchApplyKeyMixed"),_=3*e.F.n8,"jacobian"==s?g=3*e.F.n8:(d="g1m_batchToAffine",g=2*e.F.n8);else if("G2"==a)"jacobian"==c?(u=3*e.F.n8,r="g2m_batchApplyKey"):(u=2*e.F.n8,r="g2m_batchApplyKeyMixed"),_=3*e.F.n8,"jacobian"==s?g=3*e.F.n8:(d="g2m_batchToAffine",g=2*e.F.n8);else{if("Fr"!=a)throw new Error("Invalid group: "+a);r="frm_batchApplyKey",u=e.n8,_=e.n8,g=e.n8}const f=Math.floor(t.byteLength/u),h=Math.floor(f/i.concurrency),p=[];l=o.e(l);let m=o.e(n);for(let a=0;a=0;t--){if(!e.isZero(h))for(let t=0;tr&&(h=r),h<1024&&(h=1024);const p=[];for(let a=0;a(c&&c.debug(`Multiexp end: ${s}: ${a}/${u}`),t))))}const m=await Promise.all(p);let L=e.zero;for(let t=m.length-1;t>=0;t--)L=e.add(L,m[t]);return L}e.multiExp=async function(t,a,e,o){return await n(t,a,"jacobian",e,o)},e.multiExpAffine=async function(t,a,e,o){return await n(t,a,"affine",e,o)}}function ys(t,a){const e=t[a],o=t.Fr,i=e.tm;async function n(t,c,s,r,d,u){s=s||"affine",r=r||"affine";let _,g,f,h,p,m,L,b;"G1"==a?("affine"==s?(_=2*e.F.n8,h="g1m_batchToJacobian"):_=3*e.F.n8,g=3*e.F.n8,c&&(b="g1m_fftFinal"),L="g1m_fftJoin",m="g1m_fftMix","affine"==r?(f=2*e.F.n8,p="g1m_batchToAffine"):f=3*e.F.n8):"G2"==a?("affine"==s?(_=2*e.F.n8,h="g2m_batchToJacobian"):_=3*e.F.n8,g=3*e.F.n8,c&&(b="g2m_fftFinal"),L="g2m_fftJoin",m="g2m_fftMix","affine"==r?(f=2*e.F.n8,p="g2m_batchToAffine"):f=3*e.F.n8):"Fr"==a&&(_=e.n8,g=e.n8,f=e.n8,c&&(b="frm_fftFinal"),m="frm_fftMix",L="frm_fftJoin");let w=!1;Array.isArray(t)?(t=os(t,_),w=!0):t=t.slice(0,t.byteLength);const y=t.byteLength/_,A=es(y);if(1<1<<28?new ls(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return _.set(u[0]),_.set(u[1],u[0].byteLength),_}(t,s,r,d,u):await async function(t,a,e,i,c){let s,r;s=t.slice(0,t.byteLength/2),r=t.slice(t.byteLength/2,t.byteLength);const d=[];[s,r]=await l(s,r,"fftJoinExt",o.one,o.shift,a,"jacobian",i,c),d.push(n(s,!1,"jacobian",e,i,c)),d.push(n(r,!1,"jacobian",e,i,c));const u=await Promise.all(d);let _;_=u[0].byteLength>1<<28?new ls(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return _.set(u[0]),_.set(u[1],u[0].byteLength),_}(t,s,r,d,u),w?is(a,f):a}let C,F,x;c&&(C=o.inv(o.e(y))),function(t,a){const e=t.byteLength/a,o=es(e);if(e!=1<e){const o=t.slice(i*a,(i+1)*a);t.set(t.slice(e*a,(e+1)*a),i*a),t.set(o,e*a)}}}(t,_);let I=Math.min(16384,y),B=y/I;for(;B=16;)B*=2,I/=2;const E=es(I),v=[];for(let a=0;a(d&&d.debug(`${u}: fft ${A} mix end: ${a}/${B}`),t))))}x=await Promise.all(v);for(let t=0;t(d&&d.debug(`${u}: fft ${A} join ${t}/${A} ${l+1}/${a} ${c}/${e/2}`),o))))}const l=await Promise.all(n);for(let t=0;t0;a--)F.set(x[a],t),t+=I*f,delete x[a];F.set(x[0].slice(0,(I-1)*f),t),delete x[0]}else for(let t=0;t65536&&(w=65536);const y=[];for(let a=0;a(u&&u.debug(`${_}: fftJoinExt End: ${a}/${b}`),t))))}const A=await Promise.all(y);let C,F;b*p>1<<28?(C=new ls(b*p),F=new ls(b*p)):(C=new Uint8Array(b*p),F=new Uint8Array(b*p));let x=0;for(let t=0;to.s+1)throw s&&s.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let g=t.slice(0,t.byteLength/2),f=t.slice(t.byteLength/2,t.byteLength);const h=o.exp(o.shift,u/2),p=o.inv(o.sub(o.one,h));[g,f]=await l(g,f,"prepareLagrangeEvaluation",p,o.shiftInv,i,"jacobian",s,r+" prep");const m=[];let L;return m.push(n(g,!0,"jacobian",c,s,r+" t0")),m.push(n(f,!0,"jacobian",c,s,r+" t1")),[g,f]=await Promise.all(m),L=g.byteLength>1<<28?new ls(2*g.byteLength):new Uint8Array(2*g.byteLength),L.set(g),L.set(f,g.byteLength),L},e.fftMix=async function(t){const n=3*e.F.n8;let l,c;if("G1"==a)l="g1m_fftMix",c="g1m_fftJoin";else if("G2"==a)l="g2m_fftMix",c="g2m_fftJoin";else{if("Fr"!=a)throw new Error("Invalid group");l="frm_fftMix",c="frm_fftJoin"}const s=Math.floor(t.byteLength/n),r=es(s);let d=1<=0;t--)g.set(_[t][0],f),f+=_[t][0].byteLength;return g}}async function As(t){const a=await async function(t,a){const e=new ms;e.memory=new WebAssembly.Memory({initial:gs}),e.u8=new Uint8Array(e.memory.buffer),e.u32=new Uint32Array(e.memory.buffer);const o=await WebAssembly.compile(t.code);if(e.instance=await WebAssembly.instantiate(o,{env:{memory:e.memory}}),e.singleThread=a,e.initalPFree=e.u32[0],e.pq=t.pq,e.pr=t.pr,e.pG1gen=t.pG1gen,e.pG1zero=t.pG1zero,e.pG2gen=t.pG2gen,e.pG2zero=t.pG2zero,e.pOneT=t.pOneT,a)e.code=t.code,e.taskManager=_s(),await e.taskManager([{cmd:"INIT",init:gs,code:e.code.slice()}]),e.concurrency=1;else{let a;e.workers=[],e.pendingDeferreds=[],e.working=[],a="object"==typeof navigator&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:Qa.cpus().length,0==a&&(a=2),a>64&&(a=64),e.concurrency=a;for(let t=0;t=this.length&&(this.length=t+1),!0}getKeys(){const t=new vs;for(let a=0;a1<<20?new vs:[];for(let t=0;t1<<20?new vs:[];for(let t=0;t1<<20?new vs:[];for(let t=0;t{let o="";return Object.keys(e).forEach((i=>{let n=a.varIdx2Name[i];"one"==n&&(n="1");let l=t.curve.Fr.toString(e[i]);"1"==l&&(l=""),"-1"==l&&(l="-"),""!=o&&"-"!=l[0]&&(l="+"+l),""!=o&&(l=" "+l),o=o+l+n})),o},n=`[ ${i(o[0])} ] * [ ${i(o[1])} ] - [ ${i(o[2])} ] = 0`;e&&e.info(n)}},info:async function(t,a){const e=await Gs(t);return fe.eq(e.prime,Ts)?a&&a.info("Curve: bn-128"):fe.eq(e.prime,zs)?a&&a.info("Curve: bls12-381"):a&&a.info(`Unknown Curve. Prime: ${fe.toString(e.prime)}`),a&&a.info(`# of Wires: ${e.nVars}`),a&&a.info(`# of Constraints: ${e.nConstraints}`),a&&a.info(`# of Private Inputs: ${e.nPrvInputs}`),a&&a.info(`# of Public Inputs: ${e.nPubInputs}`),a&&a.info(`# of Labels: ${e.nLabels}`),a&&a.info(`# of Outputs: ${e.nOutputs}`),e},exportJson:async function(t,a){const e=await Gs(t,!0,!0,!0,a),o=e.curve.Fr;return delete e.curve,delete e.F,Zo(o,e)}});async function Us(t){const a={labelIdx2Name:["one"],varIdx2Name:["one"],componentIdx2Name:[]},e=await Me(t),o=await e.read(e.totalSize),i=new TextDecoder("utf-8").decode(o).split("\n");for(let t=0;t Reading r1cs file");const{fd:o,sections:i}=await Ue(t,"r1cs",1),n=await Os(o,i,{loadConstraints:!1,loadCustomGates:!1});e&&e.info("> Reading witness file");const{fd:l,sections:c}=await Ue(a,"wtns",2),s=await Si(l,c);if(!fe.eq(n.prime,s.q))throw new Error("Curve of the witness does not match the curve of the proving key");const r=await Ke(l,c,2);await l.close();const d=(await async function(t){let a;if(fe.eq(t,We))a=await _e();else{if(!fe.eq(t,Ze))throw new Error(`Curve not supported: ${fe.toString(t)}`);a=await ge()}return a}(n.prime)).Fr,u=d.n8,_=await Ke(o,i,2);e&&(e.info("----------------------------"),e.info(" WITNESS CHECK"),e.info(` Curve: ${n.curve.name}`),e.info(` Vars (wires): ${n.nVars}`),e.info(` Ouputs: ${n.nOutputs}`),e.info(` Public Inputs: ${n.nPubInputs}`),e.info(` Private Inputs: ${n.nPrvInputs}`),e.info(` Labels: ${n.nLabels}`),e.info(` Constraints: ${n.nConstraints}`),e.info(` Custom Gates: ${n.useCustomGates}`),e.info("----------------------------")),e&&e.info("> Checking witness correctness");let g=0,f=!0;for(let t=0;t{const o=function(t){return d.fromRprLE(r.slice(t*u,t*u+u))}(e),i=t[e];a=d.add(a,d.mul(o,i))})),a}function p(){const t={},a=_.slice(g,g+4);g+=4;const e=new DataView(a.buffer).getUint32(0,!0),o=_.slice(g,g+(4+n.n8)*e);g+=(4+n.n8)*e;const i=new DataView(o.buffer);for(let a=0;a=this.length&&(this.length=t+1),!0}getKeys(){const t=new $s;for(let a=0;a_)return o&&o.error(`circuit too big for this power of tau ceremony. ${h.nConstraints}*2 > 2**${_}`),-1;if(!d[12])return o&&o.error("Powers of tau is not prepared."),-1;const w=h.nOutputs+h.nPubInputs,y=2**b;await ke(p,1),await p.writeULE32(1),await Re(p),await ke(p,2);const A=u.q,C=8*(Math.floor((fe.bitLength(A)-1)/64)+1),F=u.r,x=8*(Math.floor((fe.bitLength(F)-1)/64)+1),I=fe.mod(fe.shl(1,8*x),F),B=u.Fr.e(fe.mod(fe.mul(I,I),F));let E,v,S;await p.writeULE32(C),await $e(p,A,C),await p.writeULE32(x),await $e(p,F,x),await p.writeULE32(h.nVars),await p.writeULE32(w),await p.writeULE32(y),E=await r.read(m,d[4][0].p),await p.write(E),E=await u.G1.batchLEMtoU(E),s.update(E),v=await r.read(m,d[5][0].p),await p.write(v),v=await u.G1.batchLEMtoU(v),s.update(v),S=await r.read(L,d[6][0].p),await p.write(S),S=await u.G2.batchLEMtoU(S),s.update(S);const P=new Uint8Array(m);u.G1.toRprLEM(P,0,u.G1.g);const q=new Uint8Array(L);u.G2.toRprLEM(q,0,u.G2.g);const O=new Uint8Array(m);u.G1.toRprUncompressed(O,0,u.G1.g);const G=new Uint8Array(L);u.G2.toRprUncompressed(G,0,u.G2.g),await p.write(q),await p.write(P),await p.write(q),s.update(G),s.update(O),s.update(G),await Re(p),o&&o.info("Reading r1cs");let z=await Ke(g,f,2);const T=new $s(h.nVars),M=new $s(h.nVars),U=new $s(h.nVars),Q=new $s(h.nVars-w-1),k=new Array(w+1);o&&o.info("Reading tauG1");let R=await Ke(r,d,12,(y-1)*m,y*m);o&&o.info("Reading tauG2");let N=await Ke(r,d,13,(y-1)*L,y*L);o&&o.info("Reading alphatauG1");let D=await Ke(r,d,14,(y-1)*m,y*m);o&&o.info("Reading betatauG1");let $=await Ke(r,d,15,(y-1)*m,y*m);await async function(){const t=new Uint8Array(12+u.Fr.n8),a=new DataView(t.buffer),e=new Uint8Array(u.Fr.n8);u.Fr.toRprLE(e,0,u.Fr.e(1));let s=0;function r(){const t=z.slice(s,s+4);s+=4;return new DataView(t.buffer).getUint32(0,!0)}const d=new $s;for(let t=0;t=0?u.Fr.fromRprLE(z.slice(o[3],o[3]+u.Fr.n8),0):u.Fr.fromRprLE(e,0);const n=u.Fr.mul(i,B);u.Fr.toRprLE(t,12,n),_.set(t,f),f+=t.length}await p.write(_),await Re(p)}(),await V(3,"G1",k,"IC"),await async function(){await ke(p,9);const t=new qa(y*m);if(b(o&&o.debug(`Writing points end ${i}: ${d}/${e.length}`),t)))),c+=n,t++}const r=await Promise.all(l);for(let t=0;t32768?(g=new qa(h*n),f=new qa(h*u.Fr.n8)):(g=new Uint8Array(h*n),f=new Uint8Array(h*u.Fr.n8));let p=0,m=0;const L=[R,N,D,$],b=new Uint8Array(u.Fr.n8);u.Fr.toRprLE(b,0,u.Fr.e(1));let w=0;for(let t=0;t=0?f.set(z.slice(a[t][i][2],a[t][i][2]+u.Fr.n8),w*u.Fr.n8):f.set(b,w*u.Fr.n8),w++;if(a.length>1){const t=[];t.push({cmd:"ALLOCSET",var:0,buff:g}),t.push({cmd:"ALLOCSET",var:1,buff:f}),t.push({cmd:"ALLOC",var:2,len:a.length*l}),p=0,m=0;let e=0;for(let o=0;o=0;t--){const a=d.contributions[t];o&&o.info("-------------------------"),o&&o.info(Uo(a.contributionHash,`contribution #${t+1} ${a.name?a.name:""}:`)),1==a.type&&(o&&o.info(`Beacon generator: ${Ho(a.beaconHash)}`),o&&o.info(`Beacon iterations Exp: ${a.numIterationsExp}`))}return o&&o.info("-------------------------"),o&&o.info("ZKey Ok!"),!0;async function L(t,a){const e=2*s.G1.F.n8,o=t.byteLength/e,i=s.tm.concurrency,n=Math.floor(o/i),l=[];for(let e=0;e Detected protocol: "+i.protocol),"groth16"===i.protocol)n=await async function(t,a,e){const o=await Xe(t.q),i=2*o.G1.F.n8,n=await o.pairing(t.vk_alpha_1,t.vk_beta_2);let l={protocol:t.protocol,curve:o.name,nPublic:t.nPublic,vk_alpha_1:o.G1.toObject(t.vk_alpha_1),vk_beta_2:o.G2.toObject(t.vk_beta_2),vk_gamma_2:o.G2.toObject(t.vk_gamma_2),vk_delta_2:o.G2.toObject(t.vk_delta_2),vk_alphabeta_12:o.Gt.toObject(n)};await Ne(a,e,3),l.IC=[];for(let e=0;e<=t.nPublic;e++){const t=await a.read(i),e=o.G1.toObject(t);l.IC.push(e)}return await De(a),l=Hs(l),l}(i,e,o);else if("plonk"===i.protocol)n=await async function(t){const a=await Xe(t.q);let e={protocol:t.protocol,curve:a.name,nPublic:t.nPublic,power:t.power,k1:a.Fr.toObject(t.k1),k2:a.Fr.toObject(t.k2),Qm:a.G1.toObject(t.Qm),Ql:a.G1.toObject(t.Ql),Qr:a.G1.toObject(t.Qr),Qo:a.G1.toObject(t.Qo),Qc:a.G1.toObject(t.Qc),S1:a.G1.toObject(t.S1),S2:a.G1.toObject(t.S2),S3:a.G1.toObject(t.S3),X_2:a.G2.toObject(t.X_2),w:a.Fr.toObject(a.Fr.w[t.power])};return e=Hs(e),e}(i);else{if(!i.protocolId||i.protocolId!==Xo)throw new Error("zkey file protocol unrecognized");n=await async function(t,a){const e=await Xe(t.q);let o={protocol:t.protocol,curve:e.name,nPublic:t.nPublic,power:t.power,k1:e.Fr.toObject(t.k1),k2:e.Fr.toObject(t.k2),w:e.Fr.toObject(e.Fr.w[t.power]),w3:e.Fr.toObject(t.w3),w4:e.Fr.toObject(t.w4),w8:e.Fr.toObject(t.w8),wr:e.Fr.toObject(t.wr),X_2:e.G2.toObject(t.X_2),C0:e.G1.toObject(t.C0)};return Hs(o)}(i)}return await e.close(),a&&a.info("EXPORT VERIFICATION KEY FINISHED"),n}var Ws={};const{unstringifyBigInts:Ys,stringifyBigInts:Js}=he;async function Xs(t,a,e){e&&e.info("FFLONK EXPORT SOLIDITY VERIFIER STARTED");const o=await to(t.curve);let i=r(t.w3);t.w3_2=d(o.Fr.square(i));let n=r(t.w4);t.w4_2=d(o.Fr.square(n)),t.w4_3=d(o.Fr.mul(o.Fr.square(n),n));let l=r(t.w8),c=o.Fr.one;for(let a=1;a<8;a++)c=o.Fr.mul(c,l),t["w8_"+a]=d(c);let s=a[t.protocol];return e&&e.info("FFLONK EXPORT SOLIDITY VERIFIER FINISHED"),Ws.render(s,t);function r(t){const a=Ys(t);return o.Fr.fromObject(a)}function d(t){const a=o.Fr.toObject(t);return Js(a)}}var tr=Object.freeze({__proto__:null,newZKey:js,exportBellman:async function(t,a,e){const{fd:o,sections:i}=await Ue(t,"zkey",2),n=await Ci(o,i);if("groth16"!=n.protocol)throw new Error("zkey file is not groth16");const l=await Xe(n.q),c=2*l.G1.F.n8,s=2*l.G2.F.n8,r=await xi(o,l,i),d=await Te(a);let u;await L(n.vk_alpha_1),await L(n.vk_beta_1),await b(n.vk_beta_2),await b(n.vk_gamma_2),await L(n.vk_delta_1),await b(n.vk_delta_2),u=await Ke(o,i,3),u=await l.G1.batchLEMtoU(u),await w("G1",u);const _=await Ke(o,i,9);let g,f,h,p,m;g=await l.G1.fft(_,"affine","jacobian",e),g=await l.G1.batchApplyKey(g,l.Fr.neg(l.Fr.e(2)),l.Fr.w[n.power+1],"jacobian","affine",e),g=g.slice(0,g.byteLength-c),g=await l.G1.batchLEMtoU(g),await w("G1",g),f=await Ke(o,i,8),f=await l.G1.batchLEMtoU(f),await w("G1",f),h=await Ke(o,i,5),h=await l.G1.batchLEMtoU(h),await w("G1",h),p=await Ke(o,i,6),p=await l.G1.batchLEMtoU(p),await w("G1",p),m=await Ke(o,i,7),m=await l.G2.batchLEMtoU(m),await w("G2",m),await d.write(r.csHash),await async function(t){const a=new Uint8Array(4);new DataView(a.buffer,a.byteOffset,a.byteLength).setUint32(0,t,!1),await d.write(a)}(r.contributions.length);for(let t=0;t_.contributions.length)return i&&i.error("The impoerted file does not include new contributions"),!1;for(let t=0;t=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((i=parseInt(i))<10||i>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;const{fd:c,sections:s}=await Ue(t,"zkey",2),r=await Ci(c,s);if("groth16"!=r.protocol)throw new Error("zkey file is not groth16");const d=await Xe(r.q),u=await xi(c,d,s),_=await Qe(a,"zkey",1,10),g=await Vo(l,i),f=ao.exports(64);f.update(u.csHash);for(let t=0;t{const o=this.curve.G1.toObject(this.polynomials[e]);t?a.polynomials[e]=o:a[e]=o})),Object.keys(this.evaluations).forEach((e=>{const o=this.curve.Fr.toObject(this.evaluations[e]);t?a.evaluations[e]=o:a[e]=o})),a}fromObjectProof(t){this.resetProof(),Object.keys(t.polynomials).forEach((a=>{this.polynomials[a]=this.curve.G1.fromObject(t.polynomials[a])})),Object.keys(t.evaluations).forEach((a=>{this.evaluations[a]=this.curve.Fr.fromObject(t.evaluations[a])}))}}var er,or={exports:{}}; /** * [js-sha3]{@link https://github.com/emn178/js-sha3} * @@ -6,4 +6,4 @@ var snarkjs=function(t){"use strict";const e=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];f * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2015-2018 * @license MIT - */Nn=Vn,function(){var t="input is invalid type",e="object"==typeof window,a=e?window:{};a.JS_SHA3_NO_WINDOW&&(e=!1);var i=!e&&"object"==typeof self;!a.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?a=j:i&&(a=self);var o=!a.JS_SHA3_NO_COMMON_JS&&Nn.exports,n=!a.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,l="0123456789abcdef".split(""),r=[4,1024,262144,67108864],s=[0,8,16,24],c=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],d=[224,256,384,512],u=[128,256],g=["hex","buffer","arrayBuffer","array","digest"],f={128:168,256:136};!a.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!n||!a.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});for(var h=function(t,e,a){return function(i){return new B(t,e,t).update(i)[a]()}},_=function(t,e,a){return function(i,o){return new B(t,e,o).update(i)[a]()}},p=function(t,e,a){return function(e,i,o,n){return A["cshake"+t].update(e,i,o,n)[a]()}},m=function(t,e,a){return function(e,i,o,n){return A["kmac"+t].update(e,i,o,n)[a]()}},w=function(t,e,a,i){for(var o=0;o>5,this.byteCount=this.blockCount<<2,this.outputBlocks=a>>5,this.extraBytes=(31&a)>>3;for(var i=0;i<50;++i)this.s[i]=0}function S(t,e,a){B.call(this,t,e,a)}B.prototype.update=function(e){if(this.finalized)throw new Error("finalize already called");var a,i=typeof e;if("string"!==i){if("object"!==i)throw new Error(t);if(null===e)throw new Error(t);if(n&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||n&&ArrayBuffer.isView(e)))throw new Error(t);a=!0}for(var o,l,r=this.blocks,c=this.byteCount,d=e.length,u=this.blockCount,g=0,f=this.s;g>2]|=e[g]<>2]|=l<>2]|=(192|l>>6)<>2]|=(128|63&l)<=57344?(r[o>>2]|=(224|l>>12)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<>2]|=(240|l>>18)<>2]|=(128|l>>12&63)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<=c){for(this.start=o-c,this.block=r[u],o=0;o>=8);a>0;)o.unshift(a),a=255&(t>>=8),++i;return e?o.push(i):o.unshift(i),this.update(o),o.length},B.prototype.encodeString=function(e){var a,i=typeof e;if("string"!==i){if("object"!==i)throw new Error(t);if(null===e)throw new Error(t);if(n&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||n&&ArrayBuffer.isView(e)))throw new Error(t);a=!0}var o=0,l=e.length;if(a)o=l;else for(var r=0;r=57344?o+=3:(s=65536+((1023&s)<<10|1023&e.charCodeAt(++r)),o+=4)}return o+=this.encode(8*o),this.update(e),o},B.prototype.bytepad=function(t,e){for(var a=this.encode(e),i=0;i>2]|=this.padding[3&e],this.lastByteIndex===this.byteCount)for(t[0]=t[a],e=1;e>4&15]+l[15&t]+l[t>>12&15]+l[t>>8&15]+l[t>>20&15]+l[t>>16&15]+l[t>>28&15]+l[t>>24&15];r%e==0&&(P(a),n=0)}return o&&(t=a[n],s+=l[t>>4&15]+l[15&t],o>1&&(s+=l[t>>12&15]+l[t>>8&15]),o>2&&(s+=l[t>>20&15]+l[t>>16&15])),s},B.prototype.arrayBuffer=function(){this.finalize();var t,e=this.blockCount,a=this.s,i=this.outputBlocks,o=this.extraBytes,n=0,l=0,r=this.outputBits>>3;t=o?new ArrayBuffer(i+1<<2):new ArrayBuffer(r);for(var s=new Uint32Array(t);l>8&255,s[t+2]=e>>16&255,s[t+3]=e>>24&255;r%a==0&&P(i)}return n&&(t=r<<2,e=i[l],s[t]=255&e,n>1&&(s[t+1]=e>>8&255),n>2&&(s[t+2]=e>>16&255)),s},S.prototype=new B,S.prototype.finalize=function(){return this.encode(this.outputBits,!0),B.prototype.finalize.call(this)};var P=function(t){var e,a,i,o,n,l,r,s,d,u,g,f,h,_,p,m,w,L,b,A,y,C,I,F,x,E,v,B,S,P,G,z,O,U,T,Q,q,M,k,R,D,N,V,$,j,K,H,Z,W,Y,J,X,tt,et,at,it,ot,nt,lt,rt,st,ct,dt;for(i=0;i<48;i+=2)o=t[0]^t[10]^t[20]^t[30]^t[40],n=t[1]^t[11]^t[21]^t[31]^t[41],l=t[2]^t[12]^t[22]^t[32]^t[42],r=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],d=t[5]^t[15]^t[25]^t[35]^t[45],u=t[6]^t[16]^t[26]^t[36]^t[46],g=t[7]^t[17]^t[27]^t[37]^t[47],e=(f=t[8]^t[18]^t[28]^t[38]^t[48])^(l<<1|r>>>31),a=(h=t[9]^t[19]^t[29]^t[39]^t[49])^(r<<1|l>>>31),t[0]^=e,t[1]^=a,t[10]^=e,t[11]^=a,t[20]^=e,t[21]^=a,t[30]^=e,t[31]^=a,t[40]^=e,t[41]^=a,e=o^(s<<1|d>>>31),a=n^(d<<1|s>>>31),t[2]^=e,t[3]^=a,t[12]^=e,t[13]^=a,t[22]^=e,t[23]^=a,t[32]^=e,t[33]^=a,t[42]^=e,t[43]^=a,e=l^(u<<1|g>>>31),a=r^(g<<1|u>>>31),t[4]^=e,t[5]^=a,t[14]^=e,t[15]^=a,t[24]^=e,t[25]^=a,t[34]^=e,t[35]^=a,t[44]^=e,t[45]^=a,e=s^(f<<1|h>>>31),a=d^(h<<1|f>>>31),t[6]^=e,t[7]^=a,t[16]^=e,t[17]^=a,t[26]^=e,t[27]^=a,t[36]^=e,t[37]^=a,t[46]^=e,t[47]^=a,e=u^(o<<1|n>>>31),a=g^(n<<1|o>>>31),t[8]^=e,t[9]^=a,t[18]^=e,t[19]^=a,t[28]^=e,t[29]^=a,t[38]^=e,t[39]^=a,t[48]^=e,t[49]^=a,_=t[0],p=t[1],K=t[11]<<4|t[10]>>>28,H=t[10]<<4|t[11]>>>28,B=t[20]<<3|t[21]>>>29,S=t[21]<<3|t[20]>>>29,rt=t[31]<<9|t[30]>>>23,st=t[30]<<9|t[31]>>>23,N=t[40]<<18|t[41]>>>14,V=t[41]<<18|t[40]>>>14,U=t[2]<<1|t[3]>>>31,T=t[3]<<1|t[2]>>>31,m=t[13]<<12|t[12]>>>20,w=t[12]<<12|t[13]>>>20,Z=t[22]<<10|t[23]>>>22,W=t[23]<<10|t[22]>>>22,P=t[33]<<13|t[32]>>>19,G=t[32]<<13|t[33]>>>19,ct=t[42]<<2|t[43]>>>30,dt=t[43]<<2|t[42]>>>30,et=t[5]<<30|t[4]>>>2,at=t[4]<<30|t[5]>>>2,Q=t[14]<<6|t[15]>>>26,q=t[15]<<6|t[14]>>>26,L=t[25]<<11|t[24]>>>21,b=t[24]<<11|t[25]>>>21,Y=t[34]<<15|t[35]>>>17,J=t[35]<<15|t[34]>>>17,z=t[45]<<29|t[44]>>>3,O=t[44]<<29|t[45]>>>3,F=t[6]<<28|t[7]>>>4,x=t[7]<<28|t[6]>>>4,it=t[17]<<23|t[16]>>>9,ot=t[16]<<23|t[17]>>>9,M=t[26]<<25|t[27]>>>7,k=t[27]<<25|t[26]>>>7,A=t[36]<<21|t[37]>>>11,y=t[37]<<21|t[36]>>>11,X=t[47]<<24|t[46]>>>8,tt=t[46]<<24|t[47]>>>8,$=t[8]<<27|t[9]>>>5,j=t[9]<<27|t[8]>>>5,E=t[18]<<20|t[19]>>>12,v=t[19]<<20|t[18]>>>12,nt=t[29]<<7|t[28]>>>25,lt=t[28]<<7|t[29]>>>25,R=t[38]<<8|t[39]>>>24,D=t[39]<<8|t[38]>>>24,C=t[48]<<14|t[49]>>>18,I=t[49]<<14|t[48]>>>18,t[0]=_^~m&L,t[1]=p^~w&b,t[10]=F^~E&B,t[11]=x^~v&S,t[20]=U^~Q&M,t[21]=T^~q&k,t[30]=$^~K&Z,t[31]=j^~H&W,t[40]=et^~it&nt,t[41]=at^~ot<,t[2]=m^~L&A,t[3]=w^~b&y,t[12]=E^~B&P,t[13]=v^~S&G,t[22]=Q^~M&R,t[23]=q^~k&D,t[32]=K^~Z&Y,t[33]=H^~W&J,t[42]=it^~nt&rt,t[43]=ot^~lt&st,t[4]=L^~A&C,t[5]=b^~y&I,t[14]=B^~P&z,t[15]=S^~G&O,t[24]=M^~R&N,t[25]=k^~D&V,t[34]=Z^~Y&X,t[35]=W^~J&tt,t[44]=nt^~rt&ct,t[45]=lt^~st&dt,t[6]=A^~C&_,t[7]=y^~I&p,t[16]=P^~z&F,t[17]=G^~O&x,t[26]=R^~N&U,t[27]=D^~V&T,t[36]=Y^~X&$,t[37]=J^~tt&j,t[46]=rt^~ct&et,t[47]=st^~dt&at,t[8]=C^~_&m,t[9]=I^~p&w,t[18]=z^~F&E,t[19]=O^~x&v,t[28]=N^~U&Q,t[29]=V^~T&q,t[38]=X^~$&K,t[39]=tt^~j&H,t[48]=ct^~et&it,t[49]=dt^~at&ot,t[0]^=c[i],t[1]^=c[i+1]};if(o)Nn.exports=A;else for(C=0;C3*s.domainSize-4&&!d.isZero(e))throw new Error("T Polynomial is not divisible")}a&&a.debug("ifft Tz");const x=await d.ifft(C);for(let t=0;t<4*s.domainSize;t++){const e=x.slice(t*g,(t+1)*g);if(t>3*s.domainSize+5){if(!d.isZero(e))throw new Error("Tz Polynomial is not well calculated")}else F.set(d.add(F.slice(t*g,(t+1)*g),e),t*g)}E=F.slice(0,(3*s.domainSize+6)*g);let v=new Ge((s.domainSize+1)*g);v.set(F.slice(0,s.domainSize*g),0),v.set(U.b[10],s.domainSize*g);let P=new Ge((s.domainSize+1)*g);P.set(F.slice(s.domainSize*g,2*s.domainSize*g),0);const G=d.sub(P.slice(0,g),U.b[10]);P.set(G,0),P.set(U.b[11],s.domainSize*g);let z=new Ge((s.domainSize+6)*g);z.set(F.slice(2*s.domainSize*g,(3*s.domainSize+6)*g),0);const O=d.sub(z.slice(0,g),U.b[11]);function T(t,e,a,i,o){let n,l;const r=d.mul(t,e),s=d.mul(t,i),c=d.mul(a,e);n=r;let u=d.mul(a,i);return l=d.add(s,c),o&&(l=d.add(l,d.mul(h[o],u))),[n,l]}function Q(t,e,a,i,o,n,l,r,s){let c,u;const g=d.mul(t,e),f=d.mul(t,n),_=d.mul(o,e),w=d.mul(o,n),L=d.mul(a,i),b=d.mul(a,r),A=d.mul(l,i),y=d.mul(l,r);c=d.mul(g,L);let C=d.mul(_,L);C=d.add(C,d.mul(f,L)),C=d.add(C,d.mul(g,A)),C=d.add(C,d.mul(g,b));let I=d.mul(w,L);I=d.add(I,d.mul(_,A)),I=d.add(I,d.mul(_,b)),I=d.add(I,d.mul(f,A)),I=d.add(I,d.mul(f,b)),I=d.add(I,d.mul(g,y));let F=d.mul(f,y);F=d.add(F,d.mul(_,y)),F=d.add(F,d.mul(w,b)),F=d.add(F,d.mul(w,A));let x=d.mul(w,y);return u=C,s&&(u=d.add(u,d.mul(h[s],I)),u=d.add(u,d.mul(p[s],F)),u=d.add(u,d.mul(m[s],x))),[c,u]}z.set(O,0),B.T1=await D(v,"multiexp T1"),B.T2=await D(P,"multiexp T2"),B.T3=await D(z,"multiexp T3")}(),await async function(){const t=new Ge(s.domainSize*g);await l.readToBuffer(t,0,s.domainSize*g,r[7][0].p);const e=new Ge(s.domainSize*g);await l.readToBuffer(e,0,s.domainSize*g,r[8][0].p);const i=new Ge(s.domainSize*g);await l.readToBuffer(i,0,s.domainSize*g,r[9][0].p);const o=new Ge(s.domainSize*g);await l.readToBuffer(o,0,s.domainSize*g,r[10][0].p);const n=new Ge(s.domainSize*g);await l.readToBuffer(n,0,s.domainSize*g,r[11][0].p);const c=new Ge(s.domainSize*g);await l.readToBuffer(c,0,s.domainSize*g,r[12][0].p+10*s.domainSize*g);const f=new Uint8Array(2*u.F.n8*3);u.toRprUncompressed(f,0,B.T1),u.toRprUncompressed(f,2*u.F.n8,B.T2),u.toRprUncompressed(f,4*u.F.n8,B.T3),U.xi=M(f),a&&a.debug("xi: "+d.toString(U.xi));B.eval_a=k(C,U.xi),B.eval_b=k(I,U.xi),B.eval_c=k(F,U.xi),B.eval_s1=k(G,U.xi),B.eval_s2=k(z,U.xi),B.eval_t=k(E,U.xi),B.eval_zw=k(x,d.mul(U.xi,d.w[s.power]));const h=d.mul(B.eval_a,B.eval_b);let _=B.eval_a;const p=d.mul(U.beta,U.xi);_=d.add(_,p),_=d.add(_,U.gamma);let m=B.eval_b;m=d.add(m,d.mul(p,s.k1)),m=d.add(m,U.gamma);let w=B.eval_c;w=d.add(w,d.mul(p,s.k2)),w=d.add(w,U.gamma);const L=d.mul(d.mul(d.mul(_,m),w),U.alpha);let b=B.eval_a;b=d.add(b,d.mul(U.beta,B.eval_s1)),b=d.add(b,U.gamma);let A=B.eval_b;A=d.add(A,d.mul(U.beta,B.eval_s2)),A=d.add(A,U.gamma);let y=d.mul(b,A);y=d.mul(y,U.beta),y=d.mul(y,B.eval_zw),y=d.mul(y,U.alpha),U.xim=U.xi;for(let t=0;t=0;o--)i=d.add(d.mul(i,e),t.slice(o*g,(o+1)*g));return i}function R(t,e){const a=t.byteLength/g,i=new Ge(a*g);i.set(d.zero,(a-1)*g),i.set(t.slice((a-1)*g,a*g),(a-2)*g);for(let o=a-3;o>=0;o--)i.set(d.add(t.slice((o+1)*g,(o+2)*g),d.mul(e,i.slice((o+1)*g,(o+2)*g))),o*g);if(!d.eq(t.slice(0,g),d.mul(d.neg(e),i.slice(0,g))))throw new Error("Polinomial does not divide");return i}async function D(t,e){const i=t.byteLength/g,o=O.slice(0,i*c.G1.F.n8*2),n=await c.Fr.batchFromMontgomery(t);let l=await c.G1.multiExpAffine(o,n,a,e);return l=c.G1.toAffine(l),l}async function N(t,e){e=e||[];let a=await d.ifft(t);const i=new Ge(g*s.domainSize*4);i.set(a,0);const o=new Ge(g*(s.domainSize+e.length));o.set(a,0);for(let t=0;ta;){const e=o.shift(),a=o.shift(),i=e[0],n=a[0],l=w++,r=t.zero,s=t.neg(e[1]),c=t.neg(a[1]),d=t.one,u=t.zero;p.push([i,n,l,r,s,c,d,u]),m.push([i,n,e[1],a[1]]),o.push([l,t.one])}for(let t=0;t0?i.toString():a!=t.zero?"k":"0"}function s(e,a,s){const c=r(e),d=r(a);if("0"===c||"0"===d)i(s),l(s);else if("k"===c){l(o(a,e[0],s))}else if("k"===d){l(o(e,a[0],s))}else!function(e,a,i){const o=n(e,1),l=n(a,1),r=n(i,1),s=o.s[0],c=l.s[0],d=r.s[0],u=t.mul(o.coefs[0],l.coefs[0]),g=t.mul(o.coefs[0],l.k),f=t.mul(o.k,l.coefs[0]),h=t.neg(r.coefs[0]),_=t.sub(t.mul(o.k,l.k),r.k);p.push([s,c,d,u,g,f,h,_])}(e,a,s)}for(let e=1;e<=L;e++){const a=e,i=0,o=0,n=t.zero,l=t.one,r=t.zero,s=t.zero,c=t.zero;p.push([a,i,o,n,l,r,s,c])}for(let t=0;tr)return i&&i.error(`circuit too big for this power of tau ceremony. ${p.length} > 2**${r}`),-1;if(!n[12])return i&&i.error("Powers of tau is not prepared."),-1;const C=new Ge(y*u),I=n[12][0].p+(2**A-1)*u;await o.readToBuffer(C,0,y*u,I);const[F,x]=function(){let t=h.two;for(;a(t,[],A);)h.add(t,h.one);let e=h.add(t,h.one);for(;a(e,[t],A);)h.add(e,h.one);return[t,e];function a(t,e,a){const i=2**a;let o=h.one;for(let n=0;n0?2:this.Fr.isZero(e)?0:1}normalizeLinearCombination(t){const e=Object.keys(t);for(let a=0;ao;){const i=l.shift(),o=l.shift(),n=t.nVars++,r=this.fnGetAdditionConstraint(i[0],o[0],n,this.Fr.neg(i[1]),this.Fr.neg(o[1]),this.Fr.zero,this.Fr.one,this.Fr.zero);e.push(r),a.push([i[0],o[0],i[1],o[1]]),l.push([n,this.Fr.one])}for(let t=0;t32768?new Ge(t.length*i.n8):new Uint8Array(t.length*i.n8);for(let e=0;e32768?new Ge(i*o.n8):new Uint8Array(i*o.n8);return n.set(t.coef.slice(),0),new rl(n,e,a)}isEqual(t){const e=this.degree();if(e!==t.degree())return!1;for(let a=0;a32768?new Ge((this.length()+t.length)*this.Fr.n8):new Uint8Array((this.length()+t.length)*this.Fr.n8);e.set(this.coef,0);for(let a=0;athis.coef.byteLength?this.Fr.zero:this.coef.slice(e,e+this.Fr.n8)}setCoef(t,e){if(t>this.length()-1)throw new Error("Coef index is not available");this.coef.set(e,t*this.Fr.n8)}static async to4T(t,e,a,i){a=a||[];let o=await i.ifft(t);const n=4*e>32768?new Ge(4*e*i.n8):new Uint8Array(4*e*i.n8);n.set(o,0);const l=await i.fft(n);if(0===a.length)return[o,l];const r=e+a.length>32768?new Ge((e+a.length)*i.n8):new Uint8Array((e+a.length)*i.n8);r.set(o,0);for(let t=0;t0;t--){const e=t*this.Fr.n8;if(!this.Fr.eq(this.Fr.zero,this.coef.slice(e,e+this.Fr.n8)))return t}return 0}evaluate(t){let e=this.Fr.zero;for(let a=this.degree()+1;a>0;a--){let i=a*this.Fr.n8;const o=this.coef.slice(i-this.Fr.n8,i);e=this.Fr.add(o,this.Fr.mul(e,t))}return e}fastEvaluate(t){const e=this.Fr;let a=this.degree()+1,i=parseInt(a/3),o=a-3*i,n=[],l=[];l[0]=e.one;for(let a=0;a<3;a++){n[a]=e.zero;for(let r=2===a?i+o:i;r>0;r--)n[a]=e.add(this.getCoef(a*i+r-1),e.mul(n[a],t)),0===a&&(l[0]=e.mul(l[0],t))}for(let t=1;t<3;t++)n[0]=e.add(n[0],e.mul(l[t-1],n[t])),l[t]=e.mul(l[t-1],l[0]);return n[0]}add(t,e){let a=!1;t.length()>this.length()&&(a=!0);const i=this.length(),o=t.length();for(let n=0;nthis.length()&&(a=!0);const i=this.length(),o=t.length();for(let n=0;n32768?new Ge(a*e.n8):new Uint8Array(a*e.n8);let o=new rl(i,this.curve,this.logger);o.coef.set(this.coef.slice(0,(a-1)*e.n8),32),this.mulScalar(e.neg(t)),o.add(this),this.coef=o.coef}byXNSubValue(t,e){const a=this.Fr,i=!(this.length()-t-1>=this.degree())?this.length()+t:this.length(),o=i>32768?new Ge(i*a.n8):new Uint8Array(i*a.n8);let n=new rl(o,this.curve,this.logger);n.coef.set(this.coef.slice(0,32*(this.degree()+1)),32*t),this.mulScalar(e),n.add(this),this.coef=n.coef}divBy(t){const e=this.Fr,a=this.degree(),i=t.degree();let o=new rl(this.coef,this.curve,this.logger);this.coef=this.length()>32768?new Ge(this.length()*e.n8):new Uint8Array(this.length()*e.n8);for(let n=a-i;n>=0;n--){this.setCoef(n,e.div(o.getCoef(n+i),t.getCoef(i)));for(let a=0;a<=i;a++)o.setCoef(n+a,e.sub(o.getCoef(n+a),e.mul(this.getCoef(n),t.getCoef(a))))}return o}divByMonic(t,e){const a=this.Fr;let i=this.degree(),o=this.length()>32768?new Ge(this.length()*a.n8):new Uint8Array(this.length()*a.n8),n=new rl(o,this.curve,this.logger),l=[];for(let e=0;e=0&&!(s<0);s-=r){let i=o;l[i]=a.add(this.getCoef(s+t),a.mul(l[i],e)),n.setCoef(s,l[i])}this.coef=n.coef}divByVanishing(t,e){if(this.degree()32768?new Ge(this.length()*a.n8):new Uint8Array(this.length()*a.n8);for(let o=this.length()-1;o>=t;o--){let n=i.getCoef(o);a.eq(a.zero,n)||(i.setCoef(o,a.zero),i.setCoef(o-t,a.add(i.getCoef(o-t),a.mul(e,n))),this.setCoef(o-t,a.add(this.getCoef(o-t),n)))}return i}divByVanishing2(t,e){if(this.degree()32768?new Ge(this.length()*a.n8):new Uint8Array(this.length()*a.n8);let o=this.length()-t,n=Math.floor(o/3),l=o-2*n;console.log(o),console.log(n+" "+l);for(let o=0;o<3;o++){console.log("> Thread "+o);for(let r=0===o?l:n;r>0;r--){let s=r-1;0!==o&&(s+=(o-1)*n+l);let c=s+t,d=i.getCoef(c);a.eq(a.zero,d)||(i.setCoef(c,a.zero),i.setCoef(s,a.add(i.getCoef(s),a.mul(e,d))),this.setCoef(s,a.add(this.getCoef(s),d)),console.log(s+" <-- "+c))}}return this.print(),i}fastDivByVanishing(t){const e=this.Fr;for(let a=0;a32768?new Ge(this.length()*e.n8):new Uint8Array(this.length()*e.n8),this.curve,this.logger),u=this.coef;this.coef=d.coef,d.coef=u;for(let t=0;t0;t--){let a=t-1,o=a*s+c;h[a]=[];for(let l=0;l32768?new Ge(this.length()*this.Fr.n8):new Uint8Array(this.length()*this.Fr.n8);e.set(this.Fr.zero,(this.length()-1)*this.Fr.n8),e.set(this.coef.slice((this.length()-1)*this.Fr.n8,this.length()*this.Fr.n8),(this.length()-2)*this.Fr.n8);for(let a=this.length()-3;a>=0;a--){let i=a*this.Fr.n8;e.set(this.Fr.add(this.coef.slice(i+this.Fr.n8,i+2*this.Fr.n8),this.Fr.mul(t,e.slice(i+this.Fr.n8,i+2*this.Fr.n8))),a*this.Fr.n8)}if(!this.Fr.eq(this.coef.slice(0,this.Fr.n8),this.Fr.mul(this.Fr.neg(t),e.slice(0,this.Fr.n8))))throw new Error("Polynomial does not divide");this.coef=e}divZh(t,e=4){for(let e=0;et*(e-1)-e&&!this.Fr.isZero(o))throw new Error("Polynomial is not divisible")}return this}divByZerofier(t,e){let a=this.Fr;const i=a.inv(e),o=a.neg(i);let n=a.eq(a.one,o),l=a.eq(a.negone,o);if(!n)for(let e=0;ethis.length()-t-1&&!this.Fr.isZero(s))throw new Error("Polynomial is not divisible")}return this}byX(){const t=this.length()+1>32768?new Ge(this.coef.byteLength+this.Fr.n8):new Uint8Array(this.coef.byteLength+this.Fr.n8);t.set(this.Fr.zero,0),t.set(this.coef,this.Fr.n8),this.coef=t}static async expX(t,e,a=!1){const i=t.Fr;if(e<1)throw new Error("Compute a new polynomial to a zero or negative number is not allowed");if(1===e)return await rl.fromEvaluations(t.coef,curve,t.logger);const o=a?t.degree():t.length()-1,n=o*e+1>32768?new Ge((o*e+1)*i.n8):new Uint8Array((o*e+1)*i.n8);n.set(t.getCoef(0),0);for(let a=1;a<=o;a++){const o=a*i.n8,l=t.getCoef(a);n.set(l,o*e)}return new rl(n,t.curve,t.logger)}split(t,e,a){if(t<1)throw new Error(`Polynomials can't be split in ${t} parts`);if(1===t)return[this];if(0!==a.length&&a.length32768?new Ge(l):new Uint8Array(l);o[e]=new rl(r,this.curve,this.logger);const s=e*i,c=n?this.coef.byteLength:(e+1)*i;if(o[e].coef.set(this.coef.slice(s,c),0),n||o[e].coef.set(a[e],i),0!==e){const t=this.Fr.sub(o[e].coef.slice(0,this.Fr.n8),a[e-1]);o[e].coef.set(t,0)}n&&o[e].truncate()}return o}truncate(){const t=this.degree();if(t+132768?new Ge((t+1)*this.Fr.n8):new Uint8Array((t+1)*this.Fr.n8);e.set(this.coef.slice(0,(t+1)*this.Fr.n8),0),this.coef=e}}static lagrangePolynomialInterpolation(t,e,a){const i=a.Fr;let o=n(0);for(let e=1;e32768?new Ge(t.length*i.n8):new Uint8Array(t.length*i.n8);n=new rl(o,a),n.setCoef(0,i.neg(t[e])),n.setCoef(1,i.one)}else n.byXSubValue(t[e]);let l=n.evaluate(t[o]);l=i.inv(l);const r=i.mul(e[o],l);return n.mulScalar(r),n}}static zerofierPolynomial(t,e){const a=e.Fr;let i=t.length+1>32768?new Ge((t.length+1)*a.n8):new Uint8Array((t.length+1)*a.n8),o=new rl(i,e);o.setCoef(0,a.neg(t[0])),o.setCoef(1,a.one);for(let e=1;e=0;a--){const i=this.getCoef(a);t.eq(t.zero,i)||(t.isNegative(i)?e+=" - ":a!==this.degree()&&(e+=" + "),e+=t.toString(i),a>0&&(e+=a>1?"x^"+a:"x"))}console.log(e)}async multiExponentiation(t,e){const a=this.coef.byteLength/this.Fr.n8,i=t.slice(0,a*this.G1.F.n8*2),o=await this.Fr.batchFromMontgomery(this.coef);let n=await this.G1.multiExpAffine(i,o,this.logger,e);return n=this.G1.toAffine(n),n}}class sl{constructor(t,e,a){this.eval=t,this.curve=e,this.Fr=e.Fr,this.logger=a}static async fromPolynomial(t,e,a,i){const o=new Ge(t.length()*e*a.Fr.n8);o.set(t.coef,0);const n=await a.Fr.fft(o);return new sl(n,a,i)}getEvaluation(t){const e=t*this.Fr.n8;if(e+this.Fr.n8>this.eval.byteLength)throw new Error("Evaluations.getEvaluation() out of bounds");return this.eval.slice(e,e+this.Fr.n8)}length(){let t=this.eval.byteLength/this.Fr.n8;if(t!==Math.floor(this.eval.byteLength/this.Fr.n8))throw new Error("Polynomial evaluations buffer has incorrect size");return 0===t&&this.logger.warn("Polynomial has length zero"),t}}class cl{constructor(t,e,a){this.n=t,this.polynomials=Array(t).fill(void 0),this.curve=e,this.Fr=e.Fr,this.G1=e.G1,this.logger=a}addPolynomial(t,e){if(t>this.n-1)throw new Error("CPolynomial:addPolynomial, cannot add a polynomial to a position greater than n-1");this.polynomials[t]=e}degree(){let t=this.polynomials.map(((t,e)=>void 0===t?0:t.degree()*this.n+e));return Math.max(...t)}getPolynomial(){let t=this.polynomials.map((t=>void 0===t?0:t.degree()));const e=this.degree(),a=2**(qi(e-1)+1),i=this.Fr.n8;let o=new rl(new Ge(a*i),this.curve,this.logger);for(let a=0;a0===a.type?t++:e++));let a=new Uint8Array(e*this.Fr.n8+t*this.G1.F.n8*2),i=0;for(let t=0;t{t.polynomials[e]=this.curve.G1.toObject(this.polynomials[e])})),Object.keys(this.evaluations).forEach((e=>{t.evaluations[e]=this.curve.Fr.toObject(this.evaluations[e])})),t}fromObjectProof(t){this.resetProof(),Object.keys(t.polynomials).forEach((e=>{this.polynomials[e]=this.curve.G1.fromObject(t.polynomials[e])})),Object.keys(t.evaluations).forEach((e=>{this.evaluations[e]=this.curve.Fr.fromObject(t.evaluations[e])}))}}const{stringifyBigInts:fl}=ma;async function hl(t,e,a){a&&a.info("FFLONK PROVER STARTED"),a&&a.info("> Reading witness file");const{fd:i,sections:o}=await ka(e,"wtns",2),n=await Go(i,o);a&&a.info("> Reading zkey file");const{fd:l,sections:r}=await ka(t,"zkey",2),s=await Fo(l,r);if(s.protocolId!==to)throw new Error("zkey file is not fflonk");if(!pa.eq(s.r,n.q))throw new Error("Curve of the witness does not match the curve of the proving key");if(n.nWitness!==s.nVars-s.nAdditions)throw new Error(`Invalid witness length. Circuit: ${s.nVars}, witness: ${n.nWitness}, ${s.nAdditions}`);const c=s.curve,d=c.Fr,u=c.Fr.n8,g=2*c.G1.F.n8,f=s.domainSize*u;a&&(a.info("----------------------------"),a.info(" FFLONK PROVE SETTINGS"),a.info(` Curve: ${c.name}`),a.info(` Circuit power: ${s.power}`),a.info(` Domain size: ${s.domainSize}`),a.info(` Vars: ${s.nVars}`),a.info(` Public vars: ${s.nPublic}`),a.info(` Constraints: ${s.nConstraints}`),a.info(` Additions: ${s.nAdditions}`),a.info("----------------------------")),a&&a.info("> Reading witness file data");const h=await Za(i,o,2);await i.close(),h.set(d.zero,0);const _=new Ge(s.nAdditions*u);let p={},m={},w={},L={},b={},A={},y=new gl(c,a);a&&a.info(`> Reading Section ${oo}. Additions`),await async function(){a&&a.info("··· Computing additions");const t=await Za(l,r,oo),e=8+2*u;for(let i=0;i Reading Sections ${ho},${_o},${po}. Sigma1, Sigma2 & Sigma 3`),a&&a.info("··· Reading Sigma polynomials "),m.Sigma1=new rl(new Ge(f),c,a),m.Sigma2=new rl(new Ge(f),c,a),m.Sigma3=new rl(new Ge(f),c,a),await l.readToBuffer(m.Sigma1.coef,0,f,r[ho][0].p),await l.readToBuffer(m.Sigma2.coef,0,f,r[_o][0].p),await l.readToBuffer(m.Sigma3.coef,0,f,r[po][0].p),a&&a.info("··· Reading Sigma evaluations"),w.Sigma1=new sl(new Ge(4*f),c,a),w.Sigma2=new sl(new Ge(4*f),c,a),w.Sigma3=new sl(new Ge(4*f),c,a),await l.readToBuffer(w.Sigma1.eval,0,4*f,r[ho][0].p+f),await l.readToBuffer(w.Sigma2.eval,0,4*f,r[_o][0].p+f),await l.readToBuffer(w.Sigma3.eval,0,4*f,r[po][0].p+f),a&&a.info(`> Reading Section ${wo}. Powers of Tau`);const C=new Ge(16*s.domainSize*g);await l.readToBuffer(C,0,(9*s.domainSize+18)*g,r[wo][0].p),globalThis.gc&&globalThis.gc(),a&&a.info(""),a&&a.info("> ROUND 1"),await async function(){b.b=[];for(let t=1;t<=9;t++)b.b[t]=d.random();a&&a.info("> Computing A, B, C wire polynomials");await async function(){a&&a.info("··· Reading data from zkey file");p.A=new Ge(f),p.B=new Ge(f),p.C=new Ge(f);const t=await Za(l,r,no),e=await Za(l,r,lo),i=await Za(l,r,ro);for(let a=0;a=s.domainSize)throw new Error("A Polynomial is not well calculated");if(m.B.degree()>=s.domainSize)throw new Error("B Polynomial is not well calculated");if(m.C.degree()>=s.domainSize)throw new Error("C Polynomial is not well calculated")}(),a&&a.info("> Computing T0 polynomial");await async function(){a&&a.info(`··· Reading sections ${so}, ${co}, ${uo}, ${go}, ${fo}. Q selectors`);w.QL=new sl(new Ge(4*f),c,a),w.QR=new sl(new Ge(4*f),c,a),w.QM=new sl(new Ge(4*f),c,a),w.QO=new sl(new Ge(4*f),c,a),w.QC=new sl(new Ge(4*f),c,a),await l.readToBuffer(w.QL.eval,0,4*f,r[so][0].p+f),await l.readToBuffer(w.QR.eval,0,4*f,r[co][0].p+f),await l.readToBuffer(w.QM.eval,0,4*f,r[uo][0].p+f),await l.readToBuffer(w.QO.eval,0,4*f,r[go][0].p+f),await l.readToBuffer(w.QC.eval,0,4*f,r[fo][0].p+f);const t=await Za(l,r,mo);w.lagrange1=new sl(t,c,a),p.T0=new Ge(4*f),a&&a.info("··· Computing T0 evaluations");for(let t=0;t<4*s.domainSize;t++){a&&0!==t&&t%1e5==0&&a.info(` T0 evaluation ${t}/${4*s.domainSize}`);const e=w.A.getEvaluation(t),i=w.B.getEvaluation(t),o=w.C.getEvaluation(t),n=w.QL.getEvaluation(t),l=w.QR.getEvaluation(t),r=w.QM.getEvaluation(t),c=w.QO.getEvaluation(t),g=w.QC.getEvaluation(t);let f=d.zero;for(let e=0;e=2*s.domainSize-2)throw new Error(`T0 Polynomial is not well calculated (degree is ${m.T0.degree()} and must be less than ${2*s.domainSize+2}`);delete p.T0}(),a&&a.info("> Computing C1 polynomial");await async function(){let t=new cl(4,c,a);if(t.addPolynomial(0,m.A),t.addPolynomial(1,m.B),t.addPolynomial(2,m.C),t.addPolynomial(3,m.T0),m.C1=t.getPolynomial(),m.C1.degree()>=8*s.domainSize-8)throw new Error("C1 Polynomial is not well calculated")}(),a&&a.info("> Computing C1 multi exponentiation");let t=await m.C1.multiExponentiation(C,"C1");return y.addPolynomial("C1",t),0}(),delete m.T0,delete w.QL,delete w.QR,delete w.QM,delete w.QO,delete w.QC,globalThis.gc&&globalThis.gc(),a&&a.info("> ROUND 2"),await async function(){a&&a.info("> Computing challenges beta and gamma");const t=new ul(c);t.addPolCommitment(s.C0);for(let e=0;e Computing Z polynomial");await async function(){a&&a.info("··· Computing Z evaluations");let t=new Ge(f),e=new Ge(f);t.set(d.one,0),e.set(d.one,0);let i=d.one;for(let o=0;o=s.domainSize+3)throw new Error("Z Polynomial is not well calculated");delete p.Z}(),a&&a.info("> Computing T1 polynomial");await async function(){a&&a.info("··· Computing T1 evaluations");p.T1=new Ge(2*f),p.T1z=new Ge(2*f);let t=d.one;for(let e=0;e<2*s.domainSize;e++){a&&0!==e&&e%1e5==0&&a.info(` T1 evaluation ${e}/${4*s.domainSize}`);const i=d.square(t),o=w.Z.getEvaluation(2*e),n=d.add(d.add(d.mul(b.b[7],i),d.mul(b.b[8],t)),b.b[9]),l=w.lagrange1.getEvaluation(s.domainSize+2*e);let r=d.mul(d.sub(o,d.one),l),c=d.mul(n,l);p.T1.set(r,e*u),p.T1z.set(c,e*u),t=d.mul(t,d.w[s.power+1])}a&&a.info("··· Computing T1 ifft");m.T1=await rl.fromEvaluations(p.T1,c,a),m.T1.divByZerofier(s.domainSize,d.one),a&&a.info("··· Computing T1z ifft");if(m.T1z=await rl.fromEvaluations(p.T1z,c,a),m.T1.add(m.T1z),m.T1.degree()>=s.domainSize+2)throw new Error("T1 Polynomial is not well calculated");delete p.T1,delete p.T1z,delete m.T1z}(),a&&a.info("> Computing T2 polynomial");await async function(){a&&a.info("··· Computing T2 evaluations");p.T2=new Ge(4*f),p.T2z=new Ge(4*f);let t=d.one;for(let e=0;e<4*s.domainSize;e++){a&&0!==e&&e%1e5==0&&a.info(` T2 evaluation ${e}/${4*s.domainSize}`);const i=d.square(t),o=d.mul(t,d.w[s.power]),n=d.square(o),l=w.A.getEvaluation(e),r=w.B.getEvaluation(e),c=w.C.getEvaluation(e),g=w.Z.getEvaluation(e),f=w.Z.getEvaluation((4*s.domainSize+4+e)%(4*s.domainSize)),h=d.add(d.add(d.mul(b.b[7],i),d.mul(b.b[8],t)),b.b[9]),_=d.add(d.add(d.mul(b.b[7],n),d.mul(b.b[8],o)),b.b[9]),m=w.Sigma1.getEvaluation(e),L=w.Sigma2.getEvaluation(e),A=w.Sigma3.getEvaluation(e),y=d.mul(b.beta,t);let C=d.add(l,y);C=d.add(C,b.gamma);let I=d.add(r,d.mul(y,s.k1));I=d.add(I,b.gamma);let F=d.add(c,d.mul(y,s.k2));F=d.add(F,b.gamma);let x=d.mul(d.mul(d.mul(C,I),F),g),E=d.mul(d.mul(d.mul(C,I),F),h),v=d.add(l,d.mul(b.beta,m));v=d.add(v,b.gamma);let B=d.add(r,d.mul(b.beta,L));B=d.add(B,b.gamma);let S=d.add(c,d.mul(b.beta,A));S=d.add(S,b.gamma);let P=d.mul(d.mul(d.mul(v,B),S),f),G=d.mul(d.mul(d.mul(v,B),S),_),z=d.sub(x,P),O=d.sub(E,G);p.T2.set(z,e*u),p.T2z.set(O,e*u),t=d.mul(t,d.w[s.power+2])}a&&a.info("··· Computing T2 ifft");m.T2=await rl.fromEvaluations(p.T2,c,a),a&&a.info("··· Computing T2 / ZH");m.T2.divByZerofier(s.domainSize,d.one),a&&a.info("··· Computing T2z ifft");if(m.T2z=await rl.fromEvaluations(p.T2z,c,a),m.T2.add(m.T2z),m.T2.degree()>=3*s.domainSize)throw new Error("T2 Polynomial is not well calculated");delete p.T2,delete p.T2z,delete m.T2z}(),a&&a.info("> Computing C2 polynomial");await async function(){let t=new cl(3,c,a);if(t.addPolynomial(0,m.Z),t.addPolynomial(1,m.T1),t.addPolynomial(2,m.T2),m.C2=t.getPolynomial(),m.C2.degree()>=9*s.domainSize)throw new Error("C2 Polynomial is not well calculated")}(),a&&a.info("> Computing C2 multi exponentiation");let e=await m.C2.multiExponentiation(C,"C2");return y.addPolynomial("C2",e),0}(),delete p.A,delete p.B,delete p.C,delete w.A,delete w.B,delete w.C,delete w.Sigma1,delete w.Sigma2,delete w.Sigma3,delete w.lagrange1,delete w.Z,globalThis.gc&&globalThis.gc(),a&&a.info("> ROUND 3"),await async function(){a&&a.info("> Computing challenge xi");const t=new ul(c);t.addScalar(b.gamma),t.addPolCommitment(y.getPolynomial("C2")),b.xiSeed=t.getChallenge();const e=d.square(b.xiSeed);A.w8=[],A.w8[0]=d.one;for(let t=1;t<8;t++)A.w8[t]=d.mul(A.w8[t-1],s.w8);A.w4=[],A.w4[0]=d.one;for(let t=1;t<4;t++)A.w4[t]=d.mul(A.w4[t-1],s.w4);A.w3=[],A.w3[0]=d.one,A.w3[1]=s.w3,A.w3[2]=d.square(s.w3),A.S0={},A.S0.h0w8=[],A.S0.h0w8[0]=d.mul(e,b.xiSeed);for(let t=1;t<8;t++)A.S0.h0w8[t]=d.mul(A.S0.h0w8[0],A.w8[t]);A.S1={},A.S1.h1w4=[],A.S1.h1w4[0]=d.square(A.S0.h0w8[0]);for(let t=1;t<4;t++)A.S1.h1w4[t]=d.mul(A.S1.h1w4[0],A.w4[t]);A.S2={},A.S2.h2w3=[],A.S2.h2w3[0]=d.mul(A.S1.h1w4[0],e),A.S2.h2w3[1]=d.mul(A.S2.h2w3[0],A.w3[1]),A.S2.h2w3[2]=d.mul(A.S2.h2w3[0],A.w3[2]),A.S2.h3w3=[],A.S2.h3w3[0]=d.mul(A.S2.h2w3[0],s.wr),A.S2.h3w3[1]=d.mul(A.S2.h3w3[0],A.w3[1]),A.S2.h3w3[2]=d.mul(A.S2.h3w3[0],A.w3[2]),b.xi=d.mul(d.square(A.S2.h2w3[0]),A.S2.h2w3[0]),a&&a.info("··· challenges.xi: "+d.toString(b.xi));m.QL=new rl(new Ge(f),c,a),m.QR=new rl(new Ge(f),c,a),m.QM=new rl(new Ge(f),c,a),m.QO=new rl(new Ge(f),c,a),m.QC=new rl(new Ge(f),c,a),await l.readToBuffer(m.QL.coef,0,f,r[so][0].p),await l.readToBuffer(m.QR.coef,0,f,r[co][0].p),await l.readToBuffer(m.QM.coef,0,f,r[uo][0].p),await l.readToBuffer(m.QO.coef,0,f,r[go][0].p),await l.readToBuffer(m.QC.coef,0,f,r[fo][0].p),a&&a.info("··· Computing evaluations");y.addEvaluation("ql",m.QL.evaluate(b.xi)),y.addEvaluation("qr",m.QR.evaluate(b.xi)),y.addEvaluation("qm",m.QM.evaluate(b.xi)),y.addEvaluation("qo",m.QO.evaluate(b.xi)),y.addEvaluation("qc",m.QC.evaluate(b.xi)),y.addEvaluation("s1",m.Sigma1.evaluate(b.xi)),y.addEvaluation("s2",m.Sigma2.evaluate(b.xi)),y.addEvaluation("s3",m.Sigma3.evaluate(b.xi)),y.addEvaluation("a",m.A.evaluate(b.xi)),y.addEvaluation("b",m.B.evaluate(b.xi)),y.addEvaluation("c",m.C.evaluate(b.xi)),y.addEvaluation("z",m.Z.evaluate(b.xi)),b.xiw=d.mul(b.xi,d.w[s.power]),y.addEvaluation("zw",m.Z.evaluate(b.xiw)),y.addEvaluation("t1w",m.T1.evaluate(b.xiw)),y.addEvaluation("t2w",m.T2.evaluate(b.xiw))}(),delete m.A,delete m.B,delete m.C,delete m.Z,delete m.T1,delete m.T2,delete m.Sigma1,delete m.Sigma2,delete m.Sigma3,delete m.QL,delete m.QR,delete m.QM,delete m.QC,delete m.QO,globalThis.gc&&globalThis.gc(),a&&a.info("> ROUND 4"),await async function(){a&&a.info("> Computing challenge alpha");const t=new ul(c);t.addScalar(b.xiSeed),t.addScalar(y.getEvaluation("ql")),t.addScalar(y.getEvaluation("qr")),t.addScalar(y.getEvaluation("qm")),t.addScalar(y.getEvaluation("qo")),t.addScalar(y.getEvaluation("qc")),t.addScalar(y.getEvaluation("s1")),t.addScalar(y.getEvaluation("s2")),t.addScalar(y.getEvaluation("s3")),t.addScalar(y.getEvaluation("a")),t.addScalar(y.getEvaluation("b")),t.addScalar(y.getEvaluation("c")),t.addScalar(y.getEvaluation("z")),t.addScalar(y.getEvaluation("zw")),t.addScalar(y.getEvaluation("t1w")),t.addScalar(y.getEvaluation("t2w")),b.alpha=t.getChallenge(),a&&a.info("··· challenges.alpha: "+d.toString(b.alpha));a&&a.info("> Reading C0 polynomial");m.C0=new rl(new Ge(8*f),c,a),await l.readToBuffer(m.C0.coef,0,8*f,r[Lo][0].p),a&&a.info("> Computing R0 polynomial");(function(){if(m.R0=rl.lagrangePolynomialInterpolation([A.S0.h0w8[0],A.S0.h0w8[1],A.S0.h0w8[2],A.S0.h0w8[3],A.S0.h0w8[4],A.S0.h0w8[5],A.S0.h0w8[6],A.S0.h0w8[7]],[m.C0.evaluate(A.S0.h0w8[0]),m.C0.evaluate(A.S0.h0w8[1]),m.C0.evaluate(A.S0.h0w8[2]),m.C0.evaluate(A.S0.h0w8[3]),m.C0.evaluate(A.S0.h0w8[4]),m.C0.evaluate(A.S0.h0w8[5]),m.C0.evaluate(A.S0.h0w8[6]),m.C0.evaluate(A.S0.h0w8[7])],c),m.R0.degree()>7)throw new Error("R0 Polynomial is not well calculated")})(),a&&a.info("> Computing R1 polynomial");(function(){if(m.R1=rl.lagrangePolynomialInterpolation([A.S1.h1w4[0],A.S1.h1w4[1],A.S1.h1w4[2],A.S1.h1w4[3]],[m.C1.evaluate(A.S1.h1w4[0]),m.C1.evaluate(A.S1.h1w4[1]),m.C1.evaluate(A.S1.h1w4[2]),m.C1.evaluate(A.S1.h1w4[3])],c),m.R1.degree()>3)throw new Error("R1 Polynomial is not well calculated")})(),a&&a.info("> Computing R2 polynomial");(function(){if(m.R2=rl.lagrangePolynomialInterpolation([A.S2.h2w3[0],A.S2.h2w3[1],A.S2.h2w3[2],A.S2.h3w3[0],A.S2.h3w3[1],A.S2.h3w3[2]],[m.C2.evaluate(A.S2.h2w3[0]),m.C2.evaluate(A.S2.h2w3[1]),m.C2.evaluate(A.S2.h2w3[2]),m.C2.evaluate(A.S2.h3w3[0]),m.C2.evaluate(A.S2.h3w3[1]),m.C2.evaluate(A.S2.h3w3[2])],c),m.R2.degree()>5)throw new Error("R2 Polynomial is not well calculated")})(),a&&a.info("> Computing F polynomial");await async function(){a&&a.info("··· Computing F polynomial");m.F=rl.fromPolynomial(m.C0,c,a),m.F.sub(m.R0),m.F.divByZerofier(8,b.xi);let t=rl.fromPolynomial(m.C1,c,a);t.sub(m.R1),t.mulScalar(b.alpha),t.divByZerofier(4,b.xi);let e=rl.fromPolynomial(m.C2,c,a);if(e.sub(m.R2),e.mulScalar(d.square(b.alpha)),e.divByZerofier(3,b.xi),e.divByZerofier(3,b.xiw),m.F.add(t),m.F.add(e),m.F.degree()>=9*s.domainSize-6)throw new Error("F Polynomial is not well calculated")}(),a&&a.info("> Computing W1 multi exponentiation");let e=await m.F.multiExponentiation(C,"W1");return y.addPolynomial("W1",e),0}(),globalThis.gc&&globalThis.gc(),a&&a.info("> ROUND 5"),await async function(){a&&a.info("> Computing challenge y");const t=new ul(c);t.addScalar(b.alpha),t.addPolCommitment(y.getPolynomial("W1")),b.y=t.getChallenge(),a&&a.info("··· challenges.y: "+d.toString(b.y));a&&a.info("> Computing L polynomial");await async function(){a&&a.info("··· Computing L polynomial");const t=m.R0.evaluate(b.y),e=m.R1.evaluate(b.y),i=m.R2.evaluate(b.y);let o=d.sub(b.y,A.S0.h0w8[0]);for(let t=1;t<8;t++)o=d.mul(o,d.sub(b.y,A.S0.h0w8[t]));let n=d.sub(b.y,A.S1.h1w4[0]);for(let t=1;t<4;t++)n=d.mul(n,d.sub(b.y,A.S1.h1w4[t]));let l=d.sub(b.y,A.S2.h2w3[0]);for(let t=1;t<3;t++)l=d.mul(l,d.sub(b.y,A.S2.h2w3[t]));for(let t=0;t<3;t++)l=d.mul(l,d.sub(b.y,A.S2.h3w3[t]));let r=d.mul(n,l),u=d.mul(b.alpha,d.mul(o,l)),g=d.mul(d.square(b.alpha),d.mul(o,n));L.denH1=n,L.denH2=l,m.L=rl.fromPolynomial(m.C0,c,a),m.L.subScalar(t),m.L.mulScalar(r);let f=rl.fromPolynomial(m.C1,c,a);f.subScalar(e),f.mulScalar(u);let h=rl.fromPolynomial(m.C2,c,a);h.subScalar(i),h.mulScalar(g),m.L.add(f),m.L.add(h),a&&a.info("> Computing ZT polynomial");await async function(){m.ZT=rl.zerofierPolynomial([A.S0.h0w8[0],A.S0.h0w8[1],A.S0.h0w8[2],A.S0.h0w8[3],A.S0.h0w8[4],A.S0.h0w8[5],A.S0.h0w8[6],A.S0.h0w8[7],A.S1.h1w4[0],A.S1.h1w4[1],A.S1.h1w4[2],A.S1.h1w4[3],A.S2.h2w3[0],A.S2.h2w3[1],A.S2.h2w3[2],A.S2.h3w3[0],A.S2.h3w3[1],A.S2.h3w3[2]],c)}();const _=m.ZT.evaluate(b.y);if(m.F.mulScalar(_),m.L.sub(m.F),m.L.degree()>=9*s.domainSize)throw new Error("L Polynomial is not well calculated");delete p.L}(),a&&a.info("> Computing ZTS2 polynomial");await async function(){m.ZTS2=rl.zerofierPolynomial([A.S1.h1w4[0],A.S1.h1w4[1],A.S1.h1w4[2],A.S1.h1w4[3],A.S2.h2w3[0],A.S2.h2w3[1],A.S2.h2w3[2],A.S2.h3w3[0],A.S2.h3w3[1],A.S2.h3w3[2]],c)}();let e=m.ZTS2.evaluate(b.y);e=d.inv(e),m.L.mulScalar(e);const i=rl.fromCoefficientsArray([d.neg(b.y),d.one],c);a&&a.info("> Computing W' = L / ZTS2 polynomial");const o=m.L.divBy(i);if(o.degree()>0)throw new Error(`Degree of L(X)/(ZTS2(y)(X-y)) remainder is ${o.degree()} and should be 0`);if(m.L.degree()>=9*s.domainSize-1)throw new Error("Degree of L(X)/(ZTS2(y)(X-y)) is not correct");a&&a.info("> Computing W' multi exponentiation");let n=await m.L.multiExponentiation(C,"W2");return y.addPolynomial("W2",n),0}(),delete m.C0,delete m.C1,delete m.C2,delete m.R1,delete m.R2,delete m.F,delete m.L,delete m.ZT,delete m.ZTS2,await l.close(),globalThis.gc&&globalThis.gc(),y.addEvaluation("inv",function(){let t=b.xi;for(let e=0;e Reading PTau file");const{fd:o,sections:n}=await ka(e,"ptau",1);if(!n[12])throw new Error("Powers of Tau is not well prepared. Section 12 missing.");i&&i.info("> Getting curve from PTau settings");const{curve:l}=await Xo(o,n);i&&i.info("> Reading r1cs file");const{fd:r,sections:s}=await ka(t,"r1cs",1),c=await An(r,s,{loadConstraints:!1,loadCustomGates:!0});if(c.prime!==l.r)throw new Error("r1cs curve does not match powers of tau ceremony curve");const d=l.Fr,u=l.Fr.n8,g=2*l.G1.F.n8,f=2*l.G2.F.n8;let h,_={},p={},m={nVars:c.nVars,nPublic:c.nOutputs+c.nPubInputs};const w=new Gn;let L=new Gn;if(i&&i.info("> Processing FFlonk constraints"),await async function(t,e,a){for(let e=0;e computing k1 and k2");const[b,A]=function(){let t=d.two;for(;a(t,[],m.cirPower);)d.add(t,d.one);let e=d.add(t,d.one);for(;a(e,[t],m.cirPower);)d.add(e,d.one);return[t,e];function a(t,e,a){const i=2**a;let o=d.one;for(let n=0;n computing w3");const y=function(){let t=d.e(31624),e=pa.div(3648040478639879203707734290876212514758060733402672390616367364429301415936n,pa.e(3));return d.exp(t,e)}();i&&i.info("> computing w4");const C=d.w[2];i&&i.info("> computing w8");const I=d.w[3];i&&i.info("> computing wr");const F=function(t,e){const a=e.e(467799165886069610036046866799264026481344299079011762026774533774345988080n);return e.exp(a,2**(28-t))}(m.cirPower,l.Fr);return await async function(){i&&i.info("> Writing the zkey file");const t=await Ra(a,"zkey",1,ao,1<<22,1<<24);i&&i.info(`··· Writing Section ${Yi}. Zkey Header`);await async function(t){await Da(t,Yi),await t.writeULE32(to),await Na(t)}(t),i&&i.info(`··· Writing Section ${oo}. Additions`);await async function(t){await Da(t,oo);const e=new Uint8Array(8+2*u),a=new DataView(e.buffer);for(let o=0;o=8*m.domainSize)throw new Error("C0 Polynomial is not well calculated");await Da(t,Lo),await t.write(_.C0.coef),await Na(t)}(t),globalThis.gc&&globalThis.gc();i&&i.info(`··· Writing Section ${io}. FFlonk Header`);await async function(t){await Da(t,io);const e=l.q,a=8*(Math.floor((pa.bitLength(e)-1)/64)+1);await t.writeULE32(a),await ja(t,e,a);const i=l.r,r=8*(Math.floor((pa.bitLength(i)-1)/64)+1);let s;await t.writeULE32(r),await ja(t,i,r),await t.writeULE32(m.nVars),await t.writeULE32(m.nPublic),await t.writeULE32(m.domainSize),await t.writeULE32(L.length),await t.writeULE32(w.length),await t.write(b),await t.write(A),await t.write(y),await t.write(C),await t.write(I),await t.write(F),s=await o.read(f,n[3][0].p+f),await t.write(s);let c=await _.C0.multiExponentiation(h,"C0");await t.write(c),await Na(t)}(t),globalThis.gc&&globalThis.gc();i&&i.info("> Writing the zkey file finished");await t.close()}(),await r.close(),await o.close(),i&&i.info("FFLONK SETUP FINISHED"),0;async function x(t,e,a,o){await Da(t,e);for(let e=0;e Checking commitments belong to G1"),!function(t,e,a){const i=t.G1;return i.isValid(e.polynomials.C1)&&i.isValid(e.polynomials.C2)&&i.isValid(e.polynomials.W1)&&i.isValid(e.polynomials.W2)&&i.isValid(a.C0)}(o,l,n))return i.error("Proof is not well constructed"),!1;i&&i.info("> Computing challenges");const{challenges:c,roots:d}=function(t,e,a,i,o){const n=t.Fr,l={},r={},s=new ul(t);s.addPolCommitment(a.C0);for(let t=0;t Computing Zero polynomial evaluation Z_H(xi)"),c.zh=s.sub(c.xiN,s.one),c.invzh=s.inv(c.zh),i&&i.info("> Computing Lagrange evaluations");const u=await async function(t,e,a){const i=t.Fr,o=Math.max(1,a.nPublic),n=new Ge(o*i.n8);let l=new Ge(o*i.n8),r=i.one;for(let t=0;t Computing polynomial identities PI(X)");const g=function(t,e,a){const i=t.Fr;let o=i.zero;for(let t=0;t Computing r0(y)");const f=function(t,e,a,i,o,n){const l=o.Fr;n&&n.info("··· Computing C0(h_0ω_8^i) values");let r=[];for(let e=0;e<8;e++){let i=[];i[1]=a.S0.h0w8[e];for(let t=2;t<8;t++)i[t]=l.mul(i[t-1],a.S0.h0w8[e]);r[e]=l.add(t.evaluations.ql,l.mul(t.evaluations.qr,i[1])),r[e]=l.add(r[e],l.mul(t.evaluations.qo,i[2])),r[e]=l.add(r[e],l.mul(t.evaluations.qm,i[3])),r[e]=l.add(r[e],l.mul(t.evaluations.qc,i[4])),r[e]=l.add(r[e],l.mul(t.evaluations.s1,i[5])),r[e]=l.add(r[e],l.mul(t.evaluations.s2,i[6])),r[e]=l.add(r[e],l.mul(t.evaluations.s3,i[7]))}const s=rl.lagrangePolynomialInterpolation([a.S0.h0w8[0],a.S0.h0w8[1],a.S0.h0w8[2],a.S0.h0w8[3],a.S0.h0w8[4],a.S0.h0w8[5],a.S0.h0w8[6],a.S0.h0w8[7]],r,o);if(s.degree()>7)throw new Error("R0 Polynomial is not well calculated");n&&n.info("··· Computing evaluation r0(y)");return s.evaluate(e.y)}(l,c,d,0,o,i);i&&i.info("> Computing r1(y)");const h=function(t,e,a,i,o,n){const l=o.Fr;n&&n.info("··· Computing T0(xi)");let r=l.mul(t.evaluations.ql,t.evaluations.a);r=l.add(r,l.mul(t.evaluations.qr,t.evaluations.b)),r=l.add(r,l.mul(t.evaluations.qm,l.mul(t.evaluations.a,t.evaluations.b))),r=l.add(r,l.mul(t.evaluations.qo,t.evaluations.c)),r=l.add(r,t.evaluations.qc),r=l.add(r,i),r=l.mul(r,e.invzh),n&&n.info("··· Computing C1(h_1ω_4^i) values");let s=[];for(let e=0;e<4;e++){s[e]=t.evaluations.a,s[e]=l.add(s[e],l.mul(a.S1.h1w4[e],t.evaluations.b));const i=l.square(a.S1.h1w4[e]);s[e]=l.add(s[e],l.mul(i,t.evaluations.c)),s[e]=l.add(s[e],l.mul(l.mul(i,a.S1.h1w4[e]),r))}const c=rl.lagrangePolynomialInterpolation([a.S1.h1w4[0],a.S1.h1w4[1],a.S1.h1w4[2],a.S1.h1w4[3]],s,o);if(c.degree()>3)throw new Error("R1 Polynomial is not well calculated");n&&n.info("··· Computing evaluation r1(y)");return c.evaluate(e.y)}(l,c,d,g,o,i);i&&i.info("> Computing r2(y)");const _=function(t,e,a,i,o,n,l){const r=n.Fr;l&&l.info("··· Computing T1(xi)");let s=r.sub(t.evaluations.z,r.one);s=r.mul(s,i),s=r.mul(s,e.invzh),l&&l.info("··· Computing T2(xi)");const c=r.mul(e.beta,e.xi),d=r.add(t.evaluations.a,r.add(c,e.gamma)),u=r.add(t.evaluations.b,r.add(r.mul(c,o.k1),e.gamma)),g=r.add(t.evaluations.c,r.add(r.mul(c,o.k2),e.gamma)),f=r.mul(d,r.mul(u,r.mul(g,t.evaluations.z))),h=r.add(t.evaluations.a,r.add(r.mul(e.beta,t.evaluations.s1),e.gamma)),_=r.add(t.evaluations.b,r.add(r.mul(e.beta,t.evaluations.s2),e.gamma)),p=r.add(t.evaluations.c,r.add(r.mul(e.beta,t.evaluations.s3),e.gamma)),m=r.mul(h,r.mul(_,r.mul(p,t.evaluations.zw)));let w=r.sub(f,m);w=r.mul(w,e.invzh),l&&l.info("··· Computing C2(h_2ω_3^i) values");let L=[];for(let e=0;e<3;e++)L[e]=r.add(t.evaluations.z,r.mul(a.S2.h2w3[e],s)),L[e]=r.add(L[e],r.mul(r.square(a.S2.h2w3[e]),w));l&&l.info("··· Computing C2(h_3ω_3^i) values");for(let e=0;e<3;e++)L[e+3]=r.add(t.evaluations.zw,r.mul(a.S2.h3w3[e],t.evaluations.t1w)),L[e+3]=r.add(L[e+3],r.mul(r.square(a.S2.h3w3[e]),t.evaluations.t2w));l&&l.info("··· Computing r2(xi)");const b=rl.lagrangePolynomialInterpolation([a.S2.h2w3[0],a.S2.h2w3[1],a.S2.h2w3[2],a.S2.h3w3[0],a.S2.h3w3[1],a.S2.h3w3[2]],L,n);if(b.degree()>5)throw new Error("R2 Polynomial is not well calculated");l&&l.info("··· Computing evaluation r2(y)");return b.evaluate(e.y)}(l,c,d,u[1],n,o,i);i&&i.info("> Computing F");const p=function(t,e,a,i,o){const n=t.G1,l=t.Fr;let r=l.sub(i.y,o.S0.h0w8[0]);for(let t=1;t<8;t++)r=l.mul(r,l.sub(i.y,o.S0.h0w8[t]));i.temp=r;let s=l.sub(i.y,o.S1.h1w4[0]);for(let t=1;t<4;t++)s=l.mul(s,l.sub(i.y,o.S1.h1w4[t]));let c=l.sub(i.y,o.S2.h2w3[0]);for(let t=1;t<3;t++)c=l.mul(c,l.sub(i.y,o.S2.h2w3[t]));for(let t=0;t<3;t++)c=l.mul(c,l.sub(i.y,o.S2.h3w3[t]));i.quotient1=l.mul(i.alpha,l.div(r,s)),i.quotient2=l.mul(l.square(i.alpha),l.div(r,c));let d=n.timesFr(e.polynomials.C1,i.quotient1),u=n.timesFr(e.polynomials.C2,i.quotient2);return n.add(a.C0,n.add(d,u))}(o,l,n,c,d);i&&i.info("> Computing E");const m=function(t,e,a,i,o,n,l){const r=t.G1,s=t.Fr;let c=s.mul(n,a.quotient1),d=s.mul(l,a.quotient2);return r.timesFr(r.one,s.add(o,s.add(c,d)))}(o,0,c,0,f,h,_);i&&i.info("> Computing J");const w=function(t,e,a){const i=t.G1;return i.timesFr(e.polynomials.W1,a.temp)}(o,l,c);i&&i.info("> Validate all evaluations with a pairing");const L=await async function(t,e,a,i,o,n,l){const r=t.G1;let s=r.timesFr(e.polynomials.W2,a.y);s=r.add(r.sub(r.sub(o,n),l),s);const c=t.G2.one,d=e.polynomials.W2,u=i.X_2;return await t.pairingEq(r.neg(s),c,d,u)}(o,l,c,n,p,m,w);return i&&(L?i.info("PROOF VERIFIED SUCCESSFULLY"):i.warn("Invalid Proof")),i&&i.info("FFLONK VERIFIER FINISHED"),L},exportSolidityVerifier:Rn,exportSolidityCallData:async function(t,e){const a=ml(e),i=ml(t),o=await ai(a.curve),n=o.G1,l=o.Fr;let r="";for(let t=0;t>5,this.byteCount=this.blockCount<<2,this.outputBlocks=e>>5,this.extraBytes=(31&e)>>3;for(var o=0;o<50;++o)this.s[o]=0}function S(t,a,e){v.call(this,t,a,e)}v.prototype.update=function(a){if(this.finalized)throw new Error("finalize already called");var e,o=typeof a;if("string"!==o){if("object"!==o)throw new Error(t);if(null===a)throw new Error(t);if(n&&a.constructor===ArrayBuffer)a=new Uint8Array(a);else if(!(Array.isArray(a)||n&&ArrayBuffer.isView(a)))throw new Error(t);e=!0}for(var i,l,c=this.blocks,r=this.byteCount,d=a.length,u=this.blockCount,_=0,g=this.s;_>2]|=a[_]<>2]|=l<>2]|=(192|l>>6)<>2]|=(128|63&l)<=57344?(c[i>>2]|=(224|l>>12)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<>2]|=(240|l>>18)<>2]|=(128|l>>12&63)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<=r){for(this.start=i-r,this.block=c[u],i=0;i>=8);e>0;)i.unshift(e),e=255&(t>>=8),++o;return a?i.push(o):i.unshift(o),this.update(i),i.length},v.prototype.encodeString=function(a){var e,o=typeof a;if("string"!==o){if("object"!==o)throw new Error(t);if(null===a)throw new Error(t);if(n&&a.constructor===ArrayBuffer)a=new Uint8Array(a);else if(!(Array.isArray(a)||n&&ArrayBuffer.isView(a)))throw new Error(t);e=!0}var i=0,l=a.length;if(e)i=l;else for(var c=0;c=57344?i+=3:(s=65536+((1023&s)<<10|1023&a.charCodeAt(++c)),i+=4)}return i+=this.encode(8*i),this.update(a),i},v.prototype.bytepad=function(t,a){for(var e=this.encode(a),o=0;o>2]|=this.padding[3&a],this.lastByteIndex===this.byteCount)for(t[0]=t[e],a=1;a>4&15]+l[15&t]+l[t>>12&15]+l[t>>8&15]+l[t>>20&15]+l[t>>16&15]+l[t>>28&15]+l[t>>24&15];c%a==0&&(P(e),n=0)}return i&&(t=e[n],s+=l[t>>4&15]+l[15&t],i>1&&(s+=l[t>>12&15]+l[t>>8&15]),i>2&&(s+=l[t>>20&15]+l[t>>16&15])),s},v.prototype.arrayBuffer=function(){this.finalize();var t,a=this.blockCount,e=this.s,o=this.outputBlocks,i=this.extraBytes,n=0,l=0,c=this.outputBits>>3;t=i?new ArrayBuffer(o+1<<2):new ArrayBuffer(c);for(var s=new Uint32Array(t);l>8&255,s[t+2]=a>>16&255,s[t+3]=a>>24&255;c%e==0&&P(o)}return n&&(t=c<<2,a=o[l],s[t]=255&a,n>1&&(s[t+1]=a>>8&255),n>2&&(s[t+2]=a>>16&255)),s},S.prototype=new v,S.prototype.finalize=function(){return this.encode(this.outputBits,!0),v.prototype.finalize.call(this)};var P=function(t){var a,e,o,i,n,l,c,s,d,u,_,g,f,h,p,m,L,b,w,y,A,C,F,x,I,B,E,v,S,P,q,O,G,z,T,M,U,Q,k,R,N,D,$,j,V,K,H,Z,W,Y,J,X,tt,at,et,ot,it,nt,lt,ct,st,rt,dt;for(o=0;o<48;o+=2)i=t[0]^t[10]^t[20]^t[30]^t[40],n=t[1]^t[11]^t[21]^t[31]^t[41],l=t[2]^t[12]^t[22]^t[32]^t[42],c=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],d=t[5]^t[15]^t[25]^t[35]^t[45],u=t[6]^t[16]^t[26]^t[36]^t[46],_=t[7]^t[17]^t[27]^t[37]^t[47],a=(g=t[8]^t[18]^t[28]^t[38]^t[48])^(l<<1|c>>>31),e=(f=t[9]^t[19]^t[29]^t[39]^t[49])^(c<<1|l>>>31),t[0]^=a,t[1]^=e,t[10]^=a,t[11]^=e,t[20]^=a,t[21]^=e,t[30]^=a,t[31]^=e,t[40]^=a,t[41]^=e,a=i^(s<<1|d>>>31),e=n^(d<<1|s>>>31),t[2]^=a,t[3]^=e,t[12]^=a,t[13]^=e,t[22]^=a,t[23]^=e,t[32]^=a,t[33]^=e,t[42]^=a,t[43]^=e,a=l^(u<<1|_>>>31),e=c^(_<<1|u>>>31),t[4]^=a,t[5]^=e,t[14]^=a,t[15]^=e,t[24]^=a,t[25]^=e,t[34]^=a,t[35]^=e,t[44]^=a,t[45]^=e,a=s^(g<<1|f>>>31),e=d^(f<<1|g>>>31),t[6]^=a,t[7]^=e,t[16]^=a,t[17]^=e,t[26]^=a,t[27]^=e,t[36]^=a,t[37]^=e,t[46]^=a,t[47]^=e,a=u^(i<<1|n>>>31),e=_^(n<<1|i>>>31),t[8]^=a,t[9]^=e,t[18]^=a,t[19]^=e,t[28]^=a,t[29]^=e,t[38]^=a,t[39]^=e,t[48]^=a,t[49]^=e,h=t[0],p=t[1],K=t[11]<<4|t[10]>>>28,H=t[10]<<4|t[11]>>>28,v=t[20]<<3|t[21]>>>29,S=t[21]<<3|t[20]>>>29,ct=t[31]<<9|t[30]>>>23,st=t[30]<<9|t[31]>>>23,D=t[40]<<18|t[41]>>>14,$=t[41]<<18|t[40]>>>14,z=t[2]<<1|t[3]>>>31,T=t[3]<<1|t[2]>>>31,m=t[13]<<12|t[12]>>>20,L=t[12]<<12|t[13]>>>20,Z=t[22]<<10|t[23]>>>22,W=t[23]<<10|t[22]>>>22,P=t[33]<<13|t[32]>>>19,q=t[32]<<13|t[33]>>>19,rt=t[42]<<2|t[43]>>>30,dt=t[43]<<2|t[42]>>>30,at=t[5]<<30|t[4]>>>2,et=t[4]<<30|t[5]>>>2,M=t[14]<<6|t[15]>>>26,U=t[15]<<6|t[14]>>>26,b=t[25]<<11|t[24]>>>21,w=t[24]<<11|t[25]>>>21,Y=t[34]<<15|t[35]>>>17,J=t[35]<<15|t[34]>>>17,O=t[45]<<29|t[44]>>>3,G=t[44]<<29|t[45]>>>3,x=t[6]<<28|t[7]>>>4,I=t[7]<<28|t[6]>>>4,ot=t[17]<<23|t[16]>>>9,it=t[16]<<23|t[17]>>>9,Q=t[26]<<25|t[27]>>>7,k=t[27]<<25|t[26]>>>7,y=t[36]<<21|t[37]>>>11,A=t[37]<<21|t[36]>>>11,X=t[47]<<24|t[46]>>>8,tt=t[46]<<24|t[47]>>>8,j=t[8]<<27|t[9]>>>5,V=t[9]<<27|t[8]>>>5,B=t[18]<<20|t[19]>>>12,E=t[19]<<20|t[18]>>>12,nt=t[29]<<7|t[28]>>>25,lt=t[28]<<7|t[29]>>>25,R=t[38]<<8|t[39]>>>24,N=t[39]<<8|t[38]>>>24,C=t[48]<<14|t[49]>>>18,F=t[49]<<14|t[48]>>>18,t[0]=h^~m&b,t[1]=p^~L&w,t[10]=x^~B&v,t[11]=I^~E&S,t[20]=z^~M&Q,t[21]=T^~U&k,t[30]=j^~K&Z,t[31]=V^~H&W,t[40]=at^~ot&nt,t[41]=et^~it<,t[2]=m^~b&y,t[3]=L^~w&A,t[12]=B^~v&P,t[13]=E^~S&q,t[22]=M^~Q&R,t[23]=U^~k&N,t[32]=K^~Z&Y,t[33]=H^~W&J,t[42]=ot^~nt&ct,t[43]=it^~lt&st,t[4]=b^~y&C,t[5]=w^~A&F,t[14]=v^~P&O,t[15]=S^~q&G,t[24]=Q^~R&D,t[25]=k^~N&$,t[34]=Z^~Y&X,t[35]=W^~J&tt,t[44]=nt^~ct&rt,t[45]=lt^~st&dt,t[6]=y^~C&h,t[7]=A^~F&p,t[16]=P^~O&x,t[17]=q^~G&I,t[26]=R^~D&z,t[27]=N^~$&T,t[36]=Y^~X&j,t[37]=J^~tt&V,t[46]=ct^~rt&at,t[47]=st^~dt&et,t[8]=C^~h&m,t[9]=F^~p&L,t[18]=O^~x&B,t[19]=G^~I&E,t[28]=D^~z&M,t[29]=$^~T&U,t[38]=X^~j&K,t[39]=tt^~V&H,t[48]=rt^~at&ot,t[49]=dt^~et&it,t[0]^=r[o],t[1]^=r[o+1]};if(i)er.exports=y;else for(C=0;C0===e.type?t++:a++));let e=new Uint8Array(a*this.Fr.n8+t*this.G1.F.n8*2),o=0;for(let t=0;t32768?new qa(t.length*o.n8):new Uint8Array(t.length*o.n8);for(let a=0;a32768?new qa(o*i.n8):new Uint8Array(o*i.n8);return n.set(t.coef.slice(),0),new wr(n,a,e)}isEqual(t){const a=this.degree();if(a!==t.degree())return!1;for(let e=0;e32768?new qa((this.length()+t.length)*this.Fr.n8):new Uint8Array((this.length()+t.length)*this.Fr.n8);a.set(this.coef,0);for(let e=0;ethis.coef.byteLength?this.Fr.zero:this.coef.slice(a,a+this.Fr.n8)}setCoef(t,a){if(t>this.length()-1)throw new Error("Coef index is not available");this.coef.set(a,t*this.Fr.n8)}static async to4T(t,a,e,o){e=e||[];let i=await o.ifft(t);const n=4*a>32768?new qa(4*a*o.n8):new Uint8Array(4*a*o.n8);n.set(i,0);const l=await o.fft(n);if(0===e.length)return[i,l];const c=a+e.length>32768?new qa((a+e.length)*o.n8):new Uint8Array((a+e.length)*o.n8);c.set(i,0);for(let t=0;t0;t--){const a=t*this.Fr.n8;if(!this.Fr.eq(this.Fr.zero,this.coef.slice(a,a+this.Fr.n8)))return t}return 0}evaluate(t){let a=this.Fr.zero;for(let e=this.degree()+1;e>0;e--){let o=e*this.Fr.n8;const i=this.coef.slice(o-this.Fr.n8,o);a=this.Fr.add(i,this.Fr.mul(a,t))}return a}fastEvaluate(t){const a=this.Fr;let e=this.degree()+1,o=parseInt(e/3),i=e-3*o,n=[],l=[];l[0]=a.one;for(let e=0;e<3;e++){n[e]=a.zero;for(let c=2===e?o+i:o;c>0;c--)n[e]=a.add(this.getCoef(e*o+c-1),a.mul(n[e],t)),0===e&&(l[0]=a.mul(l[0],t))}for(let t=1;t<3;t++)n[0]=a.add(n[0],a.mul(l[t-1],n[t])),l[t]=a.mul(l[t-1],l[0]);return n[0]}add(t,a){let e=!1;t.length()>this.length()&&(e=!0);const o=this.length(),i=t.length();for(let n=0;nthis.length()&&(e=!0);const o=this.length(),i=t.length();for(let n=0;n32768?new qa(e*a.n8):new Uint8Array(e*a.n8);let i=new wr(o,this.curve,this.logger);i.coef.set(this.coef.slice(0,(e-1)*a.n8),32),this.mulScalar(a.neg(t)),i.add(this),this.coef=i.coef}byXNSubValue(t,a){const e=this.Fr,o=!(this.length()-t-1>=this.degree())?this.length()+t:this.length(),i=o>32768?new qa(o*e.n8):new Uint8Array(o*e.n8);let n=new wr(i,this.curve,this.logger);n.coef.set(this.coef.slice(0,32*(this.degree()+1)),32*t),this.mulScalar(a),n.add(this),this.coef=n.coef}divBy(t){const a=this.Fr,e=this.degree(),o=t.degree();let i=new wr(this.coef,this.curve,this.logger);this.coef=this.length()>32768?new qa(this.length()*a.n8):new Uint8Array(this.length()*a.n8);for(let n=e-o;n>=0;n--){this.setCoef(n,a.div(i.getCoef(n+o),t.getCoef(o)));for(let e=0;e<=o;e++)i.setCoef(n+e,a.sub(i.getCoef(n+e),a.mul(this.getCoef(n),t.getCoef(e))))}return i}divByMonic(t,a){const e=this.Fr;let o=this.degree(),i=this.length()>32768?new qa(this.length()*e.n8):new Uint8Array(this.length()*e.n8),n=new wr(i,this.curve,this.logger),l=[];for(let a=0;a=0&&!(s<0);s-=c){let o=i;l[o]=e.add(this.getCoef(s+t),e.mul(l[o],a)),n.setCoef(s,l[o])}this.coef=n.coef}divByVanishing(t,a){if(this.degree()32768?new qa(this.length()*e.n8):new Uint8Array(this.length()*e.n8);for(let i=this.length()-1;i>=t;i--){let n=o.getCoef(i);e.eq(e.zero,n)||(o.setCoef(i,e.zero),o.setCoef(i-t,e.add(o.getCoef(i-t),e.mul(a,n))),this.setCoef(i-t,e.add(this.getCoef(i-t),n)))}return o}divByVanishing2(t,a){if(this.degree()32768?new qa(this.length()*e.n8):new Uint8Array(this.length()*e.n8);let i=this.length()-t,n=Math.floor(i/3),l=i-2*n;console.log(i),console.log(n+" "+l);for(let i=0;i<3;i++){console.log("> Thread "+i);for(let c=0===i?l:n;c>0;c--){let s=c-1;0!==i&&(s+=(i-1)*n+l);let r=s+t,d=o.getCoef(r);e.eq(e.zero,d)||(o.setCoef(r,e.zero),o.setCoef(s,e.add(o.getCoef(s),e.mul(a,d))),this.setCoef(s,e.add(this.getCoef(s),d)),console.log(s+" <-- "+r))}}return this.print(),o}fastDivByVanishing(t){const a=this.Fr;for(let e=0;e32768?new qa(this.length()*a.n8):new Uint8Array(this.length()*a.n8),this.curve,this.logger),u=this.coef;this.coef=d.coef,d.coef=u;for(let t=0;t0;t--){let e=t-1,i=e*s+r;f[e]=[];for(let l=0;l32768?new qa(this.length()*this.Fr.n8):new Uint8Array(this.length()*this.Fr.n8);a.set(this.Fr.zero,(this.length()-1)*this.Fr.n8),a.set(this.coef.slice((this.length()-1)*this.Fr.n8,this.length()*this.Fr.n8),(this.length()-2)*this.Fr.n8);for(let e=this.length()-3;e>=0;e--){let o=e*this.Fr.n8;a.set(this.Fr.add(this.coef.slice(o+this.Fr.n8,o+2*this.Fr.n8),this.Fr.mul(t,a.slice(o+this.Fr.n8,o+2*this.Fr.n8))),e*this.Fr.n8)}if(!this.Fr.eq(this.coef.slice(0,this.Fr.n8),this.Fr.mul(this.Fr.neg(t),a.slice(0,this.Fr.n8))))throw new Error("Polynomial does not divide");this.coef=a}divZh(t,a=4){for(let a=0;at*(a-1)-a&&!this.Fr.isZero(i))throw new Error("Polynomial is not divisible")}return this}divByZerofier(t,a){let e=this.Fr;const o=e.inv(a),i=e.neg(o);let n=e.eq(e.one,i),l=e.eq(e.negone,i);if(!n)for(let a=0;athis.length()-t-1&&!this.Fr.isZero(s))throw new Error("Polynomial is not divisible")}return this}byX(){const t=this.length()+1>32768?new qa(this.coef.byteLength+this.Fr.n8):new Uint8Array(this.coef.byteLength+this.Fr.n8);t.set(this.Fr.zero,0),t.set(this.coef,this.Fr.n8),this.coef=t}static async expX(t,a,e=!1){const o=t.Fr;if(a<1)throw new Error("Compute a new polynomial to a zero or negative number is not allowed");if(1===a)return await wr.fromEvaluations(t.coef,curve,t.logger);const i=e?t.degree():t.length()-1,n=i*a+1>32768?new qa((i*a+1)*o.n8):new Uint8Array((i*a+1)*o.n8);n.set(t.getCoef(0),0);for(let e=1;e<=i;e++){const i=e*o.n8,l=t.getCoef(e);n.set(l,i*a)}return new wr(n,t.curve,t.logger)}split(t,a,e){if(t<1)throw new Error(`Polynomials can't be split in ${t} parts`);if(1===t)return[this];if(0!==e.length&&e.length32768?new qa(l):new Uint8Array(l);i[a]=new wr(c,this.curve,this.logger);const s=a*o,r=n?this.coef.byteLength:(a+1)*o;if(i[a].coef.set(this.coef.slice(s,r),0),n||i[a].coef.set(e[a],o),0!==a){const t=this.Fr.sub(i[a].coef.slice(0,this.Fr.n8),e[a-1]);i[a].coef.set(t,0)}n&&i[a].truncate()}return i}truncate(){const t=this.degree();if(t+132768?new qa((t+1)*this.Fr.n8):new Uint8Array((t+1)*this.Fr.n8);a.set(this.coef.slice(0,(t+1)*this.Fr.n8),0),this.coef=a}}static lagrangePolynomialInterpolation(t,a,e){const o=e.Fr;let i=n(0);for(let a=1;a32768?new qa(t.length*o.n8):new Uint8Array(t.length*o.n8);n=new wr(i,e),n.setCoef(0,o.neg(t[a])),n.setCoef(1,o.one)}else n.byXSubValue(t[a]);let l=n.evaluate(t[i]);l=o.inv(l);const c=o.mul(a[i],l);return n.mulScalar(c),n}}static zerofierPolynomial(t,a){const e=a.Fr;let o=t.length+1>32768?new qa((t.length+1)*e.n8):new Uint8Array((t.length+1)*e.n8),i=new wr(o,a);i.setCoef(0,e.neg(t[0])),i.setCoef(1,e.one);for(let a=1;a=0;e--){const o=this.getCoef(e);t.eq(t.zero,o)||(t.isNegative(o)?a+=" - ":e!==this.degree()&&(a+=" + "),a+=t.toString(o),e>0&&(a+=e>1?"x^"+e:"x"))}console.log(a)}async multiExponentiation(t,a){const e=this.coef.byteLength/this.Fr.n8,o=t.slice(0,e*this.G1.F.n8*2),i=await this.Fr.batchFromMontgomery(this.coef);let n=await this.G1.multiExpAffine(o,i,this.logger,a);return n=this.G1.toAffine(n),n}}class yr{constructor(t,a,e){this.eval=t,this.curve=a,this.Fr=a.Fr,this.logger=e}static async fromPolynomial(t,a,e,o){const i=new qa(t.length()*a*e.Fr.n8);i.set(t.coef,0);const n=await e.Fr.fft(i);return new yr(n,e,o)}getEvaluation(t){const a=t*this.Fr.n8;if(a+this.Fr.n8>this.eval.byteLength)throw new Error("Evaluations.getEvaluation() out of bounds");return this.eval.slice(a,a+this.Fr.n8)}length(){let t=this.eval.byteLength/this.Fr.n8;if(t!==Math.floor(this.eval.byteLength/this.Fr.n8))throw new Error("Polynomial evaluations buffer has incorrect size");return 0===t&&this.logger.warn("Polynomial has length zero"),t}}const{stringifyBigInts:Ar}=he;async function Cr(t,a,e){const{fd:o,sections:i}=await Ue(a,"wtns",2);e&&e.debug("> Reading witness file");const n=await Si(o,i);e&&e.debug("> Reading zkey file");const{fd:l,sections:c}=await Ue(t,"zkey",2),s=await Ci(l,c);if("plonk"!=s.protocol)throw new Error("zkey file is not plonk");if(!fe.eq(s.r,n.q))throw new Error("Curve of the witness does not match the curve of the proving key");if(n.nWitness!=s.nVars-s.nAdditions)throw new Error(`Invalid witness length. Circuit: ${s.nVars}, witness: ${n.nWitness}, ${s.nAdditions}`);const r=s.curve,d=r.Fr,u=r.Fr.n8,_=s.domainSize*u;e&&(e.debug("----------------------------"),e.debug(" PLONK PROVE SETTINGS"),e.debug(` Curve: ${r.name}`),e.debug(` Circuit power: ${s.power}`),e.debug(` Domain size: ${s.domainSize}`),e.debug(` Vars: ${s.nVars}`),e.debug(` Public vars: ${s.nPublic}`),e.debug(` Constraints: ${s.nConstraints}`),e.debug(` Additions: ${s.nAdditions}`),e.debug("----------------------------")),e&&e.debug("> Reading witness file data");const g=await Ke(o,i,2);g.set(d.zero,0);const f=new qa(u*s.nAdditions);let h={},p={},m={},L={},b=new ar(r,e);const w=new lr(r);e&&e.debug(`> Reading Section ${sr}. Additions`),await async function(){e&&e.debug("··· Computing additions");const t=await Ke(l,c,sr),a=8+2*u;for(let o=0;o Reading Section ${mr}. Sigma1, Sigma2 & Sigma 3`),e&&e.debug("··· Reading Sigma polynomials "),p.Sigma1=new wr(new qa(_),r,e),p.Sigma2=new wr(new qa(_),r,e),p.Sigma3=new wr(new qa(_),r,e),await l.readToBuffer(p.Sigma1.coef,0,_,c[mr][0].p),await l.readToBuffer(p.Sigma2.coef,0,_,c[mr][0].p+5*_),await l.readToBuffer(p.Sigma3.coef,0,_,c[mr][0].p+10*_),e&&e.debug("··· Reading Sigma evaluations"),m.Sigma1=new yr(new qa(4*_),r,e),m.Sigma2=new yr(new qa(4*_),r,e),m.Sigma3=new yr(new qa(4*_),r,e),await l.readToBuffer(m.Sigma1.eval,0,4*_,c[mr][0].p+_),await l.readToBuffer(m.Sigma2.eval,0,4*_,c[mr][0].p+6*_),await l.readToBuffer(m.Sigma3.eval,0,4*_,c[mr][0].p+11*_),e&&e.debug(`> Reading Section ${br}. Powers of Tau`);const y=await Ke(l,c,br);let A=[];for(let t=1;t<=s.nPublic;t++){const a=g.slice(t*d.n8,t*d.n8+d.n8);A.push(fe.fromRprLE(a))}e&&e.debug(""),e&&e.debug("> ROUND 1"),await async function(){L.b=[];for(let t=1;t<=11;t++)L.b[t]=r.Fr.random();e&&e.debug("> Computing A, B, C wire polynomials");await async function(){e&&e.debug("··· Reading data from zkey file");h.A=new qa(_),h.B=new qa(_),h.C=new qa(_);const t=await Ke(l,c,rr),a=await Ke(l,c,dr),o=await Ke(l,c,ur);for(let e=0;e=s.domainSize+2)throw new Error("A Polynomial is not well calculated");if(p.B.degree()>=s.domainSize+2)throw new Error("B Polynomial is not well calculated");if(p.C.degree()>=s.domainSize+2)throw new Error("C Polynomial is not well calculated")}(),e&&e.debug("> Computing A, B, C MSM");let t=await p.A.multiExponentiation(y,"A"),a=await p.B.multiExponentiation(y,"B"),o=await p.C.multiExponentiation(y,"C");return b.addPolynomial("A",t),b.addPolynomial("B",a),b.addPolynomial("C",o),0}(),e&&e.debug("> ROUND 2"),await async function(){e&&e.debug("> Computing challenges beta and gamma");w.reset(),w.addPolCommitment(s.Qm),w.addPolCommitment(s.Ql),w.addPolCommitment(s.Qr),w.addPolCommitment(s.Qo),w.addPolCommitment(s.Qc),w.addPolCommitment(s.S1),w.addPolCommitment(s.S2),w.addPolCommitment(s.S3);for(let t=0;t Computing Z polynomial");await async function(){e&&e.debug("··· Computing Z evaluations");let t=new qa(_),a=new qa(_);t.set(d.one,0),a.set(d.one,0);let o=d.one;for(let e=0;e=s.domainSize+3)throw new Error("Z Polynomial is not well calculated");delete h.Z}(),e&&e.debug("> Computing Z MSM");let t=await p.Z.multiExponentiation(y,"Z");b.addPolynomial("Z",t)}(),e&&e.debug("> ROUND 3"),await async function(){e&&e.debug("> Computing challenge alpha");w.reset(),w.addScalar(L.beta),w.addScalar(L.gamma),w.addPolCommitment(b.getPolynomial("Z")),L.alpha=w.getChallenge(),L.alpha2=d.square(L.alpha),e&&e.debug("··· challenges.alpha: "+d.toString(L.alpha,16));e&&e.debug("> Computing T polynomial");await async function(){e&&e.debug(`··· Reading sections ${gr}, ${fr}, ${_r}, ${hr}, ${pr}. Q selectors`);m.QL=new yr(new qa(4*_),r,e),m.QR=new yr(new qa(4*_),r,e),m.QM=new yr(new qa(4*_),r,e),m.QO=new yr(new qa(4*_),r,e),m.QC=new yr(new qa(4*_),r,e),await l.readToBuffer(m.QL.eval,0,4*_,c[gr][0].p+_),await l.readToBuffer(m.QR.eval,0,4*_,c[fr][0].p+_),await l.readToBuffer(m.QM.eval,0,4*_,c[_r][0].p+_),await l.readToBuffer(m.QO.eval,0,4*_,c[hr][0].p+_),await l.readToBuffer(m.QC.eval,0,4*_,c[pr][0].p+_),m.Lagrange=new yr(new qa(4*_*s.nPublic),r,e);for(let t=0;t=3*s.domainSize+6)throw new Error("T Polynomial is not well calculated");e&&e.debug("··· Computing T1, T2, T3 polynomials");p.T1=new wr(new qa((s.domainSize+1)*u),r,e),p.T2=new wr(new qa((s.domainSize+1)*u),r,e),p.T3=new wr(new qa((s.domainSize+6)*u),r,e),p.T1.coef.set(p.T.coef.slice(0,_),0),p.T2.coef.set(p.T.coef.slice(_,2*_),0),p.T3.coef.set(p.T.coef.slice(2*_,3*_+6*u),0),p.T1.setCoef(s.domainSize,L.b[10]);const a=d.sub(p.T2.getCoef(0),L.b[10]);p.T2.setCoef(0,a),p.T2.setCoef(s.domainSize,L.b[11]);const o=d.sub(p.T3.getCoef(0),L.b[11]);p.T3.setCoef(0,o)}(),e&&e.debug("> Computing T MSM");let t=await p.T1.multiExponentiation(y,"T1"),a=await p.T2.multiExponentiation(y,"T2"),o=await p.T3.multiExponentiation(y,"T3");b.addPolynomial("T1",t),b.addPolynomial("T2",a),b.addPolynomial("T3",o)}(),e&&e.debug("> ROUND 4"),await async function(){e&&e.debug("> Computing challenge xi");w.reset(),w.addScalar(L.alpha),w.addPolCommitment(b.getPolynomial("T1")),w.addPolCommitment(b.getPolynomial("T2")),w.addPolCommitment(b.getPolynomial("T3")),L.xi=w.getChallenge(),L.xiw=d.mul(L.xi,d.w[s.power]),e&&e.debug("··· challenges.xi: "+d.toString(L.xi,16));b.addEvaluation("eval_a",p.A.evaluate(L.xi)),b.addEvaluation("eval_b",p.B.evaluate(L.xi)),b.addEvaluation("eval_c",p.C.evaluate(L.xi)),b.addEvaluation("eval_s1",p.Sigma1.evaluate(L.xi)),b.addEvaluation("eval_s2",p.Sigma2.evaluate(L.xi)),b.addEvaluation("eval_zw",p.Z.evaluate(L.xiw))}(),e&&e.debug("> ROUND 5"),await async function(){e&&e.debug("> Computing challenge v");w.reset(),w.addScalar(L.xi),w.addScalar(b.getEvaluation("eval_a")),w.addScalar(b.getEvaluation("eval_b")),w.addScalar(b.getEvaluation("eval_c")),w.addScalar(b.getEvaluation("eval_s1")),w.addScalar(b.getEvaluation("eval_s2")),w.addScalar(b.getEvaluation("eval_zw")),L.v=[],L.v[1]=w.getChallenge(),e&&e.debug("··· challenges.v: "+d.toString(L.v[1],16));for(let t=2;t<6;t++)L.v[t]=d.mul(L.v[t-1],L.v[1]);e&&e.debug("> Computing linearisation polynomial R(X)");await async function(){const t=r.Fr;p.QL=new wr(new qa(_),r,e),p.QR=new wr(new qa(_),r,e),p.QM=new wr(new qa(_),r,e),p.QO=new wr(new qa(_),r,e),p.QC=new wr(new qa(_),r,e),await l.readToBuffer(p.QL.coef,0,_,c[gr][0].p),await l.readToBuffer(p.QR.coef,0,_,c[fr][0].p),await l.readToBuffer(p.QM.coef,0,_,c[_r][0].p),await l.readToBuffer(p.QO.coef,0,_,c[hr][0].p),await l.readToBuffer(p.QC.coef,0,_,c[pr][0].p),L.xin=L.xi;for(let a=0;a Computing opening proof polynomial Wxi(X) polynomial");p.Wxi=new wr(new qa(_+6*u),r,e),p.Wxi.add(p.R),p.Wxi.add(p.A,L.v[1]),p.Wxi.add(p.B,L.v[2]),p.Wxi.add(p.C,L.v[3]),p.Wxi.add(p.Sigma1,L.v[4]),p.Wxi.add(p.Sigma2,L.v[5]),p.Wxi.subScalar(d.mul(L.v[1],b.evaluations.eval_a)),p.Wxi.subScalar(d.mul(L.v[2],b.evaluations.eval_b)),p.Wxi.subScalar(d.mul(L.v[3],b.evaluations.eval_c)),p.Wxi.subScalar(d.mul(L.v[4],b.evaluations.eval_s1)),p.Wxi.subScalar(d.mul(L.v[5],b.evaluations.eval_s2)),void p.Wxi.divByZerofier(1,L.xi),e&&e.debug("> Computing opening proof polynomial Wxiw(X) polynomial");(async function(){p.Wxiw=wr.fromPolynomial(p.Z,r,e),p.Wxiw.subScalar(b.evaluations.eval_zw),p.Wxiw.divByZerofier(1,L.xiw)})(),e&&e.debug("> Computing Wxi, Wxiw MSM");let t=await p.Wxi.multiExponentiation(y,"Wxi"),a=await p.Wxiw.multiExponentiation(y,"Wxiw");b.addPolynomial("Wxi",t),b.addPolynomial("Wxiw",a)}(),await l.close(),await o.close();let C=b.toObjectProof(!1);return C.protocol="plonk",C.curve=r.name,e&&e.debug("PLONK PROVER FINISHED"),{proof:Ar(C),publicSignals:Ar(A)};function F(t,a){const e=t.slice(a,a+4);return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(0,!0)}function x(t){return te;){const a=i.shift(),e=i.shift(),o=a[0],n=e[0],l=L++,c=t.zero,s=t.neg(a[1]),r=t.neg(e[1]),d=t.one,u=t.zero;p.push([o,n,l,c,s,r,d,u]),m.push([o,n,a[1],e[1]]),i.push([l,t.one])}for(let t=0;t0?o.toString():e!=t.zero?"k":"0"}function s(a,e,s){const r=c(a),d=c(e);if("0"===r||"0"===d)o(s),l(s);else if("k"===r){l(i(e,a[0],s))}else if("k"===d){l(i(a,e[0],s))}else!function(a,e,o){const i=n(a,1),l=n(e,1),c=n(o,1),s=i.s[0],r=l.s[0],d=c.s[0],u=t.mul(i.coefs[0],l.coefs[0]),_=t.mul(i.coefs[0],l.k),g=t.mul(i.k,l.coefs[0]),f=t.neg(c.coefs[0]),h=t.sub(t.mul(i.k,l.k),c.k);p.push([s,r,d,u,_,g,f,h])}(a,e,s)}for(let a=1;a<=b;a++){const e=a,o=0,i=0,n=t.zero,l=t.one,c=t.zero,s=t.zero,r=t.zero;p.push([e,o,i,n,l,c,s,r])}for(let t=0;tc)return o&&o.error(`circuit too big for this power of tau ceremony. ${p.length} > 2**${c}`),-1;if(!n[12])return o&&o.error("Powers of tau is not prepared."),-1;const C=new qa(A*u),F=n[12][0].p+(2**y-1)*u;await i.readToBuffer(C,0,A*u,F);const[x,I]=function(){let t=f.two;for(;e(t,[],y);)f.add(t,f.one);let a=f.add(t,f.one);for(;e(a,[t],y);)f.add(a,f.one);return[t,a];function e(t,a,e){const o=2**e;let i=f.one;for(let n=0;n0?2:this.Fr.isZero(a)?0:1}normalizeLinearCombination(t){const a=Object.keys(t);for(let e=0;ei;){const o=l.shift(),i=l.shift(),n=t.nVars++,c=this.fnGetAdditionConstraint(o[0],i[0],n,this.Fr.neg(o[1]),this.Fr.neg(i[1]),this.Fr.zero,this.Fr.one,this.Fr.zero);a.push(c),e.push([o[0],i[0],o[1],i[1]]),l.push([n,this.Fr.one])}for(let t=0;tthis.n-1)throw new Error("CPolynomial:addPolynomial, cannot add a polynomial to a position greater than n-1");this.polynomials[t]=a}degree(){let t=this.polynomials.map(((t,a)=>void 0===t?0:t.degree()*this.n+a));return Math.max(...t)}getPolynomial(){let t=this.polynomials.map((t=>void 0===t?0:t.degree()));const a=this.degree(),e=2**(Mo(a-1)+1),o=this.Fr.n8;let i=new wr(new qa(e*o),this.curve,this.logger);for(let e=0;e Reading witness file");const{fd:o,sections:i}=await Ue(a,"wtns",2),n=await Si(o,i);e&&e.info("> Reading zkey file");const{fd:l,sections:c}=await Ue(t,"zkey",2),s=await Ci(l,c);if(s.protocolId!==Xo)throw new Error("zkey file is not fflonk");if(!fe.eq(s.r,n.q))throw new Error("Curve of the witness does not match the curve of the proving key");if(n.nWitness!==s.nVars-s.nAdditions)throw new Error(`Invalid witness length. Circuit: ${s.nVars}, witness: ${n.nWitness}, ${s.nAdditions}`);const r=s.curve,d=r.Fr,u=r.Fr.n8,_=2*r.G1.F.n8,g=s.domainSize*u;e&&(e.info("----------------------------"),e.info(" FFLONK PROVE SETTINGS"),e.info(` Curve: ${r.name}`),e.info(` Circuit power: ${s.power}`),e.info(` Domain size: ${s.domainSize}`),e.info(` Vars: ${s.nVars}`),e.info(` Public vars: ${s.nPublic}`),e.info(` Constraints: ${s.nConstraints}`),e.info(` Additions: ${s.nAdditions}`),e.info("----------------------------")),e&&e.info("> Reading witness file data");const f=await Ke(o,i,2);await o.close(),f.set(d.zero,0);const h=new qa(s.nAdditions*u);let p={},m={},L={},b={},w={},y={},A=new ar(r,e);e&&e.info(`> Reading Section ${oi}. Additions`),await async function(){e&&e.info("··· Computing additions");const t=await Ke(l,c,oi),a=8+2*u;for(let o=0;o Reading Sections ${_i},${gi},${fi}. Sigma1, Sigma2 & Sigma 3`),e&&e.info("··· Reading Sigma polynomials "),m.Sigma1=new wr(new qa(g),r,e),m.Sigma2=new wr(new qa(g),r,e),m.Sigma3=new wr(new qa(g),r,e),await l.readToBuffer(m.Sigma1.coef,0,g,c[_i][0].p),await l.readToBuffer(m.Sigma2.coef,0,g,c[gi][0].p),await l.readToBuffer(m.Sigma3.coef,0,g,c[fi][0].p),e&&e.info("··· Reading Sigma evaluations"),L.Sigma1=new yr(new qa(4*g),r,e),L.Sigma2=new yr(new qa(4*g),r,e),L.Sigma3=new yr(new qa(4*g),r,e),await l.readToBuffer(L.Sigma1.eval,0,4*g,c[_i][0].p+g),await l.readToBuffer(L.Sigma2.eval,0,4*g,c[gi][0].p+g),await l.readToBuffer(L.Sigma3.eval,0,4*g,c[fi][0].p+g),e&&e.info(`> Reading Section ${pi}. Powers of Tau`);const C=new qa(16*s.domainSize*_);await l.readToBuffer(C,0,(9*s.domainSize+18)*_,c[pi][0].p),globalThis.gc&&globalThis.gc(),e&&e.info(""),e&&e.info("> ROUND 1"),await async function(){w.b=[];for(let t=1;t<=9;t++)w.b[t]=d.random();e&&e.info("> Computing A, B, C wire polynomials");await async function(){e&&e.info("··· Reading data from zkey file");p.A=new qa(g),p.B=new qa(g),p.C=new qa(g);const t=await Ke(l,c,ii),a=await Ke(l,c,ni),o=await Ke(l,c,li);for(let e=0;e=s.domainSize)throw new Error("A Polynomial is not well calculated");if(m.B.degree()>=s.domainSize)throw new Error("B Polynomial is not well calculated");if(m.C.degree()>=s.domainSize)throw new Error("C Polynomial is not well calculated")}(),e&&e.info("> Computing T0 polynomial");await async function(){e&&e.info(`··· Reading sections ${ci}, ${si}, ${ri}, ${di}, ${ui}. Q selectors`);L.QL=new yr(new qa(4*g),r,e),L.QR=new yr(new qa(4*g),r,e),L.QM=new yr(new qa(4*g),r,e),L.QO=new yr(new qa(4*g),r,e),L.QC=new yr(new qa(4*g),r,e),await l.readToBuffer(L.QL.eval,0,4*g,c[ci][0].p+g),await l.readToBuffer(L.QR.eval,0,4*g,c[si][0].p+g),await l.readToBuffer(L.QM.eval,0,4*g,c[ri][0].p+g),await l.readToBuffer(L.QO.eval,0,4*g,c[di][0].p+g),await l.readToBuffer(L.QC.eval,0,4*g,c[ui][0].p+g);const t=await Ke(l,c,hi);L.lagrange1=new yr(t,r,e),p.T0=new qa(4*g),e&&e.info("··· Computing T0 evaluations");for(let t=0;t<4*s.domainSize;t++){e&&0!==t&&t%1e5==0&&e.info(` T0 evaluation ${t}/${4*s.domainSize}`);const a=L.A.getEvaluation(t),o=L.B.getEvaluation(t),i=L.C.getEvaluation(t),n=L.QL.getEvaluation(t),l=L.QR.getEvaluation(t),c=L.QM.getEvaluation(t),r=L.QO.getEvaluation(t),_=L.QC.getEvaluation(t);let g=d.zero;for(let a=0;a=2*s.domainSize-2)throw new Error(`T0 Polynomial is not well calculated (degree is ${m.T0.degree()} and must be less than ${2*s.domainSize+2}`);delete p.T0}(),e&&e.info("> Computing C1 polynomial");await async function(){let t=new Or(4,r,e);if(t.addPolynomial(0,m.A),t.addPolynomial(1,m.B),t.addPolynomial(2,m.C),t.addPolynomial(3,m.T0),m.C1=t.getPolynomial(),m.C1.degree()>=8*s.domainSize-8)throw new Error("C1 Polynomial is not well calculated")}(),e&&e.info("> Computing C1 multi exponentiation");let t=await m.C1.multiExponentiation(C,"C1");return A.addPolynomial("C1",t),0}(),delete m.T0,delete L.QL,delete L.QR,delete L.QM,delete L.QO,delete L.QC,globalThis.gc&&globalThis.gc(),e&&e.info("> ROUND 2"),await async function(){e&&e.info("> Computing challenges beta and gamma");const t=new lr(r);t.addPolCommitment(s.C0);for(let a=0;a Computing Z polynomial");await async function(){e&&e.info("··· Computing Z evaluations");let t=new qa(g),a=new qa(g);t.set(d.one,0),a.set(d.one,0);let o=d.one;for(let i=0;i=s.domainSize+3)throw new Error("Z Polynomial is not well calculated");delete p.Z}(),e&&e.info("> Computing T1 polynomial");await async function(){e&&e.info("··· Computing T1 evaluations");p.T1=new qa(2*g),p.T1z=new qa(2*g);let t=d.one;for(let a=0;a<2*s.domainSize;a++){e&&0!==a&&a%1e5==0&&e.info(` T1 evaluation ${a}/${4*s.domainSize}`);const o=d.square(t),i=L.Z.getEvaluation(2*a),n=d.add(d.add(d.mul(w.b[7],o),d.mul(w.b[8],t)),w.b[9]),l=L.lagrange1.getEvaluation(s.domainSize+2*a);let c=d.mul(d.sub(i,d.one),l),r=d.mul(n,l);p.T1.set(c,a*u),p.T1z.set(r,a*u),t=d.mul(t,d.w[s.power+1])}e&&e.info("··· Computing T1 ifft");m.T1=await wr.fromEvaluations(p.T1,r,e),m.T1.divByZerofier(s.domainSize,d.one),e&&e.info("··· Computing T1z ifft");if(m.T1z=await wr.fromEvaluations(p.T1z,r,e),m.T1.add(m.T1z),m.T1.degree()>=s.domainSize+2)throw new Error("T1 Polynomial is not well calculated");delete p.T1,delete p.T1z,delete m.T1z}(),e&&e.info("> Computing T2 polynomial");await async function(){e&&e.info("··· Computing T2 evaluations");p.T2=new qa(4*g),p.T2z=new qa(4*g);let t=d.one;for(let a=0;a<4*s.domainSize;a++){e&&0!==a&&a%1e5==0&&e.info(` T2 evaluation ${a}/${4*s.domainSize}`);const o=d.square(t),i=d.mul(t,d.w[s.power]),n=d.square(i),l=L.A.getEvaluation(a),c=L.B.getEvaluation(a),r=L.C.getEvaluation(a),_=L.Z.getEvaluation(a),g=L.Z.getEvaluation((4*s.domainSize+4+a)%(4*s.domainSize)),f=d.add(d.add(d.mul(w.b[7],o),d.mul(w.b[8],t)),w.b[9]),h=d.add(d.add(d.mul(w.b[7],n),d.mul(w.b[8],i)),w.b[9]),m=L.Sigma1.getEvaluation(a),b=L.Sigma2.getEvaluation(a),y=L.Sigma3.getEvaluation(a),A=d.mul(w.beta,t);let C=d.add(l,A);C=d.add(C,w.gamma);let F=d.add(c,d.mul(A,s.k1));F=d.add(F,w.gamma);let x=d.add(r,d.mul(A,s.k2));x=d.add(x,w.gamma);let I=d.mul(d.mul(d.mul(C,F),x),_),B=d.mul(d.mul(d.mul(C,F),x),f),E=d.add(l,d.mul(w.beta,m));E=d.add(E,w.gamma);let v=d.add(c,d.mul(w.beta,b));v=d.add(v,w.gamma);let S=d.add(r,d.mul(w.beta,y));S=d.add(S,w.gamma);let P=d.mul(d.mul(d.mul(E,v),S),g),q=d.mul(d.mul(d.mul(E,v),S),h),O=d.sub(I,P),G=d.sub(B,q);p.T2.set(O,a*u),p.T2z.set(G,a*u),t=d.mul(t,d.w[s.power+2])}e&&e.info("··· Computing T2 ifft");m.T2=await wr.fromEvaluations(p.T2,r,e),e&&e.info("··· Computing T2 / ZH");m.T2.divByZerofier(s.domainSize,d.one),e&&e.info("··· Computing T2z ifft");if(m.T2z=await wr.fromEvaluations(p.T2z,r,e),m.T2.add(m.T2z),m.T2.degree()>=3*s.domainSize)throw new Error("T2 Polynomial is not well calculated");delete p.T2,delete p.T2z,delete m.T2z}(),e&&e.info("> Computing C2 polynomial");await async function(){let t=new Or(3,r,e);if(t.addPolynomial(0,m.Z),t.addPolynomial(1,m.T1),t.addPolynomial(2,m.T2),m.C2=t.getPolynomial(),m.C2.degree()>=9*s.domainSize)throw new Error("C2 Polynomial is not well calculated")}(),e&&e.info("> Computing C2 multi exponentiation");let a=await m.C2.multiExponentiation(C,"C2");return A.addPolynomial("C2",a),0}(),delete p.A,delete p.B,delete p.C,delete L.A,delete L.B,delete L.C,delete L.Sigma1,delete L.Sigma2,delete L.Sigma3,delete L.lagrange1,delete L.Z,globalThis.gc&&globalThis.gc(),e&&e.info("> ROUND 3"),await async function(){e&&e.info("> Computing challenge xi");const t=new lr(r);t.addScalar(w.gamma),t.addPolCommitment(A.getPolynomial("C2")),w.xiSeed=t.getChallenge();const a=d.square(w.xiSeed);y.w8=[],y.w8[0]=d.one;for(let t=1;t<8;t++)y.w8[t]=d.mul(y.w8[t-1],s.w8);y.w4=[],y.w4[0]=d.one;for(let t=1;t<4;t++)y.w4[t]=d.mul(y.w4[t-1],s.w4);y.w3=[],y.w3[0]=d.one,y.w3[1]=s.w3,y.w3[2]=d.square(s.w3),y.S0={},y.S0.h0w8=[],y.S0.h0w8[0]=d.mul(a,w.xiSeed);for(let t=1;t<8;t++)y.S0.h0w8[t]=d.mul(y.S0.h0w8[0],y.w8[t]);y.S1={},y.S1.h1w4=[],y.S1.h1w4[0]=d.square(y.S0.h0w8[0]);for(let t=1;t<4;t++)y.S1.h1w4[t]=d.mul(y.S1.h1w4[0],y.w4[t]);y.S2={},y.S2.h2w3=[],y.S2.h2w3[0]=d.mul(y.S1.h1w4[0],a),y.S2.h2w3[1]=d.mul(y.S2.h2w3[0],y.w3[1]),y.S2.h2w3[2]=d.mul(y.S2.h2w3[0],y.w3[2]),y.S2.h3w3=[],y.S2.h3w3[0]=d.mul(y.S2.h2w3[0],s.wr),y.S2.h3w3[1]=d.mul(y.S2.h3w3[0],y.w3[1]),y.S2.h3w3[2]=d.mul(y.S2.h3w3[0],y.w3[2]),w.xi=d.mul(d.square(y.S2.h2w3[0]),y.S2.h2w3[0]),e&&e.info("··· challenges.xi: "+d.toString(w.xi));m.QL=new wr(new qa(g),r,e),m.QR=new wr(new qa(g),r,e),m.QM=new wr(new qa(g),r,e),m.QO=new wr(new qa(g),r,e),m.QC=new wr(new qa(g),r,e),await l.readToBuffer(m.QL.coef,0,g,c[ci][0].p),await l.readToBuffer(m.QR.coef,0,g,c[si][0].p),await l.readToBuffer(m.QM.coef,0,g,c[ri][0].p),await l.readToBuffer(m.QO.coef,0,g,c[di][0].p),await l.readToBuffer(m.QC.coef,0,g,c[ui][0].p),e&&e.info("··· Computing evaluations");A.addEvaluation("ql",m.QL.evaluate(w.xi)),A.addEvaluation("qr",m.QR.evaluate(w.xi)),A.addEvaluation("qm",m.QM.evaluate(w.xi)),A.addEvaluation("qo",m.QO.evaluate(w.xi)),A.addEvaluation("qc",m.QC.evaluate(w.xi)),A.addEvaluation("s1",m.Sigma1.evaluate(w.xi)),A.addEvaluation("s2",m.Sigma2.evaluate(w.xi)),A.addEvaluation("s3",m.Sigma3.evaluate(w.xi)),A.addEvaluation("a",m.A.evaluate(w.xi)),A.addEvaluation("b",m.B.evaluate(w.xi)),A.addEvaluation("c",m.C.evaluate(w.xi)),A.addEvaluation("z",m.Z.evaluate(w.xi)),w.xiw=d.mul(w.xi,d.w[s.power]),A.addEvaluation("zw",m.Z.evaluate(w.xiw)),A.addEvaluation("t1w",m.T1.evaluate(w.xiw)),A.addEvaluation("t2w",m.T2.evaluate(w.xiw))}(),delete m.A,delete m.B,delete m.C,delete m.Z,delete m.T1,delete m.T2,delete m.Sigma1,delete m.Sigma2,delete m.Sigma3,delete m.QL,delete m.QR,delete m.QM,delete m.QC,delete m.QO,globalThis.gc&&globalThis.gc(),e&&e.info("> ROUND 4"),await async function(){e&&e.info("> Computing challenge alpha");const t=new lr(r);t.addScalar(w.xiSeed),t.addScalar(A.getEvaluation("ql")),t.addScalar(A.getEvaluation("qr")),t.addScalar(A.getEvaluation("qm")),t.addScalar(A.getEvaluation("qo")),t.addScalar(A.getEvaluation("qc")),t.addScalar(A.getEvaluation("s1")),t.addScalar(A.getEvaluation("s2")),t.addScalar(A.getEvaluation("s3")),t.addScalar(A.getEvaluation("a")),t.addScalar(A.getEvaluation("b")),t.addScalar(A.getEvaluation("c")),t.addScalar(A.getEvaluation("z")),t.addScalar(A.getEvaluation("zw")),t.addScalar(A.getEvaluation("t1w")),t.addScalar(A.getEvaluation("t2w")),w.alpha=t.getChallenge(),e&&e.info("··· challenges.alpha: "+d.toString(w.alpha));e&&e.info("> Reading C0 polynomial");m.C0=new wr(new qa(8*g),r,e),await l.readToBuffer(m.C0.coef,0,8*g,c[mi][0].p),e&&e.info("> Computing R0 polynomial");(function(){if(m.R0=wr.lagrangePolynomialInterpolation([y.S0.h0w8[0],y.S0.h0w8[1],y.S0.h0w8[2],y.S0.h0w8[3],y.S0.h0w8[4],y.S0.h0w8[5],y.S0.h0w8[6],y.S0.h0w8[7]],[m.C0.evaluate(y.S0.h0w8[0]),m.C0.evaluate(y.S0.h0w8[1]),m.C0.evaluate(y.S0.h0w8[2]),m.C0.evaluate(y.S0.h0w8[3]),m.C0.evaluate(y.S0.h0w8[4]),m.C0.evaluate(y.S0.h0w8[5]),m.C0.evaluate(y.S0.h0w8[6]),m.C0.evaluate(y.S0.h0w8[7])],r),m.R0.degree()>7)throw new Error("R0 Polynomial is not well calculated")})(),e&&e.info("> Computing R1 polynomial");(function(){if(m.R1=wr.lagrangePolynomialInterpolation([y.S1.h1w4[0],y.S1.h1w4[1],y.S1.h1w4[2],y.S1.h1w4[3]],[m.C1.evaluate(y.S1.h1w4[0]),m.C1.evaluate(y.S1.h1w4[1]),m.C1.evaluate(y.S1.h1w4[2]),m.C1.evaluate(y.S1.h1w4[3])],r),m.R1.degree()>3)throw new Error("R1 Polynomial is not well calculated")})(),e&&e.info("> Computing R2 polynomial");(function(){if(m.R2=wr.lagrangePolynomialInterpolation([y.S2.h2w3[0],y.S2.h2w3[1],y.S2.h2w3[2],y.S2.h3w3[0],y.S2.h3w3[1],y.S2.h3w3[2]],[m.C2.evaluate(y.S2.h2w3[0]),m.C2.evaluate(y.S2.h2w3[1]),m.C2.evaluate(y.S2.h2w3[2]),m.C2.evaluate(y.S2.h3w3[0]),m.C2.evaluate(y.S2.h3w3[1]),m.C2.evaluate(y.S2.h3w3[2])],r),m.R2.degree()>5)throw new Error("R2 Polynomial is not well calculated")})(),e&&e.info("> Computing F polynomial");await async function(){e&&e.info("··· Computing F polynomial");m.F=wr.fromPolynomial(m.C0,r,e),m.F.sub(m.R0),m.F.divByZerofier(8,w.xi);let t=wr.fromPolynomial(m.C1,r,e);t.sub(m.R1),t.mulScalar(w.alpha),t.divByZerofier(4,w.xi);let a=wr.fromPolynomial(m.C2,r,e);if(a.sub(m.R2),a.mulScalar(d.square(w.alpha)),a.divByZerofier(3,w.xi),a.divByZerofier(3,w.xiw),m.F.add(t),m.F.add(a),m.F.degree()>=9*s.domainSize-6)throw new Error("F Polynomial is not well calculated")}(),e&&e.info("> Computing W1 multi exponentiation");let a=await m.F.multiExponentiation(C,"W1");return A.addPolynomial("W1",a),0}(),globalThis.gc&&globalThis.gc(),e&&e.info("> ROUND 5"),await async function(){e&&e.info("> Computing challenge y");const t=new lr(r);t.addScalar(w.alpha),t.addPolCommitment(A.getPolynomial("W1")),w.y=t.getChallenge(),e&&e.info("··· challenges.y: "+d.toString(w.y));e&&e.info("> Computing L polynomial");await async function(){e&&e.info("··· Computing L polynomial");const t=m.R0.evaluate(w.y),a=m.R1.evaluate(w.y),o=m.R2.evaluate(w.y);let i=d.sub(w.y,y.S0.h0w8[0]);for(let t=1;t<8;t++)i=d.mul(i,d.sub(w.y,y.S0.h0w8[t]));let n=d.sub(w.y,y.S1.h1w4[0]);for(let t=1;t<4;t++)n=d.mul(n,d.sub(w.y,y.S1.h1w4[t]));let l=d.sub(w.y,y.S2.h2w3[0]);for(let t=1;t<3;t++)l=d.mul(l,d.sub(w.y,y.S2.h2w3[t]));for(let t=0;t<3;t++)l=d.mul(l,d.sub(w.y,y.S2.h3w3[t]));let c=d.mul(n,l),u=d.mul(w.alpha,d.mul(i,l)),_=d.mul(d.square(w.alpha),d.mul(i,n));b.denH1=n,b.denH2=l,m.L=wr.fromPolynomial(m.C0,r,e),m.L.subScalar(t),m.L.mulScalar(c);let g=wr.fromPolynomial(m.C1,r,e);g.subScalar(a),g.mulScalar(u);let f=wr.fromPolynomial(m.C2,r,e);f.subScalar(o),f.mulScalar(_),m.L.add(g),m.L.add(f),e&&e.info("> Computing ZT polynomial");await async function(){m.ZT=wr.zerofierPolynomial([y.S0.h0w8[0],y.S0.h0w8[1],y.S0.h0w8[2],y.S0.h0w8[3],y.S0.h0w8[4],y.S0.h0w8[5],y.S0.h0w8[6],y.S0.h0w8[7],y.S1.h1w4[0],y.S1.h1w4[1],y.S1.h1w4[2],y.S1.h1w4[3],y.S2.h2w3[0],y.S2.h2w3[1],y.S2.h2w3[2],y.S2.h3w3[0],y.S2.h3w3[1],y.S2.h3w3[2]],r)}();const h=m.ZT.evaluate(w.y);if(m.F.mulScalar(h),m.L.sub(m.F),m.L.degree()>=9*s.domainSize)throw new Error("L Polynomial is not well calculated");delete p.L}(),e&&e.info("> Computing ZTS2 polynomial");await async function(){m.ZTS2=wr.zerofierPolynomial([y.S1.h1w4[0],y.S1.h1w4[1],y.S1.h1w4[2],y.S1.h1w4[3],y.S2.h2w3[0],y.S2.h2w3[1],y.S2.h2w3[2],y.S2.h3w3[0],y.S2.h3w3[1],y.S2.h3w3[2]],r)}();let a=m.ZTS2.evaluate(w.y);a=d.inv(a),m.L.mulScalar(a);const o=wr.fromCoefficientsArray([d.neg(w.y),d.one],r);e&&e.info("> Computing W' = L / ZTS2 polynomial");const i=m.L.divBy(o);if(i.degree()>0)throw new Error(`Degree of L(X)/(ZTS2(y)(X-y)) remainder is ${i.degree()} and should be 0`);if(m.L.degree()>=9*s.domainSize-1)throw new Error("Degree of L(X)/(ZTS2(y)(X-y)) is not correct");e&&e.info("> Computing W' multi exponentiation");let n=await m.L.multiExponentiation(C,"W2");return A.addPolynomial("W2",n),0}(),delete m.C0,delete m.C1,delete m.C2,delete m.R1,delete m.R2,delete m.F,delete m.L,delete m.ZT,delete m.ZTS2,await l.close(),globalThis.gc&&globalThis.gc(),A.addEvaluation("inv",function(){let t=w.xi;for(let a=0;a Reading PTau file");const{fd:i,sections:n}=await Ue(a,"ptau",1);if(!n[12])throw new Error("Powers of Tau is not well prepared. Section 12 missing.");o&&o.info("> Getting curve from PTau settings");const{curve:l}=await Pn(i,n);o&&o.info("> Reading r1cs file");const{fd:c,sections:s}=await Ue(t,"r1cs",1),r=await Os(c,s,{loadConstraints:!1,loadCustomGates:!0});if(r.prime!==l.r)throw new Error("r1cs curve does not match powers of tau ceremony curve");const d=l.Fr,u=l.Fr.n8,_=2*l.G1.F.n8,g=2*l.G2.F.n8;let f,h={},p={},m={nVars:r.nVars,nPublic:r.nOutputs+r.nPubInputs};const L=new $s;let b=new $s;if(o&&o.info("> Processing FFlonk constraints"),await async function(t,a,e){for(let a=0;a computing k1 and k2");const[w,y]=function(){let t=d.two;for(;e(t,[],m.cirPower);)d.add(t,d.one);let a=d.add(t,d.one);for(;e(a,[t],m.cirPower);)d.add(a,d.one);return[t,a];function e(t,a,e){const o=2**e;let i=d.one;for(let n=0;n computing w3");const A=function(){let t=d.e(31624),a=fe.div(3648040478639879203707734290876212514758060733402672390616367364429301415936n,fe.e(3));return d.exp(t,a)}();o&&o.info("> computing w4");const C=d.w[2];o&&o.info("> computing w8");const F=d.w[3];o&&o.info("> computing wr");const x=function(t,a){const e=a.e(467799165886069610036046866799264026481344299079011762026774533774345988080n);return a.exp(e,2**(28-t))}(m.cirPower,l.Fr);return await async function(){o&&o.info("> Writing the zkey file");const t=await Qe(e,"zkey",1,ai,1<<22,1<<24);o&&o.info(`··· Writing Section ${Wo}. Zkey Header`);await async function(t){await ke(t,Wo),await t.writeULE32(Xo),await Re(t)}(t),o&&o.info(`··· Writing Section ${oi}. Additions`);await async function(t){await ke(t,oi);const a=new Uint8Array(8+2*u),e=new DataView(a.buffer);for(let i=0;i=8*m.domainSize)throw new Error("C0 Polynomial is not well calculated");await ke(t,mi),await t.write(h.C0.coef),await Re(t)}(t),globalThis.gc&&globalThis.gc();o&&o.info(`··· Writing Section ${ei}. FFlonk Header`);await async function(t){await ke(t,ei);const a=l.q,e=8*(Math.floor((fe.bitLength(a)-1)/64)+1);await t.writeULE32(e),await $e(t,a,e);const o=l.r,c=8*(Math.floor((fe.bitLength(o)-1)/64)+1);let s;await t.writeULE32(c),await $e(t,o,c),await t.writeULE32(m.nVars),await t.writeULE32(m.nPublic),await t.writeULE32(m.domainSize),await t.writeULE32(b.length),await t.writeULE32(L.length),await t.write(w),await t.write(y),await t.write(A),await t.write(C),await t.write(F),await t.write(x),s=await i.read(g,n[3][0].p+g),await t.write(s);let r=await h.C0.multiExponentiation(f,"C0");await t.write(r),await Re(t)}(t),globalThis.gc&&globalThis.gc();o&&o.info("> Writing the zkey file finished");await t.close()}(),await c.close(),await i.close(),o&&o.info("FFLONK SETUP FINISHED"),0;async function I(t,a,e,i){await ke(t,a);for(let a=0;a Checking commitments belong to G1"),!function(t,a,e){const o=t.G1;return o.isValid(a.polynomials.C1)&&o.isValid(a.polynomials.C2)&&o.isValid(a.polynomials.W1)&&o.isValid(a.polynomials.W2)&&o.isValid(e.C0)}(i,l,n))return o&&o.error("Proof commitments are not valid"),!1;if(o&&o.info("> Checking evaluations belong to F"),!function(t,a){return Qr(t,a.evaluations.ql)&&Qr(t,a.evaluations.qr)&&Qr(t,a.evaluations.qm)&&Qr(t,a.evaluations.qo)&&Qr(t,a.evaluations.qc)&&Qr(t,a.evaluations.s1)&&Qr(t,a.evaluations.s2)&&Qr(t,a.evaluations.s3)&&Qr(t,a.evaluations.a)&&Qr(t,a.evaluations.b)&&Qr(t,a.evaluations.c)&&Qr(t,a.evaluations.z)&&Qr(t,a.evaluations.zw)&&Qr(t,a.evaluations.t1w)&&Qr(t,a.evaluations.t2w)}(i,l))return o&&o.error("Proof evaluations are not valid."),!1;if(o&&o.info("> Checking public inputs belong to F"),!function(t,a){for(let e=0;e Computing challenges");const{challenges:r,roots:d}=function(t,a,e,o,i){const n=t.Fr,l={},c={},s=new lr(t);s.addPolCommitment(e.C0);for(let t=0;t Computing Zero polynomial evaluation Z_H(xi)"),r.zh=s.sub(r.xiN,s.one),r.invzh=s.inv(r.zh),o&&o.info("> Computing Lagrange evaluations");const u=await async function(t,a,e){const o=t.Fr,i=Math.max(1,e.nPublic),n=new qa(i*o.n8);let l=new qa(i*o.n8),c=o.one;for(let t=0;t Computing polynomial identities PI(X)");const _=function(t,a,e){const o=t.Fr;let i=o.zero;for(let t=0;t Computing r0(y)");const g=function(t,a,e,o,i){const n=o.Fr,l=kr(e.S0.h0w8,a.y,a.xi,o);i&&i.info("··· Computing r0(y)");let c=n.zero;for(let a=0;a<8;a++){let o=[];o[1]=e.S0.h0w8[a];for(let t=2;t<8;t++)o[t]=n.mul(o[t-1],e.S0.h0w8[a]);let i=n.add(t.evaluations.ql,n.mul(t.evaluations.qr,o[1]));i=n.add(i,n.mul(t.evaluations.qo,o[2])),i=n.add(i,n.mul(t.evaluations.qm,o[3])),i=n.add(i,n.mul(t.evaluations.qc,o[4])),i=n.add(i,n.mul(t.evaluations.s1,o[5])),i=n.add(i,n.mul(t.evaluations.s2,o[6])),i=n.add(i,n.mul(t.evaluations.s3,o[7])),c=n.add(c,n.mul(i,l[a]))}return c}(l,r,d,i,o);o&&o.info("> Computing r1(y)");const f=function(t,a,e,o,i,n){const l=i.Fr,c=kr(e.S1.h1w4,a.y,a.xi,i);n&&n.info("··· Computing T0(xi)");let s=l.mul(t.evaluations.ql,t.evaluations.a);s=l.add(s,l.mul(t.evaluations.qr,t.evaluations.b)),s=l.add(s,l.mul(t.evaluations.qm,l.mul(t.evaluations.a,t.evaluations.b))),s=l.add(s,l.mul(t.evaluations.qo,t.evaluations.c)),s=l.add(s,t.evaluations.qc),s=l.add(s,o),s=l.mul(s,a.invzh),n&&n.info("··· Computing C1(h_1ω_4^i) values");let r=l.zero;for(let a=0;a<4;a++){let o=t.evaluations.a;o=l.add(o,l.mul(e.S1.h1w4[a],t.evaluations.b));const i=l.square(e.S1.h1w4[a]);o=l.add(o,l.mul(i,t.evaluations.c)),o=l.add(o,l.mul(l.mul(i,e.S1.h1w4[a]),s)),r=l.add(r,l.mul(o,c[a]))}return r}(l,r,d,_,i,o);o&&o.info("> Computing r2(y)");const h=function(t,a,e,o,i,n,l){const c=n.Fr,s=function(t,a,e,o,i){const n=i.Fr,l=[],c=t[0].length,s=c*t.length,r=n.exp(a,s),d=n.mul(n.add(e,o),n.exp(a,c)),u=n.mul(e,o),_=n.add(n.sub(r,d),u);let g=n.mul(n.mul(n.e(c),t[0][0]),n.sub(e,o));for(let e=0;e Computing F");const p=function(t,a,e,o,i){const n=t.G1,l=t.Fr;let c=l.sub(o.y,i.S0.h0w8[0]);for(let t=1;t<8;t++)c=l.mul(c,l.sub(o.y,i.S0.h0w8[t]));o.temp=c;let s=l.sub(o.y,i.S1.h1w4[0]);for(let t=1;t<4;t++)s=l.mul(s,l.sub(o.y,i.S1.h1w4[t]));let r=l.sub(o.y,i.S2.h2w3[0]);for(let t=1;t<3;t++)r=l.mul(r,l.sub(o.y,i.S2.h2w3[t]));for(let t=0;t<3;t++)r=l.mul(r,l.sub(o.y,i.S2.h3w3[t]));o.quotient1=l.mul(o.alpha,l.div(c,s)),o.quotient2=l.mul(l.square(o.alpha),l.div(c,r));let d=n.timesFr(a.polynomials.C1,o.quotient1),u=n.timesFr(a.polynomials.C2,o.quotient2);return n.add(e.C0,n.add(d,u))}(i,l,n,r,d);o&&o.info("> Computing E");const m=function(t,a,e,o,i,n,l){const c=t.G1,s=t.Fr;let r=s.mul(n,e.quotient1),d=s.mul(l,e.quotient2);return c.timesFr(c.one,s.add(i,s.add(r,d)))}(i,0,r,0,g,f,h);o&&o.info("> Computing J");const L=function(t,a,e){const o=t.G1;return o.timesFr(a.polynomials.W1,e.temp)}(i,l,r);o&&o.info("> Validate all evaluations with a pairing");const b=await async function(t,a,e,o,i,n,l){const c=t.G1;let s=c.timesFr(a.polynomials.W2,e.y);s=c.add(c.sub(c.sub(i,n),l),s);const r=t.G2.one,d=a.polynomials.W2,u=o.X_2;return await t.pairingEq(c.neg(s),r,d,u)}(i,l,r,n,p,m,L);return o&&(b?o.info("PROOF VERIFIED SUCCESSFULLY"):o.warn("Invalid Proof")),o&&o.info("FFLONK VERIFIER FINISHED"),b},exportSolidityVerifier:Xs,exportSolidityCallData:async function(t,a){const e=Rr(a),o=Rr(t),i=await to(e.curve);i.G1,i.Fr;let n="";for(let t=0;t